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

Рейтинг 2114



РЕКОМЕНДУЮ



Двухсторонний усреднитель на инд. “ Мorning Flat” .

Уважаемые программисты прошу написать советник на инд. MorningFlat_V3.mq4 (26 Kb) по алгоритму:

Индикатор отображает макс. и мин. цены в пределах времени суток, заданного параметрами:
«Day start hour», «Day start minute»,
«Day end hour», «Day end minute».

1) На расстоянии “Дельта” от построенных уровней советник ставит два отложенных ордера “Бай-стоп” и “Селл Стоп”.

2) После срабатывания одного из ордеров второй отложенный ордер удаляется. В случае просадки, поз. с “шагом” усредняется.

3) Закрытие поз.

— Поз. одиночные закрываются по: TakeProfit = 555; // язь, профит(пункты) начальных, одиночных поз.
— При усреднении закрытие по: SerialProfit = 111; // язь серии в пунктах при усреднении //
— Есть “Трал” только одиночных поз.

4) — Новый торговый день начинается аналогично предыдущему. Если есть незакрытые поз. одного из направлений предшествующего дня, Тогда сов. ставит отложенную поз. недостающего направления (“Бай-стоп” или “Селл-стоп”) по уровню индикатора. То есть торгуется два направления одновременно.
— Если все позиции в предшествующий день закрыты тогда Сов. ставит отложенные ордера “Бай-стоп” и “Селл-стоп” по инд. как обычно.

5) В настройки добавить функциональные параметры:

Lot = 0.1; // лот//
KLot = 2; // умножение лота//
PLot = 0.1; // прибавление лота//
MaxLot = 5; // максимальный лот//

StopLoss = 0; // лось
TakeProfit = 555; // язь, профит(пункты) начальных, одиночных поз.//
SerialProfit = 111; // язь серии в пунктах при усреднении //
Delta = 33; // дельта, отступ от уровня инд. //
Expiration = 11; // истечение //

StartHour = 0; // час начала торговли//
StartMin = 30; // минута начала торговли//
EndHour = 23; // час окончания торговли//
EndMin = 30; // минута окончания торговли//
CloseOn = 0; // 1-закрытие в конце работы//

TrailingStop = 300; // трал одиночных поз.//
Step = 333; // шаг//
Count = 20; // число поз//
Slip = 30; // реквот//
Magic = 123; // магик//
Comm = «Scalp»;

IndName = «MorningFlat_V3»

i_nStartHour = 8; // Day start hour//
i_nStartMinute = 00; // Day start minute//
i_nEndHour = 12; // Day end hour//
i_nEndMinute = 00; // Day end minute//

6) Основные функциональные параметры можно взять из советника Usrednitel6.mq4 (21 Kb) и добавить недостающие параметры.



За ранее благодарен!
  • +3
  • Просмотров: 1834
  • 29 мая 2024, 22:02
  • Marik007
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

+
+1
avatar

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

  • 30 мая 2024, 17:09
+
0
готово: www.opentraders.ru/downloads/3850/


Это полное не соответствие ТЗ...!!!*???* 

1) Почему на 11 баре инд. ставится ордер? На 1 не работает…

2) Изначально ставится одна отлога, а нужно две…

3) Нет параметров в настройках:
SerialProfit = 111; // язь серии в пунктах при усреднении //

StartHour = 0; // час начала торговли//

StartMin = 30; // минута начала торговли//
EndHour = 23; // час окончания торговли//
EndMin = 30; // минута окончания торговли//
CloseOn = 0; // 1-закрытие в конце работы//

TrailingStop = 300; // трал одиночных поз.//

4)В течении торгового дня должно открываться ОДНО направление и сопровождаться… согласно ТЗ!!!

--Вы наверное по ошибке не тот фаил загрузили, проверьте плиз. соответствие с ТЗ по всем пунктам 1) ,2), 3), 4) и 5)

— Должна получиться торговля как на моем скрине и логика в соответствии с ТЗ.

Спасибо!

avatar

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

  • 31 мая 2024, 07:41
+
0
из индикатора непросто вытащить сигнал, а без этого прописывать детали не имеет смысла.
если кто то хочет заморочиться, то пожалуйста
avatar

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

  • 31 мая 2024, 13:22
+
0
из индикатора непросто вытащить сигнал


А сделать по графическим линиям можно? Вы ведь такое часто делали.
avatar

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

  • 31 мая 2024, 18:14
+
+1
Вот версия для мт5
www.opentraders.ru/downloads/3054/
avatar

  19  alex30774 Сообщений: 722

  • 2 июня 2024, 19:33
+
+1
Вот вариант для мт4
#property copyright "GDV"
#property link      "GDV"
#property version   "1.00"
#property strict

extern double Lots       = 1.0;         // лот
extern double KLot       = 2;           // умножение лота
extern double MaxLot     = 5;           // максимальный лот
extern int Shag          = 100;         // Отступ от SL для удвоения
extern bool Limit        = False;       // False(откл. лимитные ордера) True (вкл.)
extern int BULevel       = 0;           // уровень БУ
extern int BUPoint       = 30;          // пункты БУ
extern int TrailingStop  = 100;         // трал
extern int Slip          = 10;          // Проскальзывание цены
extern string IndName="MorningFlat_V3"; // Название индикатора
extern double PROC=0.5;                 // Процент выставления ТР и SL 
extern int StartHourr=0;                // Час начала инд
extern int StartMinute=15;              // Мин начала инд
extern int EndHourr=8;                  // Час окончания инд
extern int EndMinute=45;                // Мин окончания инд
extern int Magic         = 1;           // Magic
extern int EndHour       = 23;          // час окончания торговли
int OnInit()
  {
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
  
  }
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() )
           {
            if(OrderType()==OP_BUY || OrderType()==OP_BUYSTOP || OrderType()==OP_SELL || OrderType()==OP_SELLSTOP) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
void ClosePos(int ot=-1)
  {
   bool cl;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==0 && (ot==0 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==1 && (ot==1 || ot==-1))
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
void Trailing()
  {
   bool mod;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() || OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(Bid-OrderOpenPrice()>TrailingStop*Point)
                 {
                  if(OrderStopLoss()<Bid-TrailingStop*Point)
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if((OrderOpenPrice()-Ask)>TrailingStop*Point)
                 {
                  if((OrderStopLoss()>(Ask+TrailingStop*Point)) || (OrderStopLoss()==0))
                    {
                     mod=OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*Point,OrderTakeProfit(),0,Yellow);
                     return;
                    }
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
void BU()
  {
   bool m;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() || OrderMagicNumber()==Magic)
           {
            if(OrderType()==OP_BUY)
              {
               if(OrderOpenPrice()<=(Bid-(BULevel+BUPoint)*Point) && OrderOpenPrice()>OrderStopLoss())
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()+BUPoint*Point,OrderTakeProfit(),0,Green);
                  return;
                 }
              }

            if(OrderType()==OP_SELL)
              {
               if(OrderOpenPrice()>=(Ask+(BULevel+BUPoint)*Point) && OrderOpenPrice()<OrderStopLoss())
                 {
                  m=OrderModify(OrderTicket(),OrderOpenPrice(),OrderOpenPrice()-BUPoint*Point,OrderTakeProfit(),0,Green);
                  return;
                 }
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
double AllProfit(int type=-1)
  {
   double profit=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()==type) profit+=OrderProfit()+OrderCommission()+OrderSwap();
            if(type==-1)
              {
               if(OrderType()<2) profit+=OrderProfit()+OrderCommission()+OrderSwap();
              }
           }
        }
     }
   return (profit);
  }
//+------------------------------------------------------------------+
bool isTradeTimeInt(int hb=0,int mb=0,int he=0,int me=0)
  {
   datetime db, de;           // Время начала и окончания работы
   int      hc;               // Часы текущего времени торгового сервера

   db=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)hb+":"+(string)mb);
   de=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+(string)he+":"+(string)me);
   hc=TimeHour(TimeCurrent());

   if(db>=de)
     {
      if(hc>=he) de+=24*60*60; else db-=24*60*60;
     }

   if(TimeCurrent()>=db && TimeCurrent()<=de) return(True);
   else return(False);
  }
//+------------------------------------------------------------------+
  int CountBYU2()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {
     if(OrderSymbol()==Symbol() )
     {
     if (OrderLots()==Lots*KLot)
     {
     if(OrderType()==OP_BUY) count++;
     }
     }
     }
     }
   return(count);
  }
//-----------------------------------------------------------------------------------------------------  
  int CountSELL2()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
      if(OrderSymbol()==Symbol())
      {
      if (OrderLots()==Lots*KLot)
      {
      if(OrderType()==OP_SELL) count++;
      }
      }
      }
      }
   return(count);
  }
 //+------------------------------------------------------------------+
 //+------------------------------------------------------------------+
  int CountBYU1()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
     if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {
     if(OrderSymbol()==Symbol() )
     {
     if (OrderLots()==Lots)
     {
     if(OrderType()==OP_BUY) count++;
     }
     }
     }
     }
   return(count);
  }
//-----------------------------------------------------------------------------------------------------  
  int CountSELL1()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
      if(OrderSymbol()==Symbol())
      {
      if (OrderLots()==Lots)
      {
      if(OrderType()==OP_SELL) count++;
      }
      }
      }
      }
   return(count);
  }
 //+------------------------------------------------------------------+
void BUYCLOSE()
  {
   bool cl;
   //int Slip=10;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if (OrderType()==OP_BUYSTOP ) cl=OrderDelete(OrderTicket());
            
               RefreshRates();
           }
           }
           }
  }
//+------------------------------------------------------------------+
void SELLCLOSE()
  {
   bool cl;
   //int Slip=10;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if (OrderType()==OP_SELLSTOP ) bool del=OrderDelete(OrderTicket());  
           
            RefreshRates();
           }
           }
           }
   }
  //+------------------------------------------------------------------+
void BUYCLOSELimit()
  {
   bool cl;
   //int Slip=10;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if (OrderType()==OP_BUYLIMIT ) cl=OrderDelete(OrderTicket());
               RefreshRates();
           }
           }
           }
  }
//+------------------------------------------------------------------+



Это первая часть
Судя по коду это советник АМ2.
avatar

  19  alex30774 Сообщений: 722

  • 2 июня 2024, 20:05
+
+1
Вот вторая часть
<code>//+------------------------------------------------------------------+
void SELLCLOSELimit()
  {
   bool cl;
   //int Slip=10;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol())
           {
            if (OrderType()==OP_SELLLIMIT ) bool del=OrderDelete(OrderTicket());
            RefreshRates();
           }
           }
           }
   }
 
//+------------------------------------------------------------------+
int start()
  {
   double buy  = iCustom(NULL,0,IndName,PROC,StartHourr,StartMinute,EndHourr,EndMinute,0,2);
   double sell = iCustom(NULL,0,IndName,PROC,StartHourr,StartMinute,EndHourr,EndMinute,1,2);
   double bTP  = iCustom(NULL,0,IndName,PROC,StartHourr,StartMinute,EndHourr,EndMinute,2,0);
   double sSL =  iCustom(NULL,0,IndName,PROC,StartHourr,StartMinute,EndHourr,EndMinute,3,0);
   
  
   if(BULevel>0) BU();
      
      if(CountBYU1()>0){ SELLCLOSE();BUYCLOSE();SELLCLOSELimit();}
      if(CountSELL1()>0){ BUYCLOSE();SELLCLOSE();BUYCLOSELimit();}
      if(CountBYU2()>0){ SELLCLOSE();BUYCLOSE();BUYCLOSELimit();SELLCLOSELimit();Trailing();}
      if(CountSELL2()>0){ BUYCLOSE();SELLCLOSE();SELLCLOSELimit();BUYCLOSELimit();Trailing();}
   
      
            
      
       if (CountTrades()==0)
       {
       OrderSend(Symbol(),OP_BUYSTOP,Lots,buy,Slip,sell,bTP,"",Magic,0,Blue);
       OrderSend(Symbol(),OP_SELLSTOP,Lots,sell,Slip,buy,sSL,"",Magic,0,Red);
      if (Limit==True){
       OrderSend(Symbol(),OP_BUYLIMIT,Lots*KLot,sell-Shag*2*Point,Slip,0,0,"",Magic,0,Blue);
       OrderSend(Symbol(),OP_SELLLIMIT,Lots*KLot,buy+Shag*2*Point,Slip,0,0,"",Magic,0,Red);
           }
       }
       
       int h=TimeHour(TimeCurrent()); 
       int m=TimeMinute(TimeCurrent());    
       if (h==EndHour && m>EndMinute) { BUYCLOSE();SELLCLOSE();SELLCLOSELimit();BUYCLOSELimit(); }
          
           return(0);
 
 
  }
</code>

В качестве подсказки должно подойти.
Пробуйте может вас этот вариант устроит
P.S. если не устроит то удалите мои коментарии, а то ваш коментарий затеряется и Андрей его не прочитает.
Редактирован: 2 июня 2024, 21:02
avatar

  19  alex30774 Сообщений: 722

  • 2 июня 2024, 20:08
+
+1
А сделать по графическим линиям можно? Вы ведь такое часто делали.

можно но сложно. это не для бесплатного
avatar

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

  • 2 июня 2024, 18:00
+
0
из индикатора непросто вытащить сигнал, а без этого прописывать детали не имеет смысла.


Тогда, упростим задание исключим индикатор, Открытие поз. сделаем по такому принципу:
Советник в указанное время запоминает максимум и минимум цены и согласно ТЗ выставляет Две отложенных поз.
В настройки добавить:

StartHour = 8; // Day start hour//
StartMinute = 00; // Day start minute//
EndHour = 12; // Day end hour//
EndMinute = 00; // Day end minute//

Далее Всё основное по ТЗ пункт 1; 2; 3; 4; 5; думаю такой вариант для вас будет несложным.

Заранее БЛАГОДАРЕН!

avatar

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

  • 2 июня 2024, 19:32
+
+1
Далее Всё основное по ТЗ пункт 1; 2; 3; 4; 5; думаю такой вариант для вас будет несложным


вы узнайте цену на платном и сразу все поймете, сложно это или нет
avatar

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

  • 3 июня 2024, 09:57
+
0
сложно это или нет


Я думал, что я вам упростил задачу, указав на ваш советник с вашим кодом и прописанными основными функциями по ТЗ.
Взять за основу, прописать условия входа и отследить сопровождение сделки. Тем более что данный советник у вас написан на языке мql5.
avatar

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

  • 3 июня 2024, 12:12
+
+1
Я думал, что я вам упростил задачу

сколько стоит все это на платном?
мне интересно узнать на сколько вы обесценили мою работу?
avatar

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

  • 3 июня 2024, 16:19
+
0
мне интересно узнать на сколько вы обесценили мою работу?


Я не обесценивал, а пытался облегчить ваш «труд» :) 
avatar

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

  • 3 июня 2024, 16:49
комментарий был удален 2024-06-04 15:08:13 Marik007

комментарий был удален 2024-06-04 15:08:19 Marik007

+
0
Автор, попробуйте создать новую тему и расписать подробнее новый упрощённый вариант.


сигнал плюс стандартное усреднение здесь можно сделать. а в других топиках по немногу добавлять
avatar

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

  • 4 июня 2024, 09:50
+
0
по минималке сделал: www.opentraders.ru/downloads/3852/



в следующих топиках к этой версии можно бобавлять по паре функций
avatar

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

  • 4 июня 2024, 10:32

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