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

 
EVGENII SHELIPOV #:

Guten Tag allerseits!!!

Ich schreibe Code für einen EA für Trailing Stop von Gruppenaufträgen aus dem Durchschnittspreis eines Rasters von Aufträgen.

Im Protokoll werden keine Fehler angezeigt, aber das Schleppnetz funktioniert auch nicht. Hier ist der Code Bitte schlagen Sie vor, wo der Fehler ist. Ich danke Ihnen!

Das Schleppnetz ist an der falschen Stelle!

Sie sollte in etwa so aussehen

Wenn Break-even-Preis+Gewinn-tral! = TakeProfit, Schleppnetz starten!

Woher stammen diese Daten?

//+----------------------------------------------------------------------------+
//| Трейлинг стоп групповых ордеров                                            |
//+----------------------------------------------------------------------------+
void TrailingGroupOrder()
{
    price += OrderOpenPrice() * OrderLots();
    order_lots += OrderLots() ;
    for(int i = OrdersTotal()-1; i>=0; i--)
    {
     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

OrderOpenPrice

Gibt den offenen Preis des ausgewählten Auftrags zurück

doubleOrderOpenPrice();

Anmerkung:

Die Bestellung muss mit der Funktion OrderSelect() vorausgewählt werden.

 
MakarFX #:

Vielen Dank.)

 
MakarFX #:

Dort steht das Schleppnetz nicht!

Das sollte folgendermaßen ablaufen:

wenn der Break-even-Preis+Gewinn-tral! = TakeProfit das Schleppnetz ausführt

Guten Tag Makar!!!!

Soweit ich das verstanden habe, handelt es sich um diese Linie. In diesem Fall ein Kaufauftrag:

if(Bid - NormalizeDouble(price / order_lots, Digits) > TrailingStopGroupOrder*Point || OrderStopLoss() == 0)

Makar, wenn Sie das genauer erklären könnten

 
MakarFX #:

Dort steht das Schleppnetz nicht!

Das sollte folgendermaßen ablaufen:

wenn der Break-even-Preis+Gewinn-tral! = TakeProfit das Schleppnetz ausführt

Woher stammen diese Daten?

Du sprichst heute in Rätseln, Makar.

Es mag eine weitere Frage sein, warum wir den Break-even-Preis ohne Überprüfung berechnen????

 
MakarFX #:

Dort steht das Schleppnetz nicht!

Das sollte folgendermaßen ablaufen:

wenn der Break-even-Preis+Gewinn-tral! = TakeProfit das Schleppnetz ausführt

Woher stammen diese Daten?

OrderOpenPrice

Gibt den offenen Preis des ausgewählten Auftrags zurück

doubleOrderOpenPrice();

Anmerkung:

Die Bestellung muss mit der Funktion OrderSelect() vorausgewählt werden.

Ja, daran habe ich gedacht und Sie haben es bereits geschrieben.

 
EVGENII SHELIPOV #:

Guten Tag Makar!!!!

Soweit ich es verstanden habe, handelt es sich um diese Zeile. In diesem Fall ein Kaufauftrag:

Makar, wenn Sie das genauer erklären können

Sie haben eine Gruppe von Aufträgen, Sie definieren einen Break-even-Punkt und erstellen eine Linie, und das ist besser als eine separate Funktion!

    avg_price = NormalizeDouble(price / order_lots, Digits);
     {
     ObjectDelete(0, "AveragePriceLine");
     ObjectCreate(0,"AveragePriceLine" ,OBJ_HLINE, 0, 0, avg_price);
     ObjectSet("AveragePriceLine",OBJPROP_COLOR, Magenta);
     }

Dann haben Sie den Gewinn Wert in Pips, die Sie erhalten möchten und addieren / subtrahieren zu / von avg_price

    if (otype == OP_BUY) tp = NormalizeDouble (avg_price + TakeProfitGroupOrder*Point, Digits);
    if (otype == OP_SELL) tp = NormalizeDouble (avg_price - TakeProfitGroupOrder*Point, Digits);

Und dann eine separate Schleppnetzfunktion

für den Kauf: if BID > avg_price = OrderModify()

für Verkäufe: if avg < avg_price = OrderModify()


Leider sehe ich in Ihrem Code keine logischen Aktionen (subjektiv)

 
EVGENII SHELIPOV #:

Das habe ich auch gedacht und Sie haben es bereits geschrieben.

Trennen Sie die Funktionen, damit Sie sich leichter zurechtfinden.

Hier ist ein Beispiel für OnTick()

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
     {
      CloseOrder();
     }
   sl  = MathMax(Stoploss, MarketInfo(_Symbol, MODE_STOPLEVEL)) * Point();
   SL  = NormalizeDouble(sl*Point(),Digits);
   tp  = MathMax(Takeprofit, MarketInfo(_Symbol, MODE_STOPLEVEL)) * Point();
   TP  = NormalizeDouble(tp*Point(),Digits);
   //---
   if(CountOrders()==0&&ObjectGetInteger(0,"lab_Button",OBJPROP_STATE))
     {
      if(TradeSignal()>=0)
        {
         SendOrder(TradeSignal());
        }
     }
   //---
   if (!IsTradeAllowed()) 
     {DrawLABEL("lab_Торговля",0,0,0,clrRed,"Торговля запрещена"); return;} 
   else
     {DrawLABEL("lab_Торговля",0,0,0,clrLime,"Торговля разрешена");}
  }
//+------------------------------------------------------------------+

Wie Sie sehen können, gibt es nur Funktionsaufrufe

 
MakarFX #:

Trennen Sie die Funktionen, um Ihnen die Navigation zu erleichtern.

Hier ist ein Beispiel für OnTick()

Wie Sie sehen können, gibt es nur Aufrufe von Funktionen.

Danke, Makar, ich werde meine Gedanken bündeln und in diese Richtung denken.

 
EVGENII SHELIPOV #:

Danke, Makar, ich werde meine Gedanken zusammenfassen und in diese Richtung denken.

(Sprechen Sie lauter)
 
Frage: Wie erhalte ich eine Verfügung aus dem Sorgerecht des EA? Vielleicht gibt es ja schon Screenshots oder mt4-Funktionen, die mir nicht bekannt sind. Bitte, klären Sie mich auf. Ich habe keinen Eifer und keine Möglichkeiten, mql 3, 4, 5 etc. zu studieren.
Grund der Beschwerde: