cari

Rumah  >  Soal Jawab  >  teks badan

Nodejs MetaAPI Cloud / Kira Purata Pergerakan

<p>Saya sedang membuat bot dagangan menggunakan metaapi.cloud dan saya cuba mengira purata bergerak (cepat/eksponen) tetapi ia mengembalikan saya nilai tidak sah, ini kod saya: </p> <pre class="brush:js;toolbar:false;">async movingAverage(simbol, noktah, jenis = "S") { let candles = (tunggu this.account.getHistoricalCandles(simbol, this.params.timeframe, null, period)).peta(c => c.close); hasil const = []; biarkan jumlah = 0; if (taip === "S") { untuk (biar i = 0; i < tempoh; i++) { jumlah += lilin[i]; } result.push(jumlah / tempoh); untuk (biar i = noktah; i < candles.length; i++) { jumlah = jumlah - lilin[i - tempoh] + lilin[i]; result.push(jumlah / tempoh) } } else if (taip === "E") { berat const = 2 / (tempoh + 1); untuk (biar i = 0; i < tempoh; i++) { jumlah += lilin[i]; } jumlah /= tempoh; result.push(sum); untuk (biar i = noktah; i < candles.length; i++) { jumlah = (lilin[i] * berat) + (jumlah * (1 - berat)); result.push(sum); } } lain { // throwError() } pulangan hasil; } </pra> <p>Begini cara saya menggunakannya: </p> <pre class="brush:js;toolbar:false;">async onTick(infos) { biarkan sma = tunggu this.movingAverage(infos.symbol, this.params.fast, "S"); console.log('SMA ' + sma[0]); } </pra> <p>Sekarang apabila saya mengujinya, SMA sepatutnya mengembalikan "1906.6963" tetapi ia memberi saya "1900.7813" Mungkin saya menggunakan cara yang salah untuk mengira mereka? Jika sesiapa mempunyai penyelesaian! Terima kasih terlebih dahulu. </p>
P粉715274052P粉715274052456 hari yang lalu504

membalas semua(2)saya akan balas

  • P粉071743732

    P粉0717437322023-09-04 00:37:22

    • SMA nampak betul, EMA ada pelbagai corak. Memandangkan anda tidak menyiarkan set data sampel, sukar untuk meneka apa yang dihantar daripada pelayan, tetapi mungkin terdapat banyak nilai yang tidak boleh ditukar, seperti NaN, nol, rentetan kosong atau nombor dengan koma, eksponen, dsb. Hanya menggantikan lilin dengan tatasusunan dengan nilai yang salah. Lakukan beberapa penapisan dan kemudian kira
    • Pertimbangkan tempoh > set data. Dalam kes ini, tetapkan tempoh kepada panjang.

    Dalam contoh di bawah, tetapkan tempoh kepada 1 untuk melihat semua nilai diproses dan tetapkan tempoh kepada nombor yang sangat besar untuk melihat keseluruhan purata.

    Pasti ada kes tepi lain yang saya tak terfikir. Untuk ringkasnya, contoh berikut menggunakan SMA.

    async function movingAverage(symbol, period, type = "S") {
            let candles = [1,2,3,"","",4, "0",0, null, "99,9123", undefined,"0.123e5", "wrongval", 9, 10, 20, 100]
            .map(d => parseFloat((d ?? "").toString().replace(",",".")))
            .filter(d => +d || +d === 0);
            const result = [];
            if (candles.length <= 0){return result}
            let sum = 0;
            period = Math.min(candles.length, period) || 1;
            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)
            }
            return result;
        }
        movingAverage("SPX",500).then(x => document.getElementById("result").textContent = x)
    <div id="result"></div>

    balas
    0
  • P粉563446579

    P粉5634465792023-09-04 00:18:21

    Saya jumpa masalahnya. Ia datang daripada api MetaTrader, "getHistoricalCandles" tidak berfungsi seperti yang diharapkan. Apa yang tertulis dalam api ialah:

    getHistoricalCandles(symbol, timeframe, startTime, limit)
    symbol: symbol to retrieve candles for
    TimeFrame: define the timeframe according to which the candles must be generated
    StartTime: time to start loading candles from. Note that candles are loaded in backward direction, so this should be the latest time, **leave it empty to request latest candles**
    Limit: maximum of candles to retrieve, must be less or equals to 1000

    Masalah di sini ialah parameter StartTime, ia pasti tidak berfungsi seperti yang mereka katakan apabila saya biarkan kosong, atau apabila saya meletakkan Date.now() 时,它会检索 5 小时前的蜡烛,为了检索绝对的最后一根蜡烛,我必须输入 Date.now()+10000000000, jadi ia mungkin ralat zon waktu yang tidak boleh diperbaiki buat masa ini kerana ia berasal dari api Tamat...

    balas
    0
  • Batalbalas