Разработчики! Вы вообще тестируете то, что создаёте? - страница 11

 

papaklass, c-4

Существующая модель ответов  сервера через OnTradeTransaction

меня устраивает, и в моем советнике работает, НО

моё первое сообщение было связано с тем, что от сервера не вернулось(вообще) сообщение,

что сделка была совершена (ордер исполнился на 1) и вторая ошибка заключалась в том,

что вместо ответа, что ордер размещён, пришел ответ, что ордер частично исполнился(продублировалось).

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

Модель работы с ответами сервера в моём советнике НЕ основана на последовательности ответов сервера, НО ответ должен быть и быть правильным.

Смотрите, что произошло(картинка из первого поста):

Советник выставил ордер с объёмом 3.

Ордер исполнился на единицу - ответы сервера правильные.

Далее советник модифицировал ордер - ответ сервера ORDER_STATE_PARTIAL - а должен был быть ORDER_STATE_PLACED.

Далее ордер исполнился еще на 1, НЕ ПРИШЛО НИКАКОГО сообщения от сервера. 

Через пару дней (картинка внизу) я повторил эту последовательность - результат изменился(вероятно разработчики что-то исправили),

пришло сообщение, что произошла сделка(вторая 21:15:02.232), но сообщение о модификации осталось не правильным. 

Ещё очень настораживает, что три ответа от сервера пришли в одно и то же время(21:14:53.049)! 

 

Понятно, что всё работает в одном потоке, и что сообщения накапливаются, но всё-же.... Я останавливаю работу советника,

чтобы принимать сообщения. 

 

papaklass!

Дело в том, что программы *.ex5 работают в одном потоке, если

будет много обработчиков, то будет ещё хуже.

 
papaklass:

 Сейчас спецом проверил работу OnTrade и OnTradeTransaction.

На один торговый приказ открыть позицию по рынку (маркет ордер) происходит 3-и срабатывания OnTrade или 4-ре срабатывания OnTradeTransaction. А мне нужно срабатывание одного обработчика OnPositionOpened.

На закрытие позиции по стоп-лоссу/тейк-профиту происходит 3-и срабатывания OnTrade или 3-и срабатывания OnTradeTransaction, вмесо одного - OnPositionClosed. Избыточность налицо!

Эти многократные сработки существующих обработчиков событий (OnTrade/OnTradeTransaction), не дают однозначного ответа на вопрос: "Какое торговое событие произошло и каков результат торговой операции?", значит нужно еще организовывать дополнительную со стороны пользователя обработку этих событий. Спрашивается: "К чему весь этот огород?"

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

Поэтому то, что произошло в Вашем случае или в случае с komposter-ом (timeout), лично у меня не вызывает удивления. 

То, как реализованы события OnTrade и OnTradeTransaction, невольно напомнило мне эпизод 20-летней давности... Помнится, читал я рецензии на новые игры под Спектрум, особенно запомнилась мне рецензия на одну игру, где было сказано приблизительно так :"...звук в игре хорош тем, что есть возможность его отключить...". Приблизительно такое же отношение у меня и к событиям OnTrade и OnTradeTransaction, они хороши только тем, что можно их не использовать.
 
SWA:
То, как реализованы события OnTrade и OnTradeTransaction, невольно напомнило мне эпизод 20-летней давности... Помнится, читал я рецензии на новые игры под Спектрум, особенно запомнилась мне рецензия на одну игру, где было сказано приблизительно так :"...звук в игре хорош тем, что есть возможность его отключить...". Приблизительно такое же отношение у меня и к событиям OnTrade и OnTradeTransaction, они хороши только тем, что можно их не использовать.

А я, наоборот использую(успешно) эти два обработчика!

Если, по какой-то причине не сработал OnTradeTransaction, то я проверяю

в OnTrade - очень удобно, потому что сначала срабатывает OnTradeTransaction,

а потом OnTrade. 

 
Mikalas:

А я, наоборот использую(успешно) эти два обработчика!

Если, по какой-то причине не сработал OnTradeTransaction, то я проверяю

в OnTrade - очень удобно, потому что сначала срабатывает OnTradeTransaction,

а потом OnTrade. 

Мне лично такое удобство кажется сомнительным: потеря времени и загрузка канала обращениями клиент-сервер с целью получения точной информации, что же произошло на сервере. Может возникнуть ситуация, когда с таким трудом вырванная с сервера информация к моменту её получения перестаёт быть актуальной и достоверной.
Было бы действительно удобно пользоваться этими событиями (по крайней мере мне удобно), если бы советник с требуемой для торгового алгоритма частотой генерировал запрос к серверу в виде типа такого:
bool TradeTransaction(TIME_REQUEST);
bool Trade(TIME_REQUEST);
// где временная метка может принимать значение к примеру TIME_REQUEST=TimeTradeServer или TIME_REQUEST=TimeGMT

А сервер на такой запрос давал бы сразу ответ с исчерпывающей информацией...

Однако, предполагая, что есть "непреодолимые объективные причины", делающие невозможным реализацию такого удобства, обхожусь тем, что есть:)

 

Кто как может...:)

Кстати, скачайте с сервера биржи Plaza II API, и Вы поймёте откуда "ноги растут". 

 
Mikalas:

Пожалуйста, не хамите! Кстати, уже 10!

И Вы в праве совсем не читать, что здесь написано! 

Зачем тогда тема? Просто выкричаться?

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

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

Удачи! 

 
komposter:

Зачем тогда тема? Просто выкричаться?

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

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

Удачи! 

komposter!

1. Или читайте ВСЁ, что написано или...

2.Что бы я не писал на этих страницах - это МОЁ право участника форума,

а ОТКРОВЕННОЕ ХАМСТВО нигде не уместно! 

3. Где бы Вы не обрабатывали ошибку, если ответ сервера не тот, который должен быть - результат будет один - ОШИБКА!

4. Вы, вероятно, сам не торгуете.

 
Mikalas:
 ОТКРОВЕННОЕ ХАМСТВО - ответ на откровенный наезд!  Каков вопрос - таков ответ. А мог стать героем... ))
 

pronych и ....

1. >> ОТКРОВЕННОЕ ХАМСТВО - ответ на откровенный наезд!  Каков вопрос - таков ответ. А мог стать героем... ))

        Вероятно, у Вас ИМЕННО такое восприятие окружающего мира... 

2. ВЫ ПРОГРАММИСТЫ или "ПИСАТЕЛИ"?

3. Кто-нибудь ответит на простой вопрос: Что должен ответить сервер на команду "Модифицировать ордер"?

4. Зачем тогда документация? Статьи? Закрыл глаза и шпарь что хочешь! Всё-равно ЗАКАЗЧИК ПЛАТИТ(и сливать-то тоже ему)! 

bool CheckMoney()
{
  return(ВАСЯ_ПУПКИН);
}