[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 530

 

...и принимаете решение - вот также для Вас участок кода одного из ИЛАНИНОВ ветки "Селян" - расчет средней цены рын ордеров и целевой цены ПрайсТаргет - это уровень б/у + ТР. ТР уже на Ваше усмотрение - правьте также под Ваши нужды:

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

Вместо этой ф-ии NewOrdersPlaced () и ОrderModify()

у Вас будет уровень рисования (выставления) Вашей линии б/у - вся мозаика у Вас в руках - правьте.

 
Roman.:

Вот мой участок кода - отвечающий за учет общего убытка последовательных убыточных сделок именно этого эксперта (в соответствии с магиком). Я его сделал для своего варианта неттинговой Лавины - правьте под свои нужды - код закомментирован...

Глобальные переменные

После этого участка кода - также идете циклом уже по открытым ордерам именно этого советника и считаете их общий профит. После чего сравниваете это значение с переменной

и принимаете решение.

'Iteration' - variable not defined D:\ïðîãðàììû\MetaTrader 4 - RoboForex\experts\NewCobWebPivot.mq4 (204, 3)
'Iteration' - variable not defined D:\ïðîãðàììû\MetaTrader 4 - RoboForex\experts\NewCobWebPivot.mq4 (234, 17)
 
belck:
'Iteration' - variable not defined D:\ïðîãðàììû\MetaTrader 4 - RoboForex\experts\NewCobWebPivot.mq4 (204, 3)
'Iteration' - variable not defined D:\ïðîãðàììû\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;     // текущий и суммарный убыток
 

Посмотрите простой путь, предложенный Вам Юрием Решетовым на пред. страничке.

Если он Вас не устраивает, то собирайте мозаику из предложенных Вам участков кода.

Также по данному вопросу будет, возможно, полезным разобрать полностью код сова - из последнего моего поста - уровень б/у - это ИЛАНИН с ветки СЕЛЯН Double_Minus_1. Если его разберете по костчкам, то и более лучше прояснится решение Вашей задачи, ИМХО. Если будете рисовать линию, то здесь уже необходимо уметь работать с объектами. ТАКИЕ вещи, ИМХО, "спецом (программистом) среднего уровня" сходу и нахрапом не решаются... :-)

Код сова на усреднении и выставлении б/у + ТР в прицепе.

Файлы:
 
Roman.:

можешь со мной по скайпу связаться: avto-personal-plus
 
Reshetov:
Это не ошибка. Ошибки в журнале помечаются красными, а не желтыми значками.

А почему тогда не работает?
 

У меня скайпа здесь нет.


Пробуйте в упрощенном варианте, см. как тебе рекомендовал Юрий Решетов на пред страничке - его код вбей сразу после моего.

Смотри полностью полученный код с комментариями:


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

У меня скайпа нет.


Пробуйте в упрощенном варианте, см. как тебе рекомендовал Юрий Решетов на пред страничке - его код вбей сразу после моего.

Смотри полностью полученный код с комментариями:



'TotalCloseProfit' - variable not defined D:\ïðîãðàììû\MetaTrader 4 - RoboForex\experts\NewCobWebPivot.mq4 (251, 24)
 
belck:
'TotalCloseProfit' - variable not defined D:\ïðîãðàììû\MetaTrader 4 - RoboForex\experts\NewCobWebPivot.mq4 (251, 24)

Я уже исправил - пробуй еще раз.
 

Главное - не забудь внести СВОЙ КОД действий при превышении уровня б/у сюда:

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

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


  }
}
Причина обращения: