Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 738

 
novichok2018:

Die Meldung wird immer noch in der 12. Minute angezeigt.

Print einfügen, am Anfang der Funktion, wo das Array gefüllt wird

Print("Range = ", ArrayRange(NewsArr,1));

und zeigen die Anzahl der Werte in der zweiten Dimension

 
Ilya Prozumentov:

Ich kann aus allem erkennen, dass NomNews in die While-Schleife bereits in einem Zustand größer als 999 einsteigt. Dann müssen Sie herausfinden, warum das passiert, und diese Variable irgendwo zurücksetzen.

Um dies zu überprüfen, schreiben Sie es an den Anfang der Schleife:

Ja, in der 11. Minute ist der Druck 1000.

 
Alekseu Fedotov:

Print einfügen, am Anfang der Funktion, wo das Array gefüllt wird

und zeigen die Anzahl der Werte in der zweiten Dimension

Ich habe ihn am Anfangder While-Schleife eingefügt und erhalte den unendlichenBereich = 1000. Habe ich ihn an der falschen Stelle eingefügt?

Wie lautet diese Zahl (oder Funktion?): datetime TimeNewsFunck(int nomf)

{

string s=NewsArr[0][nomf];

string time=StringConcatenate(StringSubstr(s,0,4),".",StringSubstr(s,5,2),".",StringSubstr(s,8,2)," ",StringSubstr(s,11,2),":",StringSubstr(s,14,4));

return((datetime)(StringToTime(time) + GMTplus*3600))

}

Und woher bekommt er den Wert von int nomf? Ich konnte es nicht finden.

 
novichok2018:

Ich habe ihn am Anfangder While-Schleife eingefügt und erhalte infiniteRange = 1000. Habe ich ihn an der falschen Stelle eingefügt?

Wie lautet diese Zahl (oder Funktion?): datetime TimeNewsFunck(int nomf)

{

string s=NewsArr[0][nomf];

string time=StringConcatenate(StringSubstr(s,0,4),".",StringSubstr(s,5,2),".",StringSubstr(s,8,2)," ",StringSubstr(s,11,2),":",StringSubstr(s,14,4));

return((datetime)(StringToTime(time) + GMTplus*3600))

}

Und woher bekommt er den Wert von int nomf? Ich habe sie nicht gefunden.

Und dann gibt es noch die Funktion, die ich versucht habe, aber nicht herausfinden konnte. Kann das die Ursache des Problems sein?

bool CheckInvestingNews(int &pwr,datetime &mintime)
  {

   bool CheckNews=false; pwr=0; int maxPower=0;
   if(MidleNews || HighNews)
     {
      if(TimeCurrent()-LastUpd>=Upd){Print("Investing.com News Loading...");UpdateNews();LastUpd=TimeCurrent();Comment("");}
      WindowRedraw();
      //---Draw a line on the chart news--------------------------------------------
      if(DrawNewsLines)
        {
         for(int i=0;i<NomNews;i++)
           {
            string Name=StringSubstr("NS_"+TimeToStr(TimeNewsFunck(i),TIME_MINUTES)+"_"+NewsArr[1][i]+"_"+NewsArr[3][i],0,63);
            if(NewsArr[3][i]!="")if(ObjectFind(Name)==0)continue;
            if(OnlySymbolNews && StringFind(ValStr,NewsArr[1][i])<0)continue;
            if(TimeNewsFunck(i)<TimeCurrent() && Next)continue;

            color clrf=clrNONE;
            if(HighNews && StringFind(NewsArr[2][i],"High")>=0)clrf=HighColor;
            if(MidleNews && StringFind(NewsArr[2][i],"Moderate")>=0)clrf=MidleColor;
   //         if(LowNews && StringFind(NewsArr[2][i],"Low")>=0)clrf=LowColor;

            if(clrf==clrNONE)continue;

            if(NewsArr[3][i]!="")
              {
               ObjectCreate(0,Name,OBJ_VLINE,0,TimeNewsFunck(i),0);
               ObjectSet(Name,OBJPROP_COLOR,clrf);
               ObjectSet(Name,OBJPROP_STYLE,LineStyle);
               ObjectSetInteger(0,Name,OBJPROP_WIDTH,LineWidth);
               ObjectSetInteger(0,Name,OBJPROP_BACK,true);
              }
           }
        }
      //---------------event Processing------------------------------------
      int ii;
      for(ii=0;ii<NomNews;ii++)
        {
         int power=0;
         if(HighNews && StringFind(NewsArr[2][ii],"High")>=0){ power=3; MinBefore=HighIndentBefore; MinAfter=HighIndentAfter; }
         if(MidleNews && StringFind(NewsArr[2][ii],"Moderate")>=0){ power=2; MinBefore=MidleIndentBefore; MinAfter=MidleIndentAfter; }
 //        if(LowNews && StringFind(NewsArr[2][ii],"Low")>=0){ power=1; MinBefore=LowIndentBefore; MinAfter=LowIndentAfter; }
         if(NFPNews && StringFind(NewsArr[3][ii],"Nonfarm Payrolls")>=0){ power=4; MinBefore=NFPIndentBefore; MinAfter=NFPIndentAfter; }
         if(power==0)continue;

         if(TimeCurrent()+MinBefore*60>TimeNewsFunck(ii) && TimeCurrent()-MinAfter*60<TimeNewsFunck(ii) && (!OnlySymbolNews || (OnlySymbolNews && StringFind(ValStr,NewsArr[1][ii])>=0)))
           {
            if(power>maxPower){   maxPower=power; mintime=TimeNewsFunck(ii); }
              }else{
            CheckNews=false;
           }
        }
      if(maxPower>0){ CheckNews=true; oppoz=true; }
     }
   pwr=maxPower; 
   return(CheckNews);
  }
 
novichok2018:

Und dann gibt es noch eine Funktion, die ich nicht herausfinden konnte, so sehr ich mich auch bemüht habe. Vielleicht liegt genau hier das Problem?

Nur der Autor wird es selbst herausfinden. Senden Sie besser den Code von OnTick()

 
novichok2018:

Ja, in der 11. Minute gab es einen Druck von 1000.

Versuchen Sie zu ersetzen

while(!IsStopped())

mit dieser Zeile.

while(NomNews<300 && !IsStopped())
 
Ilya Prozumentov:

Überschuss((2*psd*usd)*((2*psd*usd)-C))/(C-1)) in der Formel.

Zum Potenzieren: ^0,5 ist nicht *0,5

Wenn es keinen einzigen Handel auf dem durchgesehenen Symbol und der Majik gibt, oder es gibt keinen einzigen Gewinn oder Verlust, oder es gibt nur ein Paar (C=1), erhalten wir die Division durch 0.

Vor der eigentlichen Formel sollten Sie überprüfen, ob psd und usd > 0 sind und C !=1

Gewinnbringende Paare werden mit Gewinn > 1, Verlust < 1 berechnet, mit Gewinn=1 werden nicht analysiert, d.h. 1 muss auch irgendwo in dieser oder jener Gruppe enthalten sein.

In Ihrer Funktion wäre es besser, zunächst Transaktionsnummern auszuwählen, die mit dem Symbol und der magischen Zahl übereinstimmen, und dann zu prüfen, ob sich ihre Zahl geändert hat, und wenn ja, zn neu zu berechnen, wenn nicht, zn zurückzugeben (zn wird in diesem Fall nicht auf Null gesetzt, und die Prüfung != 0 wird beim Drucken nicht benötigt).

Owl funktioniert nicht mehr, weil es sich auf die Variablen ww und nn stützt, und wenn Ihre Funktion funktioniert, ändern sie sich und brechen den Algorithmus von Owl.

Es hätte sich nichts kompilieren lassen, wenn es sich um einen Code-Design-Fehler gehandelt hätte.

Ich kann nur Danke sagen. Dies ist der einzige Ort in Runet, an dem sie mir geholfen haben.

Nun erzeugt der Drucker folgende Meldung "Stop_Ma_v_5.1 EURUSD,M15: == Z-count equals = -nan(ind)" . Könnten Sie uns bitte mitteilen, was das bedeutet, und der Code sollte die Zahl zurückgeben?

Code:

//+------------------------------------------------------------------+
//| Подсчёт z-вероятности. @axe44 Алексей Корольков                  |
//+------------------------------------------------------------------+
  
double Z()
  {
    zn=0;          // z-число
    psd=0;         // кол. положительных сделок
    usd=0;         // количество отрицательных сделок 
    www=0;         // боол переменная 
    nnn=0;         // боол переменная
    kolichestvo=0; // подсчёт закрытых ордеров открытых роботом
    C=0;          // C = количество чередований между отрицательными и положительными сделками
    index=OrdersHistoryTotal(); 
      if(OrdersHistoryTotal()>302) index=301; // берём не более 301 сделки
    //if(index<30) return(0);                 // берём не менее 30
    count=OrdersHistoryTotal();             // считаем от скольки 
    prom=count-index;                       // выделяем только последние сделки
    if (prom<0) prom=0;                     // исключаем ошибки
  
   for( i=prom;i<=count;i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {// далее магия
           pribul=OrderProfit(); 
           if (ww==0&&pribul>1){C++;www=1;nnn=0;}// подсчитываем смену тенденции
           if (nn==0&&pribul<1){C++;www=0;nnn=1;}// подсчитываем смену тенденции 
           if (pribul>1){psd++;}//прибыльные сделки
           if (pribul<1){usd++;}// убыточные сделки
           kolichestvo++;
           }
        }
     }
    /*
Величина Z = (A * (C — 0.5) — B)/   ((B*(B — C))/(C -1))^(1/2), где:
A = количество анализируемых сделок;
B = 2*количество прибыльных сделок * количество убыточных сделок;
C = количество чередований в выборке (чередованием считается каждая пара сделок, 
когда прибыльная сделка сменяет убыточную либо наоборот).
          */ 
            
            if(kolichestvo>30&&psd>0&&usd>0&&C!=1)
            zn=(index*(C-0.5)-2*psd*usd)  /  pow(((2*psd*usd*(2*psd*usd-C))/(C-1)),0.5);
      
     
     
   return(zn);
  }
Dankeschön
 
aleksandr bebishev:

Mql5 Jungs, könnt ihr mir helfen, einen Antrag auf Schließung einer Position in einem Hedge-Konto zu stellen? Situation: Wir haben eine BUY-Position eröffnet und müssen sie mit einem Sell Limit schließen. Frage: Wie schreibe ich korrekt eine Anfrage, um genau die gewählte Position zu schließen, und nicht, um neue SELL locking BUY zu eröffnen? Bitte schreiben Sie ein Stück Code mit Kommentaren! Vielen Dank im Voraus!

Schließung eines offenen Auftrags durch einen anderen offenen Auftrag für dasselbe Symbol, aber in entgegengesetzter Richtung.

boolOrderCloseBy(
intticket,// Nummer des abzuschließenden Auftrags
intopposite,// Nummer des gegenüberliegenden Auftrags
Farbearrow_color// Farbe
);

Parameter

Ticket

[in] Eindeutige Auftragsnummer des abzuschließenden Auftrags.

gegenüber

[Eine eindeutige Sequenznummer der umgekehrten Reihenfolge.

Pfeil_Farbe

[Die Farbe des Schließungspfeils im Diagramm. Ist dieser Parameter nicht vorhanden oder hat er den Wert CLR_NONE, wird der Pfeil nicht im Diagramm angezeigt.

Zurückgegebener Wert

Gibt true zurück, wenn die Funktion erfolgreich war, oder false, wenn ein Fehler auftrat. Um die Fehlerinformationen zu erhalten, rufen Sie GetLastError() auf.

Beispiel:

if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75)
{
OrderCloseBy(order_id,opposite_id;)
zurück(0);
}

P.S. Dieser Thread parst nur MQL4

 
Aliaksei Karalkou:

Ich kann nur Danke sagen. Dies ist der einzige Ort in Runet, an dem sie geholfen haben.

Nun erzeugt der Drucker die folgende Meldung "Stop_Ma_v_5.1 EURUSD,M15: == Z-Account Equals = -nan(ind)". Könnten Sie uns bitte mitteilen, was das bedeutet, und der Code sollte die Zahl zurückgeben?

Code:

Dankeschön
Nan - NaN - Nicht eine Zahl - Keine Zahl. Versuchen Sie, die Zahlen in der Z-Berechnung zu normalisieren
 
Aliaksei Karalkou:

Die Schließung eines offenen Auftrags durch einen anderen offenen Auftrag für dasselbe Instrument, aber in entgegengesetzter Richtung.

boolOrderCloseBy(
intticket,// Nummer des abzuschließenden Auftrags
intopposite,// Nummer des gegenüberliegenden Auftrags
Farbearrow_color// Farbe
);

Parameter

Ticket

[Eine eindeutige fortlaufende Nummer des abzuschließenden Auftrags.

gegenüber

[Eine eindeutige Sequenznummer der umgekehrten Reihenfolge.

Pfeil_Farbe

[Die Farbe des Schließungspfeils im Diagramm. Ist dieser Parameter nicht vorhanden oder hat er den Wert CLR_NONE, wird der Pfeil nicht im Diagramm angezeigt.

Zurückgegebener Wert

Gibt true zurück, wenn die Funktion erfolgreich war, oder false, wenn ein Fehler auftrat. Um die Fehlerinformationen zu erhalten, rufen Sie GetLastError() auf.

Beispiel:

if(iRSI(NULL,0,14,PRICE_CLOSE,0)>75)
{
OrderCloseBy(order_id,opposite_id;)
zurück(0);
}

P.S. Dieser Thread parst nur MQL4

Nein. Alle Fragen zu mql4 und mal5 werden hier in diesem Thread behandelt, denn der Hauptzweck war es, nicht nur mit Algorithmen und Codes zu helfen, sondern auch die Migration von mql4 zu mql5 zu erleichtern.

Grund der Beschwerde: