Группа "Напишу исправлю советник индикатор MQL4"

Рейтинг 27



Исправить ошибку в советнике.

Уважаемые программисты, прошу исправить ошибку в советнике, если это попадает под категорию (простое бесплатно).

В сове. не правильно работает закрытие открытых позиций.Топик заказа zakaz.opentraders.ru/54684.html где изложено основное ТЗ.

Сейчас по сигналам индикатора открываются позиции и тут же сразу закрываются --Это не правильно!(Скрины)



Правильно будет так:

При включенной функции закрытия по сигналу, поз. должны закрываться первым противоположным сигналом(позицией). То есть открытые позиции Сел закрываются первым сигналом Бай и на оборот.!(Скрины)







Второй момент: надо проверить размер лотности. Каждая новая серия поз. Бай или Сел должна начинаться с начального минимального лота

А так же проварить правильность открытия поз. по сигналам инд. в соответствии с ТЗ.

Vertex2.mq4 (19 Kb)

Заранее огромная Благодарность!

PS: Всегда хочется иметь полноценный рабочий инструмент а не сырую заготовку.
  • +2
  • Просмотров: 1902
  • 12 июня 2020, 02:02
  • Marik007
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Напишу исправлю советник индикатор MQL4", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Трендовый Мартин
Следующая запись в группе  
Индикатор Box на Renko
09 июня 2020
18 июня 2020

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

+
0
<code>if(CloseSig>0)
        {
         if(sell)
           {
            CloseAll(0);
           }
         if(buy)
           {
            CloseAll(1);
           }</code>


Редактирован: 12 июня 2020, 08:31
avatar

  12  Slava78 Сообщений: 598

  • 12 июня 2020, 08:09
+
0
Уже лучше, работает правильнее… Но еще не совсем: выше красной линии не открывает сделки и соответственно нет закрытия предыдущих поз.

avatar

  18  Marik007 Автор Сообщений: 400 - Forexman

  • 12 июня 2020, 17:40
+
0
Ну поставили вы на М5, и что. Грааля так тем более не будет, учитывая что оба рисуют
Попробуйте так и скрин лучше делайте по-свежее

Редактирован: 12 июня 2020, 19:20
avatar

  12  Slava78 Сообщений: 598

  • 12 июня 2020, 19:11
+
0
Попробуйте так
Это был тест уже с изменениями которые вы предлагаете.

Ну поставили вы на М5, и что. Грааля так тем более не будет, учитывая что оба рисуют
Да, они рисуют, но в моменте цена закрывается так как нужно, ниже и выше линий индикатора FL01.

Я тестировал на М5, что бы увеличить частоту сделок, так как на большем тайм-фрейме дольше ждать сигнала.
Нужно что бы позиции открывались и закрывались по ТЗ.

Сделайте пожалуйста, если для вас не сложно и попробуйте протестировать что бы проверить функционал
Заранее благодарен)

PS. Думаю, что не открывается выше красной линии, ибо набрано кол-во позиций buy (как в настройках 10 шт.). Со следующий Sell считает как продолжение buy`ёв, а так как уже кол-во buy набрано, то и sell не открывает
Так что наверное нужно что бы считало кол-во позиций sell и buy отдельно
Редактирован: 12 июня 2020, 22:23
avatar

  18  Marik007 Автор Сообщений: 400 - Forexman

  • 12 июня 2020, 22:16
+
0
bool buy = (blu>LineValue && Bid<dn) || (red>LineValue && Bid>dn && Bid<up);
   bool sell = (red>LineValue && Bid>up) || (blu>LineValue && Bid>dn && Bid<up);
avatar

  12  Slava78 Сообщений: 598

  • 12 июня 2020, 08:29
+
0
Slava78 указал что поменять в коде чтобы закрытие было по обратному сигналу

avatar

  15  forextime Сообщений: 141 - ExpertFX

  • 12 июня 2020, 12:07
+
0
Благодарю, буду пробовать…
avatar

  18  Marik007 Автор Сообщений: 400 - Forexman

  • 12 июня 2020, 12:22
+
0
У меня работает. Проверьте настройки
avatar

  12  Slava78 Сообщений: 598

  • 13 июня 2020, 09:29
+
0
У меня работает.

У меня работает, но не всегда.

Работает если, кол-во поз. одного направления не превышает указанного в настройках значения, тогда закрывает.

1)Не закрывает серию поз. если: До появления противоположного сигнала, уже в рынке есть кол-во поз.(на пример, как в настройках 10 шт.) одного из направлений.

Нужно сделать, что бы после набранного кол-ва поз.(в настройках)он мог бы открыть противоположную позу, при наличии на то сигнала.И это будет дополнительным условием на закрытие серии, противоположным сигналом.

2)Также, не мало важный момент, не корректная лотность позиций при смене направления с Бай на Сел( и наоборот) то есть на пример:
--Торгует Бай, последний ордер Бай=0,5 лота, следующий по сигналу открывает Сел=0,6 лота, а должен открыть Сел=0,1 лот! Начальный стартовый лот!

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

За ранее Благодарен!!!

avatar

  18  Marik007 Автор Сообщений: 400 - Forexman

  • 13 июня 2020, 19:17
+
0
Скажу наверняка. Сделать полноценного робота стоит денег. Мне нужны бывают роботы для проверки ТС. На этом все*friends* 
avatar

  12  Slava78 Сообщений: 598

  • 13 июня 2020, 20:50
+
0
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int FindOrderType()
  {
   int oticket,ticketNumber=0,type=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            oticket=OrderTicket();
            if(oticket>ticketNumber)
              {
               ticketNumber=oticket;
               type=OrderType();
              }
           }
        }
     }
   return(type);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   if(BULevel>0)
      BU();
   if(TrailingStop>0)
      Trailing();
   if((AllProfit()>Profit && Profit>0) || (AllProfit()<-Loss && Loss>0))
      CloseAll();
   static datetime last_open_time = 0;
   if(Time[0] < last_open_time + 2*PeriodSeconds()) return;
   
   double up = iCustom(NULL,0,IndName2,"",HalfLength,MAPeriod,Price,ATRMultiplier,ATRPeriod,1,Shift);
   double dn = iCustom(NULL,0,IndName2,"",HalfLength,MAPeriod,Price,ATRMultiplier,ATRPeriod,2,Shift);

   double blu = iCustom(NULL,0,IndName,TrendPeriod,ForcePeriod,LineValue,VerticalShift,2,Shift);
   double red = iCustom(NULL,0,IndName,TrendPeriod,ForcePeriod,LineValue,VerticalShift,1,Shift);

   bool buy = (blu>LineValue && Bid<dn) || (red>LineValue && Bid>dn && Bid<up);
   bool sell = (red>LineValue && Bid>up) || (blu>LineValue && Bid>dn && Bid<up);

   if(CountTrades()<1)
     {
      if(last_open_time!= Time[0] && buy) {PutOrder(0,Ask); last_open_time = Time[0];}
      if(last_open_time!= Time[0] && sell) {PutOrder(1,Bid); last_open_time = Time[0];}
     }   
   if(CloseSig>0)
        {
         if(sell) CloseAll(0);   
         if(buy) CloseAll(1);     
        }
   if(CountTrades()<Count)
     {
      if(FindOrderType()==0 && (FindLastBuyPrice()-Ask)/Point>=20 && buy)
        {
         PutOrder(0,Ask);
        }
      if(FindOrderType()==1 && (Bid-FindLastSellPrice())/Point>=20 && sell)
        {
         PutOrder(1,Bid);
        }
     }

   Comment("\n Lot: ",Lot(),
           "\n Profit: ",AllProfit(),
           "\n Vert Red: ",red,
           "\n Vert Blue: ",blu);
  }
//+------------------------------------------------------------------+
avatar

  12  Slava78 Сообщений: 598

  • 13 июня 2020, 21:08
+
0
Замени на этот код с 251 строки до конца. Может понравится
avatar

  12  Slava78 Сообщений: 598

  • 13 июня 2020, 21:10
+
0
Slava, лотность стала правильная!*good* А вот ордера он стал сыпать пачками на одной свече… что то пошло не так!?*???* 

avatar

  18  Marik007 Автор Сообщений: 400 - Forexman

  • 14 июня 2020, 00:41
+
0
Шаг увеличь в усредняющих ордерах
avatar

  12  Slava78 Сообщений: 598

  • 14 июня 2020, 05:55
+
0
А можно в MQL файле скинуть тут или в базу?
avatar

  11  Sam34 Сообщений: 143 - Sem34

  • 17 июня 2020, 12:54
+
0
… присоединяюсь к этой просьбе. В советнике всего 305 строк.
Где находится полный файл?
Загрузите, пожалуйста сюда.
avatar

  10  Felice Сообщений: 43

  • 22 ноября 2021, 00:45

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