Errori, bug, domande - pagina 1786
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
Se OnCalculate è sostituito da OnTick, non si verificano errori. Il problema non è SymbolInfoTick, ma che gli indicatori non sono impostati correttamente per non saltare.
Quanto tempo sono durate le misurazioni? E cosa c'entra questo con l'impostazione degli indicatori? L'ora di arrivo del tick corrente è 10, l'ora di arrivo del tick precedente è 11. Questo è un errore della funzione che non restituisce il valore corrente. Siete d'accordo che il valore temporale attuale non può essere più piccolo del precedente, vero?
SymbolInfoTick funziona diversamente negli indicatori rispetto agli EA.
In un indicatore, restituisce sempre il tick che è stato l'iniziatore della chiamata di OnCalculate. E questi tick iniziatori nell'indicatore non dovrebbero essere saltati - questa è l'ideologia degli sviluppatori. Il problema è nella formazione della coda di queste zecche.
Nell'EA, il SymbolInfoTick in OnTick non restituisce il tick che ha iniziato la chiamata di OnTick, ma fa una richiesta completa dello stato attuale.
Misurato dieci minuti su Si.
SymbolInfoTick funziona diversamente negli indicatori rispetto agli EA.
In un indicatore, restituisce sempre il tick che è stato l'iniziatore della chiamata di OnCalculate. E questi tick iniziatori nell'indicatore non dovrebbero essere saltati - questa è l'ideologia degli sviluppatori. Il problema è nella formazione della coda di queste zecche.
In Expert Advisor, SymbolInfoTick in OnTick non restituisce il tick che ha iniziato la chiamata di OnTick, ma fa una richiesta completa dello stato attuale.
Misurato dieci minuti su Si.
In terzo luogo, anche se SymbolInfoTick() è OK - funziona ancora meglio di CopyTicks(), perché spesso restituisce valori più aggiornati.
Catturate situazioni in cui CopyTicks dava dati più recenti di SymbolInfoTick chiamato LATER. Ecco perché faccio una query con due funzioni contemporaneamente e seleziono la spunta più recente da esse.
SymbolInfoTick funziona diversamente negli indicatori rispetto agli EA.
In un indicatore, restituisce sempre il tick che è stato l'iniziatore della chiamata di OnCalculate. E questi tick iniziatori nell'indicatore non dovrebbero essere saltati - questa è l'ideologia degli sviluppatori. Il problema è nella formazione della coda di queste zecche.
In Expert Advisor, il SymbolInfoTick in OnTick non restituisce il tick che ha iniziato la chiamata di OnTick, ma fa una richiesta completa dello stato attuale.
Allora sarebbe logico completarlo con il
con la zecca che l'ha causata, soprattutto perché non costa nulla.
E la funzione SymbolInfoTick() dovrebbe essere completamente implementata in Indicator e Expert Advisor (restituirà i prezzi correnti, non i prezzi al momento della chiamata diOnCalculate)
MT4 continua a stupire con l'imprevedibilità )) Chi scrive l'implementazione delle funzioni di trading? MT4 build 1045
Cominciamo con le informazioni umoristiche, dovrebbero essere inviate a Zadornov, perché sta sempre a parlare di americani stupidi.
VALORE DEL SIMBOLO_TRADE_TICK
Valore SYMBOL_TRADE_TICK_VALUE_PROFIT
doppio
SYMBOL_TRADE_TICK_VALUE_PROFITTO
Non supportato
doppio
PERDITA DI VALORE DEL SIMBOLO_TRADE_TICK
Non supportato
doppio
Nel frattempo SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE, tickValue) produce un valore. MA!!!!! Se lanci l'indicatore sul grafico, è ok all'avvio. E se si riavvia il terminale, questa funzione restituirà true e zero tickValue alla prima chiamata! Quindi non si rilassi, signor sviluppatore di Expert Advisor, tutto deve essere controllato con le sue mani.
bool Quote2Price(double diff,double &price4lot,string symbol="EURUSD")
{
int dig=(int)MarketInfo(symbol,MODE_DIGITS);
if(dig == 0)
return(false); // symbol is none
double tickSize = MarketInfo(symbol, MODE_TICKSIZE); // пункт в валюте котировки (0,00001 для EURUSD на 5-знаке)
//double tickValue = MarketInfo(symbol, MODE_TICKVALUE); // пункт в валюте депозита ($1 для EURUSD на 5-знаке)
double tickValue;
if(!SymbolInfoDouble(symbol, SYMBOL_TRADE_TICK_VALUE, tickValue)) // пункт в валюте депозита ($1 для EURUSD на 5-знаке)
Print(__FUNCTION__, " SymbolInfoDouble(...) returns false"); // всегда возвращается true!!
Print("tickSize= ", tickSize, " tickValue= ", tickValue);
if(tickValue == 0.0) // исключений нет, терминал врет, надо тупо везде проверять на деление на ноль...
return false;
double price=diff/(tickSize/tickValue); // а то завалимся c tickValue == 0
price4lot=NormalizeDouble(price,2);
return (true);
}
Uscire:
2017.02.07 16:08:25.332 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 1.0
2017.02.07 16:08:25.332 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 1.0
2017.02.07 16:08:24.515 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 0.0
2017.02.07 16:08:23.037 ShowImportantParams EURUSD.e,M15: tickSize= 1e-05 tickValue= 0.0
2017.02.07 16:08:23.037 ShowImportantParams EURUSD.e,M15: inizializzato
2017.02.07 16:08:23.002 Indicatore personalizzato ShowImportantParams EURUSD.e,M15: caricato con successo
Allora sarebbe logico integrare
con la zecca che ha chiamato, soprattutto perché non costa nulla
E la funzione SymbolInfoTick() dovrebbe essere pienamente funzionale in Indicator e Expert Advisor (restituisce i prezzi correnti, non i prezzi al momento della chiamataOnCalculate)
Ha anche senso aggiungere un numero di tick alla coda attuale.