Реализация метода "Сейфа"

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Peter Vorobyev
406
Peter Vorobyev  

Никак не могу понять как лучше сделать.

Задача реализовать функцию частичного  закрытия ордера после прохождения определенного количества пунктов ("Сейф"). О переводе в безубыток сейчас речи нет.
В чем проблема: надо определить те ордера которые нужно переводить в "Сейф", но как? Т.е. чтобы вторично ордер уже переведенный в "Сейф" заново не перевести.
Если опираться на начальный лот ордера, то надо чтобы он у всех ордеров был одинаковым изначально, но этого может не быть, если в советнике используется динамический лот. 
Хранить все начальные лоты сделок гдето, тоже как то не красиво.
Какие есть варианты?

Igor Zakharov
6652
Igor Zakharov  

После частичного закрытия, коммент ордера будет типа: from #ticket... или partial #ticket. 

Peter Vorobyev
406
Peter Vorobyev  
Igor Zakharov:

После частичного закрытия, коммент ордера будет типа: from #ticket... или partial #ticket. 

После частичного закрытия комментарий не изменился. Было бы хорошо если бы можно было изменить комментарий после частичного закрытия. Но как я понимаю это невозможно.

Sergey Kolemanov
1022
Sergey Kolemanov  
peterlogin:

После частичного закрытия комментарий не изменился.

А Вы частичное закрытие как делаете ?

p.s. И где смотрите комментарий , сегодня же рынок закрыт ?
Igor Makanu
9859
Igor Makanu  

можно так сделать:

пишите в глобальные переменный терминала № тикета ордера у которого было частичное закрытие и ищите эту глобальную переменную на соответсвие № тикетов ордеров в рынке - если не нашли - значит ордера нет уже в рынке и удалите глобальную переменную

Peter Vorobyev
406
Peter Vorobyev  
Sergey Kolemanov:

А Вы частичное закрытие как делаете ?

p.s. И где смотрите комментарий , сегодня же рынок закрыт ?

в тестере. если в тестере это не работает. то способ не подходит.

Peter Vorobyev
406
Peter Vorobyev  
Igor Makanu:

можно так сделать:

пишите в глобальные переменный терминала № тикета ордера у которого было частичное закрытие и ищите эту глобальную переменную на соответсвие № тикетов ордеров в рынке - если не нашли - значит ордера нет уже в рынке удалите глобальную переменную

как то не очень правильно

Igor Makanu
9859
Igor Makanu  
peterlogin:

как то не очень правильно

ну а что Вы хотите? цель топика озвучить что нет возможности изменить комментарий рыночного ордера?

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

https://www.mql5.com/ru/forum/255340/page2#comment_7791565

Может ли ДЦ стирать комментарии в мт5?
Может ли ДЦ стирать комментарии в мт5?
  • 2018.06.12
  • www.mql5.com
В мт4 знаю, комментарии ДЦ мог стирать. Не всегда, но мог. А как обстоит дело с мт5? Мне нужно как-то контролировать выполнение торгового сигнала...
Алексей Тарабанов
10030
Алексей Тарабанов  
peterlogin:

Никак не могу понять как лучше сделать.

Задача реализовать функцию частичного  закрытия ордера после прохождения определенного количества пунктов ("Сейф"). О переводе в безубыток сейчас речи нет.
В чем проблема: надо определить те ордера которые нужно переводить в "Сейф", но как? Т.е. чтобы вторично ордер уже переведенный в "Сейф" заново не перевести.
Если опираться на начальный лот ордера, то надо чтобы он у всех ордеров был одинаковым изначально, но этого может не быть, если в советнике используется динамический лот. 
Хранить все начальные лоты сделок гдето, тоже как то не красиво.
Какие есть варианты?

Задача "...закрытия ордера после прохождения определенного количества пунктов..." решается в момент открытия ордера путем установки значения Take Profit. 

Как я понимаю, Вы хотите сначала открыть позицию без ТР, а при достижении заданного значения профита частично закрыть, дабы уменьшить потери в случае достижения обеими позициями (в МТ5 - совокупной позиции) значения Stop Loss. Вторая позиция идет по тренду "до победного". 

В идеале, значение ТР при его достижении, должно обеспечивать безубыток совокупной позиции. 

Простейшее решение - изначально открывать два ордера по одной цене с одинаковым значением SL: один - без TP, другой - с TP. Минус - изначальная фиксация объемов этих позиций, а значит нельзя манипулировать размером доли закрываемой части позиции. 

Все это технически легко решается как в МТ5, так и в МТ4, но есть общая системная проблема. Решение нужно принимать по совокупности четырех параметров: 1. Максимальная доля закрываемой части позиции. 2. Минимальный уровень ТР. 3. Допустимый уровень убытка. 4. Допустимый размер лота.

В обратном порядке, разумеется. 

Peter Vorobyev
406
Peter Vorobyev  
Igor Makanu:

ну а что Вы хотите? цель топика озвучить что нет возможности изменить комментарий рыночного ордера?

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

https://www.mql5.com/ru/forum/255340/page2#comment_7791565

Хранение информации об ордерах в объектах или массивах может привести к ее потере при закрытии терминала.
В итоге как понимаю придется либо хранить информацию в чемто внешнем, либо использовать при открытии два ордера. В второй вариант с точки зрения устойчивости и быстродействия думаю предпочтительнее

спасибо за советы

Sergey Kolemanov
1022
Sergey Kolemanov  
peterlogin:

в тестере. если в тестере это не работает. то способ не подходит.

Само частичное закрытие в тестере работает, но комментарий ордеров Вы просто так не увидите - его надо распринтовывать в коде... Вам правильно сказали что самый простой способ организовать частичное закрытие это работать с комментарием позиции. Частично тема поднималась здесь: https://www.mql5.com/ru/forum/214381/page5#comment_5706056

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