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

 

Добрый день!

С-4

Stock# - не бесплатный для нового шлюза Cgate Plaza II.

API Cgate - свободно распространяется биржей. Написать свой терминал(конечно он не будет такой красивый как MQ),

не сложно, сложно перевести API Cgate к API пользователя, который сможет писать на любом языке свой советник - DLL.

По сути идея у меня такая:

БИРЖА --> PLAZAII(API Cgate) -->Простой терминал --> DLL-советник пользователя.

На рис. я получаю тестовые котировки с биржи по протоколу Plaza II


Терминал-то почти готов(аж целых 3 дня писал)!

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

будете лишь ограничены средой разработки.

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

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

P.S Концепция клиент-сервер(как и вообще любая ЭЛЕКТРОННАЯ торговля) основана ЛИШЬ на событийной модели: ЗАПРОС-ОТВЕТ - ЭТО ОСНОВА!

Можно придумывать всё что угодно(различные проверки и прочее), но если не правильно работает запрос-ответ, то в конечном счёте это всё-равно

НЕИЗБЕЖНО приведёт к ошибке в работе советника.


 
Mikalas:
 

...

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

...

Есть очень большой плюс в концепции МТ5 - общение на форуме с толковыми мужиками. Если это ни чего не стоит, то ...

 
Mikalas:

Терминал-то почти готов(аж целых 3 дня писал)!

Впечатляет для трех дней!

Единственный вопрос: если все так хорошо, то почему Вы все же используете МТ5?

DC2008:

Есть очень большой плюс в концепции МТ5 - общение на форуме с толковыми мужиками. Если это ни чего не стоит, то ...

Да, это точно. Сейчас подобным продуктам без своей экосистемы просто не выжить. Форум, общение, тысячи пользователей, активисты вроде нас с вами готовых что-то постить, обсуждать, блоги... Без поддержки пользователей любой проект, какой бы он не был рано или поздно загнется, и все усилия на его разработку пропадут зря.
 

С-4!

Терминал - служит ТОЛЬКО для отображения чего-либо!

Я уже писал, что это совсем не сложно. Самое трудное это трансформация API Cgate в User API,

я сделал 1/200 (не самую сложную) часть от того, что нужно сделать.

Cgate Plaza II - это потоковый асинхронный клиент-сервер, причем потоки могут

содержать не однотипную информацию! 

К сожалению, я не обладаю тем уровнем, чтобы быстро полностью сделать эту трансформацию....

На рынке всего 2 (платных) продукта, которые работают через Cgate, причём я не

уверен, что правильно.

Так, что на ФОРТС, пока не напишу CGate Trader, - МТ5. 

 

Вот кстати наткнулся на интересную статью как раз по теме: Торговые события в MetaTrader 5, автор MetaQuotes Software Corp, дата 24 января, 2011. Среди прочего сказано:

Сообщения о торговых событиях и об изменениях в торговой истории поступают по независимым каналам. При отправке запроса на покупку функцией OrderSend() можно сразу же узнать тикет ордера, который был создан при успешном результате проверки запроса. Но в то же время сам ордер еще может не появиться в клиентском терминале и попытка выбрать его с помощью функции OrderSelect() окажется неуспешной. 

 А также:

Все операции на торговом сервере и отсылка сообщений о торговых событиях производятся асинхронно. Есть только один гарантированный способ выяснить, что именно изменилось на торговом счета. Этот способ - запоминать состояние торговли и торговой истории и сравнивать новое состояние с сохраненным.

Далее идут примеры того,  как правильно организовать счетчик ордеров и трейдов.

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

За пару минут накидал свой пример работы с изменившейся историей.

///
/// Следит за поступлением новых трейдов и ордеров.
///
void OnTimer()
{
     datetime tBegin = TimeCurrent();
     HistorySelect(dataBegin, TimeCurrent());
     //Если новые трейды не поступили, то и нечего обрабатывать.
     if(HistoryDealsTotal() == 0)return;
     AddDeals();
     dataBegin = tBegin;
}
В данном примере есть скрытый подводный камень, и как есть его использовать нельзя, но думаю концепт понятен. Каждый раз мы загружаем кусочек истории, начиная с последнего обработанного трейда и заканчивая текущем временем. Если пришел новый трейд - обрабатываем его и перемешаем начала загрузки истории на момент прихода трейда.
 
C-4:

Вот кстати наткнулся на интересную статью как раз по теме: Торговые события в MetaTrader 5, автор MetaQuotes Software Corp, дата 24 января, 2011. Среди прочего сказано:

Угу

 

А автору рекомендую почитать статью Как создать торгового робота и не потерять время. Как раз подходит:

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

Но «без труда не вынешь и рыбку из пруда», и программист зачастую вместо торгового робота начинает писать с нуля на известном ему языке программирования всю нужную инфраструктуру – получение и обработка ценовых данных, визуальное представление графиков и индикаторов, собственные средства по тестированию стратегии на истории и так далее.

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

 

Василий!

Я, конечно, понимаю Вашу привязанность к MT-5, но поверьте(на слово)

НЕТ СМЫСЛА КОПАТЬСЯ В ИСТОРИИ, потому что туда могут тоже заноситься не верные данные!

Поймите, пожалуйста, простую вещь - Клиент-сервер = запрос-ответ!

Смотрите, ордер модернизировался, а ответ приходит, что он частично исполнился,

как Вы думаете, что в истории будет? 

 

Roch!

Вы, слишком навязываете мне то, что я раз 5 читал. 

Я говорю, не о создании робота(или как его написать), а о

КОНКРЕТНЫХ ОШИБКАХ в МТ-5!

Вы даже не утруждаете себя посмотреть внимательно на картинку, тоторую

я прилагал( ВРЕМЯ СООБЩЕНИЙ)

 

 
Mikalas:

Вы даже не утруждаете себя посмотреть внимательно на картинку, тоторую

я прилагал( ВРЕМЯ СООБЩЕНИЙ)

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


можешь дать текстовой журнал log файл вместо скриншотов.

+ код, по которому я смогу вопроизвести  твою ошибку?

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