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

Рейтинг 2146



РЕКОМЕНДУЮ



Советник: Пробой утреннего флета

Советник выход из утреннего флета

Прошу реализовать советник с следующей идеей

В конце дня рынок затихает и начинается боковик утром когда начинается выход из боковика цена движется в одном направлении какое-то время
потом либо идет в том же направлении либо разворачивается. Мы ловим первое движение выхода из флета.

Советник рисует графически квадрат флета с параметрами начала например с 22.00 часов до 10.00 утра и ставит отложенные ордера сверху и снизу
квадрата (выше квадрата Buy-stop; ниже квадрата Sell-stop), с определенной дельтой от графически определенного флета, с заданными параметрами стопа и тейка.


Параметры советника:
1)Определяет размер флета за определенный отрезок времени заданный в параметрах ( например с 22.00 до 10.00 )
2)Диапазон квадрата флета не больше например 250 пипсов, если квадрат вышел за рамки устанавливаемого значения по временным рамкам с 22.00 до 10.00 отложки не ставятся
(диапазон флета устанавливаемый в настройках параметр 250 или другое число)
3)Можно менять дельту Buy-stop и Sell-stop по удаленности от флета в пипсах (Устанавливаемый в настройках параметр)
4)Каждая отложка имеет свой Язь и Лось (устанавливаемый параметр)
5)После срабатывания одной из отложек другая удаляется, в конце дня все ордера и отложки закрываются
6)Функция общего трейлинга для отложек. Через сколько пипсов начать трейлить, стоп лос перетягивается в БУ и идет за ценой)
  • 0
  • Просмотров: 2599
  • 22 июля 2024, 12:51
  • Jimirami
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

комментарий был удален 2024-07-22 13:42:07 Jimirami

+
0
Может проще будет взять период с начала дня? азиатская и франкфуртская сессия. так проще в реализации. А так идея неплохая, мартин бы ещё
avatar

  6  kalabster Сообщений: 45 - Tester_robotov

  • 22 июля 2024, 14:08
+
0
Я бы не хотел жертвовать правильным определением флета. Если я захочу начать торговлю в 4 часа утра то за это время мало что советник нарисует. И еще терминальное время может быть другим у разных брокеров.
avatar

  4  Jimirami Автор Сообщений: 44

  • 22 июля 2024, 14:18
комментарий был удален 2024-07-22 15:01:53 Jimirami

+
0
есть подобные в базе. если не найдете то что нужно дайте ссылку на самый близкий вариант
avatar

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

  • 22 июля 2024, 17:01
+
0
Приступаю к поискам*hi* 
avatar

  4  Jimirami Автор Сообщений: 44

  • 22 июля 2024, 18:40
+
0
… самый близкий вариант


Один из близких вариантов:

//+------------------------------------------------------------------+
//|                                                  MorningFlat.mq4 |
//|                                              Copyright 2017, AM2 |
//|                                      http://www.forexsystems.biz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, AM2"
#property link      "http://www.forexsystems.biz"
#property version   "1.00"
#property strict

//--- Inputs
extern double Lots        = 0.1;      // лот
extern double KLot        = 2;        // умножение лота
extern double MaxLot      = 5;        // максимальный лот

extern double TargetLevel = 200;      // таргет уровень

extern int StopLoss       = 0;        // лось
extern int TakeProfit     = 0;        // язь
extern int Delta          = 50;       // расстояние от границы канала
extern int MinDelta       = 200;      // минимальная ширина канала
extern int MaxDelta       = 400;      // максимальная ширина канала


extern int StartHour      = 10;       // час начала торговли
extern int StartMin       = 30;       // минута начала торговли
extern int EndHour        = 23;       // час окончания торговли
extern int EndMin         = 50;       // минута окончания торговли

extern int StartH         = 0;        // час начала канала
extern int StartM         = 30;       // минута начала канала
extern int EndH           = 9;        // час окончания канала
extern int EndM           = 30;       // минута окончания канала

extern int CloseMarket    = 1;        // закрываем позу по окончании торговли
extern int Slip           = 30;       // реквот
extern int Magic          = 123;      // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 30.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    hb - часы времени начала торговли                                       |
//|    mb - минуты времени начала торговли                                     |
//|    he - часы времени окончания торговли                                    |
//|    me - минуты времени окончания торговли                                  |
//+----------------------------------------------------------------------------+
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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   double sl=0,tp=0;

   int StartBar=iBarShift(NULL,0,StringToTime((string)StartH+":00"+(string)StartM+":00"));
   int EndBar=iBarShift(NULL,0,StringToTime((string)EndH+":00"+(string)EndM+":00"));

   double up = High[iHighest(NULL,0,MODE_HIGH,StartBar-EndBar,EndBar)];
   double dn = Low[iLowest(NULL,0,MODE_LOW,StartBar-EndBar,EndBar)];
   double delta=(up-dn)/Point;

   double TargetUP=(up-dn)*(TargetLevel-100)/100+up;         // Верхняя цель
   double TargetDN=dn-(up-dn)*(TargetLevel-100)/100;         // Нижняя цель

   if(type==1 || type==3 || type==5)
     {
      clr=Red;
      if(StopLoss>0) sl=NormalizeDouble(price+StopLoss*Point,Digits); else sl=up;
      if(TakeProfit>0) tp=NormalizeDouble(price-TakeProfit*Point,Digits); else tp=TargetDN;
     }

   if(type==0 || type==2 || type==4)
     {
      clr=Blue;
      if(StopLoss>0) sl=NormalizeDouble(price-StopLoss*Point,Digits); else sl=dn;
      if(TakeProfit>0) tp=NormalizeDouble(price+TakeProfit*Point,Digits); else tp=TargetUP;
     }

   r=OrderSend(NULL,type,Lot(),NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,0,clr);
   return;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountTrades()
  {
   int count=0;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()<2) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Lot()
  {
   double lot=Lots;

   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderProfit()<0)
        {
         lot=OrderLots()*KLot;
        }
     }
   if(lot>MaxLot)lot=Lots;
   return(lot);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
avatar

  19  Marik007 Сообщений: 417 - Forexman

  • 23 июля 2024, 00:19
+
0
void CloseAll()
  {
   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()==OP_BUY)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Bid,Digits),Slip,White);
              }
            if(OrderType()==OP_SELL)
              {
               RefreshRates();
               cl=OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(Ask,Digits),Slip,White);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Подсчет ордеров по типу                                          |
//+------------------------------------------------------------------+
int CountOrders(int type=-1)
  {
   int count=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 || (OrderType()>=0 && type==-1)) count++;
           }
        }
     }
   return(count);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutTrendLine(string name,datetime time1,double price1,datetime time2,double price2,color clr)
  {
   ObjectDelete(0,name);
   ObjectCreate(0,name,OBJ_TREND,0,time1,price1,time2,price2);
//--- установим цвет линии 
   ObjectSetInteger(0,name,OBJPROP_COLOR,clr);
//--- установим стиль отображения линии 
   ObjectSetInteger(0,name,OBJPROP_STYLE,STYLE_SOLID);
//--- установим толщину линии 
   ObjectSetInteger(0,name,OBJPROP_WIDTH,2);
//--- включим (true) или отключим (false) режим продолжения отображения линии вправо 
   ObjectSetInteger(0,name,OBJPROP_RAY_RIGHT,false);
  }
//+------------------------------------------------------------------+
//| Удаление отложенных ордеров                                      |
//+------------------------------------------------------------------+
void DelOrder()
  {
   bool del;
   for(int i=OrdersTotal()-1;i>=0;i--)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
           {
            if(OrderType()>1) del=OrderDelete(OrderTicket());
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Одна сделка в день                                               |
//+------------------------------------------------------------------+
bool OneDayDeal()
  {
   bool result=true;
   if(OrderSelect(OrdersHistoryTotal()-1,SELECT_BY_POS,MODE_HISTORY))
     {
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic)
        {
         if(OrderType()<2 && TimeDay(OrderOpenTime())==Day())
           {
            result=false;//tp  
           }
        }
     }
   return(result);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   int StartBar=iBarShift(NULL,0,StringToTime((string)StartH+":00"+(string)StartM+":00"));
   int EndBar=iBarShift(NULL,0,StringToTime((string)EndH+":00"+(string)EndM+":00"));

   double up = High[iHighest(NULL,0,MODE_HIGH,StartBar-EndBar,EndBar)];
   double dn = Low[iLowest(NULL,0,MODE_LOW,StartBar-EndBar,EndBar)];
   double delta=(up-dn)/Point;

   double TargetUP=(up-dn)*(TargetLevel-100)/100+up;         // Верхняя цель
   double TargetDN=dn-(up-dn)*(TargetLevel-100)/100;         // Нижняя цель

   PutTrendLine("UP",Time[StartBar],up,Time[EndBar],up,Red);
   PutTrendLine("DN",Time[StartBar],dn,Time[EndBar],dn,Blue);

   PutTrendLine("tUP",Time[1],TargetUP,Time[EndBar],TargetUP,Yellow);
   PutTrendLine("tDN",Time[1],TargetDN,Time[EndBar],TargetDN,Green);

   if(CountTrades()<1 && OneDayDeal() && isTradeTimeInt(StartHour,StartMin,EndHour,EndMin) && delta>MinDelta && delta<MaxDelta)
     {
      if(CountOrders(4)<1 && Bid<up) PutOrder(4,up+Delta*Point);
      if(CountOrders(5)<1 && Bid>dn) PutOrder(5,dn-Delta*Point);
     }

   if(!isTradeTimeInt(StartHour,StartMin,EndHour,EndMin))
     {
      DelOrder();
      if(CloseMarket>0) CloseAll();
     }

   Comment("\n up: ",up,
           "\n dn: ",dn,
           "\n start: ",StartBar,
           "\n end: ",EndBar,
           "\n delta: ",delta);
  }
//+------------------------------------------------------------------+
avatar

  19  Marik007 Сообщений: 417 - Forexman

  • 23 июля 2024, 00:20
+
0
Нашел у себя похожее, подлатал под Ваше ТЗ.
downloads/3870/
avatar

  14  verta81 Сообщений: 388

  • 22 июля 2024, 23:22
+
+1
avatar

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

  • 23 июля 2024, 11:38
+
0
Спасибо большое
avatar

  4  Jimirami Автор Сообщений: 44

  • 13 августа 2024, 16:42

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