Ошибки, баги, вопросы - страница 3198

 
fxsaber #:

Это не так.

Результат на Just2Trade.

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

Andrey Dik #:

ну так какого лешего Вы лезли тогда вместе с Сабером?

Andrey Dik #:
добрые люди не суют свой нос туда, куда их не просят. 

Очень давно пользовался Вашим ГА из статьи. Сегодня увидел вопросы на форуме от Вас, на которые в силах был дать ответ и сэкономить Вам время.  

Если не хотите воспринимать информацию от "простых смертных" - Ваше право.

Опять же - посты с обсуждением вопроса не "засирают" его, а привлекают дополнительное внимание.

В общем - не вижу причин так горячиться и удачи Вам в решении "вопросов"!

 
Andrey Miguzov #:

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

2. Очень давно пользовался Вашим ГА из статьи. Сегодня увидел вопросы на форуме от Вас, на которые в силах был дать ответ и сэкономить Вам время.  

3. Если не хотите воспринимать информацию от "простых смертных" - Ваше право.

4. Опять же - посты с обсуждением вопроса не "засирают" его, а привлекают дополнительное внимание.

5. В общем - не вижу причин так горячиться и удачи Вам в решении "вопросов"!

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

2. Спасибо, и Вам не хворать.

3. Пока не было никакой полезной информации от "простых смертных".

4. Именно засирают, замыливают глаз. На одно моё сообщение разработчикам куча бесполезного флуда наплодили.

5. Не видите причин горячиться? Хорошо, я попытаюсь объяснить на пальцах:

OrderSend () - асинхронная  синхронная* функция, это значит, что советник (или скрипт) будет остановлен до тех пор, пока торговый сервер не пришлет ответ на торговый приказ, и функция вернёт true или false в зависимости от успешности операции.

В структуре ответа торгового сервера содержится информация с результатами торговой операции, и вот тут то и кроется проблема: структура ответа заполнена торговым сервером некорректно, tradeResult.price равен 0.0, и это при том, что функция  OrderSend () вернула true!, причем сделка совершена и позиция открыта и тикет сделки есть в структуре ответа. Далее, вызываем PositionSelect (), если true то запрашиваем цену позиции PositionGetDouble (POSITION_PRICE_OPEN), которая возвращает 0.0!

И Вы до сих пор не видите причин горячиться? - налицо проблема, но всезнайки (при чем не умаляя их заслуг перед сообществом) пытаются убедить, что проблемы никакой нет. Зачем?

*синхронная, именно синхронная, это важно.

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2022.06.12 13:33

void OnStart()
{
  if (PositionSelect(_Symbol))
    MessageBox("Close the position and try again!");
  else
  {
    MqlTradeRequest Request = {};
    MqlTradeResult Result[1];
    
    Request.action = TRADE_ACTION_DEAL;
    Request.symbol = _Symbol;
    Request.volume = 1;
  
    if (OrderSend(Request, Result[0]))
    {    
      while (!IsStopped() && !PositionSelectByTicket(Result[0].order))
        Sleep(0);
        
      Print(PositionGetDouble(POSITION_PRICE_OPEN));
    }
  
    ArrayPrint(Result);  
  }
}

Демо открывается за 20 секунд: File->Open an Account->скопировать название сервера в поле поиска->Find your company->Next->Open a demo account.


Результат работы скрипта на  ForexTimeFXTM-Demo01.

2022.06.13 11:06:00.700 Test9 (AUDNZD,M1)       1.10801
2022.06.13 11:06:00.700 Test9 (AUDNZD,M1)           [retcode] [deal]    [order] [volume] [price] [bid] [ask]          [comment] [request_id] [retcode_external] [reserved]
2022.06.13 11:06:00.700 Test9 (AUDNZD,M1)       [0]     10009      0 2269833313  1.00000 0.00000 0.000 0.000 "Request executed"           19                  0        ...

Result.price и Result.deal в нулях. И это правильно и логично. Причина многократно разбиралась на форуме.


В коде, как только PositionSelect возвращает true, сразу делается PositionGetDouble, который, конечно, ненулевой. Написал этот пост, чтобы можно было давать ссылку на него для быстрой демонстрации корректности работы MT5 в этой части.


ЗЫ Прослушивалка всех торговых операций.

  1. Запустите прослушивалку.
  2. Выставите ордер скриптом или руками.
  3. Закройте прослушивалку.
  4. Смотрите результат в \MQL5\Files\OnTradeTransaction.txt.
Это полная картина, что происходит внутри терминала.
 
Andrey Dik #:

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

2. Спасибо, и Вам не хворать.

3. Пока не было никакой полезной информации от "простых смертных".

4. Именно засирают, замыливают глаз. На одно моё сообщение разработчикам куча бесполезного флуда наплодили.

5. Не видите причин горячиться? Хорошо, я попытаюсь объяснить на пальцах:

OrderSend () - асинхронная  синхронная* функция, это значит, что советник (или скрипт) будет остановлен до тех пор, пока торговый сервер не пришлет ответ на торговый приказ, и функция вернёт true или false в зависимости от успешности операции.

В структуре ответа торгового сервера содержится информация с результатами торговой операции, и вот тут то и кроется проблема: структура ответа заполнена торговым сервером некорректно, tradeResult.price равен 0.0, и это при том, что функция  OrderSend () вернула true!, причем сделка совершена и позиция открыта и тикет сделки есть в структуре ответа. Далее, вызываем PositionSelect (), если true то запрашиваем цену позиции PositionGetDouble (POSITION_PRICE_OPEN), которая возвращает 0.0!

И Вы до сих пор не видите причин горячиться? - налицо проблема, но всезнайки (при чем не умаляя их заслуг перед сообществом) пытаются убедить, что проблемы никакой нет. Зачем?

*синхронная, именно синхронная, это важно.


Перечитайте доку:

PS. И на Сабере нефига наезжать, хороший тестировщик знаете функционирование системы лучше разработчика.
 
fxsaber #:

Демо открывается за 20 секунд: File->Open an Account->скопировать название сервера в поле поиска->Find your company->Next->Open a demo account.


Результат работы скрипта на  ForexTimeFXTM-Demo01.

Result.price и Result.deal в нулях. И это правильно и логично. Причина многократно разбиралась на форуме.


В коде, как только PositionSelect возвращает true, сразу делается PositionGetDouble, который, конечно, ненулевой. Написал этот пост, чтобы можно было давать ссылку на него для быстрой демонстрации корректности работы MT5 в этой части.


ЗЫ Прослушивалка всех торговых операций.

  1. Запустите прослушивалку.
  2. Выставите ордер скриптом или руками.
  3. Закройте прослушивалку.
  4. Смотрите результат в \MQL5\Files\OnTradeTransaction.txt.
Это полная картина, что происходит внутри терминала.

Абсолютный бред! Некорректные данные в структуре ответа после вызова OrderSend () так же нелепы, как некорректные данные в структурах OnTradeTransaction ()!

Sergey Gridnev #:

PS. И на Сабере нефига наезжать, хороший тестировщик знаете функционирование системы лучше разработчика.

Буду наезжать, ибо нехфиг писать ересь.


 
Andrey Dik #:

Абсолютный бред! Некорректные данные в структуре ответа после вызова OrderSend () так же нелепы, как некорректные данные в структурах OnTradeTransaction ()!

Кусок из справки про OrderSend():

При отправке рыночного ордера (MqlTradeRequest.action=TRADE_ACTION_DEAL) успешный результат функции OrderSend() не означает, что ордер был выполнен (исполнены соответствующие сделки): true в этом случае означает только то, что ордер был успешно размещен в торговой системе для дальнейшего выполнения. Торговый сервер может в возвращаемой структуре результата result заполнить значения полей deal или order, если эти данные будут ему известны в момент формирования ответа на вызов OrderSend(). В общем случае событие или события исполнения сделок, соответствующих ордеру, могут произойти уже после того, как будет отправлен ответ на вызов OrderSend().

OrderSend() не может заполнить то, чего ещё не знает.

Сильно зависит от "брокера" и способа организации "торговли" у него, на сколько я понимаю. Но если OrderSend() для рыночного ордера сразу возвращает всю информацию о сделке - это скорее повод для задуматься откуда сервер МТ знает эту информацию.

 
Andrey Miguzov #:

Кусок из справки про OrderSend():

При отправке рыночного ордера (MqlTradeRequest.action=TRADE_ACTION_DEAL) успешный результат функции OrderSend() не означает, что ордер был выполнен (исполнены соответствующие сделки): true в этом случае означает только то, что ордер был успешно размещен в торговой системе для дальнейшего выполнения. Торговый сервер может в возвращаемой структуре результата result заполнить значения полей deal или order, если эти данные будут ему известны в момент формирования ответа на вызов OrderSend(). В общем случае событие или события исполнения сделок, соответствующих ордеру, могут произойти уже после того, как будет отправлен ответ на вызов OrderSend().

OrderSend() не может заполнить то, чего ещё не знает.

Сильно зависит от "брокера" и способа организации "торговли" у него, на сколько я понимаю. Но если OrderSend() для рыночного ордера сразу возвращает всю информацию о сделке - это скорее повод для задуматься откуда сервер МТ знает эту информацию.

Да, всё верно в справке написано, и задумайтесь немного, если получен тикет сделки, то разве неизвестна цена сделки? вы совершаете сделки на базаре не зная цену? - никто не совершает сделки без цены. И если есть тикет, значит сделка зарегистрирована, значит у неё есть цена. Вот если бы сервер выдал 0 тикет, то и не зачем интересоваться ценой этой сделки. Но раз тикет пришел, значит и цена есть у сделки. бл, я уже по тридцатому кругу объясняю, неужели непонятны такие простые вещи? 

Задумайтесь, как так могло случится, что брокер зарегистрировал сделку, но цену по которой выполнил сделку не сообщает?! Вы понимаете что это значит? Это умышленное поведение брокера, который заполняет цену сделки спустя некоторое время любым угодным брокеру значением. Меня забанят нахвиг, из за того, что приходиться объяснять вещи, которые должны были бы дойти до вас и без меня.


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

 
Andrey Dik #:

Да, всё верно в справке написано, и задумайтесь немного, если получен тикет сделки, то разве неизвестна цена сделки? вы совершаете сделки на базаре не зная цену? - никто не совершает сделки без цены. И если есть тикет, значит сделка зарегистрирована, значит у неё есть цена. Вот если бы сервер выдал 0 тикет, то и не зачем интересоваться ценой этой сделки. Но раз тикет пришел, значит и цена есть у сделки. бл, я уже по тридцатому кругу объясняю, неужели непонятны такие простые вещи? 

Задумайтесь, как так могло случится, что брокер зарегистрировал сделку, но цену по которой выполнил сделку не сообщает?! Вы понимаете что это значит? Это умышленное поведение брокера, который заполняет цену сделки спустя некоторое время любым угодным брокеру значением. Меня забанят нахвиг, из за того, что приходиться объяснять вещи, которые должны были бы дойти до вас и без меня.


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

Ответа разработчиков не будет. У них свое представление о синхронности. Возврат true и ненулевой тикет ордера не гарантируют наличия всей информации о сделке.

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

 
Andrey Dik #:

Но раз тикет пришел, значит и цена есть у сделки. бл, я уже по тридцатому кругу объясняю, неужели непонятны такие простые вещи? 

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

Если есть тикет ордера, но нет цены - то это норм.

Было бы классно, если бы Вы код fxsaber/аналогичный код выполнили на реальном счете и логи показали - это конкретное доказательство, что есть ошибки.

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

 
Andrey Khatimlianskii #:

Ответа разработчиков не будет. У них свое представление о синхронности. Возврат true и ненулевой тикет ордера не гарантируют наличия всей информации о сделке.

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

Согласен с тобой по всем моментам.

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