Kashtan
Игорь

 
Уровень 19

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


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

Рейтинг 2147



РЕКОМЕНДУЮ



Советник помошник

Прошу сделать советник на новый месяц. Для лучшего понимания опишу способ торговли руками. По стратегии предполагается один раз в неделю открыть одну следку бай или селл на открытии рынка. Но сделка открывается не сразу, а после того как спред приходит в норму. Если к этому моменту цена не сильно ушла в нужном направлении или наоборот был откат, сделка открывается. Если цена успела убежать или был ГЭП к примеру, сделка пропускается. Что должен делать советник:


После установки на недельный график советник ждёт часа торговли (приблизительно открытия рынка)
Когда котировки начали приходить, советник сравнивает текущий спред с тем значением что задано в настройках (макс. спред для открытия позиции)
Если спред в норме, советник сравнивает текущую цену с ценой закрытия последней закрывшейся свечи (на недельном графике) Если к этому моменту цена не ушла далеко в направлении предполагаемой сделки или был откат, советник сделку открывает. Если цена ушла больше чем заданно в настройках, советник ждёт открытия новой свечи (недели) Если с момента запуска советника через заданное в настройках время спред не успел оказаться в пределах допустимого, вход так же пропускается. Предполагается каждый раз на открытии рынка заново ставить советник на графики нужных валютных пар и корректировать настройки.

Настройки
1. Направление сделки (бай или сел)
2. Лот
3. ТП
4. СЛ
6. Макс. спред
7. Час торговли (когда советник на каждом тике начинает проверять размер спреда)
8. Окончание торговли. А именно. Если ко времени указанному в этой настройке спред так и не оказался в пределах допустимого, советник так же перестаёт искать возможность для входа до следующей недели (свечи)
9. Дельта, при превышении которой советник перестаёт искать вход на текущей свече. Ещё раз уточню, что имею ввиду. К примеру цена закрытия прошлой свечи 1.5500. Если направление сделки было заданно «Бай» а в дельте 300, то максимальная цена по которой советник может открыть покупку будет 1.5800. Другими словами если к моменту нормализации спреда текущая цена 1.5800 или меньше, советник покупку откроет. Если цена 1.5801 или больше, то не откроет.

Подытожим: Если в заданном временном диапазоне условия для входа были выполнены, советник открывает позицию с заданными параметрами и больше ничего не делает.
  • +2
  • Просмотров: 4648
  • 30 октября 2016, 12:07
  • Kashtan
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
+1
avatar

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

  • 30 октября 2016, 14:02
+
0
:)  Просто бывает обидно что спред к примеру нормализовался к часу ночи только и цена убежала. Значит сделку пропускаем. А ты ждал не спал:D  Для упрощения в этом плане сов и нужен.
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 30 октября 2016, 14:40
комментарий был удален 2016-10-30 15:09:33 Kashtan

+
0
Вопрос по последнему комменту отпал, поэтому я его удалил.
Редактирован: 30 октября 2016, 15:11
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 30 октября 2016, 15:10
+
+5
Посмотрю, когда время придет. Только вот без этого! :D 

avatar

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

  • 30 октября 2016, 16:14
+
0
:D 
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 30 октября 2016, 16:46
+
0
Готово: www.opentraders.ru/downloads/1376/



//+------------------------------------------------------------------+
//|                                                      Nedelka.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 string StartTime  = "00:00";  // время начала торговли
extern string EndTime    = "08:00";  // время окончания торговли
extern int StopLoss      = 2000;     // лось
extern int TakeProfit    = 3000;     // язь
extern int Spread        = 20;       // спред
extern int Delta         = 300;      // дельта
extern int BuySell       = 0;        // 0-buy 1-sell
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   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,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);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   datetime End=StringToTime(EndTime);
   datetime Start=StringToTime(StartTime);
   datetime Weak=iTime(NULL,PERIOD_W1,0);
   double OpenPrice=iOpen(NULL,PERIOD_W1,1);
   double spread=MarketInfo(NULL,MODE_SPREAD);

   if(t!=Weak)
     {
      if(TimeCurrent()>Start && TimeCurrent()<End)
        {
         if(CountTrades()<1 && spread<Spread)
           {
            if(BuySell==0 && Ask<OpenPrice+Delta*Point)
              {
               PutOrder(0,Ask);
              }

            if(BuySell==1 && Bid>OpenPrice-Delta*Point)
              {
               PutOrder(1,Bid);
              }
            t=Weak;
           }
        }
     }

   Comment("\n Spread: ",spread,"\n OpenPrice: ",OpenPrice);
  }
//+------------------------------------------------------------------+

Редактирован: 1 ноября 2016, 10:22
avatar

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

  • 31 октября 2016, 09:33
+
0
Благодарствую:)  Жалко что проверить только через неделю удастся
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 31 октября 2016, 21:55
+
0
Андрей перед открытием рынка на три графика ставил советник с разными настройками (и магиками) Один из вариантов был с сильно завышенными дельтой и спредом. Но ни с разу не позже ни одной сделки не открылось
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 8 ноября 2016, 18:59
+
0
Нет предмета для разговора. Ни настроек ни скринов ни логов.
avatar

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

  • 8 ноября 2016, 20:20
+
0
Ок, по идее и на меньшем т.ф. должно работать? На Н1 поставить?
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 8 ноября 2016, 20:52
+
0
Текущий тф любой может быть.
avatar

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

  • 8 ноября 2016, 20:56
+
0
Выбраны настройки

Запущен

Сделок нет

avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 8 ноября 2016, 21:11
+
0
У тебя время начала эксперта 21:00, время на компе 21:09, а время в терминале наверняка 20:00 (с прошлой недели так). Если советник ориентируется на время в терминале, то понятно, почему нет сделок.
avatar

  27  Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..

  • 8 ноября 2016, 22:44
+
0
Вот сделал запуск советника позже терминального время.

Всё равно не открыл
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 8 ноября 2016, 23:27
+
0
Из-за этой строки в коде не срабатывает:
if(TimeCurrent()>Start && TimeCurrent()<End)

Если бы ты задал время с 22:25 до 23:45, к примеру, то код сработал.
А ты задаешь с 22:25 до 08:00. Случилось 22:26 — это больше Start, НО никак не меньше End (08:00). Код не продуман для задания тобой времени окончания по цифрам меньше времени старта.
avatar

  27  Oxy Сообщений: 3430 - ..ιllιlι.lι.ιllι.ιlι..

  • 9 ноября 2016, 00:17
+
0
Спасибо Ксюша<img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' <img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '>&nbsp; '>&nbsp;  Будем надеяться, Андрей поправит! Мне то желательно, чтоб время старта было до полуночи, а окончания после. Похоже в ТЗ вместо «Окончание торговли» надо было написать «Через сколько часов не торговать» или что то типа того*think* 
Редактирован: 9 ноября 2016, 06:38
avatar

  19  Kashtan Автор Сообщений: 739 - Игорь

  • 9 ноября 2016, 06:09
+
0
Поправил: www.opentraders.ru/downloads/1376/




//+------------------------------------------------------------------+
//|                                                      Nedelka.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      = 2000;     // лось
extern int TakeProfit    = 3000;     // язь
extern int Spread        = 20;       // спред
extern int Delta         = 300;      // дельта
extern int BuySell       = 0;        // 0-buy 1-sell
extern int StartHour     = 0;        // час начала торговли
extern int StartMin      = 30;       // минута начала торговли
extern int EndHour       = 23;       // час окончания торговли
extern int EndMin        = 30;       // минута окончания торговли
extern int Slip          = 30;       // реквот
extern int Magic         = 123;      // магик

datetime t=0;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   Comment("");
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Comment("");
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutOrder(int type,double price)
  {
   int r=0;
   color clr=Green;
   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,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);
  }
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. 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()
  {
   datetime Weak=iTime(NULL,PERIOD_W1,0);
   double OpenPrice=iOpen(NULL,PERIOD_W1,1);
   double spread=MarketInfo(NULL,MODE_SPREAD);

   if(t!=Weak)
     {
      if(isTradeTimeInt(StartHour,StartMin,EndHour,EndMin))
        {
         if(CountTrades()<1 && spread<Spread)
           {
            if(BuySell==0 && Ask<OpenPrice+Delta*Point)
              {
               PutOrder(0,Ask);
              }

            if(BuySell==1 && Bid>OpenPrice-Delta*Point)
              {
               PutOrder(1,Bid);
              }
            t=Weak;
           }
        }
     }

   Comment("\n Spread: ",spread,"\n OpenPrice: ",OpenPrice);
  }
//+------------------------------------------------------------------+

avatar

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

  • 9 ноября 2016, 06:58

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