Nodejs MetaAPI Cloud / 計算移動平均值
P粉715274052
2023-09-03 09:12:59
<p>我正在製作一個使用metaapi.cloud的交易機器人,我正在嘗試計算移動平均值(快速/指數),但它返回給我無效值,這是我的代碼:</p>
<pre class="brush:js;toolbar:false;">async movingAverage(symbol, period, type = "S") {
let candles = (await this.account.getHistoricalCandles(symbol, this.params.timeframe, null, period)).map(c => c.close);
const result = [];
let sum = 0;
if (type === "S") {
for (let i = 0; i < period; i ) {
sum = candles[i];
}
result.push(sum / period);
for (let i = period; i < candles.length; i ) {
sum = sum - candles[i - period] candles[i];
result.push(sum / period)
}
} else if (type === "E") {
const weight = 2 / (period 1);
for (let i = 0; i < period; i ) {
sum = candles[i];
}
sum /= period;
result.push(sum);
for (let i = period; i < candles.length; i ) {
sum = (candles[i] * weight) (sum * (1 - weight));
result.push(sum);
}
} else {
// throw Error()
}
return result;
}
</pre>
<p>這是我的使用方法:</p>
<pre class="brush:js;toolbar:false;">async onTick(infos) {
let sma = await this.movingAverage(infos.symbol, this.params.fast, "S");
console.log('SMA ' sma[0]);
}
</pre>
<p>現在,當我測試它時,SMA 應該返回“1906.6963”,但它給我的是“1900.7813”
也許我使用了錯誤的方法來計算它們?
如果有人有解決辦法!提前致謝。 </p>
在下面的範例中,將 period 設為 1 以查看已處理的所有值,將 period 設定為非常大的數字以查看整個平均值。
肯定還有其他我沒想到的邊緣狀況。為簡潔起見,下面的範例使用 SMA。
我發現了問題。它來自 MetaTrader 的 api,「getHistoricalCandles」無法按預期正常工作。 api中寫的是:
這裡的問題是StartTime 參數,它絕對不會像他們所說的那樣工作,當我將其留空時,或者當我放置
Date.now()
時,它會檢索5 小時前的蠟燭,為了檢索絕對的最後一根蠟燭,我必須輸入Date.now() 10000000000
,所以這可能是時區錯誤,暫時無法解決,因為它來自api 端.. .