Errori, bug, domande - pagina 2728

 
Askr:

Grazie.

Ho trovato quest'altra cosa che forse 1)è un broker di blocco.

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

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

2) Ho visto il 110% e il 70% saltare costantemente e fortemente, non l'ho ancora contato. Forse ha qualcosa a che fare con il carico, ma non credo. Ho aperto piccole cose e la leva nelle specifiche è la stessa e i bilanci sono quasi gli stessi.

Un filo comune sui segnali è questo
https://www.mql5.com/ru/forum/10603/page394
Per informazioni.

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

Il bug MT5 (build 2390) conta erroneamente le parentesi graffe nella descrizione della struttura della classe.

Grazie per il post, risolto

 

è così che funziona:

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

quindi no (sempre 0)

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

direzione -1; +1; 0

 
Igor Zakharov:

è così che funziona:

quindi no (sempre 0)

direzione -1; +1; 0

E così

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

E da questa parte.

funziona anche, la seconda opzione non funziona

 
   ObjectSetDouble (0,name,OBJPROP_ANGLE,direction*30.0);
che avete dichiarato come int. Questo è ciò che si ottiene. Ultimamente, molte funzioni sono diventate piuttosto pignole riguardo ai valori. È meglio assicurarsi con una conversione.
Io stesso ho affrontato tali problemi di recente. Non ho avuto problemi prima. Ma mi è stato chiesto di correggere il codice e non voleva funzionare correttamente finché non l'ho lanciato al doppio.
 
Konstantin Nikitin:
Avete la direzione dichiarata come int. Questo è ciò che si ottiene. Ultimamente, molte funzioni sono diventate piuttosto pignole riguardo ai valori. È meglio occuparsi della conversione.
Io stesso ho affrontato tali problemi di recente. Non ho avuto problemi prima. Ma mi è stato chiesto di correggere il codice e non voleva funzionare correttamente finché non l'ho portato al doppio.

Sì, int. Ma è una moltiplicazione - in interi è anche 30*1=30. Sono sicuro al 100% che qualche build fa funzionava bene anche nella seconda variante, dato che questi 30 erano determinati dal prelievo...

sembra un'altra "caratteristica" di MT5... Almeno il blocco è decorativo, ma se da qualche parte come autolot o stoploss - la tristezza può accadere - spesso inverto moltiplicando per -1...

Grazie, userò un'altra stampella...

 
Igor Zakharov:

funziona anche, la seconda opzione non funziona.

Ah, ho inavvertitamente copiato il codice sbagliato.

Konstantin ha ragione, perché mettere int dove ci si aspetta double... Questa non è una caratteristica di mql5, sono solo alcuni tentativi di abituarsi all'ordine.

 

Per favore, aiutatemi.

L'indicatore si lancia con un errore di matrice fuori portata.

Nel codice ho definito i buffer

#property indicator_buffers 2

#property indicator_color1 Red

#property indicator_width1 1

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

#property indicator_type1   DRAW_ARROW


Variabili globali dichiarate

double Buf1[];

double Buf2[];

In Init() ho definito le proprietà

    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");


In OnCalculate(), il codice definisce una condizione - la variabile up.

Se è vero, allora viene eseguito il seguente codice

  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:

Si prega di chiarire se è normale che durante il debug dell'indicatore, i valori di questo indicatore non sono visibili sul grafico aperto? Cioè, per esempio, apriamo MACD nel debugger. Impostiamo un breakpoint nel ciclo di scrittura dei valori nei buffer. Dopo che il valore è stato scritto ChartRedraw(). Mi aspetto di vedere questo valore sul grafico subito dopo la scrittura del valore, ma vedo solo una finestra vuota.

Build 2380 x64.