![MQL5 - Linguaggio delle strategie di trading integrato nel client terminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
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.
A proposito, è strano che tu chiami Sleep() dall'indicatore, perché è vietato:
Alexei!
Uno strumento abbastanza liquido :)
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 :(
Non so affatto cosa sia Sleep()
Allora è strano che io e te stiamo discutendo di pause adesso...
Non nel senso di ciò che fa Sleep(), ma nel senso di usarlo nel mio codice.
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().
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.
Alexei!
Uno strumento abbastanza liquido :)
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 :(
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.