Fehler, Irrtümer, Fragen - Seite 2728

 
Askr:

Ich danke Ihnen.

Ich habe diese andere Sache gefunden, die vielleicht 1) ein blockierender Broker ist.

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

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

2) Ich habe gesehen, dass 110% und 70% ständig und stark springen, ich habe es noch nicht gezählt. Vielleicht hat es etwas mit der Belastung zu tun, aber ich glaube nicht. Ich habe Kleinigkeiten geöffnet und die Hebelwirkung in den Spezifikationen ist die gleiche und die Salden sind fast die gleichen.

Ein gemeinsamer Nenner bei Signalen ist dieser
https://www.mql5.com/ru/forum/10603/page394
Für Informationen.

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

Fehler MT5 (Build 2390) zählt geschweifte Klammern in Klassenstrukturbeschreibungen falsch.

Danke für den Beitrag, korrigiert

 

So funktioniert es:

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

also nein (immer 0)

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

Richtung -1; +1; 0

 
Igor Zakharov:

So funktioniert es:

also nein (immer 0)

Richtung -1; +1; 0

Und so

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

Und hier entlang.

funktioniert auch, die zweite Option funktioniert nicht

 
   ObjectSetDouble (0,name,OBJPROP_ANGLE,direction*30.0);
Richtung, die Sie als int deklariert haben. Das ist es, was Sie bekommen. In letzter Zeit sind viele Funktionen ziemlich pingelig geworden, was Werte angeht. Es ist besser, sich mit einer Umwandlung abzusichern.
Ich selbst bin in letzter Zeit mit solchen Problemen konfrontiert worden. Ich hatte vorher keine Probleme. Aber ich wurde gebeten, den Code zu korrigieren, und er wollte nicht richtig funktionieren, bis ich ihn verdoppelt habe.
 
Konstantin Nikitin:
Sie haben die Richtung als int deklariert. Das ist es, was Sie bekommen. In letzter Zeit sind viele Funktionen ziemlich pingelig geworden, was Werte angeht. Es ist besser, sich um die Umstellung zu kümmern.
Ich selbst bin in letzter Zeit mit solchen Problemen konfrontiert worden. Ich hatte vorher keine Probleme. Aber ich wurde gebeten, den Code zu korrigieren, und er wollte nicht richtig funktionieren, bis ich ihn verdoppelt habe.

Ja, int. Aber es ist eine Multiplikation - in ganzen Zahlen ist es auch 30*1=30. Ich bin mir 100%ig sicher, dass es vor ein paar Jahren auch in der zweiten Variante gut funktioniert hat, da diese 30 durch die Auswahl von...

sieht aus wie ein weiteres "Feature" von MT5... Zumindest der Block ist dekorativ, aber wenn irgendwo wie Autolot oder Stoploss - Traurigkeit passieren kann - ich oft umgekehrt durch Multiplikation mit -1...

Danke, ich werde eine andere Krücke benutzen...

 
Igor Zakharov:

funktioniert auch, die zweite Option funktioniert nicht.

Ahh. Ich habe unvorsichtigerweise den falschen Code kopiert.

Konstantin hat recht, warum sollte man int dort einsetzen, wo double erwartet wird... Dies ist keine Funktion von mql5, es sind nur einige Versuche, sich an die Ordnung zu gewöhnen.

 

Bitte um Hilfe.

Der Indikator bricht mit einem Array out of the range Fehler ab.

Im Code habe ich die Puffer definiert

#property indicator_buffers 2

#property indicator_color1 Red

#property indicator_width1 1

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

#property indicator_type1   DRAW_ARROW


Deklarierte globale Variablen

double Buf1[];

double Buf2[];

In Init() habe ich die folgenden Eigenschaften definiert

    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() definiert der Code eine Bedingung - die Variable up.

Wenn sie wahr ist, wird der folgende Code ausgeführt

  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:

Bitte klären Sie, ob es normal ist, dass während der Fehlersuche des Indikators die Werte dieses Indikators auf dem geöffneten Diagramm nicht sichtbar sind? D.h. zum Beispiel, wir öffnen den MACD im Debugger. Wir setzen einen Haltepunkt im Zyklus des Schreibens von Werten in die Puffer. Nach Wert schreiben ChartRedraw(). Ich erwarte, dass dieser Wert sofort nach dem Schreiben des Wertes im Diagramm angezeigt wird, aber ich sehe nur ein leeres Fenster.

Build 2380 x64.