Innanzitutto non potete usare "exp" per un int , è riservato
poi esprimi lo "SL"
SL = MathFloor((iATR(NULL, PERIOD_D1, 7, 0)*MathPow(10,Digits-exp)+1)*0.1);
nella sezione init, cattiva idea
perché se ottenete l'errore 4066 il "SL" = 0
allora si ottiene zero dividere su "lotti"
lots=MoneyRisk/SL/(MarketInfo(Symbol(), MODE_TICKVALUE)*multi);
e l'indicatore si ferma e devi ricaricare l'indicatore
ovviamente non potete evitare l'aggiornamento ;-) ma dovete evitare una situazione di "zero divide"
quindi dovete controllare se una delle variabili è uguale a 0.... nel caso in cui si eviti lo zero divide
e siccome non puoi fermare un indicatore devi inventarti qualcosa
esempio:
SL = MathFloor((iATR(NULL, PERIOD_D1, 7, 0)*MathPow(10,Digits-exp)+1)*0.1); if (SL == 0) // because error 4066 (for example) { SL = Someting; } lots=MoneyRisk/SL/(MarketInfo(Symbol(), MODE_TICKVALUE)*multi);
Hai ragione... Non posso evitarlo :-)
Quello che volevo dire è che posso aspettare che l'aggiornamento sia completato prima di continuare con il calcolo di SL? Il problema è che non posso dare a SL un valore casuale perché allora l'intero indicatore è inutile. Quindi vorrei controllare l'errore 4066 e se si verifica, vorrei aspettare in qualche modo e controllare di nuovo prima di andare avanti.
A proposito, ho lo stesso problema con questo indicatore. Ma perché non era un problema nella "vecchia" MetaTrader? Qui ricevo sempre uno zero per l'ATR(5). PERCHE'?!? Questo non è mai successo prima... Odio questa nuova MetaTrader!
int start() //---- { double Spread = MarketInfo(Symbol(), MODE_SPREAD); double ATR = iATR(NULL, PERIOD_D1, 5, 0); int exp1 = 0; if (Digits==5 || Digits==3) { Spread=Spread*0.1; exp1 = 1; } Comment ( "ADR(5): ",DoubleToStr(ATR*MathPow(10,Digits-exp1),1), " || TODAY: ",(iHigh(NULL, PERIOD_D1, 0)-iLow(NULL, PERIOD_D1, 0))*MathPow(10,Digits-exp1), " || ", DoubleToStr(((iHigh(NULL, PERIOD_D1, 0)-iLow(NULL, PERIOD_D1, 0))*MathPow(10,Digits-exp1)/(ATR*MathPow(10,Digits-exp1))*100), 2), "%", "\n" + "SPREAD: ", Spread, " || RATIO: ",DoubleToStr((Spread/ATR)*MathPow(10,-(Digits-exp1-2)), 2),"%" ); //---- return(0); }
Penso di aver trovato il problema! È sicuramente un problema di aggiornamento. Quando ora cambio valuta, l'indicatore funziona. Ma poi ho aperto una coppia di valute che non avevo ancora aperto oggi. Poi ho ricevuto questo messaggio:
Dovete mettere qualcosa come
if(number==0)dothis; else dothis;
in ShowSpread.mq4
Cerca solo la linea in cui si verifica questa divisione dello zero.
Penso di aver trovato il problema! È sicuramente un problema di aggiornamento. Quando ora cambio valuta, l'indicatore funziona. Ma poi ho aperto una coppia di valute che non avevo ancora aperto oggi. Poi ho ricevuto questo messaggio:
angevoyageur, credo che tu non abbia visto questo mio post:
Hai ragione... Non posso evitarlo :-)
"Quello che volevo dire è: posso aspettare che l'aggiornamento sia completato prima di procedere con il calcolo SL? Il problema è che non posso dare a SL un valore casuale perché allora l'intero indicatore è inutile. Quindi vorrei controllare l'errore 4066 e se si verifica, vorrei aspettare in qualche modo e controllare di nuovo prima di andare avanti".
Lì potete vedere che ha descritto che non posso seguire il consiglio e siccome sono arrivato a quella soluzione potete anche vedere che ho definitivamente controllato quello che qjol mi ha consigliato.
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Ehi, codificatori!
Ho fatto un piccolo indicatore Moneymanagement che ha funzionato bene per me. Ma dal nuovo MQL4 causa problemi che non riesco a gestire.
Quando trascini questo indicatore sul tuo grafico alcuni numeri sono stampati sul lato destro. Il primo numero indica lo Stoploss in pip e il secondo è la dimensione del lotto. Nelle opzioni puoi scegliere il rischio. L'altro numero sono i livelli di Stoploss. Ma quando cambio la coppia di valute i numeri non ci sono più. Invece vedo diverse volte la parola "Label". E quando guardo l'elenco degli indicatori, anche il mio indicatore è sparito. Quindi, in sintesi, dopo aver cambiato la coppia di valute, l'indicatore è sparito e sono rimaste le etichette al posto dei numeri.
Sono totalmente confuso. Questo indicatore funzionava senza alcun problema. L'aiuto è molto apprezzato.
Ecco il codice: