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

 

Guten Tag!!!

Helfen Sie mir auf die Sprünge. Ich füge einen Trailing Stop zu einem Grid EA hinzu, bisher nur für die erste Order. Die Spur hat noch nicht ausgelöst. Was ist das Problem?

Hier ist das Codefragment, in dem einzelne Aufträge geöffnet werden

double JAW = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORJAW,0);
     double TEETH = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORTEETH,0);
     double LIPS = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORLIPS,0);
     double DI_PLUSCurrent=iADX(Symbol(),TimeframesIndicators,14, PRICE_CLOSE,MODE_PLUSDI,0);
     double DI_MINUSCurrent=iADX(Symbol(),TimeframesIndicators,14, PRICE_CLOSE,MODE_MINUSDI,0);
     double MacdCurrent=iMACD(Symbol(),TimeframesIndicators,12,26,9, PRICE_CLOSE,MODE_MAIN,0);
     double MacdPrevious=iMACD(Symbol(),TimeframesIndicators,12,26,9, PRICE_CLOSE,MODE_MAIN,2 ); 
     double ATR = iATR(Symbol(), TimeframesVolatility, BarCount, 0);
     if (CountTrade() == 0)
     { 
        if((UseHour==1&&Hour()>=StartTime&&Hour()<=StopTime)||UseHour==0)
        if(LIPS>TEETH&& TEETH>JAW&&DI_PLUSCurrent>18&&DI_PLUSCurrent>DI_MINUSCurrent&&MacdCurrent>MacdPrevious)                              
         {
           FirstLots = Lots();
           tp = NormalizeDouble(Ask + TakeProfitFirstOrder*Point, Digits);
           ticket = OrderSend(Symbol(), OP_BUY, FirstLots, Ask, slip, 0, tp, "1-ый ордер", Magic, 0, Blue); 
            {
             if(Bid - OrderOpenPrice() > TrailingStop*Point) 
              Trailing();
            }
         }
        if((UseHour==1&&Hour()>=StartTime&&Hour()<=StopTime)||UseHour==0)
        if(LIPS<TEETH&& TEETH<JAW&&DI_MINUSCurrent>18&&DI_MINUSCurrent>DI_PLUSCurrent&&MacdCurrent<MacdPrevious)                            
         {
           FirstLots = Lots();
           tp = NormalizeDouble(Bid - TakeProfitFirstOrder*Point, Digits);
           ticket = OrderSend(Symbol(), OP_SELL, FirstLots, Bid, slip, 0, tp, "1-ый ордер", Magic, 0, Red); 
           {
           if(OrderOpenPrice() - Ask > TrailingStop*Point)
              Trailing();
           }
         }
       }

Hier ist die Änderungsfunktion für Einzelaufträge

//+----------------------------------------------------------------------------+
//| Трейлинг стоп одиночных ордеров                                            |
//+----------------------------------------------------------------------------+
void Trailing()
{
   for(int i = OrdersTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
         {
           if(OrderType() == OP_BUY)
           {
             if(Bid - OrderOpenPrice() > TrailingStop*Point || OrderStopLoss() == 0)
             {
                if(OrderStopLoss() < Bid - (TrailingStep + TrailingStop)*Point || OrderStopLoss() == 0)
                {
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - TrailingStop*Point, Digits), tp, 0))
                    Print("Ошибка модификации ордера на покупку!");
                }
             }
           }
           if(OrderType() == OP_SELL)
           {
             if(OrderOpenPrice() - Ask > TrailingStop*Point || OrderStopLoss() == 0)
             {
                if(OrderStopLoss() > Ask + (TrailingStep + TrailingStop)*Point || OrderStopLoss() == 0)
               {
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask + TrailingStop*Point, Digits), tp, 0))
                    Print("Ошибка модификации ордера на продажу!");
               }
             }
           }
         }
      }
   }
}

Dankeschön!!!!

 
EVGENII SHELIPOV #:

Guten Tag!!!

Helfen Sie mir auf die Sprünge. Ich füge einen Trailing Stop zu einem Grid EA hinzu, bisher nur für die erste Order. Die Spur hat noch nicht ausgelöst. Was ist das Problem?

Hier ist das Codefragment, in dem einzelne Aufträge geöffnet werden

Hier ist die Änderungsfunktion für Einzelaufträge

Dankeschön!!!!

Sie können nur dann auf ein Schleppnetz zurückgreifen, wenn es keine Aufträge gibt...
 
MakarFX #:
Du hast Recht, es funktioniert... es gibt einen Fehler in den Docks.
Der Mehrwährungsmodus im Build 1345 funktioniert). Ich habe es an 10 Majors überprüft, es erhält Daten von allen 10 Paaren und zeichnet, was Sie wollen)
Und das Drücken von Knöpfen im Prüfgerät)
 
MakarFX #:
Der Schleppnetzbetreiber wird nur angerufen, wenn es keine Aufträge gibt...

Es hat sich nichts geändert

void OnTick()
{
     double JAW = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORJAW,0);
     double TEETH = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORTEETH,0);
     double LIPS = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORLIPS,0);
     double DI_PLUSCurrent=iADX(Symbol(),TimeframesIndicators,14, PRICE_CLOSE,MODE_PLUSDI,0);
     double DI_MINUSCurrent=iADX(Symbol(),TimeframesIndicators,14, PRICE_CLOSE,MODE_MINUSDI,0);
     double MacdCurrent=iMACD(Symbol(),TimeframesIndicators,12,26,9, PRICE_CLOSE,MODE_MAIN,0);
     double MacdPrevious=iMACD(Symbol(),TimeframesIndicators,12,26,9, PRICE_CLOSE,MODE_MAIN,2 ); 
     double ATR = iATR(Symbol(), TimeframesVolatility, BarCount, 0);
     if (CountTrade() == 0)
     { 
        if((UseHour==1&&Hour()>=StartTime&&Hour()<=StopTime)||UseHour==0)
        if(LIPS>TEETH&& TEETH>JAW&&DI_PLUSCurrent>18&&DI_PLUSCurrent>DI_MINUSCurrent&&MacdCurrent>MacdPrevious)                              
         {
           FirstLots = Lots();
           tp = NormalizeDouble(Ask + TakeProfitFirstOrder*Point, Digits);
           ticket = OrderSend(Symbol(), OP_BUY, FirstLots, Ask, slip, 0, 0, "1-ый ордер", Magic, 0, Blue); 
         }
        if((UseHour==1&&Hour()>=StartTime&&Hour()<=StopTime)||UseHour==0)
        if(LIPS<TEETH&& TEETH<JAW&&DI_MINUSCurrent>18&&DI_MINUSCurrent>DI_PLUSCurrent&&MacdCurrent<MacdPrevious)                            
         {
           FirstLots = Lots();
           tp = NormalizeDouble(Bid - TakeProfitFirstOrder*Point, Digits);
           ticket = OrderSend(Symbol(), OP_SELL, FirstLots, Bid, slip, 0, 0, "1-ый ордер", Magic, 0, Red); 
         }
         if (CountTrade() == 1) Trailing();

       }
 
EVGENII SHELIPOV #:

Es hat sich nichts geändert

Sie haben nichts verändert.

Ihre Konvertierung

 if (CountTrade() == 1) Trailing();

ist drinnen.

if (CountTrade() == 0)
 
Hallo, könnten Sie mir sagen, ob es möglich ist, eine einseitige (kaufen oder verkaufen) Handel in gleitende Durchschnitte-Experte für mt5 hinzufügen?
 
amsgif80 gleitende Durchschnitte-Experte für mt5 Handel hinzufügen?

Schreiben Sie es in den MQL5-Code des Expert Advisors und Sie werden diese Option haben.

 
Vladimir Karputov #:

Schreiben Sie es in den MQL5-Code des Expert Advisors und Sie werden diese Option haben.

Ich habe es versucht, aber es hat nicht funktioniert. Ich bin eine totale Null in diesem Geschäft :(
 
amsgif80 #:
Ich habe es versucht, es hat nicht funktioniert. Ich bin ein völliger Neuling darin :(
Zeigen Sie mir Ihre Versuche...
 
amsgif80 #:
Ich habe es versucht, aber es hat nicht funktioniert. Ich bin ein völliger Neuling in diesem Geschäft :(

Dies ist der Code, den ich versucht habe, einzufügen:

Am Anfang des Codes werfen diese:
enum ENUM_DIRECTION{
DIRECTION_BUY = 0, // nur kaufen
DIRECTION_SELL = 1, // nur verkaufen
DIRECTION_ANY = 2, // kaufen & verkaufen
};

input ENUM_DIRECTION inp_direction = DIRECTION_ANY; // erlaubte Handelsrichtung


weiter finden, wo im Code öffnet kaufen und wo verkaufen. Schauen Sie in die start() oder OnTick() Funktion
wo buy in den Bedingungen steht:
if(inp_direction!=DIRECTION_SELL)
wo sell in den Bedingungen steht:
if(inp_direction!=DIRECTION_BUY )

Grund der Beschwerde: