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

Рейтинг 24



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

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

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

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



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

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







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

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

Vertex2.mq4 (19 Kb)

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

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

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

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

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


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

  7  Slava78 Сообщений: 415

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

avatar

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

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

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

  7  Slava78 Сообщений: 415

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

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

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

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

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

  13  Marik007 Автор Сообщений: 311 - 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

  7  Slava78 Сообщений: 415

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

avatar

  11  forextime Сообщений: 112 - ExpertFX

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

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

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

  7  Slava78 Сообщений: 415

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

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

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

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

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

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

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

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

avatar

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

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

  7  Slava78 Сообщений: 415

  • 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

  7  Slava78 Сообщений: 415

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

  7  Slava78 Сообщений: 415

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

avatar

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

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

  7  Slava78 Сообщений: 415

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

  9  Sam34 Сообщений: 115 - Sem34

  • 17 июня 2020, 12:54

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