Eine Frage für MQL-Kenner - Seite 8

 

Ich danke Ihnen.

 

Guten Tag zusammen.

Bitte beraten Sie mich. Der Indikator zeigt die Kurslinien der Instrumente und

Auf der rechten Seite befindet sich ein Textkommentar - ihre Namen und Positionsgrößen.

Alles funktioniert einwandfrei. Solange ich den Indikator nicht auf den Chart von Instrumenten mit 5-stelligen Kursen lege.

Die Preislinien sind gezogen. Aber der Kommentar auf der rechten Seite verschwindet ganz. Oder es werden Nullen anstelle von Positionsgrößen angezeigt.

Das Protokoll zeigt ZERO DIVIDY (siehe Alpari-Diagramm)

- auf EURUSD und GBPUSD - anstelle der Größe werden Nullen angezeigt...

Ich denke, das hat mit der Berechnung der Positionsgrößen zu tun:

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

Verhältnis k1=MarketInfo(Symbol_1, MODE_TICKVALUE)..../MarketInfo(Symbol_1, MODE_TICKSIZE)

ergibt "Division durch Null" bei 5 Stellen.

Wie kann man das Problem beheben?

 

Bitte sagen Sie mir, ob es ein Skript oder einen Indikator gibt, der frühere Transaktionen in der Historie anzeigt, z. B. von so-und-so bis so-und-so Datum. Ochen. nützliche Sache meiner Meinung nach

Ich danke Ihnen,

Juri

 
leonid553:

Guten Tag zusammen.

Bitte sagen Sie mir, wie ich das beheben kann?


Mit einfachen Worten: Versuchen Sie, MODE_TICKSIZE durch MODE_POINT zu ersetzen. Aber eigentlich müssen Sie den Code umschreiben, um die Null MarketInfo() zu berücksichtigen
 
tyn:

Bitte sagen Sie mir, ob es ein Skript oder einen Indikator gibt, der frühere Transaktionen in der Historie anzeigt, z. B. von so-und-so bis so-und-so Datum. Sehr. nützliche Sache meiner Meinung nach

Ich denke, das wäre sehr nützlich,

Juri

https://www.mql5.com/en/code - Drehbuch. Sie können den Zeitrahmen in der Historie Ihres Terminals festlegen.

VisualOrders.mq4 - Anzeige

Dateien:
 

Guten Tag.

In mt4 EXNESS funktionieren meine "Multicurrency"-Indikatoren aus irgendeinem Grund nur, wenn das Internet verbunden ist (im Gegensatz zu mt4 anderer Brokerfirmen).

Ich bekomme eine Fehlermeldung, wenn ich es nicht benutze, und ich habe eine negative Rückmeldung erhalten. Das Protokoll gibt einen "Zero-Dive" aus.

Wenn ich eine Internetverbindung herstelle, muss ich oft erst auf die TF klicken, damit die Indizes erscheinen.

Könnten Sie mir bitte sagen, was das Problem ist und wie ich es beheben kann?

Wenn das Internet ausgeschaltet ist:

Wenn angeschlossen:

 
leonid553:

Guten Tag.

In mt4 EXNESS funktionieren meine "Multicurrency"-Indikatoren aus irgendeinem Grund nur, wenn das Internet verbunden ist (im Gegensatz zu mt4 anderer Brokerfirmen).

Ich habe eine gute Arbeitsbeziehung zu meinen Forex-Indikatoren. Das Protokoll gibt einen "Zero-Dive" aus.

Wenn ich mich mit dem Internet verbinde, muss ich oft erst auf die TF klicken, damit die Indizes erscheinen.

Könnten Sie mir bitte sagen, was das Problem ist und wie ich es beheben kann?

Wenn das Internet ausgeschaltet ist:

Wenn angeschlossen:


Das ist eine normale Sache. Das passiert oft, und nicht immer kann man damit umgehen. Die Teilung durch Null kann jedoch behoben werden. Das Problem ist häufig das Fehlen eines Marktumfelds.
 

Ich verstehe das nicht ganz, Victor.

Ist das eine "normale Sache"? Es handelt sich eindeutig um eine Störung!

Ich verstehe den Begriff "kein Marktumfeld" nicht.

Wenn wir die Division auf Null setzen - werden dann die Preislinien erscheinen? Das glaube ich nicht.

Der Kommentar in der rechten Ecke des Indikatorfensters wird normal angezeigt. D.h., die Funktionen ObjectCreate, etc. arbeiten normal.

Ebenso funktionieren mathematische Berechnungen, deren Zahlen im Kommentar angegeben sind, normal.

Es bleiben nur die Preislinien des Indikators übrig. Es gibt dort nichts anderes.

Preislinien werden in Puffern festgelegt. Jede Kurslinie ist nur eine Differenz zwischen zwei MA:

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

Dies ist also der Teil, der die "Nullteilung" ergibt! Aber hier gibt es überhaupt keine Division, geschweige denn eine Division durch Null!

Daher wird der Fehler in diesem Fall vom Server (oder der Plattform) aus dem Hintergrund zurückgegeben? Oder vielleicht haben die Entwickler von MT4 eine solche Panne nicht in Betracht gezogen und haben "die durch Null geteilte" Rückgabe eingestellt, die nicht genau dem Wesen eines solchen Fehlers entspricht.

Und warum funktioniert der Indikator in MT4 einwandfrei? Warum funktioniert der Indikator normal?

Wie könnten sich ähnliche Plattformen unterscheiden, so dass dieser einfache Code auf ihnen anders funktionieren würde?

 

Die Division durch Null ist möglich, aber auch der Indikator muss korrekt funktionieren. Dies ist schwieriger.

 

Was könnte theoretisch an diesem einfachen Code (für 4 Zeilen) falsch sein?)

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);
} // конец функции СТАРТ