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

Рейтинг 2151



РЕКОМЕНДУЮ



Советник для MQ6 , А вот и попался " Мартин " в коробку !

Андрей! доброго времени суток :) 
Есть просьба написать советник, который будет: мультивалютный для 4х и 5и знаков MQ4

Работать будет по индикатору ( пробитие временной коробки ): BreakOut…
BreakOut-EAGLE__ut2DaMax.ex4 (6 Kb)
Индикатор формирует временную коробку, например с 5.15 до 8.23 утра и использует её до 23.00 сего дня. Выставляет на этих границах ордера: Бай стоп и Сел стоп, с возможностью настроек ТП в п.п. и (USD ) валюте депо. В том случае если произошло закрытие по ТП, а время до которого работает советник не прошло (23.00 ), то советник выставляет сразу после ТП новые отложенные ордера: Бай стоп и Сел стоп на границах временной коробки. Лот у них одинаковый изначально, а при срабатывании одного из них, второй отложенный и следующие которые выставятся, сразу увеличиваются на заданный процент в настройках. После закрытия по ТП, лот возвращается по умолчанию. Далее, при возвращении цены в коробку, советник продолжает работать до 23.00 и если есть открытые ордера он их сопровождает до ТР не опираясь на раб. время ( 23.00 ).
2.jpg (154 Kb)

Ещё, функцию можно было поменять на Бай лимит и Сел лимит для понимания какая стратегия лучше.
ДА… работа на всех ТФ и ДЦ

Пример работы советника:
Например, сработал Бай стоп, по 0.01, то Сел стоп сразу изменился на заданный процент в настройках. Цена пошла к ТП и закрылся ордер. Советник выставляет сразу отложенные ордера заново с начальным лотом, до окончания рабочего времени (23.00 ).По окончании рабочего времени советник удаляет не активные отложенные ордера до появления новой временной коробки. Если цена развернулась и пробила вниз временную коробку то сработал Сел стоп с увеличенным лотом и при таком раскладе советник выставляет сразу новый Бай стоп с увеличенным лотом на заданный процент.

1.jpg (125 Kb)

Цена достигла ТП советник возвращает лот по умолчанию.Если цена снова вернулась и пробила коробку в верх сработал Бай стоп с увеличенным лотом и советник сразу выставляет новый Сел стоп с увеличением на заданный процент. И так пока не закроется по ТП.

Настойки Сова:

Настройки индикатора BreakOut…
GMT…
Время начала формирования коробки: 05.15
Время завершения формирования коробки: 08.23
Время окончания работы сова: 23.00
Ширина коробки в п.п.: 00, если превышение то не торгуем!
BUY SELL stop // BUY SELL limit
Начальный лот ордеров: 0.01
Максимальный Лот: 10.00
Процент увеличения отложенного ордера: 0.0 %
Трал: вкл.// выкл.
Дельта: = ( 0 ) выставление ордеров по границам коробки, если = ( 3 ) на 3 п.п. выше и ниже коробки.
ТР для одной вал. пары:… п.п.
ТР для одной вал. пары:… USD
ТР ( Общий, если несколько валют ) для всех вал. пар:… пп.
ТР ( Общий, если несколько валют ) для всеж вал. пар:… USD
Магическое число:…

Заранее Благодарен *hi* 
  • +3
  • Просмотров: 5845
  • 28 апреля 2017, 00:33
  • Kolesik
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

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

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

  • 28 апреля 2017, 04:52
+
0
Спасибо, буду ждать
avatar

  8  Kolesik Автор Сообщений: 94

  • 28 апреля 2017, 07:57
+
0
Доброго времени суток Андрей. Хочу поинтересоваться мой заказ какой на очереди на сегодняшний день :) 
avatar

  8  Kolesik Автор Сообщений: 94

  • 7 мая 2017, 10:37
+
0
Только если совсем с заказами тишина будет посмотрю, а сейчас хватает. Чем проще у вас будет заказ тем больше шансов увидеть его в готовом виде.
avatar

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

  • 7 мая 2017, 15:32
+
0
Понял! А если стратегию оставляем и делаем для одной валютной пары, так проще?
avatar

  8  Kolesik Автор Сообщений: 94

  • 7 мая 2017, 20:49
+
0
С буферов вашего индикатора не вытащишь никаких значений и тем более не знаешь что там у вас внутри зашито. А с нуля писать индикатор и советник это не ко мне.
avatar

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

  • 8 мая 2017, 12:33
+
0
avatar

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

  • 8 мая 2017, 13:08
+
0
Андрей вот ссылка где по этому индикатору делалась ТЗ, и всё работает, просто стратегия другая zakaz.opentraders.ru/24871.html, посмотри пожалуйста.
avatar

  8  Kolesik Автор Сообщений: 94

  • 8 мая 2017, 20:44
+
0
Доброго времени суток Андрей. Если я правильно понял, то проблема в файле с индикатором который я предоставил, но ведь есть рабочий индикатор, по которому и Вы помогли с написанием советника. Могу я попросить взять с данного заказа ( zakaz.opentraders.ru/24871.html ) этот индикатор и по нему написать советник по ТЗ.
А вариант (в упрощенном виде ) очень отличается от моей стратегии ( ТЗ ).Зарание благодарен за понимание и Ваш труд. .:) 
avatar

  8  Kolesik Автор Сообщений: 94

  • 10 мая 2017, 21:47
+
0
В индикаторе BreakOutPANCA-EAGLE также не индикаторных буферов и вытащить сигнал будет достаточно проблематично.
avatar

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

  • 11 мая 2017, 02:13
+
0
Нахрена вам индюк? Простой цикл, если часовых баров не достаточно, то минутных. Max Min. Хотите — линии рисуйте. Они привязаны к ценам — проще код потом, да и нагляднее.
avatar

  7  kvashnin007 Сообщений: 613 - Андрей

  • 17 декабря 2024, 15:47
+
0
Андрей я не очень понимаю, что это значит, единственное знаю этот советник ( zakaz.opentraders.ru/24871.html ) на реале на ВПС проработал месяц без проблем, но не оправдал себя, поэтому и придумалась новая стратегия к нему. Глядя на все твои произведения, верю в то, что всё получится. Заранее благодарен за твою помощь *hi* 
avatar

  8  Kolesik Автор Сообщений: 94

  • 11 мая 2017, 08:06
+
+1
Свой набросок могу доработать, а чужой код не правлю.
avatar

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

  • 11 мая 2017, 17:10
+
0
Андрей! не принцип какой индикатор будет в основе, для меня интерес, стратегия, которая описана в ТЗ.Если у тебя есть возможность доработать свой набросок по ТЗ то я только буду рад..Заранее благодарен за твоё внимание и содействие.Буду ждать с нетерпением доработанную версию. Заранее благодарен за твою отзывчивость *hi* 
avatar

  8  Kolesik Автор Сообщений: 94

  • 11 мая 2017, 22:56
+
0
Просьба всегда скидывать картинки в топик:



avatar

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

  • 12 мая 2017, 15:04
+
0
Сколько за такой советник запросили на платном? Сразу видно чтобы сделать по ТЗ надо написать кучу уникальных функций, а это недешево :) 
avatar

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

  • 12 мая 2017, 15:30
+
0
Вот такой у меня получился вариант: www.opentraders.ru/downloads/1576/

avatar

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

  • 12 мая 2017, 16:38
+
0
Доброго времени суток Андрей. Что можно сказать, ты просто ГОЛОВА!!! Снимаю шляпу *hi*  за твою работу, у тебя всё получилось. *bravo* . Есть маленький момент который хочу попросить подправить: После окончания рабочего времени (23.00 ) все не сработавшие ордера должны удалиться



Иначе остаются ордера которые висят и не дают открыться новым по коробке следующего дня.
Пояснение: после срабатывания ТР выставляются новые отложки по коробке с начальным лотом, и если они не сработали до 23.00 они удаляются.
При тестировании заметил, ещё один момент: при срабатывании ТР например Бай ордера остаётся открытый Сел а он должен закрыться вместе с ТР Бай ордера.

Ещё раз хочу поблагодарить за твою работу .*hi* 

avatar

  8  Kolesik Автор Сообщений: 94

  • 14 мая 2017, 14:53
+
0
я тоже хочу отблагодарить
первого это автора идеи!!! спасибо большое!!!
Второго и главного реализатора идеи АМ2 огромное спасибо!!!
avatar

  9  maksGruv Сообщений: 340

  • 14 мая 2017, 17:15
+
0
Да! Андрей я не обращался к платным, поэтому не в курсе сколько. Думаю что каждый кто получит выгоду от его работы сам тебя отблагодарит по совести.
avatar

  8  Kolesik Автор Сообщений: 94

  • 14 мая 2017, 18:46
+
0
только его немного наверное надо подправить, отложки иногда две не встаю, встает иногда одна на селл\бай.
Автор правильно подметил по поводу закрытия не отработанных отложек, и еще заметил, когда в тестере прогонял, что было такое что лось не срабатывал(( но идея хорошая)
avatar

  9  maksGruv Сообщений: 340

  • 14 мая 2017, 18:56
+
0
Доброго времени суток Андрей.
Хочу поинтересоваться у тебя, на этой недели получиться ( Свой набросок могу доработать, ), уж очень хочется потестить.
Заранее благодарен. *uptrend* 
avatar

  8  Kolesik Автор Сообщений: 94

  • 16 мая 2017, 22:22
+
0
Андрей! я понял. Сделай пожалуйста хотя бы, чтоб после ТР удалялись все отложки на данный день. То есть, сработал ТР на сегодня рабочий день окончен.
Заранее благодарен.
avatar

  8  Kolesik Автор Сообщений: 94

  • 19 мая 2017, 07:26
+
0
Индюк поинтереснее.

#property version     "2.00"
//------------------------------------------------------------------
#property indicator_chart_window
#property indicator_buffers 4
#property indicator_color1  clrGainsboro
#property indicator_color2  clrGainsboro
#property indicator_color3  clrRoyalBlue
#property indicator_color4  clrRed
#property strict
//---
input string    inpStartTime = "00:00";      // Start time
input string    inpEndTime   = "04:00";      // Ending time
//---
double  fillu[],filld[],limu[],limd[],histou[],histod[],histoc[];
//------------------------------------------------------------------
int OnInit()
{  
      IndicatorBuffers(7);
      SetIndexBuffer(0,fillu); SetIndexStyle(0,DRAW_LINE,EMPTY,2);
      SetIndexBuffer(1,filld); SetIndexStyle(1,DRAW_LINE,EMPTY,2);
      SetIndexBuffer(2,limu);  SetIndexStyle(2,DRAW_LINE,EMPTY,2);
      SetIndexBuffer(3,limd);  SetIndexStyle(3,DRAW_LINE,EMPTY,2);
      SetIndexBuffer(4,histoc);
      SetIndexBuffer(5,histod); 
      SetIndexBuffer(6,histou);
      IndicatorShortName("Channel "+inpStartTime+" "+inpEndTime+" Breakout Lite");
      
      if (_Period>=PERIOD_D1)
         {
         Alert("Indicator can work on time frames less than daily only");  return(INIT_FAILED);
         }
   return(INIT_SUCCEEDED);
}
//------------------------------------------------------------------
void OnDeinit(const int reason) { }
//------------------------------------------------------------------
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
{
      int i,counted_bars = prev_calculated;
      if(counted_bars < 0) return(-1);
      if(counted_bars > 0) counted_bars--;
            int limit=MathMin(rates_total-counted_bars,rates_total-1);
      
      int _secondsStart = (int)StringToTime("1970.01.01 "+inpStartTime);
      int _secondsEnd   = (int)StringToTime("1970.01.01 "+inpEndTime);
      for (i=limit;i>=0; i--)
         {
         datetime _startTime = StringToTime(TimeToString(Time[i],TIME_DATE))+_secondsStart;
         datetime _endTime   = StringToTime(TimeToString(Time[i],TIME_DATE))+_secondsEnd;
         double max = ((i<Bars-1) ? limu[i+1] : High[i]), min = ((i<Bars-1) ? limd[i+1] : Low[i]);
         
         if (_startTime<= Time[i] && _endTime>=Time[i])
            {
            max = High[i];
            min =  Low[i];
            for (int k=1; i+k>=0 && Time[i+k]>=_startTime; k++)
               {
               max = fmax(max,High[i+k]);
               min = fmin(min,Low[i+k]);
               }
            }                           
         limu[i] = max;
         limd[i] = min;
                 
         if (_startTime<=Time[i] && _endTime>=Time[i])
            { 
            fillu[i]  = max;            
            filld[i]  = min;
            histou[i] = EMPTY_VALUE;
            histod[i] = EMPTY_VALUE; 
            }
         else 
            {  
            fillu[i]  = (limu[i]+limd[i])*0.5;
            filld[i]  = (limu[i]+limd[i])*0.5;
            histoc[i] = (i<Bars-1) ? (Close[i]>limu[i]) ? 1 : (Close[i]<limd[i]) ? -1 : (Close[i]<limu[i] && Close[i]>limd[i]) ? 0 : histoc[i+1] : 0;  
            if (histoc[i] == 1) 
               { 
               histou[i] = High[i]; 
               histod[i] = Low[i]; 
               }
            if (histoc[i] ==-1) 
               { 
               histod[i] = High[i]; 
               histou[i] = Low[i];
               }      
            }  
         }      
   return(rates_total);
}
//-----------------------------------------------------------------
avatar

  7  kvashnin007 Сообщений: 613 - Андрей

  • 24 декабря 2024, 09:29
+
0
Да и алгоритм убогий.
avatar

  7  kvashnin007 Сообщений: 613 - Андрей

  • 24 декабря 2024, 09:31
+
0


Образовалась временнAя коробка.
Делим ее пополам. Имеем три линии-цены. Цена находится между внешними линиями. И чаще линии ближе stoplevel.
Поэтому, отложками здесь сработать практически не возможно. Надо открывать ордера по пересечению линий.
Ценой Bid или Ask — варианты на рассмотрение.

Далее ожидаем три события:
— пересечение вехней линии снизу вверх (сверху вниз — не реагируем);
— пересечение нижней линии сверху вниз (снизу вверх — не реагируем);
— пересечение средней линии сверху вниз или снизу вверх;

Так как будем работать с двумя полосами (верхней и нижней), для упрощения логики предлагаю Ордера,
соответствующие им, отличить по magik number. Например верхняя полоса — Magic, а нижняя — Magic+1.

Итак — три события.

— Если цена пробила верхнюю линию, то открываем OP_BUY с Magic. Лот определяется по следующим параметрам:
если сумма лотов OP_SELL с Magic равна нулю, то лот равен стартовому лоту;
если сумма лотов OP_SELL с Magic больше нуля, то суммарный лот OP_BUY с Magic должен оказаться
в два раза больше, чем сумма лотов OP_SELL с Magic. Если меньше — добавляем до удвоенной суммы.
Lot(OP_BUY,Magic) = SummLot(OP_SELL,Magic)*2 — SummLot(OP_BUY,Magic);

Прошу заметить: при колебаниях цены, если цена пробила верхнюю линию сверху вниз, мы ничего не делаем.
— При пробитии нижней линии сверху вниз открыватся OP_SELL аналогично пересечению верхней, но с Magic+1.
Lot(OP_SELL, Magic+1) = SummLot(OP_BUY, Magic+1)*2 — SummLot(OP_SELL, Magic+1);

— С пересечением средней линии все гораздо интереснее:
Открываются два ордера. OP_BUY с Magic+1 и OP_SELL с Magic.

Лоты определяются в следующем порядке:

— если цена пробила среднюю линию снизу вверх, то

Для OP_BUY с Magic+1
* если суммарный лот OP_SELL с Magic+1 равен нулю,
то лот OP_BUY с Magic+1 равен удвоенному стартовому лоту.
* Если цена также пробила среднюю линию снизу вверх, но суммарный лот OP_SELL с Magic+1 больше нуля,
то суммарный лот OP_BUY с Magic+1 должен оказаться в два раза больше, чем сумма лотов OP_SELL с Magic+1.
Если меньше — добавляем до удвоенной суммы. Если равна — ничего не делаем.
Lot(OP_BUY, Magic+1) = SummLot(OP_SELL, Magic+1)*2 — SummLot(OP_BUY, Magic+1);

Для OP_SELL с Magic
* если суммарный лот OP_BUY с Magic равен нулю,
то лот OP_SELL с Magic просто равен стартовому лоту.
* Если цена также пробила среднюю линию снизу вверх, но суммарный лот OP_BUY с Magic больше нуля,
то суммарный лот OP_SELL с Magic должен оказаться в два раза больше, чем сумма лотов OP_BUY с Magic.
Если меньше — добавляем до удвоенной суммы. Если равна — ничего не делаем.
Lot((OP_SELL, Magic) = SummLot(OP_BUY, Magic)*2 — SummLot(OP_SELL, Magic);

— если цена пробила среднюю линию сверху вниз, то

тоже открываем два ордера OP_BUY с Magic+1 и OP_SELL с Magic,
только лоты рассчитываются симметрично наоборот.

Для лучшего понимания:

каждая полоса имеет свои ордера со своими мagic. Снизу полосы ордера на продажу. Сверху — на покупку.
Наша задача следить, чтобы лотов на границах полосы суммарно было в два раза больше, чем
на противоположной границе этой же полосы. Нюансы только в начале открытия ордеров каждой полосы.

А вообщето выше практически написан код советника.
Подправить только в код mql4. Ну и индюк, конечно. Хотя можно и без него.

Получение прибыли и ограничение убытков в следующий раз, если комe-то будет интересно.
Можно простоограничиться тралом прибили-убытка. Но есь варианты и поинтереснее.
avatar

  7  kvashnin007 Сообщений: 613 - Андрей

  • 24 декабря 2024, 13:42
+
0
Это было всего лишь открытие ордеров.Самое интересное потом.
Не интересно? Да и ладно.
Всем удачи.

Редактирован: 26 декабря 2024, 08:29
avatar

  7  kvashnin007 Сообщений: 613 - Андрей

  • 26 декабря 2024, 08:25

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