vadimltd
Вадим

 
Уровень 8

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


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

Рейтинг 2146



РЕКОМЕНДУЮ



Советник No Loss

Здравствуйте Андрей.

Прошу написать советник по одному индикатору. Это вполне достаточно, так как много индикаторов в стратегии, так и не дают достойного входа в рынок. Основное — математика.
И так вот моя арифметика.
Покупки по сигналу синей точки.
Продажи по сигналу красной точки
Вход в рынок бару (установить в настройках советника).
Алгоритм торговли:
Вход в рынок.
Советник торгует одновременно как покупками, так и продажами. Если появилась точка на покупку, значит покупает. Если появилась точка на продажу, а покупка ещё в действии, значит продаёт.
Закрытие ордера по профиту, указанного в советнике в долларах.
Если цена ушла в другую сторону, подключается система мартингейла.
Суть системы в советнике такова.
На примере продаж.

Открывается ордер на продажу SELL-1. Цена пошла вверх. Далее по сигналу открывается ордер на продажу SELL-2 (с умножением). Цена пошла вверх. Далее по сигналу открывается ордер на продажу SELL-3, SELL-4 и т.д. (количество ордеров указывается в настройках советника).
Закрытие ордеров осуществляется по указанному профиту в советнике, но ЧАСТЯМИ. А именно — если сумма профита 1-го ордера и последнего равняется указанному в советнике, значит эти два ордера закрываются. Оставшихся ордера торгуют по такому принципу (1-й и последний по профиту закрываются). Если в рынке остаётся один ордер, он либо набирает нужный профит и закрывается, или же, открывается следующий ордер, и торговля идёт по тому самому принципу.
В советнике присутствуют такие настройки:
Лот
Умножение лота
Максимальный лот
Количество лотов (заданное количество лотов одного направления)
Профит
Профит мартингейла (это профит закрытия 1-го и последнего ордера)
Время торговли
Бар индикатора (на каком баре входить в рынок)
Проскальзывание
Магик
Комментарий

Индикатор во вложении.
mostapha no loss v2.ex4 (7 Kb)
  • 0
  • Просмотров: 2380
  • 18 февраля 2022, 23:07
  • vadimltd
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

Вступите в группу "Стол заказов MQL", чтобы следить за обновлениями
ПРИСОЕДИНИТЬСЯ К ГРУППЕ
присоединиться
  Предыдущая запись в группе
Простой советник для МТ 5
Следующая запись в группе  
Доработать советник RollBack
18 февраля 2022
20 февраля 2022

Брокер для ваших роботов, 15 лет на рынке

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

+
0
avatar

  35  AM2 Сообщений: 16247 - Андрей

  • 19 февраля 2022, 08:14
+
0
Спасибо!
avatar

  8  vadimltd Автор Сообщений: 192 - Вадим

  • 19 февраля 2022, 09:24
+
0
большую часть сигналов на открытие ордеров пропускает. Хотя точка присутствует. В чём может быть причина? И эта ошибка именно на НУЛЕВОМ баре!
Редактирован: 19 февраля 2022, 11:12
avatar

  8  vadimltd Автор Сообщений: 192 - Вадим

  • 19 февраля 2022, 11:09
+
0
советник это программа. есть сигнал от индикатора есть сделка.
avatar

  35  AM2 Сообщений: 16247 - Андрей

  • 19 февраля 2022, 11:23
+
0
Попробуйте поставить 0 в настройках:

extern int Shift         = 0;        // бар индикатора

Сигнал на открытие позиций:

 double blu = iCustom(NULL,0,IndName,0,Shift);
 double red = iCustom(NULL,0,IndName,1,Shift);

avatar

  16  ssg Сообщений: 817

  • 19 февраля 2022, 11:24
+
0
именно на таких свойствах и есть сигнал, который не обрабатывает советник. Если ставить extern int Shift = 1; // бар индикатора, то всё в норме
avatar

  8  vadimltd Автор Сообщений: 192 - Вадим

  • 19 февраля 2022, 11:27
+
0
Похоже, что в советнике стоит ограничение на количество сделок в сутки
avatar

  8  vadimltd Автор Сообщений: 192 - Вадим

  • 19 февраля 2022, 11:36
+
0
Нет там никакого ограничения по количеству.

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double blu = iCustom(NULL,0,IndName,0,Shift);
   double red = iCustom(NULL,0,IndName,1,Shift);

   bool buy = blu>0;
   bool sell = red>0;

   if(t!=Time[0] && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()))
     {
      if(buy)
         PutOrder(0,Ask);
      if(sell)
         PutOrder(1,Bid);
      t=Time[0];
     }


   if(AllProfit(0)>Profit && Profit>0 && CountTrades(0)<2)
     {
      CloseAll(0);
     }

   if(AllProfit(1)>Profit && Profit>0 && CountTrades(1)<2)
     {
      CloseAll(1);
     }

   if(AllProfitM(0)>MProfit && MProfit>0 && CountTrades(0)>1)
     {
      CloseAllM(0);
     }

   if(AllProfitM(1)>MProfit && MProfit>0 && CountTrades(1)>1)
     {
      CloseAllM(1);
     }


   Comment("\n Buy Profit: ",AllProfit(0),
           "\n Sell Profit: ",AllProfit(1),
           "\n Side Buy Profit: ",AllProfitM(0),
           "\n Side Sell Profit: ",AllProfitM(1));
  }
//+------------------------------------------------------------------+


Позиция откроется если совпали одновременно три условия:
-если наступило время торговли и
-если открылся новая свеча и
-если есть сигнал индикатора — открывается позиция.
avatar

  16  ssg Сообщений: 817

  • 19 февраля 2022, 12:07
+
0
avatar

  8  vadimltd Автор Сообщений: 192 - Вадим

  • 19 февраля 2022, 12:18
+
0
1.Тестируйте по тикам.
2.Скриншот только подтверждает, что индикатор дает сигналы задним числом.
Одномоментно все три сигнала не происходят.Машине «до лампочки» наши
рассуждения о том есть ли сигнал визуально или нет, для неё закон это код.
Вы картинку предоставили, а что в журнале пишется анализировали?
Не удивлюсь если в журнале пишут (даже если все три сигнала присутствует) —
цена устарела.
По коду проверка идет при поступлении первого тика на новой свече!!!
Второй, третий ,… уже не в счет.
Вы не смогли разобраться в коде советника.
Вы даже не знаете (как и мы ) какой алгоритм заложен в индикаторе, а вините
Андрея в том, что код неверный и советник не по стратегии работает.
avatar

  16  ssg Сообщений: 817

  • 19 февраля 2022, 13:57
+
0
тестирование веду именно всеми тиками в режиме визуализации, где видно, что при появлении сигнала на продажу, советник не открыл ордер. Более того, переменная, которую проверяет советник при выставлении ордера, показывает верное число на вход в рынок. Но советник упорно не открывает ордер. Значит есть причина в коде. Вот и ищу истину, а не веню программиста. Или как проверить стратегию?
avatar

  8  vadimltd Автор Сообщений: 192 - Вадим

  • 19 февраля 2022, 14:04
+
0
Поставьте советник торговать на демосчет на разумное время.Отслеживайте сигналы.Одновременно смотрите записи в журнале.
А код советника — он открытый, в отличии от кода индикатора. В код индикатора Андрей не вмешивался. Запустил индикатор на графике.Навел курсор на один значок-получил номер о буфера индикатора для покупок, навел на второй значок-получил номер буфера для продаж.Прописал в коде.
С таким же успехом можно обвинить и Ваш комьютер-не открывает позиции.
На демосчете, хотя бы, поторгуйте с недельку.
avatar

  16  ssg Сообщений: 817

  • 19 февраля 2022, 15:21
+
0
То же протестировал в тестере: на нулевом баре не открывает, хотя сигнал есть в буфере.

avatar

  20  alex30774 Сообщений: 748

  • 19 февраля 2022, 16:04
+
0
нужно разбираться с кодом советника, так как вход в рынок нужен именно по НУЛЕВОМУ бару. По следующему бару сигнал уже запоздалый
avatar

  8  vadimltd Автор Сообщений: 192 - Вадим

  • 19 февраля 2022, 16:35
+
0
Вы можете сами писать коды советников, или хотя бы читать коды советников написанные другим человеком?
Если можете, то напишите сами. Если не можете, тогда я Вам говорю, с кодом все в порядке. Правда Ваше право мне не верить.Поставьте на демосчет советника и разберитесь как считает индикатор и какова математика расчета у него.
В противном случае дальнейшее обсуждение советника бессмысленно.
avatar

  16  ssg Сообщений: 817

  • 19 февраля 2022, 17:03
+
0
Судя по визуализации индикатора у него и на три бара опоздание.
Сравните гте ставиться точка и где идет перелом цены.
avatar

  16  ssg Сообщений: 817

  • 19 февраля 2022, 17:05
+
0
я установил индикатор в другом советнике, там берёт показатели точно и выставляет ордер на нулевом баре, именно в том месте, где этот советник пропускает. Жаль математика у советника другая. Вот и хочу разобраться. Может и проблема в индикаторе, я этот факт не упускаю
avatar

  8  vadimltd Автор Сообщений: 192 - Вадим

  • 19 февраля 2022, 17:11
+
0
Можете показать код главной функции
<code>
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
</code>

другого советника.
вставляется через опцию
<code>code рядом со смайликом.</code>

Редактирован: 19 февраля 2022, 17:32
avatar

  16  ssg Сообщений: 817

  • 19 февраля 2022, 17:31
+
0
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()

  {


   double buy = iCustom(NULL,0,IndName,ChannelPeriod,0,Shift);
   double sell = iCustom(NULL,0,IndName,ChannelPeriod,1,Shift);

//   Comment("\n ask_long: ",ask_long,
//          "\n bid_short: ",bid_short,
//          "\n---------------",
//           "\n nextAbove: ",nextAbove,
//           "\n nextAbove2: ",nextAbove2,
//           "\n nextBelow: ",nextBelow,
//           "\n nextBelow2: ",nextBelow2);

   if(((!IsOptimization()) && !IsTesting() && (!IsVisualMode())) || (ShowTableOnTesting && IsTesting() && (!IsOptimization())))
     {
      info();
     }

//+------------------------------------------------------------------+
//|    Открытие первого ордера серии покупок                         |
//+------------------------------------------------------------------+
   if(count_long()==0)
     {




      bid_long = Bid;
      ask_long = Ask;

      if(buy > 0)
        {
         Print("Открытие первого ордера серии покупок");
         int ticket_long = OrderSend(Symbol(),OP_BUY,Lots_long,ask_long,Slippage,0,0,"No loss",Magic_long,0,Lime);
         modify_flag_long = TRUE;
         if(ticket_long<=0)
           {
            Print("Ошибка открытия покупок: ", GetLastError());
           }
        }
     }


//+------------------------------------------------------------------+
//|    Открытие первого ордера серии продаж                          |
//+------------------------------------------------------------------+

   if(count_short()==0)
     {


      bid_short = Bid;
      ask_short = Ask;

      if(sell > 0)
        {
         Print("Открытие первого ордера серии продаж");
         int ticket_short = OrderSend(Symbol(),OP_SELL,Lots_short,bid_short,Slippage,0,0,"No loss",Magic_short,0,Red);
         modify_flag_short = TRUE;
         if(ticket_short<=0)
           {
            Print("Ошибка открытия продаж: ", GetLastError());
           }
        }
     }
avatar

  8  vadimltd Автор Сообщений: 192 - Вадим

  • 19 февраля 2022, 17:53
+
0
Попробуйте сделать такую замену в своем советнике (т.е. прописать сигнал как у Андрея. К стати заметьте обращения у Вас и у Андрея к индикатору разные):


//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start(){

 //  double buy = iCustom(NULL,0,IndName,ChannelPeriod,0,Shift);
  // double sell = iCustom(NULL,0,IndName,ChannelPeriod,1,Shift);
  
    double buy = iCustom(NULL,0,IndName,0,Shift);
    double sell = iCustom(NULL,0,IndName,1,Shift);

   
   if(((!IsOptimization()) && !IsTesting() && (!IsVisualMode())) || (ShowTableOnTesting && IsTesting() && (!IsOptimization()))){info(); }

//+------------------------------------------------------------------+
//|    Открытие первого ордера серии покупок                         |
//+------------------------------------------------------------------+
 if(count_long()==0){
   
      bid_long = Bid;
      ask_long = Ask;

      if(buy > 0)
        {
         Print("Открытие первого ордера серии покупок");
         int ticket_long = OrderSend(Symbol(),OP_BUY,Lots_long,ask_long,Slippage,0,0,"No loss",Magic_long,0,Lime);
         modify_flag_long = TRUE;
         if(ticket_long<=0)
           {
            Print("Ошибка открытия покупок: ", GetLastError());
           }
        }
     }
//+------------------------------------------------------------------+
//|    Открытие первого ордера серии продаж                          |
//+------------------------------------------------------------------+
 if(count_short()==0){
     
      bid_short = Bid;
      ask_short = Ask;

      if(sell > 0)
        {
         Print("Открытие первого ордера серии продаж");
         int ticket_short = OrderSend(Symbol(),OP_SELL,Lots_short,bid_short,Slippage,0,0,"No loss",Magic_short,0,Red);
         modify_flag_short = TRUE;
         if(ticket_short<=0)
           {
            Print("Ошибка открытия продаж: ", GetLastError());
           }
        }
     }
     return(0);
  }
//+------------------------------------------------------------------+


А в советнике Андрея поменять сигнал на это обращение:

double blu = iCustom(NULL,0,IndName,ChannelPeriod,0,Shift);
  double red = iCustom(NULL,0,IndName,ChannelPeriod,1,Shift);
  

только в настройки советника Андрея нужно добавить
extern int ChannelPeriod = 
как в своем советнике.
avatar

  16  ssg Сообщений: 817

  • 19 февраля 2022, 19:29
+
0
я ставил уже период, не помогает. Секрет знает только Андрей
avatar

  8  vadimltd Автор Сообщений: 192 - Вадим

  • 19 февраля 2022, 19:41
+
0
А обращение к сигналам в своём советнике на обращение как у Андрея пробовали менять?
avatar

  16  ssg Сообщений: 817

  • 19 февраля 2022, 19:55
+
0
Разница только в периоде, который устанавливается в свойствах советника. После смены периода никаких изменений на графике нет. А свой советник я гонял по разному
avatar

  8  vadimltd Автор Сообщений: 192 - Вадим

  • 19 февраля 2022, 20:10
+
0
Может я не доходчиво пояснил:
в советнике Андрея замените главную функцию на этот вариант

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double blu = iCustom(NULL,0,IndName,ChannelPeriod,0,Shift);
   double red = iCustom(NULL,0,IndName,ChannelPeriod,1,Shift);

   bool buy = blu>0;
   bool sell = red>0;

   if(t!=Time[0] && TimeSession(StartHour,StartMin,EndHour,EndMin,TimeCurrent()))
     {
      if(buy)
         PutOrder(0,Ask);
      if(sell)
         PutOrder(1,Bid);
      t=Time[0];
     }


   if(AllProfit(0)>Profit && Profit>0 && CountTrades(0)<2)
     {
      CloseAll(0);
     }

   if(AllProfit(1)>Profit && Profit>0 && CountTrades(1)<2)
     {
      CloseAll(1);
     }

   if(AllProfitM(0)>MProfit && MProfit>0 && CountTrades(0)>1)
     {
      CloseAllM(0);
     }

   if(AllProfitM(1)>MProfit && MProfit>0 && CountTrades(1)>1)
     {
      CloseAllM(1);
     }


   Comment("\n Buy Profit: ",AllProfit(0),
           "\n Sell Profit: ",AllProfit(1),
           "\n Side Buy Profit: ",AllProfitM(0),
           "\n Side Sell Profit: ",AllProfitM(1));
  }
//+------------------------------------------------------------------+

avatar

  16  ssg Сообщений: 817

  • 19 февраля 2022, 20:35
+
0
А в своем замените:


//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start(){

    double buy = iCustom(NULL,0,IndName,0,Shift);
    double sell = iCustom(NULL,0,IndName,1,Shift);
   
   if(((!IsOptimization()) && !IsTesting() && (!IsVisualMode())) || (ShowTableOnTesting && IsTesting() && (!IsOptimization()))){info(); }

//+------------------------------------------------------------------+
//|    Открытие первого ордера серии покупок                         |
//+------------------------------------------------------------------+
 if(count_long()==0){
   
      bid_long = Bid;
      ask_long = Ask;

      if(buy > 0)
        {
         Print("Открытие первого ордера серии покупок");
         int ticket_long = OrderSend(Symbol(),OP_BUY,Lots_long,ask_long,Slippage,0,0,"No loss",Magic_long,0,Lime);
         modify_flag_long = TRUE;
         if(ticket_long<=0)
           {
            Print("Ошибка открытия покупок: ", GetLastError());
           }
        }
     }
//+------------------------------------------------------------------+
//|    Открытие первого ордера серии продаж                          |
//+------------------------------------------------------------------+
 if(count_short()==0){
     
      bid_short = Bid;
      ask_short = Ask;

      if(sell > 0)
        {
         Print("Открытие первого ордера серии продаж");
         int ticket_short = OrderSend(Symbol(),OP_SELL,Lots_short,bid_short,Slippage,0,0,"No loss",Magic_short,0,Red);
         modify_flag_short = TRUE;
         if(ticket_short<=0)
           {
            Print("Ошибка открытия продаж: ", GetLastError());
           }
        }
     }
     return(0);
  }
//+------------------------------------------------------------------+
avatar

  16  ssg Сообщений: 817

  • 19 февраля 2022, 20:36
+
0
заменил, проверил, тоже самое
avatar

  8  vadimltd Автор Сообщений: 192 - Вадим

  • 19 февраля 2022, 20:53
+
0
Т.е. если взять обращение Андрея к сигналам и вставить в Ваш советник то позиции открываются правильно?
А если в советник Андрея вставить обращение к сигналам из Вашего советника то позиции открываются не правильно?
avatar

  16  ssg Сообщений: 817

  • 19 февраля 2022, 21:15
+
0
Да, всё верно. Сейчас попробую иной советник, как он будет реагировать на сигналы.
avatar

  8  vadimltd Автор Сообщений: 192 - Вадим

  • 19 февраля 2022, 21:52
+
0
Здравствуйте. Как и где в коде заменить индикатор-источник_сигналов в советнике?
Например на этот:
Zig Zag History — индикатор для MetaTrader 4, ZigZag_hist.mq4
www.mql5.com/ru/code/12859

Достаточно ли поменять: extern string IndName?
Редактирован: 21 февраля 2022, 13:28
avatar

  11  preasto Сообщений: 445

  • 21 февраля 2022, 12:59
+
+1
Нет.Простой заменой имени индикатора не обойдешься.
avatar

  16  ssg Сообщений: 817

  • 21 февраля 2022, 14:18

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