Avendo cablato il problema della media mobile durante la creazione di EA.

 

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?

File:
ma_problem1.png  154 kb
ma_problem2.png  80 kb
 
angreeee:

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 lo vedo da nessuna parte.
 
angevoyageur:
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.

File:
ma_problem3.png  142 kb
 
Non è che l'ea non funziona. funziona bene, ma quando stavo eseguendo il debug ho notato che il MA generato è totalmente diverso da quello che dovrebbe essere. So che sto facendo qualcosa di sbagliato, ma ancora non so cosa sia. Allego un altro screenshot delle impostazioni dell'ea lisciata in blu chiaro, in modo da avere un quadro completo.
File:
ma_problem4.png  66 kb
 
il MA più simile che ho trovato è Smoothed MA 220, screenshot allegato. Non ha alcun senso, :( ma forse è un indizio di qualche tipo.
File:
ma_problem5.png  57 kb
 

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.
File:
ma_test.mq5  2 kb
 

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.

File:
 

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);
 
figurelli:

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];
 
angreeee:

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);
 
figurelli:

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.