cosa sto facendo di sbagliato?
c'è uno screen-shot di una parte di codice responsabile della media mobile. Ho sostituito tutte le variabili con dei valori in modo da poter vedere le impostazioni. l'altro screen-shot mostra la differenza nel disegnare la MA e l'indicatore MA gettato sul grafico (o meglio tutti e 4 i tipi di essi).
Il Light Blue è in realtà quello Smoothed e non è affatto vicino al MA generato nel tester.
Il più vicino al MA generato è Simple, eppure non corrisponde.
Cosa diavolo sta succedendo?
E quale valore hai ottenuto? Non riesco a vederlo da nessuna parte.
confronta le 2 finestre. quella a sinistra è la MA generata da strategy tester. va esattamente tra i trades. a destra hai tutti i tipi di MA370 (SMA, EMA, SSMA, e LWMA) e nessuno di essi corrisponde alla MA 370 a sinistra. la SSMA è quella azzurra e non è affatto vicina alla MA generata nel back-test.
Allego un'altra schermata con l'aggiunta della linea di avviso di debug del valore corrente della variabile "ma" (visualizzato l'ultimo valore MA nel log, e sulla destra l'ultimo valore del MA 370 liscio azzurro "gettato" sul grafico)
Ho notato che le MA sul grafico si riferiscono al prezzo di chiusura mentre la ma del codice si riferisce al prezzo di apertura, ma come ho cambiato le medie mobili sul grafico non le ha cambiate visivamente in modo significativo. sembrano ancora le stesse dello screen-shot allegato.
Ho isolato il problema in un EA separato.
#property copyright "Grzegorz Korycki" #property version "1.0" #property description "MA TEST" #include <Trade/Trade.mqh> #define MAGICMA 20131002 double Bid; double Ask; double OnTester() { double custommax = TesterStatistics(STAT_EQUITY_DDREL_PERCENT); return (custommax); } CTrade trade; void OnTick() { MqlTick last_tick; if(SymbolInfoTick(Symbol(),last_tick)) { Bid = last_tick.bid; Ask = last_tick.ask; } start(); } int OnInit() { trade.SetExpertMagicNumber(MAGICMA); int deviation=99; trade.SetDeviationInPoints(deviation); trade.SetAsyncMode(false); return(0); } void trend1() { int ma_temp; double ma_buffer[20]; double ma; ma_temp=iMA(Symbol(),PERIOD_D1,370,0,MODE_SMMA,PRICE_OPEN); CopyBuffer(ma_temp,0,0,1,ma_buffer); ma=ma_buffer[0]; Alert("ma=", ma); } void start() { trend1(); }La coppia di test è GBP/NZD.
il problema sta diventando sempre più strano. Quando provo l'EA di cui sopra dal 2012 dà risultati leggermente diversi per la MA (nel log del giornale si può vedere il valore effettivo) rispetto a quando lo provo dal 2013. Nessuno di loro è vicino alla SSMA 370 messa sul grafico.
Forse è qualcosa nella mia inizializzazione che fa agire l'EA in questo modo?
compresi gli screenshot. Notare che le linee tracciate sono a livelli diversi quando si confrontano entrambi gli screen-shots ed è lo stesso EA.
Sembra un errore di base: gli elementi non sono indicizzati come nelle serie temporali (ordine inverso).
Per risolverlo, è necessario chiamare questa funzione...
ArraySetAsSeries(ma_buffer,true);
Sembra un errore di base: gli elementi non sono indicizzati come nelle serie temporali (ordine inverso).
Per risolverlo, è necessario chiamare questa funzione...
quando la aggiungo ottengo:
cannot be used for static allocated array ma_test.mq5 50 4
ma uso solo 1 frame di questo array. ha importanza? E perché l'avvertimento?
Dopo aver aggiunto questa linea non è cambiato nulla (sia l'avviso che i back-test indicano che l'aggiunta non ha avuto alcun effetto)
la documentazione afferma che dovrebbe essere usato solo con le costanti:
[...] const datetime &time[], [...] ArraySetAsSeries(time,true);
e il mio ma_buffer è un array variabile:
double ma_buffer[20];
quando lo aggiungo ottengo:
ma uso solo 1 frame di questo array. ha importanza? E perché l'avvertimento?
Dopo aver aggiunto questa linea non è cambiato nulla (sia l'avviso che i back-test indicano che l'aggiunta non ha avuto alcun effetto)
Hai ragione se copi solo un frame, e questa non è la causa principale (la tua dichiarazione di ma_buffer[20] ha deviato la mia attenzione su questo fatto).
Comunque ti suggerisco di spostare la linea sotto a Init() e l'handle a global, perché questo è davvero una fonte di problemi (dopo averlo fatto, per favore, testalo di nuovo).
ma_temp=iMA(Symbol(),PERIOD_D1,370,0,MODE_SMMA,PRICE_OPEN);
Hai ragione se copi solo un frame, e questa non è la causa principale (la tua dichiarazione di ma_buffer[20] ha distolto la mia attenzione da questo fatto).
Tuttavia ti suggerisco di spostare la linea sotto a Init() e l'handle a global, perché questo è davvero una fonte di problemi (dopo aver fatto questo prova di nuovo).
Ho modificato lo script secondo le tue indicazioni e il problema persiste ancora :(
ora si presenta così:
#property copyright "Grzegorz Korycki" #property version "1.0" #property description "MA TEST" #include <Trade/Trade.mqh> #define MAGICMA 20131002 double Bid; double Ask; int ma_temp; double ma_buffer[20]; double OnTester() { double custommax = TesterStatistics(STAT_EQUITY_DDREL_PERCENT); return (custommax); } CTrade trade; void OnTick() { MqlTick last_tick; if(SymbolInfoTick(Symbol(),last_tick)) { Bid = last_tick.bid; Ask = last_tick.ask; } start(); } int OnInit() { trade.SetExpertMagicNumber(MAGICMA); int deviation=99; trade.SetDeviationInPoints(deviation); trade.SetAsyncMode(false); ma_temp=iMA(Symbol(),PERIOD_D1,370,0,MODE_SMMA,PRICE_OPEN); return(0); } void trend1() { double ma; CopyBuffer(ma_temp,0,0,1,ma_buffer); ma=ma_buffer[0]; Alert("ma=", ma); } void start() { trend1(); }
forse qualcuno può creare una bozza di EA come creerebbe tale generatore di valori MA e potrei confrontare entrambi - testarlo e isolare l'errore. (se qualcuno ha qualche minuto a disposizione)
Controllerò in un secondo e risponderò se il problema è lo stesso su altre coppie o è solo questa coppia, perché questo è molto strano.
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
cosa sto facendo di sbagliato?
c'è uno screen-shot di una parte di codice responsabile della media mobile. Ho sostituito tutte le variabili con dei valori in modo da poter vedere le impostazioni. l'altro screen-shot mostra la differenza nel disegnare la MA e l'indicatore MA gettato sul grafico (o meglio tutti e 4 i tipi di essi).
Il Light Blue è in realtà quello Smoothed e non è affatto vicino al MA generato nel tester.
Il più vicino al MA generato è Simple, eppure non corrisponde ad esso.
Cosa diavolo sta succedendo?