Come si apre correttamente un ordine a mercato? - pagina 7

 
prostotrader:

A proposito, è strano che tu chiami Sleep() da un indicatore, perché è proibito:

La funzione Sleep() non può essere chiamata da indicatori personalizzati, poiché gli indicatori sono eseguiti nel thread dell'interfaccia e non devono rallentarlo. La funzione ha un controllo incorporato dello stato del flag di arresto dell'esperto ogni 0,1 secondi.


 
Alexey Kozitsyn:

A proposito, è strano che tu chiami Sleep() dall'indicatore, perché è vietato:


Non so affatto cosa sia Sleep()
 
prostotrader:

Alexei!

Uno strumento abbastanza liquido :)

2016.12.14 22:01:41.431 Trades  'xxxxx': cancel order #49931802 sell limit 1.00 GOLD-9.17 at 1190.2 placed for execution in 64926.078 ms

Non si tratta di strumento (liquidità), ma di ritardo, che può verificarsi in QUALSIASI strumento.

Faccio attivamente trading con gli EAs da quasi 4 anni ormai.

Non ho pause in nessuno dei miei EA (tranne le pause per aspettare i dati da scaricare dal server in INDICATORS),

Se fai una pausa, è un segno sicuro che l'algoritmo del tuo EA non funziona correttamente :(

Faccio trading da molto tempo ormai, e uso solo EAs. Ma soprattutto su MT4. Ho fatto trading su MT5 solo con Expert Advisors usando Limits e non ci sono stati problemi. Anch'io sono contro le pause aggiuntive negli EAs, specialmente se si tratta di uno scalper o pipsitter, è facile perdere un'entrata.
 
prostotrader:
Non so affatto cosa sia Sleep()
Allora è strano che io e te stiamo discutendo di pause adesso...
 
Alexey Kozitsyn:
Allora è strano che io e te stiamo discutendo di pause adesso...
Non nel senso di ciò che fa Sleep(), ma nel senso della sua applicazione nel mio codice.
 
prostotrader:
Non nel senso di ciò che fa Sleep(), ma nel senso di usarlo nel mio codice.
Come si implementa una pausa nel vostro indicatore?
 
Alexey Kozitsyn:
Come si implementa una pausa nel vostro indicatore?
//+------------------------------------------------------------------+
// Custom indicator Check timer function                             |
//+------------------------------------------------------------------+
bool CheckTimer(const uint start_value, const uint per_value)
{
  uint end_value = GetTickCount();
  
  if(end_value < start_value)
  {
    if((start_value - end_value) >= per_value) return(true);
  }
  else
  {
    if((end_value - start_value) >= per_value) return(true);
  }
  return(false);
}
//+------------------------------------------------------------------+
//| Custom indicator Get server data function                        |
//+------------------------------------------------------------------+
int LoadServerData(const string a_symbol, ENUM_TIMEFRAMES period)
{
  int fail_cnt = 0;
//---
  while((fail_cnt < 5) && !IsStopped())
  {  
    long first_date = long(SeriesInfoInteger(a_symbol, PERIOD_M1, SERIES_SERVER_FIRSTDATE));
//---
    if(first_date > 0)
    {
      if(SymbolIsSynchronized(a_symbol))
      {
  //      Print( "LoadServerData: Первая дата на сервере есть. Пробуем получить локальные данные..." );
        return(GetLocalData(a_symbol, period));
      }  
    }
    else
    {
      uint start_tick = GetTickCount();
//---        
      while(!CheckTimer(start_tick, 10))
      {
        fail_cnt--;
        fail_cnt++;
      }
    }    
    fail_cnt++;
  }
// Print( "LoadServerData: Первой даты на сервере нет!" );
  return(0);  
}

Questo è un vecchio esempio.

Poiché l'errore di GetTickCount è piuttosto alto (fino a 16 ms), ora uso GetMicrosecondCount().

 
Gennady Mazur:
In linea di principio lo faccio, ma in Forti l'ordine è spesso accettato con successo...ma al prossimo tick non c'è ancora nessuna posizione...
È qui che l'apertura supplementare può scivolare .... risolvo parzialmente il problema in questo modo, se l'ordine viene accettato, aumento la variabile int, e dopo l'aumento le condizioni di apertura sono leggermente diverse, quindi non avviene una nuova apertura, ma.... se l'ordine non viene accettato la variabile non aumenta, ma ecco il trucco... Ho giudicato male lo stato e hanno cominciato a comparire altri ordini.
Lei ha già risposto alla sua stessa domanda. Dobbiamo seguire l'ordine.
 
prostotrader:

Alexei!

Uno strumento abbastanza liquido :)

2016.12.14 22:01:41.431 Trades  'xxxxx': cancel order #49931802 sell limit 1.00 GOLD-9.17 at 1190.2 placed for execution in 64926.078 ms

Non si tratta di strumento (liquidità), ma di ritardo, che può verificarsi in QUALSIASI strumento.

Faccio attivamente trading con gli EAs da quasi 4 anni ormai.

Non ho pause in nessuno dei miei EA (tranne le pause per aspettare i dati da scaricare dal server in INDICATORS),

Se fai una pausa, è un segno sicuro che l'algoritmo del tuo EA non funziona correttamente :(

E se non ne avete uno? Forse l'algoritmo lì è tale che non è necessario.
 
Gennady Mazur:
Anch'io faccio trading da molto tempo e solo con l'aiuto degli EAs. Ma soprattutto su MT4. Ho fatto trading solo su MT5 con gli EAs usando Limits e non ci sono stati problemi. Se sono uno scalper o un pipsder, non mi piacciono le pause negli Expert Advisors, inoltre mi manca solo un'entrata.
Questo non è il caso quando si ha bisogno di una pausa.