Erros, bugs, perguntas - página 2728

 
Askr:

Obrigado.

Encontrei esta outra coisa que talvez 1)seja um corretor de bloqueio.

https://www.mql5.com/ru/forum/38456/page127

https://www.mql5.com/ru/forum/304679

2) Vi 110% e 70% a saltar constantemente e fortemente, ainda não o contei. Talvez tenha algo a ver com carga, mas não me parece que tenha. Abri pequenas coisas e a alavanca nas especificações é a mesma e os saldos são quase os mesmos.

Um fio comum sobre os sinais é este
https://www.mql5.com/ru/forum/10603/page394
Para informação.

FAQ по сервису Сигналы
FAQ по сервису Сигналы
  • 2020.04.18
  • www.mql5.com
Узнать за 15 минут: смотри обучающие видео по торговым сигналам в MetaTrader 4 и MetaTrader 5 Здесь будут собраны и обработаны наиболее частые вопр...
 
Sergey Dzyublik:

O Bug MT5 (build 2390) conta incorrectamente os suportes encaracolados na descrição da estrutura da classe.

Obrigado pelo correio, fixado

 

é assim que funciona:

   ObjectSetDouble (0,name,OBJPROP_ANGLE,direction==0?0:direction>0?30:-30);

por isso não (sempre 0)

   ObjectSetDouble (0,name,OBJPROP_ANGLE,direction*30);

direcção -1; +1; 0

 
Igor Zakharov:

é assim que funciona:

por isso não (sempre 0)

direcção -1; +1; 0

E assim

ObjectSetDouble (0,name,OBJPROP_ANGLE,( direction==0?0:direction>0?30:-30));
 
Alexey Viktorov:

E desta forma.

também funciona, a segunda opção não funciona

 
   ObjectSetDouble (0,name,OBJPROP_ANGLE,direction*30.0);
direcção que declarou como int. É isso que se obtém. Ultimamente, muitas funções têm-se tornado bastante minuciosas em relação aos valores. É melhor assegurar com uma conversão.
Eu próprio tenho enfrentado tais problemas recentemente. Não tive problemas antes. Mas foi-me pedido para corrigir o código e ele não quis funcionar correctamente até o lançar para o dobro.
 
Konstantin Nikitin:
Tem a direcção declarada como int. É isso que se obtém. Ultimamente, muitas funções têm-se tornado bastante minuciosas em relação aos valores. É melhor tratar da conversão.
Eu próprio tenho enfrentado tais problemas recentemente. Não tive problemas antes. Mas foi-me pedido para corrigir o código e ele não quis funcionar correctamente até o trazer para o dobro.

Sim, int. Mas é multiplicação - em números inteiros é também 30*1=30. Estou 100% certo de que há algumas construções atrás também funcionava bem na segunda variante, já que estas 30 foram determinadas pela colheita...

parece ser outra "característica" do MT5. Pelo menos o bloco é decorativo, mas se algures como o autolot ou o stoploss - a tristeza pode acontecer - muitas vezes inverto multiplicando por -1...

Obrigado, vou usar outra muleta...

 
Igor Zakharov:

também funciona, a segunda opção não funciona.

Ahh. Copiei descuidadamente o código errado.

Konstantin tem razão, porquê colocar int onde se espera o dobro... Isto não é uma característica do mql5, são apenas algumas tentativas de se habituar à encomenda.

 

Por favor, ajudem.

O indicador está a ser expulso com uma matriz fora do intervalo de erro.

No código, defini os amortecedores

#property indicator_buffers 2

#property indicator_color1 Red

#property indicator_width1 1

#property indicator_plots  1 // количество графических построений

#property indicator_type1   DRAW_ARROW


Variáveis globais declaradas

double Buf1[];

double Buf2[];

No Init() defini as propriedades

    PlotIndexSetInteger(0,PLOT_ARROW,code); 

//--- установим пустое значение 

   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);

   SetIndexBuffer(0,Buf1,INDICATOR_DATA);

   PlotIndexSetString(0, PLOT_LABEL, "Break");



//----

   PlotIndexSetInteger(1,PLOT_ARROW,code);  

//--- установим пустое значение 

   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);

   SetIndexBuffer(1,Buf2,INDICATOR_CALCULATIONS);

   PlotIndexSetString(1, PLOT_LABEL, "Break");


Em OnCalculate(), o código define uma condição - a variável up.

Se for verdade, então o seguinte código é executado

  i=nPoint1; BreakUp=false; BreakDn=false;
  
while(i>=0 && BreakUp==false && BreakDn==false)
  {              Print("i  ",i);                 tmp=iHigh(NULL,0,nPoint1)-Speed*(nPoint1-i);        tmp1=iHigh(NULL,0,nPoint1)-Speed*(nPoint1-i)-resultL;        if(NormalizeDouble(iLow(NULL,0,i),Digits())<NormalizeDouble(tmp1,Digits()) && NormalizeDouble(iHigh(NULL,0,i),Digits())>NormalizeDouble(tmp,Digits()))         {          size=ArraySize(Buf1);          Print("size ",size);                   BreakUp=true;          if(channelbreak) Buf1[i]=tmp;          Comm="\nПробой вверх на уровне " + DoubleToString(tmp,Digits());         }        else        if(NormalizeDouble(iLow(NULL,0,i),Digits())<NormalizeDouble(tmp1,Digits()))         {          size=ArraySize(Buf1);          Print("size ",size);                          BreakDn=true;          if(channelbreak) Buf1[i]=tmp1;          Comm="\nПробой вниз на уровне "+DoubleToString(tmp1,Digits());         }        else        if(NormalizeDouble(iHigh(NULL,0,i),Digits())>NormalizeDouble(tmp,Digits()))         {          size=ArraySize(Buf1);          Print("size ",size);                   BreakUp=true;          if(channelbreak) Buf1[i]=tmp;          Comm="\nПробой вверх на уровне "+DoubleToString(tmp,Digits());         }        else Comm="\nПробоя канала нет";        //i--;       }     } Ошибка происходит при входе в цикл while при присвоении значения переменной значению буфера. Проверка на размер массива буфера выдает ноль. Т.е. буфер не инициализируется. Всю голову сломал, не могу понять почему. В чем затык?
nPoint1 - это индекс бара (сдвиг от нулевого).
 
Ilyas:

Por favor esclareça se é normal que durante a depuração do indicador, os valores deste indicador não sejam visíveis no gráfico aberto? Isto é, por exemplo, abrimos o MACD no depurador. Estabelecemos um ponto de ruptura no ciclo de escrita de valores nos amortecedores. Após a escrita do valor ChartRedraw(). Espero ver este valor no gráfico imediatamente após o valor ter sido escrito, mas só vejo uma janela vazia.

Construir 2380 x64.

Razão: