Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 1385

 
Vitaly Muzichenko:

Tutto quanto sopra fa il codice, con l'eccezione del giallo evidenziato - penso che sia inutile e non del tutto corretto. Non ho mai visto nessuno fare il rollover in un momento diverso, sempre alla stessa ora - 22-00 GMT, anche se potrei sbagliarmi.

Ma spesso si sono visti rollover di durata diversa, alcuni 5 minuti e altri poco più di un minuto.

---

Controllare il codice, forse cambiare qualcosa:

Quindi e legare tutto al tempo GMT. Ottenuto la differenza di tempo locale e tempo del server, e si può immediatamente capire in quanti rollover. E 5 minuti o 1 penso che non ci sia una differenza significativa. Prendete 5 minuti per tutti.

 
Alexey Viktorov:

Quindi, legare tutto al tempo GMT. Prendi la differenza tra l'ora locale e l'ora del server, e puoi immediatamente capire quanto è lungo il rollover. E 5 minuti o 1 penso che non sia una differenza significativa. Prendete 5 minuti per tutti.

In che modo la vostra opzione è migliore o più affidabile?

Se puoi, mostrami il codice!
 
Vitaly Muzichenko:

In che modo il tuo è migliore o più affidabile?

Forse non del tutto. Non ho seguito i vostri codici. Sto solo dando la mia opinione.

 

Vitaly Muzichenko:

Se puoi, mostrami il codice!

Stai fingendo?

 
Alexey Viktorov:

Forse non è niente. Non ho seguito i vostri codici. Sto solo dando la mia opinione.

Ecco tutto in un solo post:

È necessario schermare l'entrata dello spread durante il rollover in modo che l'EA non faccia trading sullo spread esteso.

Forum sul trading, sistemi di trading automatico e test di strategia

Tutte le domande dei neofiti su MQL4 e MQL5, aiuto e discussione su algoritmi e codici

Vitaly Muzichenko, 2021.02.11 14:04

Non ho mai incontrato un codice simile prima d'ora. In qualche modo mai visto che rollover era qualcuno in un momento diverso, sempre tutti in uno e lo stesso - a 22-00 GMT, anche se posso essere sbagliato.

Ma spesso si sono visti rollover di durata diversa, alcuni 5 minuti e altri poco più di un minuto.

---

Controllare il codice, forse cambiare qualcosa:

//+------------------------------------------------------------------+
void OnTick(void)
{
   int sp = SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);
   static int ts=0;

   if(CheckSpr(sp)) {
      // Здесь код отправки
      Comment( sp,"=",ts++,"=",res );
   } else Comment( "false: ",sp,"=",ts++,"=",res );
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MqlDateTime dt;
int res=0;
bool CheckSpr(int _sp)
{
  TimeGMT(dt);
  static int ts=0;
  static long tc=0;
   if(dt.hour==22) return(false); // ролловер
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   // Comment( res,"=",tc );
   if(tc<500) return(false); // собираем спред на 500 тиках
   return(res>_sp?true:false);
}

 
Vitaly Muzichenko:

Ecco tutto in un messaggio:

Abbiamo bisogno di eliminare l'entrata dello spread durante il rollover in modo che l'EA non faccia trading sullo spread esteso.


Nessuna negoziazione durante un'ora intera?

   if(dt.hour==22) return(false); // ролловер

O hai frainteso qualcosa?

 
Vitaly Muzichenko:

Ecco tutto in un messaggio:

Abbiamo bisogno di schermare l'entrata dello spread durante il rollover, in modo che l'EA non faccia trading sullo spread esteso.


stiamo solo ipoteticamente vietando qualche tipo di record diffuso (file, database) specificamente nel rollover?

 
Alexey Viktorov:

Nessuno scambio per un'ora intera?

O hai frainteso qualcosa?

Esatto, per un'ora intera dopo, lo spread si allarga. E prima del rollover in 5 minuti si allarga anche in alcuni punti.

 
Alexey Viktorov:

Nessuno scambio per un'ora intera?

O ho frainteso qualcosa?

Tuttavia, può essere impostato in questo modo:

void OnTick(void)
{
   int sp = SymbolInfoInteger(Symbol(),SYMBOL_SPREAD);

   if(CheckSpr(sp)) {
      // Здесь код отправки
      Comment( sp,"=",res );
   } else Comment( "false: ",sp,"=",res );
}

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
MqlDateTime dt;
int res=0;
bool CheckSpr(int _sp)
{
  static int ts=0;
  static long tc=0;
  TimeGMT(dt);
   if(dt.hour==22 && res<_sp) return(false); // Если 1 час после ролловера спред упадёт до нормального - торгуем
   tc++;
   ts += _sp;
   res =ts/tc;
   if(tc>LONG_MAX-1) {
      tc=0;
      ts=0;
   }
   if(tc<500) return(false);
   return(res>_sp?true:false);
}

Questo dovrebbe funzionare correttamente.

 
Vitaly Muzichenko:

Si potrebbe, tuttavia, prescrivere in questo modo:

Questo dovrebbe funzionare.

Divertente) Non dovrebbe)

Se la battaglia è per - commercio con uno spread normale, basta mettere il suo "limite" in input e semplicemente ignorare il commercio se lo spread è sopra il limite.

Gli spread possono essere allungati dai dilling senza rollover.