Discussione sull’articolo "Creazione di un Expert Advisor, che fa Trading su una Serie di Strumenti" - pagina 4

 
Interesting:

Se ho capito bene, un buffer è sufficiente (basta che sia calcolato e disegnato correttamente sul grafico).

PS

Con la variante attuale ho l'impressione che l'induttore visualizzi i dati "a sinistra" (l'inizio della storia) invece che "a destra" (corrente)....

Oppure non capisco nulla della logica di questo indicatore....


Se si emette ad esempio EURUSD su EURUSD o EURJPY su EURJPY, tutto funziona bene.

Quindi la direzione di uscita sembra essere corretta.

Ho provato molte varianti e anche questa mi piace:

handle1=iMA(InstrumentName,PERIOD_CURRENT,ex_Period_MA_1,0,MODE_SMA, PRICE_CLOSE);

...

copied=CopyBuffer(handle1,0,0,0,0,Counted_bars,Buf_0);

Non viene comunque visualizzato nulla.

Qualcuno ha un esempio di visualizzazione di due strumenti diversi su uno stesso schermo, almeno in qualche modo?

 
gisip:

Cosa sto sbagliando, perché non posso visualizzare normalmente il grafico di un altro strumento?

In MQL4 funzionava tutto, qui funziona solo se lo si visualizza sullo stesso strumento, quindi non ci sono errori.


Funziona in forma ritagliata. Aggiungere controlli ed economia.

#property indicator_separate_window    // L'indicatore viene disegnato in una finestra separata
#property indicator_buffers 1

#property indicator_plots   1
#property indicator_type1   DRAW_LINE
#property indicator_color1  Aqua

input string InstrumentName="EURJPY";

//-- Array di indicatori
double ScreenBuffer[];

//-- Buffer dinamico --
double ArrayBuffer[];
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int OnInit() // Funzione speciale init()
  {
//--------------------------------------------------------------------

   IndicatorSetString(INDICATOR_SHORTNAME,InstrumentName);
   SetIndexBuffer(0,ScreenBuffer,INDICATOR_DATA);
   ArraySetAsSeries(ArrayBuffer,true);
   ArraySetAsSeries(ScreenBuffer,true);
   return 0;                          // Esci
  }
//--------------------------------------------------------------------
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 Counted_bars;   // Numero di barre da azionare 
   int copied;

//--------------------------------------------------------------------
   copied=(int)SeriesInfoInteger(InstrumentName,0,SERIES_BARS_COUNT);
   copied=CopyClose(InstrumentName,PERIOD_M1,0,copied,ArrayBuffer);//-- Scrivere i dati nel buffer di memoria --

   for(int i=0; i<copied; i++)
     {
      ScreenBuffer[i]=ArrayBuffer[i];
     }

//--------------------------------------------------------------------
   return(rates_total);
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   ObjectsDeleteAll(0,0,-1);             // tutti gli oggetti del grafico vengono eliminati.
  }
 
gisip:

Se si emette ad esempio EURUSD su EURUSD o EURJPY su EURJPY, tutto funziona bene.

Quindi la direzione di uscita è più o meno corretta.

Ho provato molte varianti e persino questa:

handle1=iMA(InstrumentName,PERIOD_CURRENT,ex_Period_MA_1,0,MODE_SMA, PRICE_CLOSE);

...

copied=CopyBuffer(handle1,0,0,0,0,Counted_bars,Buf_0);

Non viene comunque visualizzato nulla.

Qualcuno ha un esempio di visualizzazione di due strumenti diversi su uno stesso schermo, almeno in qualche modo?

Avete un codice sorgente per MQL4?


Ho già suggerito un'alternativa, che consiste nel creare un indice per lo strumento corrente ed eseguirne il debug al 100%. Dopodiché, è possibile richiamarlo facilmente con i parametri necessari in Expert Advisor o in un altro indicatore.

Con questa implementazione, è necessario modificare la logica di base dell'indicatore, perché i parametri passati al calcolatore non sono del tutto corretti per altri strumenti(il numero di barre e altri elementi possono non corrispondere)....

E in generale questo concetto non è molto "corretto" (per usare un eufemismo).


PS

In breve, ci sono due opzioni:

1. Realizzare tutto per il TF e lo strumento corrente e verificarne l'operatività, dopodiché utilizzare iCustom();

2. Riscrivere la logica dell'induttore in modo che nel calcolatore riceva assolutamente tutti i dati sullo strumento specificato nei parametri (metodo costoso e non molto corretto).

Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Доступ к таймсериям и индикаторам / Bars - Документация по MQL5
 
gisip:
L'ho cambiato, ma ancora non funziona, il grafico non è vero.

Fate questo nel vostro indicatore

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int OnInit() // Funzione speciale init()
  {
//--------------------------------------------------------------------

   IndicatorSetString(INDICATOR_SHORTNAME,InstrumentName);
   SetIndexBuffer(0,ScreenBuffer,INDICATOR_DATA);
   ArraySetAsSeries(ScreenBuffer,true);
   
   return 0;                          // Esci
  }

e leggete la sezione Indicizzazione della direzione negli array e nelle serie temporali.

 
DC2008:

Il modulo ritagliato funziona. Aggiungere i controlli e l'economia.

Queste due cose non sono davvero necessarie.

//1

//-- Buffer dinamico --
double ArrayBuffer[];
...............
ArraySetAsSeries(ArrayBuffer,true);

//2

   for(int i=0; i<copied; i++)
     {
      ScreenBuffer[i]=ArrayBuffer[i];
     }
 
Interesting:

Queste sono le due cose che non vi servono.

In realtà, sì.
 

Sì, credo che abbia funzionato!

Grazie a tutti!!!

Continuerò a testare.

 

Necessità di visualizzare le operazioni. L'Expert Advisor è multicurrency. Diciamo che si blocca su EURUSD e apre operazioni su altre coppie di valute. Ho una differenza nei risultati, capisco che è colpa mia, ma non posso verificarla (non posso aprire un grafico con operazioni su AUDUSD quando l'Expert Advisor si blocca su EURUSD).

Se l'Expert Advisor è sospeso su AUDUSD, lo apro e vedo che funziona come l'ho programmato, ma se è sospeso su EURUSD, i risultati sono diversi e non riesco a capire perché. La visualizzazione delle operazioni sarebbe molto utile.

Документация по MQL5: Операции с графиками / ChartOpen
Документация по MQL5: Операции с графиками / ChartOpen
  • www.mql5.com
Операции с графиками / ChartOpen - Документация по MQL5
 

7.Durante il test di Exp_TEMA.mq5, le espressioni Told[] Tnew[1]ottengono i seguenti valori:
Told[] Expression could not be evaluated
Tnew[1] Invalid array range.
Cosa significano questi valori e come influiscono sul risultato del lavoro dell'Expert Advisor?

8.Perché Exp_TEMA.mq5 apre operazioni all'interno di una barra durante i test?

9.Si otterrà una riduzione del codice, una riduzione del tempo di esecuzione del trade, una riduzione dello slippage, una riduzione dei costi (commissioni, ecc.), se invece di chiudere una posizione e aprirne una nella direzione opposta, si effettua un flip, cioè si apre una posizione nella direzione opposta con un volume doppio?

Operazioni all'interno della barra.

 
ias:

7.Durante il test di Exp_TEMA.mq5, le espressioni Told[] Tnew[1]ottengono i seguenti valori:
Told[] Expression could not be evaluated
Tnew[1] Invalid array range.
Cosa significano questi valori e come influenzano il lavoro dell'Expert Advisor?

Per quanto riguarda Tnew[1] Invalid array range, sembra che si tratti di un superamento dell'intervallo. Non dimenticate che la numerazione degli elementi dell'array parte da 0!