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

 

Ich habe meinen ersten Expert Advisor aus den freundlicherweise zur Verfügung gestellten Codes gebaut (besonderen Dank anMakarFX_ für Motivation und Code)

Alles funktioniert, wie es sollte, aber es gibt ein Problem. Ich weiß nicht, wo ich danach suchen soll.

Der Algorithmus sieht folgendermaßen aus:

es gibt ein Signal - Auftrag wird eröffnet

Schließen Sie ihn mit einer Stop- oder Take-Order in Punkten oder nach Erreichen der Gewinn- und Verlustgrenzen in den Depotwährungen CountLoss und CountProfit. (je nachdem, was zuerst eintritt)

wenn ein Stop - der nächste Auftrag mit einer Marge, wenn ein Take, CountProfit, CountLoss - das Lot wird auf den Ausgangswert zurückgesetzt

Wenn der Stop Loss auf CountLoss gesetzt ist, wird der nächste Auftrag z.B. mit dem Mindestlot statt mit dem Startlot eröffnet:

in den externen Variablen wird das Startlos 0,02 gesetzt, der nächste Auftrag bei CountLoss wird das Los 0,01 sein.

Kann mir jemand sagen, wo der Fehler liegt?

MakarFX
MakarFX
  • 2021.03.19
  • www.mql5.com
Профиль трейдера
Dateien:
oilim1p11.mq4  17 kb
 
законопослушный гражданин:

Ich habe meinen ersten Expert Advisor aus den freundlicherweise zur Verfügung gestellten Codes gebaut (besonderen Dank anMakarFX_ für Motivation und Code)

Alles funktioniert, wie es sollte, aber es gibt ein Problem. Ich weiß nicht, wo ich danach suchen soll.

Der Algorithmus sieht wie folgt aus:

es gibt ein Signal - Auftrag wird eröffnet

Schließen Sie ihn mit einer Stop- oder Take-Order in Punkten oder nach Erreichen der Gewinn- und Verlustgrenzen in den Depotwährungen CountLoss und CountProfit. (je nachdem, was zuerst eintritt)

wenn ein Stop - der nächste Auftrag mit einer Marge, wenn ein Take, CountProfit, CountLoss - das Lot wird auf den Ausgangswert zurückgesetzt

Wenn der Stop Loss auf CountLoss gesetzt ist, wird der nächste Auftrag z.B. mit dem Mindestlot statt mit dem Startlot eröffnet:

in den externen Variablen wird das Startlos 0,02 gesetzt, der nächste Auftrag bei CountLoss wird das Los 0,01 sein.

Kann mir jemand sagen, wo der Fehler liegt?

Sehen Sie, was ich in der Funktion double Lots() geändert habe

Dateien:
oilim1p11.mq4  17 kb
 
MakarFX:

Wird einmal gedruckt, wenn es einen Verlusthandel gibt

Danke für diesen Gedanken. Ich habe den Zeitpunkt des Abschlusses der aktuellen Bestellung mit dem Zeitpunkt des Abschlusses der vorherigen Bestellung verglichen, und alles lief wie gewünscht. Ich habe auch die Funktion genutzt, um eine Order in die entgegengesetzte Richtung mit einem Stop-Loss zu eröffnen, obwohl das nicht viel gebracht hat.
 
Petronet:
Danke, ich habe die Idee verstanden. Ich habe den Zeitpunkt des Abschlusses der aktuellen Bestellung mit dem Zeitpunkt des Abschlusses der vorherigen Bestellung verglichen, und alles lief wie gewünscht. Ich habe auch die Funktion der Eröffnung eines Auftrags in die entgegengesetzte Richtung mit einem Stop-Loss gemacht, obwohl es nicht viel geholfen hat.

Genauer gesagt...

 

Guten Tag zusammen. Ich versuche, die Berechnung von Gewinn und Stop mit dem atr-Indikator zu implementieren. Die Haltestelle funktioniert gut. Der Gewinn wird jedoch immer auf denselben Wert gesetzt. Hier ist der Code für die Gewinnberechnung

  if(Tip_tp == en_TP_po_atr)// ЕСЛИ ПРОФИТ ПО АТР//-------------------------------------------------------------------------------------------------+
  {
  tp =NormalizeDouble(iATR(NULL,PeriodForWork_sl,atr_sl_period,1),Digits);// ПРИСВАЕВАЕМ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
      if(tp<stoplevel)  // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
        {
         tp=NormalizeDouble(tp*1.5,Digits); // ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
        } 
  }
  tp= NormalizeDouble(tp*Point, Digits());// НОРМАЛИЗУЕМ ПРОФИТ, ЧТОБЫ РАБОТАЛО НА ЛЮБЫХ КАТИРОВКАХ
  

  
  
  //+--КОНЕЦ РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+

Was ist der Fehler, dass der Gewinn immer den gleichen Wert hat? Hm?

 
DanilaMactep:

Guten Tag zusammen. Ich versuche, die Berechnung von Gewinn und Stop mit dem atr-Indikator zu implementieren. Die Haltestelle funktioniert gut. Der Gewinn wird jedoch immer auf denselben Wert gesetzt. Hier ist der Code für die Gewinnberechnung

Was ist der Fehler, dass der Gewinn immer den gleichen Wert hat? Hm?

   // ЕСЛИ ПРОФИТ ПО АТР//-------------------------------------------------------------------------------------------------+
   if(Tip_tp == en_TP_po_atr)
     {
      tp =NormalizeDouble(iATR(NULL,PeriodForWork_sl,atr_sl_period,1),Digits);// ПРИСВАЕВАЕМ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
      if(tp<stoplevel)  // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
        {
         tp=NormalizeDouble(tp*1.5,Digits); // ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
        } 
     }
   //+--КОНЕЦ РАСЧЁТА ПРОФИТА---------------------------------------------------------------------- Разделитель ---+
 
MakarFX:
Vielen Dank für Ihre Hilfe - ich habe einen Teil des Codes geändert und alles hat funktioniert. Aber können Sie den Fehler in Worten beschreiben, da ich ihm mit dem Auge nicht entgehen kann?
 
MakarFX:

Sehen Sie, was ich in der Funktion double Lots() geändert habe

Super! Vielen Dank!

 
DanilaMactep:
Vielen Dank für Ihre Hilfe - ich habe einen Teil des Codes geändert - alles hat funktioniert. Aber können Sie in Worten beschreiben, was der Fehler war, da ich mit dem Auge nicht weiterkomme?

Ihr Code wurde aufgeteilt

В этой части кода ты задаешь tp значение АТР
  if(Tip_tp == en_TP_po_atr)// ЕСЛИ ПРОФИТ ПО АТР//-------------------------------------------------------------------------------------------------+
  {
  tp =NormalizeDouble(iATR(NULL,PeriodForWork_sl,atr_sl_period,1),Digits);// ПРИСВАЕВАЕМ ЗНАЧЕНИЙ АТР ДЛЯ ВЫСТАВЛЕНИЯ СТОПЛОССА
      if(tp<stoplevel)  // ЕСЛИ ПРОФИТ МЕНЬШЕ ЧЕМ МИНИМАЛЬНО ДОПУСТИМЫЙ УРОВЕНЬ ЕГО УСТАНОВКИ ТО
        {
         tp=NormalizeDouble(tp*1.5,Digits); // ПРОФИТУ ПРИСВАЕВАЕМ МИНИМАЛЬНО ДОПУСТИМУЮ ВЕЛИЧИНУ ЕГО УСТАНОВКИ
        } 
  }
А в этой части ты обнуляешь предыдущее действие и задаешь непонятно что...
  tp= NormalizeDouble(tp*Point, Digits());// НОРМАЛИЗУЕМ ПРОФИТ, ЧТОБЫ РАБОТАЛО НА ЛЮБЫХ КАТИРОВКАХ
 
Guten Tag, bitte helfen Sie mir, mein Terminal wieder zum Laufen zu bringen - der Markt funktioniert nicht. Ich möchte einen kostenlosen Indikator vom Markt herunterladen und kann es nicht.

Ich habe das Passwort geändert, neu gestartet, aber nichts funktioniert.

Das Programm protokolliert Folgendes

2021.08.23 11:54:18.236 MQL5 Market hat das Produkt 'MACD Intraday Trend' nicht heruntergeladen(www.mql5.com:443 send failed [426: ])


Mit freundlichen Grüßen, Olga

Grund der Beschwerde: