Nodejs MetaAPI クラウド / 移動平均の計算 <p>metaapi.cloud を使用して取引ボットを作成しており、移動平均 (高速/指数) を計算しようとしていますが、無効な値が返されます。コードは次のとおりです。</p>
<pre class="brush:js;toolbar:false;">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
全員に返信(2)返信します P粉071743732 2023-09-04 00:37:22
SMA は正しいようですが、EMA にはさまざまなパターンがあります。サンプルデータセットを投稿していないので、サーバーから何が渡されているかを推測するのは困難ですが、NaN、null、空の文字列やカンマ付きの数値など、変換できない値が多数ある可能性があります。指数などキャンドルを間違った値の配列に置き換えただけです。フィルタリングを行ってから計算を行います
期間 > データセットを考えます。この場合、期間を length に設定します。
以下の例では、処理されたすべての値を表示するには期間を 1 に設定し、全体の平均を表示するには期間を非常に大きな数値に設定します。
私が思いつかなかった他のエッジケースが間違いなくあります。簡潔にするために、次の例では SMA を使用します。
P粉563446579 2023-09-04 00:18:21
問題が見つかりました。これは MetaTrader の API、「getHistoricalCandles」が期待どおりに機能しないことに起因します。
API に書かれていることは次のとおりです:
リーリー
ここでの問題は StartTime パラメータです。空のままにしたり、Date.now()
を入力すると、5 時間からのキャンドルが取得されます。これは間違いなく言われているように機能しません。以前、絶対的な最後のローソク足を取得するには、Date.now() 10000000000
と入力する必要がありました。これは、API 側から発生しているため、現時点では解決できないタイムゾーン エラーである可能性があります。 . .
返事
0
キャンセル 返事 公開