Piccolo Moneymanagement-Indicator rovinato dal nuovo MQL4
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.
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: