Uma pergunta para os conhecedores de MQL - página 8

 

Obrigado.

 

Boa tarde a todos.

Por favor, informe. O indicador mostra as linhas de preço dos instrumentos e

Há um comentário de texto à direita - seus nomes e tamanhos de posição.

Tudo está funcionando bem. Desde que eu não coloque o indicador no gráfico de instrumentos com aspas de 5 dígitos.

As linhas de preço são traçadas. Mas o comentário sobre a direita desaparece por completo. Ou, os zeros são exibidos em vez dos tamanhos de posição.

O registro mostra ZERO DIVIDY (veja o gráfico Alpari)

- em EURUSD e GBPUSD - em vez do tamanho de zeros são exibidos...

Acho que isto tem a ver com o cálculo dos tamanhos de posição:

double vol1=1, vol2, vol3, k1;

  k1=MarketInfo(Symbol_1, MODE_TICKVALUE)*iOpen(Symbol_1,0,0)/
     MarketInfo(Symbol_1, MODE_TICKSIZE);

  vol2=k1/(MarketInfo(Symbol_2, MODE_TICKVALUE)*iOpen(Symbol_2,0,0)/
           MarketInfo(Symbol_2, MODE_TICKSIZE))*vol1;

  vol3=k1/(MarketInfo(Symbol_3, MODE_TICKVALUE)*iOpen(Symbol_3,0,0)/
           MarketInfo(Symbol_3, MODE_TICKSIZE))*vol1;

    // пишем комментарий в окне индикатора с правой стороны: 
 object("Symbol1", DoubleToStr(N1,0)+"*"+Symbol_1+" -"+DoubleToStr(vol1,2), 10, indicator_color1, 5);
 object("Symbol2", DoubleToStr(N2,0)+"*"+Symbol_2+" -"+DoubleToStr(vol2,2), 10, indicator_color2, 18);
 object("Symbol3", DoubleToStr(N3,0)+"*"+Symbol_3+" -"+DoubleToStr(vol3,2), 10, indicator_color3, 31);
 object("SymbolS", "AVERAGE", 10, indicator_color4, 44);   
           

Razão k1=MarketInfo(Symbol_1, MODE_TICKVALUE)..../MarketInfo(Symbol_1, MODE_TICKSIZE)

dá "divisão por zero" a 5 dígitos.

Por favor, informe como consertá-lo ?

 

Favor me dizer se existe um roteiro ou indicador que mostre as transações feitas anteriormente na história, como por exemplo, de mais ou menos a mais ou menos data. Ochen. coisa útil na minha opinião

Obrigado,

Yuri

 
leonid553:

Boa tarde a todos.

Por favor, me diga como consertar isso ?


Em palavras simples, tente substituir MODE_TICKSIZE por MODE_POINT. Mas, na verdade, você precisa reescrever o código para contabilizar zero MarketInfo()
 
tyn:

Favor me dizer se existe um roteiro ou indicador que mostre as transações feitas anteriormente na história, como por exemplo, de mais ou menos a mais ou menos data. Muito útil, na minha opinião.

Acho que seria muito útil,

Yuri

https://www.mql5.com/en/code - roteiro. Você pode definir o período de tempo na história de seu terminal.

VisualOrders.mq4 - indicador

Arquivos anexados:
 

Boa tarde.

No mt4 EXNESS meus indicadores "multimoedas", por alguma razão, funcionam somente quando a Internet está conectada (ao contrário do mt4 de outras empresas de corretagem).

Eu tenho uma boa relação de trabalho com meus indicadores forex. O tronco dá um "zerodividi".

Quando me conecto à internet, muitas vezes tenho que clicar primeiro na TF para que as linhas de índices apareçam.

Você pode me dizer, por favor, qual é o problema e como resolvê-lo?

Quando a Internet é desligada:

Quando conectado:

 
leonid553:

Boa tarde.

No mt4 EXNESS meus indicadores "multimoedas", por alguma razão, funcionam somente quando a Internet está conectada (ao contrário do mt4 de outras empresas de corretagem).

Eu tenho uma boa relação de trabalho com meus indicadores forex. O registro dá um "zerodive".

Quando me conecto à internet, muitas vezes tenho que clicar primeiro na TF para que as linhas de índices apareçam.

Você poderia me dizer qual é o problema e como resolvê-lo?

Quando a Internet é desligada:

Quando conectado:


É uma coisa normal. Acontece muito. E nem sempre é possível lidar com isso. Embora a divisão por zero possa ser fixada. O problema é a falta de um ambiente de mercado na maioria das vezes.
 

Eu não entendo bem, Victor.

Isto é uma "coisa normal"? É claramente uma falha!

Não entendo o termo - "sem ambiente de mercado".

Se fixarmos a divisão a zero - as linhas de preço aparecerão? Acho que não.

O comentário no canto direito da janela indicadora é exibido normalmente. Isto é, as funções ObjectCreate, etc. estão funcionando normalmente.

Da mesma forma, os cálculos matemáticos cujos números são definidos no trabalho de comentário normalmente.

Somente as linhas de preço do indicador permanecem. Não há mais nada ali.

As linhas de preços são fixadas em amortecedores. Cada linha de preço é apenas uma diferença entre dois MA's:

int start() {
     int limit;  int counted_bars=IndicatorCounted();
  //---- проверка на возможные ошибки
     if(counted_bars<0) return(-1);
  //---- последний посчитанный бар будет пересчитан
     if(counted_bars>0) counted_bars-=10;      limit=Bars-counted_bars;
  //---- основной цикл
 for(int i=0; i<limit; i++)       {
 
   Symbol1[i]= N1*
     (iMA(Symbol_1,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_1,0,Time[i],false))-
     iMA(Symbol_1,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_1,0,Time[i],false)))  ;
  .... ....

Então esta é a parte que dá a "divisão zero"! Mas aqui não há nenhuma divisão, muito menos divisão por zero!

Portanto, o erro neste caso é devolvido pelo servidor (ou plataforma) a partir do fundo? Ou talvez os desenvolvedores do MT4 não tenham considerado tal falha e tenham definido "o retorno zero-dividido" que não corresponde exatamente à essência de tal erro.

E por que o indicador funciona bem no MT4? Por que o indicador funciona normalmente?

Como plataformas similares poderiam ser diferentes para que este simples código funcionasse de forma diferente nelas?

 

A divisão por zero pode ser tratada, mas você também precisa do indicador para trabalhar corretamente. Isto é mais difícil.

 

O que teoricamente poderia estar errado com este código simples (para 4 linhas)):

int start() {
     int limit;  int counted_bars=IndicatorCounted();
  //---- проверка на возможные ошибки
     if(counted_bars<0) return(-1);
  //---- последний посчитанный бар будет пересчитан
     if(counted_bars>0) counted_bars-=10;
     limit=Bars-counted_bars;

  //---- основной цикл
 for(int i=0; i<limit; i++)       {
   //РИСУЕМ ЛИНИИ СИМВОЛОВ, ЕСЛИ ИМЕЮТСЯ БАРЫ

   Symbol1[i]= N1*
     (iMA(Symbol_1,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_1,0,Time[i],false))-
     iMA(Symbol_1,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_1,0,Time[i],false)))  ;
   Symbol2[i]= N2*
     (iMA(Symbol_2,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_2,0,Time[i],false))-
     iMA(Symbol_2,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_2,0,Time[i],false)))  ;
   Symbol3[i]= N3*
     (iMA(Symbol_3,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_3,0,Time[i],false))-
     iMA(Symbol_3,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_3,0,Time[i],false)))  ; 
   Symbol4[i]= N4*
     (iMA(Symbol_4,Period(),MA_fast,0,MA_Mode,MA_Price,iBarShift(Symbol_4,0,Time[i],false))-
     iMA(Symbol_4,Period(),MA_per,0,MA_Mode,MA_Price,iBarShift(Symbol_4,0,Time[i],false)))  ;
    
      
      
   }
   return (0);
} // конец функции СТАРТ 
Razão: