Хотелось бы чтобы MagicNumber так же был виден в таблице позиций ... - страница 2

 
SK. писал (а):
Изменный. В том-то и дело.

А в каких случаях это происходит, кроме нижеописанных?

  1. Частичное закрытие позиции.
  2. Переоткрытие при переходе через границу суток.
 
KimIV:
SK. писал (а):
Изменный. В том-то и дело.

А в каких случаях это происходит, кроме нижеописанных?

  1. Частичное закрытие позиции.
  2. Переоткрытие при переходе через границу суток.


Ещё есть варианты получения п.1:
- простое частичное закрытие ордера (программно и с панели);
- при встречном закрытии двух ордеров с получением наследованного ордера остаточной стоимости (программно и с панели);
- при встречном закрытии списка ордеров с получением наследованного ордера остаточной стоимости (с панели).

2. Это бывает не всегда, а только если ДЦ = банк. Но при создании программы для общего употребления это приходится учитывать.

Дело осложняется ещё тем, что неизвестен алгоритм встречного закрытия списка на сервере. Остаточный ордер может быть получен как часть исходного (например, у него есть маджик и тогда проблем нет), а может быть получен как часть промежуточного, полученного в процессе последовательно исполняемого встречного закрытия. И если у него нет маджика, то нет возможности вычислить кто у него изначально исходный.

А если программа начинает всякие массовые закрытия ровно на последнем тике дня, а ещё юзер тычет в панель, а ещё переоткрытия случаются, то наступает полная хана.

(кстати, в коммент писать инфу тоже не дело: в ряде случаев коммент полностью или частично затирается)

 
SK. писал (а):
Integer:
SK. писал (а):

Нужен неизменный идентификатор ордера. Есть ситуации, при которых принципиально невозможно определить какому исходному соответствует наследованный ордер после переоткрытия и при частичном закрытии (при одновременном срабатывании нескольких ордеров). Маджик не спасает, т.к. в период работы советника юзер может открыть ордер с руки.

Если бы был такой идентификатор, то маджик и не нужен был бы - всё остальное можно учесть просто в программе.

Неизменный идентификатора ордера, это его тикет. Или я чего-то не понял? Учесть то можно в программе, только это очень сложно и совершенно надежного способа нету, а должен быть, раз уж язык mql является языком для написания торговых стратегий.

Изменный. В том-то и дело.

Согласен. Частичное закрытие. А если в конце дня ордера закрываются и снова открываются, то это вообюще финиш. Нужно непременно 10 магиков, а лучше 1000 магиков. Непремено магиков, сохраняемых на сервере. Только в этом слчае можно быть уверенным в безупречной работе эксперта.
 
Integer:
Согласен. Частичное закрытие. А если в конце дня ордера закрываются и снова открываются, то это вообюще финиш. Нужно непременно 10 магиков, а лучше 1000 магиков. Непремено магиков, сохраняемых на сервере. Только в этом слчае можно быть уверенным в безупречной работе эксперта.

Магик проблему не решает, т.к. при ручном открытии магик на ордер не устанавливается. Любой юзер, научившийся тыкать в панель открытия/закрытия ордеров, обязательно время от времени управляет ордерами "с руки", а иногда делает это чаще, чем его программа.

На мой взгляд нужно решить проблему 1 раз кардинально: поставить в соответствие ордеру ОДИН его неизменный идентификатор (здесь идентификатор - в смысле, некий параметр, по кот. можно прямо и однозначно идентифицировать ордер, лучше всего целое число). Если бы это было сделано, то мне, например, более не нужны были бы маджики, комментарии и прочие косвенные приметы ордера. Всё остальное я бы учёл в программе.

( а использовать маджик для перераспределения полномочий между несколькими одновременно работающими программами считаю неправильным подходом - программа должна быть одна - время глупостей уже закончилось:).

 

тогда наверно еще и такие параметры нужны: не только OrderOpenTime(), но еще и OrderSetTime()

 
SK. писал (а):
Integer:
Согласен. Частичное закрытие. А если в конце дня ордера закрываются и снова открываются, то это вообюще финиш. Нужно непременно 10 магиков, а лучше 1000 магиков. Непремено магиков, сохраняемых на сервере. Только в этом слчае можно быть уверенным в безупречной работе эксперта.

Магик проблему не решает, т.к. при ручном открытии магик на ордер не устанавливается. Любой юзер, научившийся тыкать в панель открытия/закрытия ордеров, обязательно время от времени управляет ордерами "с руки", а иногда делает это чаще, чем его программа.

На мой взгляд нужно решить проблему 1 раз кардинально: поставить в соответствие ордеру ОДИН его неизменный идентификатор (здесь идентификатор - в смысле, некий параметр, по кот. можно прямо и однозначно идентифицировать ордер, лучше всего целое число). Если бы это было сделано, то мне, например, более не нужны были бы маджики, комментарии и прочие косвенные приметы ордера. Всё остальное я бы учёл в программе.

( а использовать маджик для перераспределения полномочий между несколькими одновременно работающими программами считаю неправильным подходом - программа должна быть одна - время глупостей уже закончилось:).


Я бы немного сформулировал по другому. Иметь возможность менять индификатор ордера при необходимости. ДЦ ордера переоткрывало, я должен иметь возможность снова им присвоить свои индификаторы.
 
Vinin:

Я бы немного сформулировал по другому. Иметь возможность менять индификатор ордера при необходимости. ДЦ ордера переоткрывало, я должен иметь возможность снова им присвоить свои индификаторы.

Этого точно не будет. Нагрузка на сервер
 
Integer:

тогда наверно еще и такие параметры нужны: не только OrderOpenTime(), но еще и OrderSetTime()


Тогда пришлось бы по необходимости преобразовывать время в число. Лучше целое число. В своей программе я исхитрился вписаться в ограничение целого числа, но при этом учесть десятые доли секунды:

int AG_Torg_MN()
   {
   int _Loc_Time = TimeLocal();
   int _GTC = GetTickCount();
   int _Day   = DayOfYear   ();
   int _Hour  = TimeHour    (_Loc_Time);
   int _Min   = TimeMinute  (_Loc_Time);
   int _Sec   = TimeSeconds (_Loc_Time);
   int _Msc   = (_GTC - MathFloor(_GTC/100)*100);
   int _MN = 1000000 *_Day + 10*(_Hour*3600 + _Min*60 + _Sec) +  0.1*_Msc;
   return(_MN);
   }
А использование этого маджика повлекла необходимость разбора ночных и частичных полётов .
 
с открытием понятно, ордера сортируются по времени открытия, даже если между их временем открыти 1 мс, значит нужен способ четкого определения последовательности закрытия ордеров. 
 
Integer:
с открытием понятно, ордера сортируются по времени открытия, даже если между их временем открыти 1 мс, значит нужен способ четкого определения последовательности закрытия ордеров.


Немного не так..

Маджик решает проблему только для ордеров, открытых программно, но не распространяется на те, что открыты с руки. Здесь я привёл этот код только для того, чтоб продемонстрировать, что в целое число можно заложить время открытия с точностью то 10мс (для открытых в течение года).

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

Проблема мне видится в другом. Я делаю такую программку.. Юзер ставит настройку на ордер, например, подтяжку стопа. Выглядит это как стрелочка с циферками. Эта настройка ставится в соответствие ЭТОМУ конкретному ордеру. А чехарда с частичным закрытием и переоткрытием (когда всё случилось) в некоторых случаях не позволяет разобраться в родителях остаточного ордера. Мне же по-прежнему надо подтягивать стоп .. Возникает необходимость понять из какого исходного ордера получен этот остаточный, иными словами - тянуть ему стоп или нет, или тянуть стоп рядомстоящему ордеру или никому не тянуть..

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

Причина обращения: