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

Рейтинг 2146



РЕКОМЕНДУЮ



Усреднитель части убыточного ордера

Доброго времени суток, товарищи!

Прошу написать советник-усреднитель части убыточного ордера для мт-4.

В параметрах советника задается:
№ ордера — номер усредняемого открытого ордера;
K ордера — коэффициент (от 0 до 1), это часть объема усредняемого ордера, которую советник усредняет и закрывает (например, задав K ордера = 0.15 при усредняемом ордере объемом 1.00 будет выведено в безубыток и закрыто по ТП 0.15 лота убыточного ордера, соответственно 0.85 лота останется висеть в работе после закрытия сетки ордеров советником);
объем первого ордера (два знака после запятой);
ТП в пунктах (для четырезнака) — тейкпрофит серии ордеров от уровня безубытка (с учетом свопов);
СЛ в пунктах (для четырезнака) — стоп-лосс всей сетки открытых ордеров в пунктах от первого ордера.

Алгоритм работы — открывается первый лот на покупку или продажу (задается в настройках) и выставляется сетка к нему из n лимитных ордеров с шагом h и параметрами k, m увеличения лотности по формуле (k*(объем первого ордера)+m). При срабатывании отложенников сов довыставляет новые отложки (общее количество лимитных ордеров всегда = n). Сетка ордеров закрывается при достижении ТП или СЛ.

На графике должно отображаться: уровень безубытка (с учетом свопов), уровень СЛ и уровень закрытия серии ордеров по ТП.
  • +2
  • Просмотров: 4163
  • 5 марта 2015, 23:06
  • Inthenight
Понравилcя материал? Не забудьте поставить плюс и поделиться в социальной сети!

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

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

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

+
0
Непонятно для меня задание. Ощущение сложилось, что это два разных: то ли сетку ордеров делать, то ли какой-то ордер усреднять.
Я тут недавно сетку из лимитных ордеров делала, может будет интересно вам:
opentraders.ru/downloads/621/
avatar

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

  • 6 марта 2015, 13:23
+
0
Добрый день!
Извиняюсь за сумбурное описание) Но задание именно одно — усреднение части убыточного ордера сеткой.
Пусть имеется ордер N, убыточный. Задача — часть K его объема закрыть при достижении ТП.
Для этого открывается советником сходу ордер на покупку или продажу и выставляется сетка из n лимитных ордеров возрастающими объемами с шагом h от него. За счет сетки ордеров усредняется часть K объема убыточного ордера N. После достижения ТП закрываются все ордера сетки и K объема убыточного ордера. Остается в работе (1-K) объема убыточного ордера.
avatar

  12  Inthenight Автор Сообщений: 77

  • 6 марта 2015, 13:58
+
0
Уже почти поняла ) Не могли бы вы еще все проиллюстрировать примером с ценами и объемами?
avatar

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

  • 6 марта 2015, 14:02
+
0
Попробую)
Имеем ордер бай объемом 1.00, открыт на уровне цены 1.0000
Сейчас цена инструмента 0.9000, т.е. на 4-знаке имеем ордер с убытком -1000
Я хочу вывести в безубыток и закрыть K=0.1 объема ордера
Старт советника — он открывает ордер лотом 0.1 (задал в параметрах совы) пусть тоже бай (задал в параметрах совы) по цене 0.9000. И выстроил сетку n=5 бай лимитов пусть с шагом 10 с просто мартином k=2. Лимитники будут тогда:
цена объем
1) 0.8990 0.2
2) 0.8980 0.4
3) 0.8970 0.8
4) 0.8960 1.6
5) 0.8950 3.2
Уровень безубытка будет
БУ=(цена1*лот1*K+цена2*лот2)/(лот1*K+лот2)=(1.0000*1.00*0.1+0.9000*0.1)/(1.00*0.1+0.1)=0.9500;
После сработки первого лимитника
БУ=(цена1*лот1*K+цена2*лот2+цена3*лот3)/(лот1*K+лот2+лот3)=(1.0000*1.00*0.1+0.9000*0.1+0.8990*0.2)/(1.00*0.1+0.1+0.2)=0.9245, сов довыставил лимитник 0.8940 6.4;
После сработки второго лимитника
БУ=(цена1*лот1*K+цена2*лот2+цена3*лот3+цена4*лот4)/(лот1*K+лот2+лот3+лот4)=(1.0000*1.00*0.1+0.9000*0.1+0.8990*0.2+0.8980*0.4)/(1.00*0.1+0.1+0.2+0.4)=0.9113, сов довыставил лимитник 0.8930 12.8
и т.д. (для простоты без учета свопа).
Допустим ТП задан 10 пп.
Тогда после зацепа лимитника №2 если цена достигла уровня (0.9113+10)=0.9123 закрываются все сработавшие (не сработавшие ордера сетки — удаляются) ордера сетки плюс первый ордер плюс 0.1 объема убыточного ордера. В работе остается ордер объемом 0.90 по цене 1.0000.
Либо в противном случае цена назад не идет, пусть задан СЛ=29 пп., тогда при достижении ценой (0.9000-29)=0.8971 закрываются все ордера сетки (не сработавшие ордера сетки — удаляются) плюс первый ордер. В работе остается ордер объемом 1.00 по цене 1.0000.
Фуух)
avatar

  12  Inthenight Автор Сообщений: 77

  • 6 марта 2015, 15:01
+
0
Тогда после зацепа лимитника №2 если цена достигла уровня (0.9113+10)=0.9123 закрываются все сработавшие (не сработавшие ордера сетки — удаляются) ордера сетки плюс первый ордер плюс 0.1 объема убыточного ордера.
Не уверена, что мы выйдем таким образом в безубыток по заданному объему, но надо проверить *think* 
Либо в противном случае цена назад не идет, пусть задан СЛ=29 пп., тогда при достижении ценой (0.9000-29)=0.8971 закрываются все ордера сетки (не сработавшие ордера сетки — удаляются) плюс первый ордер.
А смысл тогда ставить ордера ниже 0.8971? В нашем примере это №3, №4, №5 ордера
avatar

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

  • 6 марта 2015, 16:09
+
0
Думаю формула верная, единственное что — это нужно еще «прикрутить» свопы.
А по поводу уровня СЛ — это просто для примера он здесь такой), по задумке он, конечно же, ниже нижнего ордера должен быть
Редактирован: 6 марта 2015, 16:16
avatar

  12  Inthenight Автор Сообщений: 77

  • 6 марта 2015, 16:14
+
0
хорошо, попробую запрограммировать, а там будем потом менять, прикручивать…
avatar

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

  • 6 марта 2015, 16:16
+
0
Спасибо!
avatar

  12  Inthenight Автор Сообщений: 77

  • 6 марта 2015, 16:19
+
0
скорее всего после 12-го только получится сделать
avatar

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

  • 6 марта 2015, 18:01
+
0
*hi* 
avatar

  12  Inthenight Автор Сообщений: 77

  • 6 марта 2015, 19:13
+
+2
Пока сделана часть: opentraders.ru/downloads/628/
Входные параметры:
TicketOrder       = 1;          // Номер ордера, на основании которого идет усреднение
K_order           = 0.15;       // Часть объема усредняемого ордера (от 0 до 1)
Step_limit_orders = 100;        // Шаг лимитных ордеров
Max_num_LO        = 5;          // Max количество лимитных ордеров             
Slippage          = 30;         // Проскальзывание цены
MagicNumber       = 5677772;    // Идентификатор ордера - обязательно нужен для лимитных ордеров
// должен отличаться от магиков уже открытых ордеров! 


Итак, у нас есть buy ордер (1 лот), указываем его тикет. Выставляется один buy limit.
Этот buy limit сработал:
— для всех сработавших limit модифицируются take profit по формуле, написанной вами ранее (у всех сработавших ордеров один take profit),
— и выставляется следующий buy limit (но не более max количества).
Если сработал take profit, то удаляются не сработавшие limit ордера.
И закрывается часть лота (0,15 лот) у первоначального buy ордера.
_______________________________________________________________________________________

С sell ордером тоже самое. У нас есть sell ордер (1 лот), указываем его тикет. Выставляется один sell limit.
Этот sell limit сработал:
— для всех сработавших limit модифицируются take profit по формуле, написанной вами ранее (у всех сработавших ордеров один take profit),
— и выставляется следующий sell limit (но не более max количества).
Если сработал take profit, то удаляются не сработавшие limit ордера.
И закрывается часть лота (0,15 лот) у первоначального sell ордера.
_______________________________________________________________________________________
Stop loss-а пока нет.
Проверить можно только на демо.
avatar

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

  • 11 марта 2015, 15:55
+
0
Спасибо, уважаемая Oxy. Буду пробовать то, что имеется пока. Отпишу после теста.
avatar

  12  Inthenight Автор Сообщений: 77

  • 11 марта 2015, 16:00
+
+1
На данном этапе бросился в глаза один нюанс — что лимитники ставятся друг за другом (т.е. после сработки одного выставляется второй и т.д.) А идея была — что сходу ставятся n лимитников (на случай ожидания резкого движения, например, новостного, с целью зацепить их по-больше и на откате закрыть серию). И в каждый момент времени их число =n; а не так, что после n штук их советник прекращает выставлять совсем.
Редактирован: 11 марта 2015, 21:22
avatar

  12  Inthenight Автор Сообщений: 77

  • 11 марта 2015, 21:03
+
0
а-а-а, теперь поняла, зачем лимитники разом нужны. Переделаю.
avatar

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

  • 11 марта 2015, 23:57
+
+1
Сетка ордеров: opentraders.ru/downloads/628/
Ордера подтягиваются к цене.
Единственное, столкнулась с трудностями переноса TP в минус — через раз переносит (и я даже знаю, почему). Решила это просто. Сам TP у открытых ордеров не выставляется, но он рассчитывается и отображается в комментариях слева сверху. И при достижении ценой этого значения — происходит закрытие/удаление ордеров и уменьшение объема ордера, с которым первоначально начали работать.
avatar

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

  • 12 марта 2015, 03:56
+
0
Забрал пробовать
avatar

  12  Inthenight Автор Сообщений: 77

  • 12 марта 2015, 20:20
+
0
Не закончив с одной сеткой, выставил еще одну
prntscr.com/6fzmw7
avatar

  12  Inthenight Автор Сообщений: 77

  • 12 марта 2015, 23:51
+
0
Не закончив с одной сеткой, выставил еще одну
Так вы же хотели, чтобы всегда стояло определенное количество лимитных ордеров. Вижу 7 лимитных ордеров. И куча селлов.
avatar

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

  • 13 марта 2015, 13:35
+
0
В-общем, здесь дело было так). Все селы — отработавшие лимитники советника, до безубытка и закрытия серии оставалось совсем ничего (0.7391), и тут он выставляет новую сетку ордеров с начальным лотом (т.е. лотом от K=0,05)
avatar

  12  Inthenight Автор Сообщений: 77

  • 13 марта 2015, 15:08
+
0
После завершения «оставляет много следов»:) 
prntscr.com/6g02cz
avatar

  12  Inthenight Автор Сообщений: 77

  • 13 марта 2015, 00:16
+
0
Мне развернутые скрины вкладки «эксперты» нужны, чтобы понять, что к чему. А скрины графика мне ничего не говорят — мне не понятно, что вы выставили, что советник, какие ошибки. Это все будет видно только во вкладке «эксперты». Поэтому увеличиваем вкладку во весь экран (можно без графика) и прин-скриним — с самого запуска советника, по его окончание. Возможно, будет несколько скринов.
Редактирован: 13 марта 2015, 13:36
avatar

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

  • 13 марта 2015, 13:32
+
0
Ок, теперь понял, что лучше скринить
avatar

  12  Inthenight Автор Сообщений: 77

  • 13 марта 2015, 15:10
+
0
Вот на примере новозела (в один скрин не влезло):
1) prntscr.com/6g7nvv
2) prntscr.com/6g7o1t
3) prntscr.com/6g7o7g — окончание и график для наглядности
avatar

  12  Inthenight Автор Сообщений: 77

  • 13 марта 2015, 16:03
+
0
на следующей неделе разберусь (у себя на демо запущу)
Прин-скрины не удаляйте, пожалуйста.
avatar

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

  • 14 марта 2015, 03:36
+
+1
Полностью переписала логику советника: opentraders.ru/downloads/628/
Тестируйте. Будут ошибки — прин-скрины вкладки «эксперты»
Я появлюсь после 19-го марта
avatar

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

  • 16 марта 2015, 18:02
+
0
Ок, потестим)
avatar

  12  Inthenight Автор Сообщений: 77

  • 16 марта 2015, 19:48
+
0
Погонял с разными настройками на разных инструментах. Иногда отрабатывает корректно. А приведенные ниже скрины — как раз с некорректной отработкой. Сов не должен двигать сетку ордеров после сработки хотя бы одного лимитника, изменять объемы или перевыставлять ордера. После сработки первого лимитника его задача — либо ждать безубытка (цена идет в "+"), либо выставлять новые лимитники (чтобы их число было равно заданному в любой момент времени) на заданном шаге по мере их открытия (если цена идет в "-", т.е. к лимитникам). Результатом работы совы должно быть закрытие сетки ордеров с увеличивающимся лотом.
На примере новозела — в конце закрывается 7 лотов с одним объемом 0.27 и 2 ордера с объемом 0.54, открытых на повторяющихся ценах.
1) prntscr.com/6hyd8h
2) prntscr.com/6hydgf
3) prntscr.com/6hydnn
4) prntscr.com/6hydtv
5) prntscr.com/6hye0u
avatar

  12  Inthenight Автор Сообщений: 77

  • 17 марта 2015, 20:07
+
0
Т.е. после сработки первого ордера он перевыставляет сетку, если цена откатывает в + на заданный шаг сетки, и идет повторение лотности и цены первого уже открытого ордера сетки новым лимитником
Редактирован: 17 марта 2015, 20:12
avatar

  12  Inthenight Автор Сообщений: 77

  • 17 марта 2015, 20:11
+
0
появлюсь на месте — внимательно изучу, что вы написали и прин-скрины, отпишусь
avatar

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

  • 17 марта 2015, 20:20
+
+1
Сделала, что советник двигает сетку ордеров только пока не сработал ни один ордер, как только один из ордеров сработает, советник только довыставляет ордера до нужного количества:
opentraders.ru/downloads/628/
avatar

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

  • 20 марта 2015, 15:29
+
0
Спасибо, пошел тестить
avatar

  12  Inthenight Автор Сообщений: 77

  • 20 марта 2015, 15:37
+
0
Заметил, что вывел часть в безубыток, а часть убыточного ордера не закрыл. Может, из-за дробности лота он не сумел округлить до двухзнака?*think* 
prntscr.com/6j3ff5
avatar

  12  Inthenight Автор Сообщений: 77

  • 20 марта 2015, 17:14
+
0
Да, в этом случае почему-то не смог округлить до двухзнака. Еще раз перепроверю.
avatar

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

  • 20 марта 2015, 17:52
+
0
Но тогда здесь лот вроде двузнак 0.38, а тоже не закрылся?
1) prntscr.com/6j3q9s
2) prntscr.com/6j3qx5 — одна строчка не убралась)
avatar

  12  Inthenight Автор Сообщений: 77

  • 20 марта 2015, 17:42
+
0
У самого ордера 190602159 какой лот первоначально был? (что он 0,38 не смог закрыть)
avatar

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

  • 20 марта 2015, 17:54
+
0
0.76, ставил к=0.5 в настройках
м.б. ДЦ подвел?
Редактирован: 20 марта 2015, 17:59
avatar

  12  Inthenight Автор Сообщений: 77

  • 20 марта 2015, 17:59
+
0
ДЦ не причем. Попробую избавиться от этой ошибки.
avatar

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

  • 20 марта 2015, 18:49
+
+1
Я всегда нормализую дробное число до допустимых значений после запятой. Но порой этого бывает недостаточно. И тогда приходится идти на ухищрения: умножать на 100, округлять до целых, а потом делить на 100 и нормализовать. Но редко и этого бывает недостаточно. (
Проверяйте, сейчас будут ошибки из-за дробности или нет: opentraders.ru/downloads/628/
avatar

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

  • 20 марта 2015, 19:02
+
0
ок, забрал
prntscr.com/6j5g10
*think*  интересно, как это
лот исходный 0.9, к=0.15
Редактирован: 20 марта 2015, 20:00
avatar

  12  Inthenight Автор Сообщений: 77

  • 20 марта 2015, 19:51
+
0
*good*  ушла думать *think* 
avatar

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

  • 20 марта 2015, 20:28
+
+1
Заменила там же файл. Название у советника оставила тоже. Просто замените оба файла.
Редактирован: 20 марта 2015, 20:41
avatar

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

  • 20 марта 2015, 20:40
+
0
ок, забираю
правда, волатила, похоже, на сегодня закончилась)
что ж, ждем следующую неделю
Редактирован: 20 марта 2015, 22:06
avatar

  12  Inthenight Автор Сообщений: 77

  • 20 марта 2015, 20:56
+
0
*pardon* 
avatar

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

  • 20 марта 2015, 22:44
+
0
Oxy, доброго времени суток!
Тестируя новую версию, заметил следующий момент:
после корректной отработки, переключив тайм-фрэйм в метатрэйдере, сов начинает свою работу по новой, выставляя сетку ордеров (в настройках остается номер ордера — старый, которого нет уже)
1) prntscr.com/6k905i
2) prntscr.com/6k90b4
Хотя, по большому счету, это не так существенно)
avatar

  12  Inthenight Автор Сообщений: 77

  • 23 марта 2015, 11:11
+
0
А не надо переключать тайм-фрейм. Не вы первый, кто мне этот вопрос задает. Если сов не удалить, при переключении тайм-фрейма он инициализируется заново и у него сохранились все настройки. Поэтому отработал сов — удаляйте его. Я не знаю, как сов после отработки удалить программно.
Единственное, сейчас сделаю — чтобы после отработки у сова сбросилась переменная — тикет ордера.
Редактирован: 23 марта 2015, 12:13
avatar

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

  • 23 марта 2015, 12:12
+
0
Понял, больше не буду)
avatar

  12  Inthenight Автор Сообщений: 77

  • 23 марта 2015, 12:17
+
+1
Перезалила: opentraders.ru/downloads/628/
Название у эксперта тоже
После завершения работы сбрасывает значение тикета ордера. Но на всякий случай удаляйте сов после отработки.
avatar

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

  • 23 марта 2015, 12:19
+
0
ок, забрал прогонять
avatar

  12  Inthenight Автор Сообщений: 77

  • 23 марта 2015, 12:36
+
0
Интересный сбой произошел на фунте. Достигнув безубытка, сов удалил все отложки, как и надо. А закрывать рабочие ордера сетки стал лишь через 3 мин., да и то не все закрылись у него (остался крайний ордер сетки).
1) prntscr.com/6kam5r
2) prntscr.com/6kama1
avatar

  12  Inthenight Автор Сообщений: 77

  • 23 марта 2015, 14:49
+
0
Сбой произошел в связи с сервером — только это приходит на ум. Могу сделать, чтобы было несколько попыток закрыть один ордер, если с первого раза не получилось. Такое пока решение вижу. Но нет гарантии, что советник будет работать без сбоя. Никогда не доверяла советникам.
avatar

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

  • 23 марта 2015, 15:06
+
0
Ясно. Может, попробуем Ваш вариант (несколько попыток закрытия)?
avatar

  12  Inthenight Автор Сообщений: 77

  • 23 марта 2015, 15:10
+
+1
перезалила: opentraders.ru/downloads/628/
Название у эксперта оставила тоже
Те ордера, которые были выставлены экспертом — он будет до трех раз пытаться их удалить/закрыть через определенную паузу.
Основной же ордер — частично закрывает один раз.
avatar

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

  • 23 марта 2015, 16:54
+
0
Ок, пошел тестить
avatar

  12  Inthenight Автор Сообщений: 77

  • 23 марта 2015, 16:56
+
0
Больше замечаний к работе совы не возникло. Бывает, что закрывал какой-то ордер не с первого раза, но в конце-концов закрывал. Пусть даже не по той «вкусной» цене, по которой требовалось, но вот для этого-то и нужен будет «буфер» в виде ТП, чтобы эти "+-" цены сгладить. Если я Вас не совсем еще замучал, думаю, можно делать следующий этап его развития)
avatar

  12  Inthenight Автор Сообщений: 77

  • 24 марта 2015, 12:39
+
0
какой? :D 
avatar

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

  • 24 марта 2015, 13:10
+
0
:) Надеюсь, финальный). Ну, в смысле, «прикрутить» к нему ТП, СЛ; параметры увеличения лотности сетки k, m
avatar

  12  Inthenight Автор Сообщений: 77

  • 24 марта 2015, 13:22
+
0
*shock*  давайте новым топиком
пусть будут это разные советники
avatar

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

  • 24 марта 2015, 13:24
+
0
Хорошо, создаю новую тему. Но описание-то оставлю старым? В шапке как раз ведь он и описан уже.
avatar

  12  Inthenight Автор Сообщений: 77

  • 24 марта 2015, 13:48
+
0
А зачем старое описание? Все что в топике написано, все уже сделано.
Вы пишите про то, что надо добавить в советник.
avatar

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

  • 24 марта 2015, 14:09

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