primeiro você não pode usar "exp" para um int que está reservado
segundo você expressa o "SL
SL = MathFloor((iATR(NULL, PERIOD_D1, 7, 0)*MathPow(10,Digits-exp)+1)*0.1);
na seção init, má idéia
porque se você receber Erro 4066 o "SL" = 0
então você recebe divisão zero em "lotes".
lots=MoneyRisk/SL/(MarketInfo(Symbol(), MODE_TICKVALUE)*multi);
e o indicador pára e você tem que recarregar o indicador
obviamente você não pode evitar a atualização ;-) mas você tem que evitar uma situação de "divisão zero".
então você tem que verificar se uma das variáveis é igual a 0.... no caso de evitar divisão zero
e porque você não pode parar um indicador, você tem que descobrir algo
exemplo:
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);
Você está certo... Não posso evitá-lo. :-)
O que eu quis dizer é: posso esperar até que a atualização seja concluída antes de continuar com o cálculo do SL? O problema é que eu não posso dar ao SL um valor aleatório porque então todo o indicador é inútil. Portanto, eu gostaria de verificar o erro 4066 e se ele ocorrer, gostaria de esperar de alguma forma e verificar novamente antes de continuar.
A propósito, eu tenho o mesmo problema com este indicador. Mas por que não foi um problema no "velho" MetaTrader? Aqui eu sempre recebo um zero para o ATR(5). POR QUÊ?!?! Isso nunca aconteceu antes... Eu odeio este novo 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); }
Acho que encontrei o problema! É definitivamente um problema de atualização. Quando eu agora mudo de moeda, o indicador funciona. Mas então abri um par de moedas que ainda não tinha aberto hoje. Então recebi esta mensagem:
Você tem que colocar algo como
if(number==0)dothis; else dothis;
em ShowSpread.mq4
Basta pesquisar a linha onde ocorre esta divisão zero.
Acho que encontrei o problema! É definitivamente um problema de atualização. Quando eu agora mudo de moeda, o indicador funciona. Mas então abri um par de moedas que ainda não tinha aberto hoje. Então recebi esta mensagem:
angevoyageur, acho que você não viu este post de mim:
Você está certo... Não posso evitá-lo. :-)
"O que eu quis dizer é: posso esperar até que a atualização seja concluída antes de prosseguir com o cálculo do SL? O problema é que eu não posso dar ao SL um valor aleatório porque então todo o indicador é inútil. Portanto, eu gostaria de verificar o erro 4066 e se ele ocorrer, gostaria de esperar de alguma forma e verificar novamente antes de continuar".
Lá você pode ver que não posso seguir o conselho e porque cheguei a essa solução você também pode ver que eu definitivamente verifiquei o que qjol me aconselhou.
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Ei, codificadores,
Eu fiz um pequeno indicador de Moneymanagement que funcionou bem para mim. Mas desde o novo MQL4 ele causa problemas que eu não consigo lidar.
Quando você arrasta este indicador para o seu gráfico, alguns números são impressos no lado direito. O primeiro número significa o Stoploss em pips e o segundo é o tamanho do lote. Nas opções, você pode escolher o risco. O outro número são os níveis de Stoploss. Mas quando eu troco o par de moedas, os números desaparecem. Em vez disso, vejo várias vezes a palavra "Rótulo". E quando olho para a lista de indicadores, meu indicador também desaparece. Assim, em resumo, depois de mudar o par de moedas, o indicador desaparece e deixa as etiquetas em vez dos números.
Estou totalmente confuso. Este indicador costumava funcionar sem nenhum problema. A ajuda é muito apreciada.
Aqui está o código: