[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 530

 

...y decida - aquí está también para usted una sección de código de uno de los ILANINS de la rama "Aldeanos" - cálculo del precio medio de las órdenes de mercado y el precio objetivo del PriceTarget - esto es el nivel b/w + TP. El TP ya está a su discreción, ajústelo también a sus necesidades:

 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);
  }

En lugar de este NewOrdersPlaced () y OrderModify()

usted tendrá el nivel de dibujo (ajuste) de su línea b/u - todo el mosaico está en sus manos - editar.

 
Roman.:

Aquí está mi sección de código - responsable de la contabilidad de la pérdida total de las operaciones perdedoras consecutivas de este EA en particular (según el mago). Lo he hecho para mi versión de Avalancha de redes - ajústalo a tus necesidades - el código está comentado...

Variables globales

Este fragmento de código es seguido por un bucle a través de las órdenes abiertas de este mismo EA y calcular su beneficio total. Después, se compara este valor con la variable

y tomar una decisión.

Iteración' - variable no definida D:Programs/MetaTrader 4 - RoboForex/experts/NewCobWebPivot.mq4 (204, 3)
Iteración' - variable no definida D:\Programas\MetaTrader 4 - RoboForex\experts\NNnuevoCobWebPivot.mq4 (234, 17)
 
belck:
Iteración' - variable no definida D:Programs/MetaTrader 4 - RoboForex/experts/NewCobWebPivot.mq4 (204, 3)
Iteración' - variable no definida D:\Programas\MetaTrader 4 - RoboForex\experts\NNnuevoCobWebPivot.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;     // текущий и суммарный убыток
 

Mira la forma sencilla que te ofrece Yuri Reshetov en la página anterior.

Si no le conviene, monte un mosaico con las secciones de código que le sugieran.

También sobre el tema, podría ser útil desensamblar el código del búho completamente - de mi último post - el nivel b/w es ILANIN de la rama CELAN Double_Minus_1. Si lo desmontas hueso por hueso, te aclarará mejor la solución a tu problema, IMHO. Si vas a dibujar una línea, tienes que saber trabajar con objetos. Estas cosas, en mi opinión, no pueden ser resueltas por un "programador de nivel medio" de un vistazo y sin un empujón... :-)

Código búho en la media y b/n + TP en el tráiler.

Archivos adjuntos:
 
Roman.:

Puedes contactar conmigo en Skype: avto-personal-plus
 
Reshetov:
Esto no es un error. Los errores en el cuaderno de bitácora se marcan con iconos rojos, no amarillos.

¿Por qué no funciona entonces?
 

Aquí no tengo Skype.


Pruebe la versión simplificada, vea cómo le recomendó Yuri Reshetov en la página principal - introduzca su código justo después del mío.

Vea el código recibido completo con comentarios:


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.:

No tengo Skype.


Pruebe la versión simplificada, vea como Yuri Reshetov recomendó en la página anterior - introduzca su código justo después del mío.

Vea el código recibido completo con comentarios:



TotalCloseProfit' - variable no definida D:\Programs\MetaTrader 4 - RoboForex\experts\NNNewCobWebPivot.mq4 (251, 24)
 
belck:
TotalCloseProfit' - variable no definida D:\Programs\MetaTrader 4 - RoboForex\experts\NNNewCobWebPivot.mq4 (251, 24)

Ya lo he arreglado - inténtalo de nuevo.
 

Y lo más importante, no olvides introducir tu código de acción cuando superes el nivel de b/n aquí:

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

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


  }
}