metaapi.cloud を使用して取引ボットを作成しており、移動平均 (高速/指数) を計算しようとしていますが、無効な値が返されます。コードは次のとおりです。
async moveAverage(symbol, period, type = "S") { letCandles = (await this.account.getHistoricalCandles(symbol, this.params.timeframe, null, period)).map(c => c.close); const 結果 = []; 合計 = 0 とします。 if (type === "S") { for (let i = 0; i < period; i ) { 合計 = キャンドル[i]; } result.push(合計 / 期間); for (let i = period; i使用方法は次のとおりです: p>
async ontick(infos) let sma="await" this.movingaverage(infos.symbol, this.params.fast, "s"); console.log('sma ' sma[0]);ここでテストすると、sma は「1906.6963」を返すはずですが、「1900.7813」が返されます。 もしかしたら間違った計算方法を使っているのでしょうか? 誰かが解決策を持っていれば!前もって感謝します。 div>
以下の例では、処理されたすべての値を表示するには期間を 1 に設定し、全体の平均を表示するには期間を非常に大きな数値に設定します。
私が思いつかなかった他のエッジケースが間違いなくあります。簡潔にするために、次の例では SMA を使用します。
問題が見つかりました。これは MetaTrader の API、「getHistoricalCandles」が期待どおりに機能しないことに起因します。 API に書かれていることは次のとおりです:
リーリーここでの問題は StartTime パラメータです。空のままにしたり、
Date.now()
を入力すると、5 時間からのキャンドルが取得されます。これは間違いなく言われているように機能しません。以前、絶対的な最後のローソク足を取得するには、Date.now() 10000000000
と入力する必要がありました。これは、API 側から発生しているため、現時点では解決できないタイムゾーン エラーである可能性があります。 . .