[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 530

 

...und entscheiden Sie sich - hier ist auch für Sie ein Code-Ausschnitt aus einem der ILANINS des "Villagers"-Zweigs - Berechnung des Durchschnittspreises von Market Orders und des Zielpreises des PriceTarget - das ist der b/w Level + TP. TP liegt bereits in Ihrem Ermessen - passen Sie es auch an Ihre Bedürfnisse an:

 total=CountTrades();
      AveragePrice = 0;
      double Count = 0;
      for(cnt=OrdersTotal()-1; cnt>=0; cnt--) 
        {
         OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
         if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber) continue;
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) 
           {
            if(OrderType()==OP_BUY || OrderType()==OP_SELL) 
              {
               AveragePrice+=OrderOpenPrice()*OrderLots();
               Count+=OrderLots();
              }
           }
        }
      if(total>0) AveragePrice=NormalizeDouble(AveragePrice/Count,Digits);
      if(NewOrdersPlaced) 
        {
         for(cnt=OrdersTotal()-1; cnt>=0; cnt--) 
           {
            OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
            if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber) continue;
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) 
              {
               if(OrderType()==OP_BUY) 
                 {
                  PriceTarget= AveragePrice + TakeProfit * Point;
                  BuyTarget=PriceTarget;
                  Stopper=AveragePrice-Stoploss*Point;
                  flag=TRUE;
                 }
              }
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) 
              {
               if(OrderType()==OP_SELL) 
                 {
                  PriceTarget= AveragePrice - TakeProfit * Point;
                  SellTarget = PriceTarget;
                  Stopper=AveragePrice+Stoploss*Point;
                  flag=TRUE;
                 }
              }
           }
        }
      if(NewOrdersPlaced) 
        {
         if(flag == TRUE) 
           {
            for(cnt=OrdersTotal()-1; cnt>=0; cnt--) 
              {
               OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
               if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber) continue;
               if(OrderSymbol()== Symbol() && OrderMagicNumber() == MagicNumber) OrderModify(OrderTicket(),AveragePrice,OrderStopLoss(),PriceTarget,0,Yellow);
               NewOrdersPlaced = FALSE;
              }
           }
        }
     }
   return(0);
  }
//???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

int CountTrades() 
  {
   int count=0;
   for(int trade=OrdersTotal()-1; trade>=0; trade--) 
     {
      OrderSelect(trade,SELECT_BY_POS,MODE_TRADES);
      if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber) continue;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
         if(OrderType()==OP_SELL || OrderType()==OP_BUY) count++;
     }
   return(count);
  }

Anstelle dieser NewOrdersPlaced () und OrderModify()

Sie haben die Möglichkeit, Ihre B/U-Linie zu zeichnen (einzustellen) - das gesamte Mosaik liegt in Ihren Händen - bearbeiten.

 
Roman.:

Hier ist mein Code-Abschnitt - verantwortlich für die Bilanzierung des Gesamtverlustes von aufeinanderfolgenden Verlustgeschäften dieses speziellen EA (laut Magier). Ich habe es für meine Version von Netting Avalanche gemacht - passen Sie es an Ihre Bedürfnisse an - der Code ist auskommentiert...

Globale Variablen

Auf dieses Codefragment folgt eine Schleife über die offenen Aufträge dieses EAs, um deren Gesamtgewinn zu berechnen. Anschließend vergleichen Sie diesen Wert mit der Variablen

und eine Entscheidung treffen.

Iteration' - Variable nicht definiert D:Programs/MetaTrader 4 - RoboForex/experts/NewCobWebPivot.mq4 (204, 3)
Iteration' - Variable nicht definiert D:\Programme\MetaTrader 4 - RoboForex\experts\NewCobWebPivot.mq4 (234, 17)
 
belck:
Iteration' - Variable nicht definiert D:Programs/MetaTrader 4 - RoboForex/experts/NewCobWebPivot.mq4 (204, 3)
Iteration' - Variable nicht definiert D:\Programme\MetaTrader 4 - RoboForex\experts\NewCobWebPivot.mq4 (234, 17)

double  Level_new,  PointValue,
        lots;                       // вспомогательная переменная для расчета нового размера лота при очередной итерации
int Iteration, Counter_Loss, Ticket_at_history; // счетчик для подсчета последовательного убытка позиций колен лавины
//bool Flag_Counter_Loss = false;
double Current_Loss, Sum_Loss;     // текущий и суммарный убыток
 

Sehen Sie sich den einfachen Weg an, den Ihnen Juri Reschetow auf der vorherigen Seite vorschlägt.

Wenn Ihnen das nicht zusagt, dann setzen Sie ein Mosaik aus den von Ihnen vorgeschlagenen Codeabschnitten zusammen.

Auch zu diesem Thema könnte es nützlich sein, den Eulencode vollständig zu zerlegen - aus meinem letzten Beitrag - die s/w-Ebene ist ILANIN aus dem CELAN Double_Minus_1-Zweig. Wenn Sie es Knochen für Knochen auseinander nehmen, wird die Lösung Ihres Problems besser deutlich, IMHO. Wenn Sie eine Linie zeichnen wollen, müssen Sie wissen, wie man mit Objekten arbeitet. DIESE Dinge können, IMHO, nicht von einem "mittleren Programmierer" auf einen Blick und ohne einen Anstoß gelöst werden... :-)

Code Eule auf Mittelwertbildung und s/w + TP im Trailer.

Dateien:
 
Roman.:

Sie können mich über Skype kontaktieren: avto-personal-plus
 
Reshetov:
Dies ist kein Fehler. Fehler im Logbuch werden mit roten, nicht mit gelben Symbolen gekennzeichnet.

Warum funktioniert es dann nicht?
 

Ich habe hier kein Skype.


Probieren Sie die vereinfachte Version aus und sehen Sie, wie Juri Reschetow Sie auf der Titelseite empfohlen hat - geben Sie seinen Code direkt nach meinem ein.

Siehe den vollständigen empfangenen Code mit Kommentaren:


double  Level_new,  PointValue,
        lots;                       // вспомогательная переменная для расчета нового размера лота при очередной итерации
int Iteration, Counter_Loss, Ticket_at_history; // счетчик для подсчета последовательного убытка позиций колен лавины
//bool Flag_Counter_Loss = false;
double Current_Loss, Sum_Loss;     // текущий и суммарный убыток


int start()    // -----------------------СТАРТ ЭКСПЕРТА--------------- 
{
//---------------------расчет по истории ордеров номера очередной итерации----------------------------------------------- 
  Iteration = 0; // зануляем инерации перед их учетом в цикле по истории
  Sum_Loss = 0;  // суммарный убыток по этим итерациям

datetime 
Time_at_History_Current = 0,
Time_at_History_Previos = 0;     
 
 if(OrdersHistoryTotal() != 0)
   {
    for(int counter = OrdersHistoryTotal()-1; counter >= 0; counter--)
      {
       OrderSelect(counter, SELECT_BY_POS, MODE_HISTORY);
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
          if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            {
             if(OrderProfit() < 0) // если убыток по выбранному ордеру, то считаем суммарный и записываем время закрытия ордера
                                   // для последующего его анализа при подсчете количества итераций
                {
                 double lastLoss = OrderProfit();
                 Sum_Loss=Sum_Loss+lastLoss;  // считаем общий убыток по закрытым подряд убыточным ордерам
                 Time_at_History_Current = OrderCloseTime();
                } 
             
             //Print(" Time_at_History_Current_в цикле = ", TimeToStr(Time_at_History_Current, TIME_DATE|TIME_SECONDS));
             //Print(" Time_at_History_Previos_в цикле = ", TimeToStr(Time_at_History_Previos, TIME_DATE|TIME_SECONDS));
             
             if(Time_at_History_Current != Time_at_History_Previos) // если они не равны, то считаем итерации и делаем их равными
               {
                Time_at_History_Previos = Time_at_History_Current ;
                Iteration++;
                //Print("Iteration at History в условии сравнения  = ",  Iteration);
               }   
             else // они равны, то проверяем, дополнительно, наличие профита по выбранному следующему ордеру и выходим из цикла
               {
                if(OrderProfit() >= 0)
                  break;
               }
            }
         }
      }
   }

if (Sum_Loss < 0.0) { // Имеем убыток по закрытым позам
  if ((AccountEquity + Sum_Loss) >= AccountBalance) { // Достигли безубытка
    // Здесь какой-то код, который необходимо выполнить при достижении безубытка
  }
}


}// Конец старт
 
Roman.:

Ich habe kein Skype.


Probieren Sie die vereinfachte Version aus, wie sie Juri Reschetow auf der vorherigen Seite empfohlen hat - geben Sie seinen Code direkt nach meinem ein.

Siehe den vollständigen empfangenen Code mit Kommentaren:



'TotalCloseProfit' - Variable nicht definiert D:\Programme\MetaTrader 4 - RoboForex\experts\NewCobWebPivot.mq4 (251, 24)
 
belck:
'TotalCloseProfit' - Variable nicht definiert D:\Programme\MetaTrader 4 - RoboForex\experts\NewCobWebPivot.mq4 (251, 24)

Ich habe das Problem bereits behoben - versuchen Sie es erneut.
 

Und ganz wichtig: Vergessen Sie nicht, IHREN Aktionscode einzugeben, wenn Sie den S/W-Wert überschreiten:

if (Sum_Loss < 0.0) { // Имеем убыток по закрытым позам
  if ((AccountEquity + Sum_Loss) >= AccountBalance) 
  { 

    // Достигли безубытка
    // Здесь какой-то код, который необходимо выполнить при достижении безубытка


  }
}