Нечто странное на моем аккаунте в чемпионате.

 

День добрый.

1. Не вся информация выводится в журнал. По замыслу в эксперте открывается три одинаковых ордера одновременно перед открытием ордера в журнал выводится строка "----------------------------------", но почему-то при открытии третьего ордера она не выводится.

2. Прошу заметить и обьяснить следующее: перед открытием ордера всегда расчитывается переменная OP_Bid = Open[0], т.е. она должна быть одинакова для всех трех ордеров. Но это не так. Открытие ордеров происходит по приходу новой свечи поэтому значение Open[0] должно существовать для текущей свечи. Вот что происходит на самом деле:

2007.10.08 20:02:37 '500117': order was opened : #4888437 sell 1.40 EURUSD at 1.4051 sl: 1.4257 tp: 1.4030
2007.10.08 20:02:37 20_200_v3_ChampionShipExpert EURUSD,H1: open #4888437 sell 1.40 EURUSD at 1.4051 sl: 1.4257 tp: 1.4030 ok
2007.10.08 20:02:37 20_200_v3_ChampionShipExpert EURUSD,H1: Open_Short(): Sell order opened : 1.4051 OP_Bid = 1.4057 попытка - 1
2007.10.08 20:02:32 '500117': order was opened : #4888436 sell 1.40 EURUSD at 1.4051 sl: 1.4257 tp: 1.4030
2007.10.08 20:02:32 20_200_v3_ChampionShipExpert EURUSD,H1: open #4888436 sell 1.40 EURUSD at 1.4051 sl: 1.4257 tp: 1.4030 ok
2007.10.08 20:02:32 20_200_v3_ChampionShipExpert EURUSD,H1: Open_Short(): Sell order opened : 1.4051 OP_Bid = 1.4057 попытка - 1
2007.10.08 20:02:32 20_200_v3_ChampionShipExpert EURUSD,H1: -----------------------------------------------------------------------------
2007.10.08 20:02:32 '500117': instant order sell 1.40 EURUSD at 1.4051 sl: 1.4257 tp: 1.4030
2007.10.08 20:02:32 '500117': request was accepted by server
2007.10.08 20:02:32 '500117': request in process
2007.10.08 20:02:27 '500117': request was accepted by server
2007.10.08 20:02:27 '500117': request in process
2007.10.08 20:02:26 '500117': order was opened : #4888432 sell 1.40 EURUSD at 1.4052 sl: 1.4252 tp: 1.4025
2007.10.08 20:02:26 20_200_v3_ChampionShipExpert EURUSD,H1: open #4888432 sell 1.40 EURUSD at 1.4052 sl: 1.4252 tp: 1.4025 ok
2007.10.08 20:02:26 20_200_v3_ChampionShipExpert EURUSD,H1: Open_Short(): Sell order opened : 1.4052 OP_Bid = 1.4052 попытка - 1
2007.10.08 20:02:26 20_200_v3_ChampionShipExpert EURUSD,H1: -----------------------------------------------------------------------------
2007.10.08 20:02:26 '500117': instant order sell 1.40 EURUSD at 1.4052 sl: 1.4257 tp: 1.4030
2007.10.08 20:02:21 20_200_v3_ChampionShipExpert EURUSD,H1: Общий лот = 4.2177
2007.10.08 20:02:21 20_200_v3_ChampionShipExpert EURUSD,H1: -----------------------------------------------------------------------------
2007.10.08 20:02:21 '500117': instant order sell 1.40 EURUSD at 1.4052 sl: 1.4252 tp: 1.4025

Вы видете, что строка "-------------------------------------" есть только перед открытием первых двух ордеров, а переменная OP_Bid = 1.4052 в первом случае и 1.4057 во втором и третьем случае (выделено желтым).

Прокомментируйте пожалуйста. Это не критично, но просто хотелось бы узнать, что происходит.

Спасибо

 
autoforex:

День добрый.

1. Не вся информация выводится в журнал. По замыслу в эксперте открывается три одинаковых ордера одновременно перед открытием ордера в журнал выводится строка "----------------------------------", но почему-то при открытии третьего ордера она не выводится.

2. Прошу заметить и обьяснить следующее: перед открытием ордера всегда расчитывается переменная OP_Bid = Open[0], т.е. она должна быть одинакова для всех трех ордеров. Но это не так. Открытие ордеров происходит по приходу новой свечи поэтому значение Open[0] должно существовать для текущей свечи. Вот что происходит на самом деле:


Выложите кусок кода отвечающий за открытие ордеров и рассчет OP_Bid. Вряд ли это раскроет смысл советника, зато можно будет подумать в чем дело...
 

Вот код функции открытия ордера:

int OpenShort(double volume)
{
   ...
   while(true)
    {   
       Print("-----------------------------------------------------------------------------");
       if(IsStopped()==true) return(-1);
       if(GetTickCount() - StartWaitingTime > MaxWaiting_sec * 1000)
          {
            Print("Open_Short(): Превышен лимит ожидания (" + MaxWaiting_sec + " сек.)!");
            return(-1);
          }
       RefreshRates();
       StopLevel=MarketInfo(Symbol(),MODE_STOPLEVEL);
       OP_Bid = Open[0];
    ...

Эта функция вызывается три раза подряд, поэтому значение OP_Bid должно быть одинаково для всех трех случаев.

Так же Print("-----------------------------------------------------------------------------");

должна вызываться прямо перед попыткой открыть ордер.

 

Отметил зеленым строчку, которой там не должно быть !

Такая строка может появится только после расчета полного лота, но никак не перед ним.

Интересные вещи творятся. Возможно дело в сортировке выводимых в журнал строк, которые имеют одно и то же время, можно только гадать.

 
Вы не обращаете внимание на время, а смотрите только на порядок. Так как время указывается с точностью до секунд, то некоторые записи могут стоять раньше или позже.
 
Renat:
Вы не обращаете внимание на время, а смотрите только на порядок. Так как время указывается с точностью до секунд, то некоторые записи могут стоять раньше или позже.


Renat, извините, но такое обьяснение меня не устраивает, потому как я не могу понять, как то, что в программе происходит раньше в журнале появляется позже. ;)

А как Вы ответите на вопрос об OP_Bid=Open[0] ?

С Уважением

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

Скопируйте логи к себе (склейте из кусков), поразбирайтесь, учитывайте время с точностью до секунд и сделайте четкое утверждение. В данном случае не вопрос, а именно обоснованное и проверенное утверждение.
 
Renat:
Так как это Ваши логи, то именно Вам и нужно разбираться. Все выглядит именно так, что Вы смотрите на порядок записей, не замечая времени.

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


Renat "...да ты не мудри, ты пальцем покажи"((с) какой-то анекдот).

Я реально не вижу, то на что Вы так настойчиво намекаете.

Вот так должен выглядеть журнал в идеале (взял из тестера):

 2007.10.09 22:26:11    2007.10.05 18:00  20_200_v3_ChampionShipExpert EURUSD,H1: OpenLong(): Buy order opened : 1.4153     OP_Ask = 1.4153   попытка - 1
 2007.10.09 22:26:11    2007.10.05 18:00  20_200_v3_ChampionShipExpert EURUSD,H1: open #9 buy 1.80 EURUSD at 1.4153 sl: 1.4020 tp: 1.4193 ok
 2007.10.09 22:26:11    2007.10.05 18:00  20_200_v3_ChampionShipExpert EURUSD,H1: -----------------------------------------------------------------------------
 2007.10.09 22:26:11    2007.10.05 18:00  20_200_v3_ChampionShipExpert EURUSD,H1: OpenLong(): Buy order opened : 1.4153     OP_Ask = 1.4153   попытка - 1
 2007.10.09 22:26:11    2007.10.05 18:00  20_200_v3_ChampionShipExpert EURUSD,H1: open #8 buy 1.80 EURUSD at 1.4153 sl: 1.4020 tp: 1.4193 ok
 2007.10.09 22:26:11    2007.10.05 18:00  20_200_v3_ChampionShipExpert EURUSD,H1: -----------------------------------------------------------------------------
 2007.10.09 22:26:11    2007.10.05 18:00  20_200_v3_ChampionShipExpert EURUSD,H1: OpenLong(): Buy order opened : 1.4153     OP_Ask = 1.4153   попытка - 1
 2007.10.09 22:26:11    2007.10.05 18:00  20_200_v3_ChampionShipExpert EURUSD,H1: open #7 buy 1.80 EURUSD at 1.4153 sl: 1.4020 tp: 1.4193 ok
 2007.10.09 22:26:11    2007.10.05 18:00  20_200_v3_ChampionShipExpert EURUSD,H1: -----------------------------------------------------------------------------
 2007.10.09 22:26:11    2007.10.05 18:00  20_200_v3_ChampionShipExpert EURUSD,H1: Общий лот = 5.5798
тут все по-порядку именно так и должно быть.
 
Жаль, что мне в очередной раз приходится указывать на контроль СЕКУНД. Достаточно просто переставить пару строк местами в пределах _секунды_, чтобы получить искомую конфигурацию:

2007.10.08 20:02:37 20_200_v3_ChampionShipExpert EURUSD,H1: Open_Short(): Sell order opened : 1.4051 OP_Bid = 1.4057 попытка - 1
2007.10.08 20:02:32 20_200_v3_ChampionShipExpert EURUSD,H1: open #4888437 sell 1.40 EURUSD at 1.4051 sl: 1.4257 tp: 1.4030 ok
2007.10.08 20:02:32 20_200_v3_ChampionShipExpert EURUSD,H1: -----------------------------------------------------------------------------
2007.10.08 20:02:32 20_200_v3_ChampionShipExpert EURUSD,H1: Open_Short(): Sell order opened : 1.4051 OP_Bid = 1.4057 попытка - 1
2007.10.08 20:02:32 20_200_v3_ChampionShipExpert EURUSD,H1: open #4888436 sell 1.40 EURUSD at 1.4051 sl: 1.4257 tp: 1.4030 ok
2007.10.08 20:02:26 20_200_v3_ChampionShipExpert EURUSD,H1: -----------------------------------------------------------------------------
2007.10.08 20:02:26 20_200_v3_ChampionShipExpert EURUSD,H1: Open_Short(): Sell order opened : 1.4052 OP_Bid = 1.4052 попытка - 1
2007.10.08 20:02:26 20_200_v3_ChampionShipExpert EURUSD,H1: open #4888432 sell 1.40 EURUSD at 1.4052 sl: 1.4252 tp: 1.4025 ok
2007.10.08 20:02:21 20_200_v3_ChampionShipExpert EURUSD,H1: -----------------------------------------------------------------------------
2007.10.08 20:02:21 20_200_v3_ChampionShipExpert EURUSD,H1: Общий лот = 4.2177

Есть небольшая проблема при выводе с сортировкой в пределах секунды, когда есть несколько записей в одну секунду. Но все записи выводятся в логи.
 
Renat:
Жаль, что мне в очередной раз приходится указывать на контроль СЕКУНД. Достаточно просто переставить пару строк местами в пределах _секунды_, чтобы получить искомую конфигурацию:

Есть небольшая проблема при выводе с сортировкой в пределах секунды, когда есть несколько записей в одну секунду. Но все записи выводятся в логи.


Ох Renat, ну у Вас и выдержка, спасибо. Тепереча догнал, спасибо, что пальцем показали. Меня как заклинило, казалось что, то, что относится к одному ордеру должно иметь одно и тоже время. Поэтому никак не получалось отсортировать строки. Позор на мою седую голову :)))) , позор :))

Спасибо за помощь.

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