Нужно где-то хранить первоначальную цену ордера (ордер частично закрывается несколько раз). Где?

 

Если учесть, что советник может быть закрыт, потом снова запущен - переменные отпадают.

Первое, что пришло в голову - смотреть на коммент. Коммент от вторичных ордеров (после частичного закрытия) всегда такой: "from #8498674967" (номер предыдущего ордера).

Можно пройтись по цепочке назад и посмотреть цену самого первого. Не пробовал, просто пришло в голову.


Нет ли более изящного решения?

 
wmlab >>:

Если учесть, что советник может быть закрыт, потом снова запущен - переменные отпадают.

Первое, что пришло в голову - смотреть на коммент. Коммент от вторичных ордеров (после частичного закрытия) всегда такой: "from #8498674967" (номер предыдущего ордера).

Можно пройтись по цепочке назад и посмотреть цену самого первого. Не пробовал, просто пришло в голову.


Нет ли более изящного решения?


глобальные переменные, создать объект в виде горизонтальной линии на графике

 
При частичном закрытии позиции ее цена открытия не меняется.
 
getch >>:
При частичном закрытии позиции ее цена открытия не меняется.

Сама цена - нет, но все остальные параметры теряются. Например, лот.


Хранить в виде объекта на графике - интересная идея.

И насчет глобальных переменных - спасибо, почитаю про них. Надеюсь, они сохраняются после закрытия терминала.

 
wmlab >>:

Сама цена - нет, но все остальные параметры теряются. Например, лот.


Хранить в виде объекта на графике - интересная идея.

И насчет глобальных переменных - спасибо, почитаю про них. Надеюсь, они сохраняются после закрытия терминала.

да они хранятся достаточно долго

 
ну или опять же в файле
 
wmlab >>:

Если учесть, что советник может быть закрыт, потом снова запущен - переменные отпадают.

Первое, что пришло в голову - смотреть на коммент. Коммент от вторичных ордеров (после частичного закрытия) всегда такой: "from #8498674967" (номер предыдущего ордера).

Можно пройтись по цепочке назад и посмотреть цену самого первого. Не пробовал, просто пришло в голову.


Нет ли более изящного решения?


для начала реализуйте через глобальные переменные.

Только такой совет:

1. в идентификацию глобальной переменной внесите или тикет ордера или же если она у вас будет всегда одна, то уникальную строчку.

string sID=Symbol()+Magic+IsTesting()+IsDemo()+IsOptimization()

GlobalVariableSet("имя"+sID)

или

GlobalVariableSet("имя"+sID+OP_BUY) // если надо разделить покупки/продажи/отложки

или

GlobalVariableSet("имя"+ticket) // если контролировать надо конкретный ордре и его параметры

2. Всегда проверяйте наличие переменных в функции старт.

3. И конечно обязательно ВСЕГДА чистить за собой эти переменные.

в deinit, если был IsTesting(), IsDemo(), IsOptimization()

и на каждом тике проверка старых закрывшихся ненужных ордеров (если использовалась идентификация ) "имя"+ticket


Эти простые правила для минимизации возможных ошибок и перекрывания доступа.

 

4. ГП сохраняются на диске только в случае нормального закрытия терминала.

(в мт5 функцией можно принудительно скидывать на диск)

 
kombat >>:

4. ГП сохраняются на диске только в случае нормального закрытия терминала.

(в мт5 функцией можно принудительно скидывать на диск)

за всю практику не было не одного сбоя.

Но есть ещё такой момент - сам наблюдал неоднократно, что даже когда например какое то приложение закрывается и закрывает редактируемый файл, то при аварийном вырубе электричества или BSOD (при этом когда приложение уже нормально закрыто и система не загружена) - последние редактируемые файлы просто исчезают с диска. Наблюдал неоднократно!!!

Поэтому сохранение даже в файл вероятно не есть 100% гарантия наличия этих файлов после аварийной перезагрузке компа.

 
Графические элементы непригодны для хранения информации об ордерах. Храните в файлах.
Причина обращения: