Kashtan
Игорь

 
Уровень 19

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


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

Рейтинг 2146



РЕКОМЕНДУЮ



Очередной советник

Прошу Андрея написать советник по такому ТЗ

Советник открывает два рыночных ордера на выбранном таймфрейме выбранного инструмента в противоположные стороны
одинаковым объёмом и уровнем тейка и стопа.
Для открытия позиций должны быть соблюдены следующие условия:
Каждый раз на открытии новой свечи советник измеряет расстояние от хая до лоу за выбранный период (пункт 5)
Если эта цифра вне пределах диапазона (пункты 6 и 7), советник дожидается открытия следующей свечи.
Если же расстояние соответствует желаемому то есть больше или равно числу заданному в пункте 6 и меньше(равно) числу заданному в пункте 7,
советник производит следующие действия:
а) Советник полученную цифру округляет в большую либо меньшую сторону(на усмотрение программиста) до того значения, которое делится на 10.
Пример: Расстояние от Хай/Лоу за N баров 546 пунктов по пяти знаку. Если 546 округлить в меньшую либо большую сторону, получиться 540 или 550.
Оба числа делятся на десять! Предположим советник округлил в плюс и получил 550.
б) Сначала 550 советник должен разделить на 10 (55) Далее 55 умножить на значение заданное в пункте 8. Пусть это будет цифра 3.
В итоге должно получиться 165
в) После этого советник делит для себя изначальное расстояние (546) на на три условные части (сверху в низ 1, 2, 3).
Зонам под номерами один и три достаётся тот самый результат (165), то есть приблизительно по 30 процентов от общего числа.
А вот центральная часть 2 автоматически получает всё остальное. И вот если в этом момент текущая цена находится в рамках этой части 2, советник
и открывает ордера! Если же цена за пределами центральной части, советник возвращается в режим ожидания открытия новой свечи, чтоб начать процесс снова.
Если всё совпало и ордера были открыты, советник ждёт, когда оба ордера закроются по тейку либо стопу. Если на момент окончания работы советника
есть открытая сделка, советник закрывает её принудительно либо не закрывает (желателен выбор в настройках), или хотя бы пусть закрывает по умолчанию

1. Время работы советника
2. Стоп для ордеров
3. Тейк для ордеров
4. Объём для ордеров
5. Количество баров для расчёта
6. Минимальное расстояние в пунктах от хая до лоу
7. Максимальное расстояние в пунктах от хая до лоу
8. Множитель для десятины
  • +3
  • Просмотров: 4798
  • 29 апреля 2016, 20:34
  • Kashtan
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
После выходных смотреть буду.
avatar

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

  • 29 апреля 2016, 21:02
+
0
Я сделал набросок, который откроет в средней трети диапазона. только какой смысл во всем этом?


//+------------------------------------------------------------------+
//|                                                      Kashtan.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 BarsCount     = 20;       // баров для расчета
extern int MaxDelta      = 1000;     // максимальное расстояние от хая до лоу
extern int MinDelta      = 100;      // минимальное расстояние от хая до лоу
extern int Mnogitel      = 3;        // множитель для десятины
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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double h = High[iHighest(NULL,0,MODE_HIGH,BarsCount,0)];
   double l = Low[iLowest(NULL,0,MODE_LOW,BarsCount,0)];

   if(CountTrades()<1 && t!=Time[0])
     {
      if((h-l)>MinDelta*Point && (h-l)<MaxDelta*Point)
        {
         if(Bid>(l+(h-l)/3) && Bid<(h-(h-l)/3))
           {
            PutOrder(0,Ask);
            PutOrder(1,Bid);
            t=Time[0];
           }
        }
     }

   Comment("\n Delta: ",(h-l)/Point,
           "\n High: ",h,
           "\n Low: ",l,
           "\n h-(h-l)/3: ",h-(h-l)/3,
           "\n l+(h-l)/3: ",l+(h-l)/3);
  }
//+------------------------------------------------------------------+

avatar

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

  • 29 апреля 2016, 21:59
+
0
Я в двух словах не могу объяснить:)  Если хотите, подробно опишу
avatar

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

  • 29 апреля 2016, 22:05
+
0
хотя варианты разные могут быть
avatar

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

  • 29 апреля 2016, 22:06
+
0
Основная задумка, это если цена гуляла энное количество баров в пределах заданного диапазона, то когда она в очередной раз оказалась приблизительно по середине этого диапазона и открылись ордера, велика вероятность того что она ещё какое то время погуляет:)  А значит оба ордера с относительно не большим тейком будут отработаны. Главное чтоб вверх или вниз цена не полетела далеко и безоткатно…
avatar

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

  • 29 апреля 2016, 22:10
+
0
Второй вариант этой идеи состоит в том, чтоб при появлении условий вместо рыночных ордеров ставились отложки на сами экстремумы либо не на них а с дельтой(±). Если такой вариант не сложно будет добавить в этот код, было бы замечательно)) Пока погоняем то что есть. Спасибо!:) 
avatar

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

  • 29 апреля 2016, 22:15
+
0
Смотрите гоняйте потом напишите что поправить.
www.opentraders.ru/downloads/1164/
Редактирован: 30 апреля 2016, 22:54
avatar

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

  • 30 апреля 2016, 21:58
комментарий был удален 2016-04-30 22:47:22 Kashtan

+
0
Андрей вы из второй версии которая в базе убрали множитель. Кроме этого там есть ещё какие изменения? и как без него будет работать:) 
avatar

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

  • 2 мая 2016, 16:43
+
0
там множитель не учитывался, просто от средней трети торгует.
avatar

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

  • 2 мая 2016, 16:45
+
0
А в первой версии он работает или нет? Чтоб если что зону для открытия сделок можно было сузить или расширить
Редактирован: 2 мая 2016, 17:00
avatar

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

  • 2 мая 2016, 16:53
+
0
вот в этом условии можно расширить :) 
if(Bid>(l+(h-l)/3) && Bid<(h-(h-l)/3))
avatar

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

  • 2 мая 2016, 17:29
+
0
Вот сейчас советник при установке на график евродоллар м5 сразу открывает ордера. При ручном закрытии переоткрывает их. А при изменении значения здесь if(Bid>(l+(h-l)/3) && Bid<(h-(h-l)/3)) на 1 или 5 вместо 3 тоже после компиляции и перезапуске советника сразу ордера открывает!
avatar

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

  • 2 мая 2016, 18:01
+
0
Ан нет, виноват. При низких значетинях 1,2 не открывает. Но вот с переоткрытием закрытых ордеров какая то странная фигня. Он тот переоткрывает то нет. Допустим первую пару удалил, он на их место сразу новую ставит. А когда и эти новые удалил — уже не ставит*think* 
avatar

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

  • 2 мая 2016, 18:13
+
0
Возможно это только при ручном закрытии так, а при закрытии по тейку или лосю не будет новые делать. Но всё равно не порядок:D 
avatar

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

  • 2 мая 2016, 18:17
+
0
Проверил. После закрытия по тейку или лосю переоткрывает
avatar

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

  • 2 мая 2016, 18:57
+
0
О чем собственно речь? Нужны скрины настройки логи.
avatar

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

  • 2 мая 2016, 20:30
+
0
Приветик<img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '>&nbsp;  Перед скринами всего хозяйства хочу уточнить, не составит ли труда сделать две вещи не учтённые в тех задании:
1. Чтоб советник считал не только «середину» по значению в условии«if(Bid>(l+(h-l)/3) && Bid<(h-(h-l)/3))» но и так же и стоплосс сам рассчитывал(про тейк пока не определился). Что значит рассчитывал: То есть если был сформирован канал в 1000 пунктов, советник сам бы ставил лося за пределами канала на расстоянии в процентах от ширины канала. Например: Лоу 1.02300, Хай 1.03300. Если во входном параметре для этого дела было поставлено 10(%) и произошла покупка, то стоп лосс ставиться на десять процентов от ширины канала ниже лоу, то есть на уровень 1.02200. Если 20 процентов поставить, значит лось встанет на 1.02100
2. Если сработал лось, то в туже сторону что и лось окрывается ордер, то есть противоположный убыточной сделке. Была покупка и закрылась по лосю? значит сразу же открылась продажа. Для этого третьего ордера в настройках нужны свои параметры объёма, тейка и лося
Редактирован: 3 мая 2016, 17:53
avatar

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

  • 3 мая 2016, 17:51
+
0
сначала то что есть отладим
avatar

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

  • 3 мая 2016, 18:55
+
0
ок! я пока гоняю на старших таймфреймах, дабы выявить — переоткрывает ли он на текущей свечке после отработки ордеров(для ускорения процесса задаю минимальные тейки и стопы) или нет. Как точно всё выясню отпишусь. Спасибо!
Редактирован: 3 мая 2016, 19:31
avatar

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

  • 3 мая 2016, 19:30
+
0
Пока могу ответственно заявить, что на H1 вообще не открывает. Не на текущей свече во время установки сова, не на следующей


На нескольких парах с разным магиком для точности поставил, не помогло
Здесь if(Bid>(l+(h-l)/5) && Bid<(h-(h-l)/5)) скомпилировано так. С параметром 5 должен всегда открывать
avatar

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

  • 5 мая 2016, 22:09
+
0
То есть получается что:)  На одних Т.Ф. открывает и переоткрывает, а на других не открывает вообще
avatar

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

  • 5 мая 2016, 22:12
+
0
Поставлю на отладку посмотрю, для начала на Н1.
avatar

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

  • 6 мая 2016, 06:19
+
0
На нескольких парах с разным магиком для точности поставил, не помогло
Здесь if(Bid>(l+(h-l)/5) && Bid<(h-(h-l)/5)) скомпилировано так. С параметром 5 должен всегда открывать



Еще на скрине видно что цена не попадает в диапазон, будьте внимательны с коэффициентами.
avatar

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

  • 6 мая 2016, 06:48
+
0
А так если все выставлено верно работает.



//+------------------------------------------------------------------+
//|                                                     Diapazon.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 double Diapazon   = 3;        // диапазон
extern int StopLoss      = 2000;     // лось
extern int TakeProfit    = 3000;     // язь
extern int BarsCount     = 20;       // баров для расчета
extern int MaxDelta      = 1000;     // максимальное расстояние от хая до лоу
extern int MinDelta      = 100;      // минимальное расстояние от хая до лоу
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);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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);
              }
           }
        }
     }
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double h = High[iHighest(NULL,0,MODE_HIGH,BarsCount,0)];
   double l = Low[iLowest(NULL,0,MODE_LOW,BarsCount,0)];

   if(CountTrades()<1 && t!=Time[0])
     {
      if((h-l)>MinDelta*Point && (h-l)<MaxDelta*Point)
        {
         if(Bid>(l+(h-l)/Diapazon) && Bid<(h-(h-l)/Diapazon))
           {
            PutOrder(0,Ask);
            PutOrder(1,Bid);
            t=Time[0];
           }
        }
     }

   Comment("\n Delta: ",(h-l)/Point,
           "\n High: ",h,
           "\n Low: ",l,
           "\n h-(h-l)/3: ",h-(h-l)/3,
           "\n l+(h-l)/3: ",l+(h-l)/3);
  }
//+------------------------------------------------------------------+

Редактирован: 6 мая 2016, 07:00
avatar

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

  • 6 мая 2016, 06:55
+
0
Еще вынес в настройки коэффициент для удобства.

extern double Diapazon = 3;  // диапазон

Редактирован: 6 мая 2016, 06:59
avatar

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

  • 6 мая 2016, 06:57
+
0
А, значит я не совсем правильно понимаю как работает этот коэффициент. В строке для него два значения для лоу и хая. Что это значит? Советник от середины считает? То есть если Лоу 1.01000, Хай 1.02000 (дельта выходит тыща) Если при этом написать так if(Bid>(l+(h-l)/2) && Bid<(h-(h-l)/4)) он от середины дельты (1.01500) отложит вниз 200 пунктов и вверх 400 и в этом промежутке будет сделки открывать? или как?:) 
avatar

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

  • 6 мая 2016, 07:00
комментарий был удален 2016-05-06 07:10:00 Kashtan

+
0
if((h-l)>MinDelta*Point && (h-l)<MaxDelta*Point)

Если хай 1.02000 а лоу 1.01000 дельта тыща и в настройках миндельта 200 максдельта 2000, тогда откроет.
второе
if(Bid>(l+(h-l)/Diapazon) && Bid<(h-(h-l)/Diapazon))

Диапазон = 3. Если цена больше лоу плюс 1000/3=333 и меньше хай минус 333 пункта, то открываем позы. примерно так :) 
avatar

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

  • 6 мая 2016, 07:13
+
0
Спасибо Андрей! После работы бум разбираться
avatar

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

  • 6 мая 2016, 07:21
+
0
Добавьте мартин пожалуйста, чтоб после лося новая пара ордеров другим лотом открывалась
avatar

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

  • 6 мая 2016, 17:19
+
0
Какой минимальный Т.Ф. для тестов рекомендуете?
avatar

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

  • 6 мая 2016, 17:24
комментарий был удален 2016-05-06 18:06:03 Kashtan

+
0
Ещё вот такое странное дело(  На Н1 так же с минимальным лосём и тейком советник открыл два ордера. После того как они отработались по лосю, новую пару не открыл на текущей свече(что верно). А на открытии новой свечи условия позволяли для открытия новой пары. И он открыл, но не два ордера а один


Тут после установки сова на график и открытия им ордеров я почистил журнал. Как видно те ордера закрылись по лосю. А потом только один открылся вместо двух
avatar

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

  • 6 мая 2016, 18:04
+
0
В понедельник поставлю на отладку.
avatar

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

  • 6 мая 2016, 18:51
+
0
В таком виде получше открывает:


//+------------------------------------------------------------------+
//|                                                      Kashtan.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 double Koeff      = 3;        // коэффициент расширения диапазона
extern int StopLoss      = 2000;     // лось
extern int TakeProfit    = 3000;     // язь
extern int BarsCount     = 20;       // баров для расчета
extern int MaxDelta      = 1000;     // максимальное расстояние от хая до лоу
extern int MinDelta      = 100;      // минимальное расстояние от хая до лоу
extern int Slip          = 30;       // реквот
extern int Magic         = 123456;   // магик

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 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);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   double h = High[iHighest(NULL,0,MODE_HIGH,BarsCount,0)];
   double l = Low[iLowest(NULL,0,MODE_LOW,BarsCount,0)];

   if(t!=Time[0])
     {
      if((h-l)>MinDelta*Point && (h-l)<MaxDelta*Point)
        {
         if(Bid>(l+(h-l)/Koeff) && Bid<(h-(h-l)/Koeff))
           {
            while(CountOrders(0)<1) PutOrder(0,Ask);
            while(CountOrders(1)<1) PutOrder(1,Bid);
            t=Time[0];
           }
        }
     }

   Comment("\n Delta: ",(h-l)/Point,
           "\n High: ",h,
           "\n Low: ",l,
           "\n h-(h-l)/3: ",h-(h-l)/3,
           "\n l+(h-l)/3: ",l+(h-l)/3);
  }
//+------------------------------------------------------------------+

avatar

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

  • 6 мая 2016, 19:55
комментарий был удален 2016-05-07 06:50:48 Kashtan

комментарий был удален 2016-05-11 15:12:30 Kashtan

+
0
Андрей вроде бы всё работает норм<img src='http://opentraders.ru/templates/skin/g6h/images/smilies/002.gif' alt=' :) '>&nbsp;  Теперь прошу не дожидаясь следующего месяца это добавить

1. Чтоб советник стоплосс сам рассчитывал(про тейк пока не определился). Что значит рассчитывал: То есть если был сформирован канал в 1000 пунктов, советник сам бы ставил лося за пределами канала на расстоянии в процентах от ширины канала. Например: Лоу 1.02300, Хай 1.03300. Если во входном параметре для этого дела было поставлено 10(%) и произошла покупка, то стоп лосс ставиться на десять процентов от ширины канала ниже лоу, то есть на уровень 1.02200. Если 20 процентов поставить, значит лось встанет на 1.02100
2. Если сработал лось, то в туже сторону что и лось окрывается ордер, то есть противоположный убыточной сделке. Была покупка и закрылась по лосю? значит сразу же открылась продажа. Для этого третьего ордера в настройках нужны свои параметры объёма, тейка и лося

Редактирован: 11 мая 2016, 15:16
avatar

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

  • 11 мая 2016, 15:15
+
0
так как пара ордеров открывается не строго в середине канала, подразумевается что для каждого из ордеров лось будет не одинаковый. У одного ордера больше расстояние в пунктах от цены открытия, у другого меньше
avatar

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

  • 11 мая 2016, 15:19
+
0
Мне ждать?:) 
avatar

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

  • 12 мая 2016, 18:13
+
0
Сейчас все только по самому минимуму.
avatar

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

  • 12 мая 2016, 18:38
+
0
Это в такие новые правила или для отдельных пользователей?)
avatar

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

  • 12 мая 2016, 20:23
+
0
У меня новые условия работы здесь на сайте. Кризис сами понимаете :) 
avatar

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

  • 13 мая 2016, 06:50

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