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

 
Alexander Antoshkin:

Чего вы можете...?

Подсчитать  сколько хоббитов нужно, чтобы сменить лампочку?

Отправить в фриланс? Написать " прочитаете  там"?

Как мне найти в истории координату  сделки закрытия серии ордеров  как на примере (планирую на этом месте  отрисовать линию)

на 151 страницы  этой ветки я уже задавал вопрос но так вразумительного решения  не найдено  .https://www.mql5.com/ru/forum/160683/page151



Ищете в истории серию ордеров с одинаковым баром закрытия. Время этого бара и будет искомым.
 
Alexander Antoshkin:

Чего вы можете...?

Подсчитать  сколько хоббитов нужно, чтобы сменить лампочку?

Отправить в фриланс? Написать " прочитаете  там"?

МыМожемМногое:) 

Задача про хоббитов не имеет однозначного решения...

Если Вы не поняли, то мой ответ был из того же видео, что и процитировал Vitalie Postolache

А если серьезно:

Как мне найти в истории координату  сделки закрытия серии ордеров  как на примере (планирую на этом месте  отрисовать линию)

на 151 страницы  этой ветки я уже задавал вопрос но так вразумительного решения  не найдено  .https://www.mql5.com/ru/forum/160683/page151

Ветку по ссылке не читал. Но сделал бы так:

Определяете факт закрытия нескольких ордеров (одного или разных типов) в пределах Х пунктов (диапазон Х пунктов нужен для того, что в реальности все сделки могут по одной цене и не закрыться), определяете среднюю цену закрытия и по ней рисуете линию.

 
Artyom Trishkin:
Ищете в истории серию ордеров с одинаковым баром закрытия. Время этого бара и будет искомым.
Тут та же проблема, что и в моем методе решения: в зависимости от пинга и количества ордеров все сделки на одной свече могут и не закрыться...
 
Alexey Kozitsyn:
Тут та же проблема, что и в моем методе решения: в зависимости от пинга и количества ордеров все сделки на одной свече могут и не закрыться...
Для М1 согласен. Для остальных - маловероятно. Если только перед открытием свечи приказ на закрытие пришёл. Будет два набора ордеров. Брать последний из двух смежных.
 
Artyom Trishkin:
Для М1 согласен. Для остальных - маловероятно. Если только перед открытием свечи приказ на закрытие пришёл. Будет два набора ордеров. Брать последний из двух смежных.

Тут для решения дали мало данных: может быть закрыто несколько пачек на одной свече (если проверять, скажем, на часовых или дневных свечах).

 
Vitalie Postolache:


Мне нужны параллельные красные прямые, но чтобы они пересекались и чтобы три их них были зелёные, а остальные - фиолетовые )))

А, да, и чтобы одна прямая в форме котёнка была!

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

 
Alexey Kozitsyn:

Тут для решения дали мало данных: может быть закрыто несколько пачек на одной свече (если проверять, скажем, на часовых или дневных свечах).

в любом случае  чем точней тем лучше ..

в том варианте что у меня  ордера закрываются по условию  трейлигстопа в без убытке

т,е

 if(b+s>0)
     {
      for(i=0; i<OrdersTotal(); i++)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
           {
            if(OrderSymbol()==Symbol() && Magic==OrderMagicNumber())
              {
               tip = OrderType();
               OSL = NormalizeDouble(OrderStopLoss(),Digits);
               OTP = NormalizeDouble(OrderTakeProfit(),Digits);
               OOP = NormalizeDouble(OrderOpenPrice(),Digits);
               SL=OSL;
               if(tip==OP_BUY)
                 {
                  SL=NormalizeDouble(Bid-TrailingStop*Point,Digits);
                  if(SL>OSL && SL>NLb)
                    {
                     if(!OrderModify(OrderTicket(),OOP,SL,0,0,White)) Print("Error Order Modify ",GetLastError());
                    }
                 }
               if(tip==OP_SELL  )
                 {
                  SL=NormalizeDouble(Ask+TrailingStop*Point,Digits);
                  if((SL<OSL || OSL==0) && SL<NLs)
                    {
                     if(!OrderModify(OrderTicket(),OOP,SL,0,0,White)) Print("Error Order Modify ",GetLastError());
                    }

 
Alexey Kozitsyn:
Напишите свой индикатор МА, который будет включать в себя дополнительный буфер, значения в который заносятся в момент формирования нового бара.

 Хотелось бы обсудить алгоритм решения вопроса, в том числе для разных методов усреднения скользящих средних.

 
Alexey Kozitsyn:

МыМожемМногое:)

Определяете факт закрытия нескольких ордеров (одного или разных типов) в пределах Х пунктов (диапазон Х пунктов нужен для того, что в реальности все сделки могут по одной цене и не закрыться), определяете среднюю цену закрытия и по ней рисуете линию.

int TotalPos=-1;

void start()
{
  if(OrdersTotal()!=TotalPos) { // не мучаем каждый тик
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      History();
     }
  }}} TotalPos=OrdersTotal(); // запомним количество
//--
} 
 
 void History() {
  string Ticket=(string)OrderTicket();
  color col=Red;
  if(OrderType()==0)col=Blue;
  datetime a=OrderOpenTime();
  double b=OrderOpenPrice();
  datetime c=OrderCloseTime();
  double d=OrderClosePrice();
  double prSep=OrderProfit()+OrderCommission()+OrderSwap();
  double prAll=0;
  int    cn=0;
  string hTicket;
   for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
    if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
     if(OrderSymbol()==Symbol() && OrderType()<=1) {
      datetime ct=OrderCloseTime();
      // 60 секунд разницы между закрытием первой и последней в сетке
      if(c<=ct+60 && c>=ct-60) {
        prAll+=OrderProfit()+OrderCommission()+OrderSwap();
        hTicket=(string)OrderTicket();
        cn++;
      }
   }}}
   ObjectCreate(Ticket+'Open',OBJ_ARROW,0,a,b);
   ObjectSet(Ticket+'Open',OBJPROP_COLOR,col);
   ObjectSet(Ticket+'Open',OBJPROP_ARROWCODE,1);
      
   ObjectCreate(Ticket+'Line',OBJ_TREND,0,a,b,c,d);
   ObjectSet(Ticket+'Line',OBJPROP_COLOR,col);
   ObjectSet(Ticket+'Line',OBJPROP_WIDTH,1);
   ObjectSet(Ticket+'Line',OBJPROP_STYLE,STYLE_DOT);
   ObjectSet(Ticket+'Line',OBJPROP_RAY,0);
      
   ObjectCreate(Ticket+'Close',OBJ_ARROW,0,c,d);
   ObjectSet(Ticket+'Close',OBJPROP_COLOR,Green);
   ObjectSet(Ticket+'Close',OBJPROP_ARROWCODE,3);
  
   Ticket=cn>1?hTicket:Ticket;
   ObjectCreate(Ticket+'Profit',OBJ_TEXT,0,c,d);
   ObjectSet(Ticket+'Profit',OBJPROP_ANCHOR,0);
   ObjectSetText(Ticket+'Profit',DoubleToString(prAll,2),10,'Arial',White);
   ObjectSet(Ticket+'Profit',OBJPROP_PRICE1,d);
   ObjectSet(Ticket+'Profit',OBJPROP_TIME1,c+Period()*60*2);

это к  скрипту   надо как то  прикрутить  ..

с учетом того что,  если серия  закрытия ордеров  Sell

 ObjectCreate(Ticket+'Долг Б',OBJ_HLINE,0,0,d);
   ObjectSet(Ticket+'Долг Б',OBJPROP_COLOR,LimeGreen);
   ObjectSet(Ticket+'Долг Б',OBJPROP_WIDTH,1);

если серия  закрытия ордеров  бай

   ObjectCreate(Ticket+'Долг М',OBJ_HLINE,0,0,d);
   ObjectSet(Ticket+'Долг М',OBJPROP_COLOR,Red);
   ObjectSet(Ticket+'Долг М',OBJPROP_WIDTH,1);

Поможите?
 
-Aleks-:

 Хотелось бы обсудить алгоритм решения вопроса, в том числе для разных методов усреднения скользящих средних.

Посмотрите файл MovingAverages.mqh папки Include терминала. 
Причина обращения: