ANDREY: Buona giornata a tutti voi! Sto testando questo algoritmo in MT4 tester usando mql4. Ho bisogno della funzione Print() per emettere il prezzo dell'offerta in log con 5 (cinque) cifre decimali. Ma stamperebbe solo 4 (quattro) cifre decimali. Per favore, ditemi come risolvere il mio errore, se esiste. Ecco il mio codice.
Allo stesso tempo, se stampo con Print() il prezzo di apertura e di chiusura dell'ordine (per SL e TP), allora Print() stampa il prezzo con 5 (cinque) cifre. Grazie a tutti per il vostro aiuto.
Ti ho detto che non mi piaceva la mia decisione (((
Troppo pigro per scrivere di nuovo.
Cerca su Google "array trova ripetizioni" - penso che troverai qualcosa
enum EResult{Ok,AllocError};
template<typename T>
EResult GetRepeat(const T &arr[],T &ret[],uint count){
int size=ArraySize(arr);
if (ArrayResize(ret,size)!=size) return AllocError;
int ii=0;
for (int i=0;i<size;){
T tmp=arr[i];
uint repeatCount=1;
while(++i<size&&arr[i]==tmp) ++repeatCount;
if (repeatCount>=count) ret[ii++]=tmp;}
returnArrayResize(ret,ii)==ii?Ok:AllocError;
}
voidOnStart()
{
int arr[]={1,2,4,4,4,55,55,7,7,7,7,7,8,9,77,66,66,66};
int ret[];
if (!GetRepeat(arr,ret,3)) ArrayPrint(ret);
}
Se potete aiutarmi a capire cosa c'è di sbagliato quando si cerca di leggere i dati del buffer dell'indicatore.
Ecco il codice dell'EA:
if (IsTesting())
{
Trend = GlobalVariableGet(GV_tradesTrend);
TrendUP = iCustom(NULL,0,"Used\\# Once Trades Trend",3,0);
TrendDN = iCustom(NULL,0,"Used\\# Once Trades Trend",4,0);
if (TrendUP>0) {Trend=1; GlobalVariableSet(GV_tradesTrend,1);}
if (TrendDN>0) {Trend=-1;GlobalVariableSet(GV_tradesTrend,-1);}
if (Trend==1) {GlobalVariableSet(GV_Trend,1);}
if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);}
if (Trend==0) {GlobalVariableSet(GV_Trend,0);}
}
else
{
Trend = GetLastTrendChange();
if (Trend==1) {GlobalVariableSet(GV_Trend,1);}
if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);}
if (Trend==0) {GlobalVariableSet(GV_Trend,0);}
}
//+----------------------------------------------------------------------------+int GetLastTrendChange()
{
int trendType=0;
int y=0;
int t=500;
while (y<t)
{
if (iOpen(NULL,0,t)==y) {return(0);}
trendType=FindTrendChange(y);
if (trendType==1 || trendType==-1) {return(trendType);}
y++;
}
return(0);
}
//+----------------------------------------------------------------------------+int FindTrendChange(int index)
{
double trendUP,trendDN;
int trendType=0;
trendUP = iCustom(NULL,0,"Used\\# Once Trades Trend",3,index);
trendDN = iCustom(NULL,0,"Used\\# Once Trades Trend",4,index);
if (trendUP>0) {trendType=1;}
if (trendDN>0) {trendType=-1;}
return (trendType);
}
//+----------------------------------------------------------------------------+
Nella realtà e nei test la ricerca dell'ultimo valore attraverso la funzione funziona, ma il test è catastroficamente lento (il test di metà anno si estende per diversi giorni).
Così ho deciso di usare swap su test e salvare l'ultimo valore nella variabile globale - l'Expert Advisor ha smesso di vedere i dati del buffer. E anche se i buffer vuoti sono 0, per qualche ragione le variabili di EA prendono valori EMPTY_VALUE e non cambiano.
Ma quando metto il cursore sulla linea del buffer nella finestra dei dati, due valori appaiono nel tooltip, e il primo valore è 0, per esempio Value 5; 0.0000; 0.8855.
Non riesco a scoprirlo, anche se mi aggiro nel codice dell'indicatore. La ricerca in Internet e la documentazione non hanno aiutato. Qualcuno può consigliarmi perché il test è così lento quando cerco di usare questo indicatore?
Consenti l'uso dei cookie per accedere al sito MQL5.com.
Abilita le impostazioni necessarie nel browser, altrimenti non sarà possibile accedere.
Hai effettuato l'accesso. L'autenticazione a due fattori è stata disattivata. Configurala di nuovo e scansiona un nuovo codice QR, oppure continua con l'autenticazione a due fattori disattivata.
Buona giornata a tutti voi!
Sto testando questo algoritmo in MT4 tester usando mql4. Ho bisogno della funzione Print() per emettere il prezzo dell'offerta in log con 5 (cinque) cifre decimali. Ma stamperebbe solo 4 (quattro) cifre decimali. Per favore, ditemi come risolvere il mio errore, se esiste.
Ecco il mio codice.
}
Allo stesso tempo, se stampo con Print() il prezzo di apertura e di chiusura dell'ordine (per SL e TP), allora Print() stampa il prezzo con 5 (cinque) cifre.
Grazie a tutti per il vostro aiuto.
DoubleToString(), non NormalizeDouble()
Ti ho detto che non mi piaceva la mia decisione (((
Troppo pigro per scrivere di nuovo.
Cerca su Google "array trova ripetizioni" - penso che troverai qualcosa
DoubleToString(), non NormalizeDouble()
Grazie mille per il vostro supporto informativo.
utilizzare TimeToStruct()
https://www.mql5.com/ru/docs/dateandtime/timetostruct
utilizzare TimeToStruct()
https://www.mql5.com/ru/docs/dateandtime/timetostruct
Sì, ce l'ho su mt4
funziona in MT4
funziona in MT4
Non capisco come posso ottenere il valore di minuto quandola posizione è stata aperta da questa struct che restituisce tromba...
datetime o_open = OrderOpenTime();
MqlDateTime dt_struct;
TimeToStruct( o_open, dt_struct;)
int min = dt_struct.min;
Se potete aiutarmi a capire cosa c'è di sbagliato quando si cerca di leggere i dati del buffer dell'indicatore.
Ecco il codice dell'EA:
if (IsTesting()) { Trend = GlobalVariableGet(GV_tradesTrend); TrendUP = iCustom(NULL,0,"Used\\# Once Trades Trend",3,0); TrendDN = iCustom(NULL,0,"Used\\# Once Trades Trend",4,0); if (TrendUP>0) {Trend=1; GlobalVariableSet(GV_tradesTrend,1);} if (TrendDN>0) {Trend=-1;GlobalVariableSet(GV_tradesTrend,-1);} if (Trend==1) {GlobalVariableSet(GV_Trend,1);} if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);} if (Trend==0) {GlobalVariableSet(GV_Trend,0);} } else { Trend = GetLastTrendChange(); if (Trend==1) {GlobalVariableSet(GV_Trend,1);} if (Trend==-1) {GlobalVariableSet(GV_Trend,-1);} if (Trend==0) {GlobalVariableSet(GV_Trend,0);} }Nella realtà e nei test la ricerca dell'ultimo valore attraverso la funzione funziona, ma il test è catastroficamente lento (il test di metà anno si estende per diversi giorni).
Così ho deciso di usare swap su test e salvare l'ultimo valore nella variabile globale - l'Expert Advisor ha smesso di vedere i dati del buffer. E anche se i buffer vuoti sono 0, per qualche ragione le variabili di EA prendono valori EMPTY_VALUE e non cambiano.
Ma quando metto il cursore sulla linea del buffer nella finestra dei dati, due valori appaiono nel tooltip, e il primo valore è 0, per esempio Value 5; 0.0000; 0.8855.
Non riesco a scoprirlo, anche se mi aggiro nel codice dell'indicatore. La ricerca in Internet e la documentazione non hanno aiutato. Qualcuno può consigliarmi perché il test è così lento quando cerco di usare questo indicatore?
Per favore, aiutatemi!