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

Рейтинг 2155



РЕКОМЕНДУЮ



Советник работающий в определенное время

Здравствуйте! Напишите пожалуйста советник для МТ4.
Советник должен в определенное время по терминалу выставить два отложенных ордера на покупку и продажу. Ордера выставляются на выбранном расстоянии от цены. Через определенное время если ордер не достиг Т/П должен закрываться, а не сработавший ордер удаляется. Должна быть возможность выбора какими ордерами торговать stop или Limit

Параметры советника:
— Лот
— Тэйк профит
— Стоп лосс
— Выбор какими ордерами торгуем stop или Limit
— Время начала торговли
— Время через которое советник закрывает все ордера
— На каком расстоянии от цены выставляются ордера
— Мэджик
  • 0
  • Просмотров: 3713
  • 1 марта 2016, 21:21
  • mecenat
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
Посмотрите в базе, там были подобные.
avatar

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

  • 1 марта 2016, 21:45
+
0
смотрел похожие есть, но у них нет выбора какими ордерами работать
avatar

  15  mecenat Автор Сообщений: 41

  • 1 марта 2016, 21:48
+
0
приведите пару ссылок, я переделаю просто
avatar

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

  • 1 марта 2016, 21:50
+
0
вот похожий www.opentraders.ru/downloads/712/
avatar

  15  mecenat Автор Сообщений: 41

  • 1 марта 2016, 22:09
0
Завтра с утра уже посмотрю.
avatar

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

  • 1 марта 2016, 22:20
0
По ТЗ все есть: www.opentraders.ru/downloads/1083/




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

//--- Inputs
extern double Lots      = 0.1; // объем позиции
extern int StopLoss     = 500; // стоп лосс ордера
extern int TakeProfit   = 500; // тейк профит ордера
extern int Expiration   = 10;  // время истечения ордера
extern int StartHour    = 0;   // час начала торговли
extern int StartMin     = 30;  // минута начала торговли
extern int EndHour      = 23;  // час окончания торговли
extern int EndMin       = 30;  // минута окончания торговли
extern int Slip         = 30;  // реквот
extern int Type         = 0;   // 0-Stop. 1-Limit
extern int Hours        = 8;   // через сколько часов удаляем ордера
extern int Delta        = 100; // расстояние от цены
extern int Magic        = 333; // магик
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
 
{
//---

//---
   
return(INIT_SUCCEEDED);
 
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
 
{
//---

 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
 
{
   
int    r=0;
   color clr
=clrNONE;
   
double sl=0,tp=0;

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

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

   r
=OrderSend(NULL,type,Lots,NormalizeDouble(price,Digits),Slip,sl,tp,"",Magic,TimeCurrent()+Expiration*3600,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);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int CountOrders(int type)
 
{
   
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) count++;
           
}
       
}
     
}
   
return(count);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
datetime
OpenTime()
 
{
   datetime t
=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) t=OrderOpenTime();
           
}
       
}
     
}
   
return(t);
 
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CloseAll()
 
{
   
bool cl,del;
   
for(int i=OrdersTotal()-1;i>=0;i--)
     
{
     
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
       
{
         
if(OrderMagicNumber()==Magic || OrderSymbol()==Symbol())
           
{
           
if(OrderType()==OP_BUY) cl=OrderClose(OrderTicket(),OrderLots(),Bid,Slip,Blue);
           
if(OrderType()==OP_SELL) cl=OrderClose(OrderTicket(),OrderLots(),Ask,Slip,Red);
           
if(OrderType()>1) del=OrderDelete(OrderTicket());
           
}
       
}
     
}
   
return;
 
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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);
 
}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
 
{
   
if(isTradeTimeInt(StartHour,StartMin,EndHour,EndMin) && CountTrades()<1)
     
{
     
if(Type==0)
       
{
         
if(CountOrders(4)<1) PutOrder(4,Bid+Delta*Point);
         
if(CountOrders(5)<1) PutOrder(5,Bid-Delta*Point);
       
}

     
if(Type==1)
       
{
         
if(CountOrders(2)<1) PutOrder(2,Bid-Delta*Point);
         
if(CountOrders(3)<1) PutOrder(3,Bid+Delta*Point);
       
}
     
}

   
if(CountTrades()>0 && TimeCurrent()-OpenTime()>Expiration*3600)
     
{
     
CloseAll();
     
}

   
Comment("\n OpenTime: ",OpenTime(),
           
"\n TimeCurrent: ",TimeCurrent(),
           
"\n TimeCurrent()-OpenTime(): ",(int)(TimeCurrent()-OpenTime()));
 
}
//+------------------------------------------------------------------+


Редактирован: 4 марта 2016, 17:03
avatar

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

  • 2 марта 2016, 00:31
+
0
Здравствуйте, а можно сюда добавить ещё секунды открытия ордера
avatar

  2  Wladimir111 Сообщений: 4

  • 8 марта 2016, 18:16
+1
А что вам дадут секунды открытия? Если только в тестере посмотреть на красивое исполнение ордеров.
В реальной торговле вполне достаточно точности до минуты. Ибо есть реквоты и расширения спреда…
avatar

  13  Fargo Сообщений: 495

  • 9 марта 2016, 14:24
0
Читал ранее, что сессия пользователя в мт4 закрывается каждые 30 сек после выставления ордера, а если я попадаю в эти 30 сек, то следующий ордер исполнится немного быстрее, чего я и хочу добиться.
avatar

  2  Wladimir111 Сообщений: 4

  • 9 марта 2016, 15:46

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