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

 

Für einen Prüfer bedeutet dies

OrderSend

tut und sogar auf schnellen Servern funktioniert, aber wenn man kein Tester ist, ist es besser, es nach der Dokumentation zu machen :)

 
Leute, ich brauche Hilfe, ich bin seit ein paar Tagen nicht in der Lage, die notwendigen Änderungen an dem folgenden Code vorzunehmen:
void start()
{
   StopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL); 
   
   // Определение направления пересечения мувингов
   if (Init) InitMetod(); 
   
   // Трейлинг стоп открытых позиций
   if (Trailing != 0 ) RealTrailOrder(TrailStop, TrailStep, StopLevel, MagicNumber);
   
   // Ожидание нового бара на графике
   if(timeprev == Time[0]) return;
   timeprev = Time[0];
   
   // Открытие ордера по методу Пуриа
   CheckForOpen();
}
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen() // Открытие ордера по методу Пуриа
{
   double malw,mas1,mas2,macd;
   int    res;  
   // Считывание параметров индикаторов
   malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0);
   mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0);
   mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0);
   macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,0);
  
   // Проверяем положение мувмнгов
   if(malw>mas1 && malw>mas2  && OrderSell)
     {
     OrderBuy=true;
     OrderSell=false;
     Order=true;
     }
   
   if(malw<mas1 && malw<mas2  && OrderBuy)
     {
     OrderBuy=false;
     OrderSell=true;
     Order=true;
     }

   // Открываем ордер Buy
   if(macd>0 && OrderBuy && Order)
     {
     res=OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue);
     Order=false;
     return;
     }     
   // Открываем ордер Sell   
   if(macd<0 && OrderSell && Order)
     {
     res=OrderSend(Symbol(),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red);
     Order=false;
     return;
     }
 
}  
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double Lots()  // Расчет объема лота
{
   double Lots;
   if (Lot > 0) return(Lot);
   Lots=AccountFreeMargin()/5000;
   Lots=MathMin(15,MathMax(0.01,Lots));
   if(Lots<0.1) Lots=NormalizeDouble(Lots,2);
   else 
     {
     if(Lots<1) Lots=NormalizeDouble(Lots,1);
     else       Lots=NormalizeDouble(Lots,0);
     }
   return(Lots);
}
//+------------------------------------------------------------------+
//| Init metod Puria function                                        |
//+------------------------------------------------------------------+
void InitMetod()  // Опредеоение начального пересечения мувингов
{
   double malw,mas1,mas2;
   malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0);
   mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0);
   mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0);

   if((malw<=mas1 && malw>=mas2) || (malw>=mas1 && malw<=mas2))
     {
     Init=false;
     OrderBuy=true;
     OrderSell=true;
     }   
   return;
}

Eigentlich, was ich versucht, aber konnte nicht hier hinzufügen: machen die EA warten auf 4 Kerze offen Preise in einer Reihe, nachdem alle Indikatoren (Kerze offen Preise ) übereinstimmen:


  1. 1. der Eröffnungskurs der ersten Kerze - (5) über (75) und (85) + MACD-Balken über 0 geöffnet - 1 von 4 Bestätigungen ist;
    2. der Eröffnungskurs der zweiten Kerze - (5) über (75) und (85) + MACD-Balken über 0 geöffnet- 2 von 4 Bestätigungen ist;
    3.Der Eröffnungskurs der 3. Kerze - (5) über (75) und (85) + MACD-Balken über 0 geöffnet- 3 von 4 Bestätigungen ja;
    4. Der Eröffnungskurs der 4. Kerze - (5) über (75) und (85) + MACD-Balken über 0 geöffnet- 4 von 4 Bestätigungen ja- Handel eröffnen, um auf derselben Kerze (4.) zu kaufen.

Die gleiche Situation mit Verkaufsaufträgen, nur in die andere Richtung sollten Indikatoren öffnen. Und es gibt einen wichtigen Punkt - wenn, sagen wir, in irgendeiner Phase von der 1. Kerze bis zur 4., die Indikatoren ihre Position ändern(z.B. auf der 3. Eröffnungskerze, der MACD-Balken öffnet entweder unter 0, oder = 0) - dann wird alles zurückgesetzt, weil die Signale nicht auf der Eröffnung der 4-th Kerze in einer Reihe überprüft wurden.

Bitte beraten Sie, erfahrene Programmierer, was muss im Code geändert werden, damit diese Bedingungen funktionieren? Ich habe viele Dinge ausprobiert, und ich weiß nicht...

 
   if(malw>mas1 && malw>mas2  && OrderSell)

Wie man so schön sagt: Verlassen Sie sich nicht auf unser Wort.

OrderSell

Keine Ahnung, was da drin sein könnte, teilen Sie die Entscheidungslogik im Code.

 

artem artem #:

Der Eröffnungskurs der 1. Kerze - (5) über (75) und (85) + MACD-Balken eröffnet über 0 - 1 von 4 Bestätigungen ja;

2 Der Eröffnungskurs der 2. Kerze - (5) über (75) und (85) + MACD-Balken über 0 eröffnet- 2 von 4 Bestätigungen ja;

3 Der Eröffnungskurs der 3. Kerze - (5) über (75) und (85) + MACD-Balken eröffnet über 0- 3 von 4 Bestätigungen ist;

4 Der Eröffnungskurs der 4. Kerze - (5) über (75) und (85) + MACD-Balken über 0 eröffnet- 4 von 4 Bestätigungen ja- Eröffnen Sie einen Handel zum Kauf auf derselben Kerze (4.).

    //+------------------------------------------------------------------+
    //| Expert tick function                                             |
    //+------------------------------------------------------------------+
    void OnTick()
      {
    //---
       if(CheckForOpen()==0)
         {
          if(OrderSend(Symbol(),OP_BUY,Lots(),Ask,Slip,Bid-StopLoss*Point,Ask+TakeProfit*Point,"",MagicNumber,0,Blue)) Print("BUY OK");
         }
       if(CheckForOpen()==1)
         {
          if(OrderSend(Symbol(),OP_SELL,Lots(),Bid,Slip,Ask+StopLoss*Point,Bid-TakeProfit*Point,"",MagicNumber,0,Red)) Print("SELL OK");
         }
      }
    //+------------------------------------------------------------------+
    //| Check for open order conditions                                  |
    //+------------------------------------------------------------------+
    int CheckForOpen() // Открытие ордера по методу Пуриа
      {
       double malw,mas1,mas2,macd;
       int    res=-1, buy=0, sell=0;
       // Считывание параметров индикаторов 3 свечи
       malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,3);
       mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,3);
       mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,3);
       macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,3);
       if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;}
       if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;}
       // Считывание параметров индикаторов 2 свечи
       malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,2);
       mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,2);
       mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,2);
       macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,2);
       if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;}
       if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;}
       // Считывание параметров индикаторов 1 свечи
       malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,1);
       mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,1);
       mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,1);
       macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,1);
       if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;}
       if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;}
       // Считывание параметров индикаторов 0 свечи
       malw=iMA(NULL,0,MovingPeriodLw,0,MODE_EMA,PRICE_CLOSE,0);
       mas1=iMA(NULL,0,MovingPeriodS1,0,MODE_LWMA,PRICE_LOW,0);
       mas2=iMA(NULL,0,MovingPeriodS2,0,MODE_LWMA,PRICE_LOW,0);
       macd=iMACD(NULL,0,15,26,1,PRICE_CLOSE,MODE_MAIN,0);
       if(malw>mas1&&malw>mas2&&macd>0) {buy+=1; sell=0;}
       if(malw<mas1&&malw<mas2&&macd<0) {buy=0; sell+=1;}
       
       if(buy ==4) res=0;
       if(sell==4) res=1;
       return(res);
      }
     
    malw

    Einen Wert mit einem anderen verrechnen, nichts? Ersten Block teilen = Lösung, zweiten Block teilen = Lösung, Blöcke vergleichen.

     
    Volodymyr Zubov #:

    Einen Wert mit einem anderen verrechnen, nichts? Ersten Block teilen = Lösung, zweiten Block teilen = Lösung, Blöcke vergleichen.

    An wen oder an was ist das geschrieben?
     
    Es stellt sich heraus, dass Sie
    malw
    im Code haben und dort ein logischer Fehler auftritt.
     
    Volodymyr Zubov #:
    Es stellt sich heraus, dass Sie im Code einen logischen Fehler haben.
    Prüfen Sie, bevor Sie schreiben
     

    OK, aber die Variablen werden abstürzen, wenn Sie sie auf diese Weise verwenden, und dann werden Sie nicht wissen, was die "Wunder" sind

     
    Volodymyr Zubov #:

    OK, aber die Variablen werden abstürzen, wenn Sie sie auf diese Weise verwenden, und dann werden Sie nicht wissen, was die "Wunder" sind.

    Wenn Sie eine andere Möglichkeit kennen, schreiben Sie sie auf...

    Sie können Menschen helfen.)