GAWroch
Вячеслав

 
Уровень 18

  Торгую в компаниях:


Группа "Стол заказов MQL"

Рейтинг 2072



РЕКОМЕНДУЮ



Исправить советник - усреднитель

Добрый день. При использовании советника Usrednitel25.zip (2 Kb) столкнулся с такой трудностью. При прогоне в тестере всё ОК. При использовании только советника всё ОК. Но стоит открыть позицию вручную или другим советником усреднитель перестает работать корректно. Он видит чужие ордера. Никаких действий с чужими ордерами он не производит, но он их считает и начинает работать как обычный усреднитель. Большая просьба откорректировать работу совы.
  • 0
  • Просмотров: 2812
  • 23 января 2019, 17:16
  • GAWroch
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Добавить алерт в индикатор
Следующая запись в группе  
Доработка
22 января 2019
23 января 2019

Комментарии (16)

+
0
на 1-е
avatar

  34  AM2 Сообщений: 15814 - Андрей

  • 23 января 2019, 17:20
+
0
замените этот блок:


//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double FindLastBuyPrice()
  {
   int oticket,ticketNumber=0;
   double oprice=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderType()==OP_BUY && OrderMagicNumber()==Magic)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               oprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oprice);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double FindLastSellPrice()
  {
   int oticket,ticketNumber=0;
   double oprice=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderType()==OP_SELL && OrderMagicNumber()==Magic)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               oprice=OrderOpenPrice();
              }
           }
        }
     }
   return(oprice);
  }
avatar

  34  AM2 Сообщений: 15814 - Андрей

  • 23 января 2019, 17:24
+
0
Быстро… Сейчас попробую.
avatar

  18  GAWroch Автор Сообщений: 84 - Вячеслав

  • 23 января 2019, 17:39
+
0
Заменил указанную часть кода. Проблема осталась. Видит локирующий ордер и не считает как надо.
avatar

  18  GAWroch Автор Сообщений: 84 - Вячеслав

  • 23 января 2019, 17:55
+
0
Возможно тут причина…
double AllProfit2()
  {
   double pr=0;
   int second=OrdersTotal()-1-Second;
   for(int i=OrdersTotal()-1;i>second;i--)
avatar

  18  GAWroch Автор Сообщений: 84 - Вячеслав

  • 23 января 2019, 17:57
+
0
тогда опишите полностью какие локи ордера в рынке, когда неверно работает. буду смотреть 1-го. и скрины приведите
avatar

  34  AM2 Сообщений: 15814 - Андрей

  • 24 января 2019, 01:11
+
0
Пошагово.
Запускаем сов., он открывает ордер согласно настройкам. Непонятно, почему в строке «Second» -1, хотя по логике должно быть -2.

Скриптом открываем второй ордер на этой же паре, с тем же магиком. В строке «Second» значение не верно.

На любой другой паре открываем ордер вручную без разницы в каком направлении. Строка «Profit2» обнуляется, сов перестает его считать и не закроет ордер «Second» при наступлении заданных условий. Хотя усреднение будет происходить согласно заданному шагу и свой «Ptrofit» считает верно.

Тоже самое будет если вручную или каким либо другим совом открыть ордер на этой паре.

Если обобщить — работу советника нарушает любой, открытый не советником, ордер в терминале, в не зависимости от магика. Вот эту накладочку и прошу исправить.

avatar

  18  GAWroch Автор Сообщений: 84 - Вячеслав

  • 24 января 2019, 07:12
+
0
В подсчёте ордеров ошибка
avatar

  13  axe44 Сообщений: 1149 - Алек

  • 27 января 2019, 00:09
комментарий был удален 2019-01-30 06:31:53 GAWroch

+
0
Заменить части кода:
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll2()
  {
   bool cl;
   int second=CountTrades()-1-Second;
   for(int i=CountTrades()-1;i>second;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }

//+------------------------------------------------------------------+
//| Профит всех ордеров по типу ордера                               |
//+------------------------------------------------------------------+
double AllProfit2()
  {
   double pr=0;
   int second=CountTrades()-1-Second;
   for(int i=CountTrades()-1;i>second;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0)
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }

            if(OrderType()==1)
              {
               pr+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return(pr);
  }


avatar

  18  GAWroch Автор Сообщений: 84 - Вячеслав

  • 28 января 2019, 06:45
+
0
Comment("\n Lot: ",Lot(),
           "\n Trades: ",CountTrades(),
           "\n Profit: ",AllProfit(),
           "\n Profit2: ",AllProfit2(),
           "\n Second: ",CountTrades()-Count);


avatar

  18  GAWroch Автор Сообщений: 84 - Вячеслав

  • 28 января 2019, 06:46
+
0
К сожалению при тестировании выявлены те же косяки. Без помощи Андрея не обойтись.
avatar

  18  GAWroch Автор Сообщений: 84 - Вячеслав

  • 30 января 2019, 05:42
+
0
дайте на него ссылку в базе, чтобы обновлять
avatar

  34  AM2 Сообщений: 15814 - Андрей

  • 30 января 2019, 13:43
+
0
Он видит чужие ордера. Никаких действий с чужими ордерами он не производит, но он их считает и начинает работать как обычный усреднитель


проверил, не считает.

советник открыл позу:


я открыл вручную, все тоже:



avatar

  34  AM2 Сообщений: 15814 - Андрей

  • 30 января 2019, 14:03
+
0
переписал некоторые функции. по 2 штуки с краю также откусывает:



www.opentraders.ru/downloads/2186/

avatar

  34  AM2 Сообщений: 15814 - Андрей

  • 30 января 2019, 14:54
+
0
Откусывать по 2 ордера не очень целесообразно. При резком однонаправленном движении цены получаются пропуски. Логичнее откусывать крайние ордера, по одному. Переписанный буду смотреть. Спасибо.
avatar

  18  GAWroch Автор Сообщений: 84 - Вячеслав

  • 30 января 2019, 15:00

Зарегистрируйтесь или авторизуйтесь, чтобы оставить комментарий
Начать торговлю с Альпари