Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 2377

 
vova1122 #:

Мне надо сравнить суммарный профит sell  с самым убыточным бай.  Суммарный профит суммарного селл и самого убыточного бай должен быть > например 2$. Тогда закрываем все селл и самый убыточный бай. Все! См скрин выше! Остальные бай не трогаем, закрываем только самый убыточный.

int GetOrderTicketBuy() //тикет buy
  {
   double prf=0,_prf=0;
   int ticket=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
           {
            if(OrderType()==OP_BUY)
              {
               prf=OrderProfit()+OrderSwap()+OrderCommission();
               if(prf<_prf) {_prf=prf; ticket=OrderTicket();}
              }
           }
        }
     }
   return(ticket);
  }

double GetOrderProfit() // профит всех sell
  {
   double prf=0;
   double summa=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber() == Magic)
           {
            if(OrderType()==OP_SELL)
              {
               prf=OrderProfit()+OrderSwap()+OrderCommission();
               summa=summa+prf;
              }
           }
        }
     }
   return(summa);
  }
 

Всем добрый день. Вот у меня есть код трейлинг стопа по параболику.


{ // НАЧАЛО ТРАЛ ПО ПАРАБОЛИК//-------------------------------------------------------------------------------------------------+

//+------------------------------------------------------------------+

   int    Tral = tral;
   double Sar  = iCustom(_Symbol,PeriodForWork_tral_parabolik,"Parabolic",step_tral_parabolik,max_tral_parabolik,1);
   
//+------------------------------------------------------------------+

   for(int pos=0;pos<OrdersTotal();pos++)
     {
      if(OrderSelect(pos,SELECT_BY_POS,MODE_TRADES))
      if(OrderSymbol()==_Symbol)
        {
         if(OrderType()==OP_SELL)
           {
            if(OrderOpenPrice()>Ask+Tral*Point&&OrderOpenPrice()>Sar)
              {
               if(OrderStopLoss()!= Sar&&Sar>Ask)
                 {
                  if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Sar,Digits),OrderTakeProfit(),0,clrBlack))
                    {
                     Print("Order SELL Modify",GetLastError());
                    }
                 }
              }
           }
         if(OrderType()==OP_BUY)
           {
            if(OrderOpenPrice()<Bid-Tral*Point&&OrderOpenPrice()<Sar)
              {
               if(OrderStopLoss()!= Sar&&Sar<Bid)
                 {
                  if(OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(Sar,Digits),OrderTakeProfit(),0,clrGreen))
                    {
                     Print("Order BUY Modify",GetLastError());
                    }
                 }
              }
           }
        }
     }
   if (GetLastError()==141){Alert(GetLastError()); ExpertRemove();}// ПРОВЕРКА ОТ ДОЛБАНИЯ СЕРВЕРА И БАНА СЧЁТА
   
} // КОНЕЦ ТРАЛ ПО ПАРАБОЛИК //-------------------------------------------------------------------------------------------------+ 

Подскажите пожалуйста, как переделать его в трал по пунктам?

 
DanilaMactep #:

Всем добрый день. Вот у меня есть код трейлинг стопа по параболику.


Подскажите пожалуйста, как переделать его в трал по пунктам?

Завершайте писать лапшу с лесенками кода :-)

Сделайте себе reusable функцию 

bool OrderTralStop(double price); /// перенос Стоп-Лосс на заданную цену, если новая цена корректна (выше текущей для Sell и ниже для Buy) и ближе существующего SL

и из неё :

/// трал стопа на фиксированной дистанции в пунктах
bool OrderTralStopPoints(long points) {
switch(OrderType()) {
             case OP_BUY: return OrderTralStop(Bid-points*_Point);
             case OP_SELL: return OrderTralStop(Ask+points*_Point);
        }
        return false;
}

оттуда внутри вашего цикла перебора ордеров просто вызвать:


OrderTralStopPoint(pointsToTral); // тралим стоп-лосс выбранных ордеров на дистанции pointsToTral

Порадуйте себя тем что код можно повторно использовать

 
Maxim Kuznetsov #:
OrderTralStop

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

Но у меня есть функция трейлинг стопа по параболику.

  //-----ФУНКЦИЯ ТРАЛА ПО ПАРАБОЛИКУ НАЧАЛО--------------------------------------------------------------------------------------------+
  void f__tral_po_parabolik(ENUM_TIMEFRAMES param_period_for_work_parabolik, double param_step_tral_parabolik, double param_max_tral_parabolik, int param_tral_na4alo)
  {//-{ ТРАЛА ПАРАБОЛИК НАЧАЛО------------------------------------------------------------------------------------------------+
  int tral= param_tral_na4alo;
  double sar= iCustom(Symbol(), param_period_for_work_parabolik, "Parabolic", param_step_tral_parabolik, param_max_tral_parabolik, 1);
  for(int pos= 0; pos< OrdersTotal(); pos++)
  {//--ФОР НАЧАЛО-----------------------------------------------------------------------------------------------+
  if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES))
  if(OrderSymbol()== _Symbol)
  {
  if(OrderType()== OP_SELL)
  {
  if(OrderOpenPrice()> Ask+ tral*Point && OrderOpenPrice()< sar)
  {
  if((OrderStopLoss()> sar || OrderStopLoss()== 0) && sar> Ask)
  {
  if(OrderModify(OrderTicket(),
   OrderOpenPrice(),
    NormalizeDouble(sar, Digits),
     OrderTakeProfit(),0,clrBlack))
     {
     
     PrintFormat("ORDER SELL MODIFY ", GetLastError());
     }
  }
  }
  }
  // BUY
  if(OrderType()== OP_BUY)
  {
  if(OrderOpenPrice()< Bid+ tral*Point && OrderOpenPrice()> sar)
  {
  if((OrderStopLoss()< sar || OrderStopLoss()== 0) && sar< Bid)
  {
  if(OrderModify(OrderTicket(),
   OrderOpenPrice(),
    NormalizeDouble(sar, Digits),
     OrderTakeProfit(),0,clrBlack))
     {
     
     PrintFormat("ORDER BUY MODIFY ", GetLastError());
     }
  }
  }
  }
  }
  }//---ФОР КОНЕЦ----------------------------------------------------------------------------------------------+
  
  }//--} ТРАЛА ПАРАБОЛИК КОНЕЦ-----------------------------------------------------------------------------------------------+
  
  //--------ФУНКЦИЯ ТРАЛА ПО ПАРАБОЛИКУ КОНЕЦ-----------------------------------------------------------------------------------------+

Как эту функцию из параболика переделать в трал по пунктам, одним куском кода? без хитрых вызовов одной части кода из другой части кода?

 
DanilaMactep #:


Как эту функцию из параболика переделать в трал по пунктам, одним куском кода? без хитрых вызовов одной части кода из другой части кода?


Вы пишите: "как переделать?", но подразумеваете: "переделайте!"
 
Ещё раз раз всем добрый день. Поделитесь пожалуйста кодом трейлинг стопа в пунктах.
 
У меня сейчас один индикатор рисует пользовательские свечи (indicator_chart_window), а другой индикатор в отдельном окне - объемы этих свечек (indicator_separate_window). Если попытаться нарисовать объемы в окне свечек (изменить в объемах на indicator_chart_window) , то они собою перекрывают свечки.
Можно ли как-нибудь в окне свечей создать для объемов свою фиксированную независимую шкалу, в которой бы рисовались только объемы? - чтобы свечки и объемы создавались одним индикатором, а не двумя?
 
grezky #:
У меня сейчас один индикатор рисует пользовательские свечи (indicator_chart_window), а другой индикатор в отдельном окне - объемы этих свечек (indicator_separate_window). Если попытаться нарисовать объемы в окне свечек (изменить в объемах на indicator_chart_window) , то они собою перекрывают свечки.
Можно ли как-нибудь в окне свечей создать для объемов свою фиксированную независимую шкалу, в которой бы рисовались только объемы? - чтобы свечки и объемы создавались одним индикатором, а не двумя?

Надо значения объемов привязать к нижней границе графика

double down=ChartGetDouble(0,CHART_PRICE_MIN,0);

 
Sergey Gridnev #:

Вы пишите: "как переделать?", но подразумеваете: "переделайте!"

Если я не знаю и не понимаю как переделать, то и прошу помочь мне в этом деле...

 
DanilaMactep #:

Если я не знаю и не понимаю как переделать, то и прошу помочь мне в этом деле...

Tretyakov Rostyslav #:

Надо значения объемов привязать к нижней границе графика


Т.е. ' ChartGetDouble(chart_ID,CHART_PRICE_MIN ..)' вернет минимальное значение цены на шкале графика, его нужно будет прибавить к минимальному значению объемов, в данном случае к нулю. Но все объемы придется перерисовывать по мере изменения значения ' ChartGetDouble(chart_ID,CHART_PRICE_MIN,..) '. Соответственно, если вручную изменять масштаб графика, то также объемы должны будут перерисовываться. Все верно?

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