Nodejs MetaAPI Cloud / Calculer la moyenne mobile
P粉715274052
2023-09-03 09:12:59
<p>Je crée un robot de trading en utilisant metaapi.cloud et j'essaie de calculer une moyenne mobile (rapide/exponentielle) mais il me renvoie des valeurs invalides, voici mon code : </p>
<pre class="brush:js;toolbar:false;">async movingAverage(symbole, point, type = "S") {
let Candles = (attendez this.account.getHistoricalCandles(symbol, this.params.timeframe, null, period)).map(c => c.close);
résultat const = [];
soit somme = 0 ;
if (tapez === "S") {
pour (soit i = 0; i < période; i++) {
somme += bougies[i];
}
result.push(somme/période);
pour (soit i = période ; i < bougies.longueur ; i++) {
somme = somme - bougies[i - période] + bougies[i] ;
result.push (somme / période)
}
} else if (tapez === "E") {
poids const = 2 / (période + 1) ;
pour (soit i = 0; i < période; i++) {
somme += bougies[i];
}
somme /= période ;
result.push(somme);
pour (soit i = période ; i < bougies.longueur ; i++) {
somme = (bougies[i] * poids) + (somme * (1 - poids));
result.push(somme);
}
} autre {
// lancerErreur()
}
renvoyer le résultat ;
}
≪/pré>
<p>Voici comment je l'utilise : </p>
<pre class="brush:js;toolbar:false;">async onTick(infos) {
let sma = wait this.movingAverage(infos.symbol, this.params.fast, "S");
console.log('SMA' + sma[0]);
}
≪/pré>
<p>Maintenant, quand je le teste, le SMA devrait renvoyer "1906.6963" mais il me donne "1900.7813"
Peut-être que j'utilise la mauvaise façon de les calculer ?
Si quelqu'un a une solution ! Merci d'avance. </p>
Dans l'exemple ci-dessous, définissez la période sur 1 pour voir toutes les valeurs traitées et définissez la période sur un très grand nombre pour voir la moyenne entière.
Il existe certainement d'autres cas extrêmes auxquels je n'ai pas pensé. Par souci de concision, les exemples suivants utilisent SMA.
J'ai trouvé le problème. Cela vient de l'API de MetaTrader, "getHistoricalCandles" ne fonctionne pas comme prévu. Ce qui est écrit dans l'API est :
Le problème ici est le paramètre StartTime, il ne fonctionne définitivement pas comme ils le disent quand je le laisse vide, ou quand je mets
Date.now()
时,它会检索 5 小时前的蜡烛,为了检索绝对的最后一根蜡烛,我必须输入Date.now()+10000000000
, donc c'est probablement une erreur de fuseau horaire qui ne peut pas être corrigée pour l'instant puisqu'elle vient de l'API Fin...