Domande da un "manichino" - pagina 57

 
Lizar:

Darò un'occhiata alla versione pubblicata nell'articolo. Finora ha fatto alcuni esperti di spie, funziona alla grande.

MetaDriver:

Non credo che questa tecnologia funzionerà nel tester.

Funziona.

È fantastico che funzioni nel tester. Non sono ancora stato in grado di implementarlo. Ma questo è probabilmente dovuto alla mancanza di esperienza. Ho stabilito un timer per ora, ma è molto lungo.

Quando cerco di collegare l'Expert Advisor al grafico, ricevo un messaggio del genere:

Non capisco cosa c'entri USDJPY. Ho anche commentato l'ottenimento dell'handle all'inizializzazione nel codice e questo messaggio esce ancora.

 
Lizar:

Funziona.

Konstantin, ho capito bene che il codice eseguibile EA, che normalmente risiede in OnTick() o OnTimer(), deve essere messo in OnChartEvent() per far funzionare il tuo schema in modalità multi-valuta, sia in tempo reale che in tester.
 
tol64:

È fantastico che funzioni nel tester. Non sono ancora riuscito ad implementarlo. Ma questo è dovuto alla mancanza di esperienza, credo. Per ora mi sono accontentato del timer, ma è troppo lungo.

Quando cerco di collegare l'Expert Advisor al grafico, ricevo un messaggio del genere:

Non capisco cosa c'entri USDJPY. Ho anche commentato l'ottenimento di un handle all'inizializzazione nel codice e questo messaggio esce ancora.

Non l'ho ancora guardato.

Tol64:
Konstantin, ho capito bene che il codice eseguibile EA, che normalmente risiede in OnTick() o OnTimer(), deve essere messo in OnChartEvent() per far funzionare il tuo schema in modalità multi-valuta, sia in tempo reale che in tester.

Sì.

 
tol64:

È fantastico che funzioni nel tester. Non sono ancora riuscito ad implementarlo. Ma questo è probabilmente dovuto alla mancanza di esperienza. Per ora mi sono fermato al timer, ma è troppo lungo.

Quando provo a collegare l'Expert Advisor al grafico, ottengo il seguente messaggio:

Non capisco cosa c'entri USDJPY. Ho anche commentato l'ottenimento di un handle all'inizializzazione nel codice e il messaggio esce ancora.

L'ho guardato. Expert Advisor funziona. C'era solo un errore di stampa nel messaggio di errore.

Quello che ti dava era un messaggio che il simbolo non era selezionato nella finestra di MarketWatch. O impostate i simboli con cui lavora l'Expert Advisor sulla finestra MarketWatch, o commentate le chiamate degli spyros sui simboli appropriati in OnInit().

Sto allegando la versione modificata di exSpy Control panel MCM.mq5.

Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки компиляции - Документация по MQL5
 
Lizar:

Ho dato un'occhiata. L'esperto sta lavorando. C'era solo un errore di battitura nel messaggio di errore.

Quello che ti dava era un messaggio che il simbolo non era selezionato nella finestra di MarketWatch. O impostate i simboli con cui lavora l'Expert Advisor sulla finestra MarketWatch, o commentate le chiamate degli spyros sui simboli appropriati in OnInit().

Ho allegato la versione modificata di exSpy Control panel MCM.mq5.

Ho anche riso di me stesso per la mia mancanza di attenzione))) USDJPY era nella finestra di Market Watch. Non c'era nessun altro simbolo e le stampe avevano solo lo stesso messaggio. )))

Grazie.

 
tol64:
Konstantin, ho capito bene che il codice eseguibile dell'Expert Advisor, che di solito si trova in OnTick() o OnTimer(), dovrebbe essere messo in OnChartEvent() per far funzionare il tuo schema in modalità multivaluta, sia in tempo reale che in tester.

È meglio implementare tutte le funzionalità richieste sotto forma di procedure e funzioni separate (io raccomando queste ultime), e poi chiamarle da qualsiasi punto dell'Expert Advisor.

Se usate OOP, tutte le funzionalità richieste possono essere implementate come un insieme di diversi metodi della classe principale (di solito è un discendente della classe Expert).

 
Interesting:

È meglio implementare tutte le funzionalità necessarie come procedure e funzioni separate (consiglio queste ultime), e poi chiamarle da qualsiasi punto dell'Expert Advisor.

Se usi OOP, puoi implementare tutte le funzionalità necessarie come un insieme di diversi metodi della classe principale (di solito è un discendente della classe Expert Advisor).

Al momento, tutte le funzionalità sono quasi implementate in questo modo. Quasi. Cioè, l'intero codice è costituito da poche funzioni che contengono i calcoli di base. Non ho ancora padroneggiato completamente l'OOP, ma posso già vedere il profitto del suo utilizzo. Il codice cresce di giorno in giorno e presto sarà molto scomodo usarlo senza OOP.

Ho creato un argomento separato dove ti ho dato i risultati di vari metodi di test multivalutari:Results of Multicurrency Expert Advisor Testing. Ci sono ancora molte cose su questo argomento che non mi sono chiare.

 

Perché le mie citazioni non si caricano? Per esempio su EURUSD, caricano solo fino ad agosto di quell'anno. Questo è tutto. Non vogliono caricarli ulteriormente. Forse c'è un file con le virgolette da qualche parte?

Ho impostato ilnumero di barre su un numero illimitato. L'ho aggiornato diverse volte. Ho premuto HOME diverse volte. Ancora non funziona.

 

E dov'è la "lista completa annunciata" di tutti i file MT5 e i loro dettagli.

Sono appena sceso dal baobab oggi, scusate.

 

Un indicatore frattale multitemporale.

L'essenza dell'indicatore è quella di visualizzare i frattali di un timeframe (o diversi contemporaneamente) su un altro.

Articolo fonte: https://www.mql5.com/ru/code/7304, codice indicatore in MQL4

Prima ho provato a copiare e incollare dalla versione .mq4 con alcune micro correzioni per .mq5 (non cito nemmeno questo codice - il problema si è verificato quando ho scoperto la manipolazione incauta di array come High[shift+i] all'interno del codice sorgente MQL4.

bool Fractal (string F,int Per, int shift) {...}

Ho provato a riscriverlo in MQL5 (nessuna visibilità predefinita di tali matrici al di fuori di OnCalculate).

Poi ho provato a riscriverlo per MQL5 chiamando diversi handle iFractals con diversi parametri PERIOD_.... Di conseguenza, i frattali sono andati in pezzi, anche se a volte solo una serie di frecce frattali sul TF corrispondente riesce ad atterrare adeguatamente. Ciò che è notevole, quando ritorno allo stesso timeframe nel terminale da alcuni altri timeframe diversi la nitidezza è mostrata in modo diverso, il che suggerisce quanto segue: i dati nel terminale di questo indicatore sconosciuto vagano in modo incomprensibile, ma ho sempre pensato che la stessa immagine errata dovrebbe ripetersi stabilmente. Naturalmente, la seconda variante non contiene nemmenobool Fractal(string F,int Per, int shift) {...}, che voglio indirizzare a sviluppatori esperti di indicatori.

Ecco cosa sono riuscito a disegnare:

#property indicator_chart_window
#property indicator_buffers 8
#property indicator_plots   8

#property indicator_label1  "FractalUp1"
#property indicator_type1   DRAW_ARROW
#property indicator_color1 clrRed
#property indicator_width1  2

#property indicator_label2  "FractalDw1"
#property indicator_type2   DRAW_ARROW
#property indicator_color2 clrRed
#property indicator_width2  2

#property indicator_label3  "FractalUp2"
#property indicator_type3   DRAW_ARROW
#property indicator_color3 clrBlue
#property indicator_width3  2

#property indicator_label4  "FractalDw2"
#property indicator_type4   DRAW_ARROW
#property indicator_color4 clrBlue
#property indicator_width4  2

#property indicator_label5  "FractalUp3"
#property indicator_type5   DRAW_ARROW
#property indicator_color5 clrGold
#property indicator_width5  2

#property indicator_label6  "FractalDw3"
#property indicator_type6   DRAW_ARROW
#property indicator_color6 clrGold
#property indicator_width6  2

#property indicator_label7  "FractalUp4"
#property indicator_type7   DRAW_ARROW
#property indicator_color7 clrSienna
#property indicator_width7  2

#property indicator_label8  "FractalDw4"
#property indicator_type8   DRAW_ARROW
#property indicator_color8 clrSienna
#property indicator_width8  2

double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double ExtMapBuffer7[];
double ExtMapBuffer8[];

int ArrowShift=-10;

int handle1;
int handle2;
int handle3;
int handle4;

int OnInit()
  {
//   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---
   SetIndexBuffer(0,ExtMapBuffer1,INDICATOR_DATA);
   PlotIndexSetInteger(0,PLOT_ARROW,217);
   PlotIndexSetInteger(0,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer1,EMPTY_VALUE);

   SetIndexBuffer(1,ExtMapBuffer2,INDICATOR_DATA);
   PlotIndexSetInteger(1,PLOT_ARROW,218);
   PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer2,EMPTY_VALUE);

//---
   SetIndexBuffer(2,ExtMapBuffer3,INDICATOR_DATA);
   PlotIndexSetInteger(2,PLOT_ARROW,217);
   PlotIndexSetInteger(2,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer3,EMPTY_VALUE);

   SetIndexBuffer(3,ExtMapBuffer4,INDICATOR_DATA);
   PlotIndexSetInteger(3,PLOT_ARROW,218);
   PlotIndexSetInteger(3,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer4,EMPTY_VALUE);

//---
   SetIndexBuffer(4,ExtMapBuffer5,INDICATOR_DATA);
   PlotIndexSetInteger(4,PLOT_ARROW,217);
   PlotIndexSetInteger(4,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(4,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer5,EMPTY_VALUE);

   SetIndexBuffer(5,ExtMapBuffer6,INDICATOR_DATA);
   PlotIndexSetInteger(5,PLOT_ARROW,218);
   PlotIndexSetInteger(5,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(5,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer6,EMPTY_VALUE);

//---
   SetIndexBuffer(6,ExtMapBuffer7,INDICATOR_DATA);
   PlotIndexSetInteger(6,PLOT_ARROW,217);
   PlotIndexSetInteger(6,PLOT_ARROW_SHIFT,ArrowShift);
   PlotIndexSetDouble(6,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer7,EMPTY_VALUE);

   SetIndexBuffer(7,ExtMapBuffer8,INDICATOR_DATA);
   PlotIndexSetInteger(7,PLOT_ARROW,218);
   PlotIndexSetInteger(7,PLOT_ARROW_SHIFT,-ArrowShift);
   PlotIndexSetDouble(7,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   ArrayInitialize(ExtMapBuffer8,EMPTY_VALUE);

   handle1=iFractals(_Symbol, PERIOD_M15);
   handle2=iFractals(_Symbol, PERIOD_H1);
   handle3=iFractals(_Symbol, PERIOD_H4);
   handle4=iFractals(_Symbol, PERIOD_D1);

   return(0);
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   int B1 = BarsCalculated(handle1);
   int B2 = BarsCalculated(handle2);
   int B3 = BarsCalculated(handle3);
   int B4 = BarsCalculated(handle4);

   CopyBuffer(handle1,0,0,B1,ExtMapBuffer1);
   CopyBuffer(handle1,1,0,B1,ExtMapBuffer2);
   CopyBuffer(handle2,2,0,B2,ExtMapBuffer3);
   CopyBuffer(handle2,3,0,B2,ExtMapBuffer4);
   CopyBuffer(handle3,4,0,B3,ExtMapBuffer5);
   CopyBuffer(handle3,5,0,B3,ExtMapBuffer6);
   CopyBuffer(handle4,6,0,B4,ExtMapBuffer7);
   CopyBuffer(handle4,7,0,B4,ExtMapBuffer8);

   return(rates_total);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   return;
  }
 

Ovviamente, manca qualche controllo condizionale all'interno di OnCalculate così come nella funzione esterna di tipo bool o semplicemente non uso correttamente ciò che ho già nel mio codice. Inoltre, forse gli array devono essere inizializzati correttamente nel posto giusto e impostati come serie temporali?