Полезные функции от KimIV - страница 3

 
KimIV:

Функция ExistOrders().

Возвращает флаг существования ордера. ...

Я у себя (для себя) сделал "возврат" количества ордеров. Сразу убивается 2 зайца (не надо писать 2 функции) - если > 0, то ордер есть + можно анализировать ... "дырки в сетке", срабатывание "переворотников" и т.п. (Правда функция работает дольше, что для целей только констатации не оправдано)

Плюс, мне показалось, что визуально нагляднее и, присвоив переменной, можно использовать далее

... (ExistOrders("", OP_BUYLIMIT)+ExistOrders("", OP_SELLLIMIT)) > 0 ...

чем

... (ExistOrders("", OP_BUYLIMIT) || ExistOrders("", OP_SELLLIMIT)) ...
 
SergNF писал (а):
Я у себя (для себя) сделал "возврат" количества ордеров.
Позже будет функция NumberOfOrders().
 
KimIV:
zhuki писал (а):

Покажите Вашу версию задержек между торговыми операциями

Между торговыми операциями я задержек не делаю. То есть, если мне нужно выставить два и более ордера, то эти торговые операции я совершаю без паузы между ними. А вот между торговыми попытками, которые приходится повторять, если при обращении к серверу возникает ошибка, делаю паузу согласно рекомендациям разработчиков МТ4. В качестве примера можете посмотреть, как реализованы такие паузы в моей функции SetOrder() для онлайн-торговли. Для разных ошибок, возвращаемых торговым сервером, делаются разные паузы.



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


Если торгуют больше 20-и экспертов, то всегда возникает ошибка 146. Функция способна решить вопрос только на нескольких (2-4) экспертов, но, в принципе, фиксированная задержка вопрос не решает...
При торговле 20-ю и более экспертами, нужно арбитражить, ну хотя бы по протоколу Ethernet... тогда, каждый эксперт сможет войти в рынок при поступлении сигнала.
 
Игорь, "угостите" функциями закрытия и модификации ордеров, пожалуйста. ;-)
 
Lukyanov:
Игорь, "угостите" функциями закрытия и модификации ордеров, пожалуйста. ;-)

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

План публикации функций в алфавитном порядке:
- DeleteOrders
- ExistOrdersByLot
- GetLotLastOrder
- GetOrderOpenPrice
- IndexByTicket
- ModifyOrder
- NumberOfOrders
- SelectByTicket
- SelectByTicketFromHistory

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

 

Игорь, хороше дело делаете!

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

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

Понимаю, да и сам так частенько грешу, когда на вопрос, а как ?
отвечают в лучшем случае: а так...
Например трейлинг-стоп. И на вопрос можно ли использовать свой ТС
ответ в 100% случаев будет ДА, в 90% прикрути свой код, в 80% на уточнение какой, последует: Кимовский ;)))
и т.д... по нисходящей...
А как именно, побуквенно-построчно, увы не всегда так бывает.

Поэтому тоже буду с нетерпением ждать постов с описанием функций модификации,
и возможно более детального применения их на практике...

 
klot писал (а):
При торговле 20-ю и более экспертами, нужно арбитражить, ну хотя бы по протоколу Ethernet... тогда, каждый эксперт сможет войти в рынок при поступлении сигнала.
Что Вы имели в виду под "арбитражить"?
 
kombat писал (а):
А вопросы именно в тех мелочах и нюансах которые позволяют связать куски кода
точнее обеспечение взаимосвязи блоков (модулей) программы...

Касательно своих функций я отвечу на любые вопросы. Если смогу :-) ... Тема для этого и создана. То есть, здесь можно задать вопросы из других тем, в которых я выкладывал свои функции, не давая подробных объяснений. Так что не стесняйтесь. Эту тему я планирую вести долго. Только на публикацию функций я запланировал 4 месяца. Плюс ещё ответы на вопросы...

kombat писал (а):
Поэтому тоже буду с нетерпением ждать постов с описанием функций модификации,
и возможно более детального применения их на практике...
Функция ModifyOrder является универсальной. Она применяется, как для ордеров, так и для позиций. Я подумаю, над органичным вплетением её в тему, как можно быстрее.
 
KimIV:
klot писал (а):

При торговле 20-ю и более экспертами, нужно арбитражить, ну хотя бы по протоколу Ethernet... тогда, каждый эксперт сможет войти в рынок при поступлении сигнала.
Что Вы имели в виду под "арбитражить"?

Добрый день!
Под "арбитражить" я имел ввиду, обеспечить гарантированный доступ к торговому потоку множеству одновременно работающих экспертов. Давно я столкнулся с этой проблемой, и пришел к выводу, что лучше использовать метод multiply-access with collision detection из протокола Ethernet.
Сущность простая. Проверяем занятость торгового потока. Если торговый поток занят, - генерируем случайную паузу (от 1 сек). Если торговый поток свободен, - сразу "посылаем" ордер. При торговле множеством экспертов у каждого эксперта будет своя случайная пауза и эксперты будут занимать торговый поток по очереди. Конфликтов между экспертами не будет.
Например:
if( IsTradeContextBusy() )  Sleep(MathRand()+1000);
 
Если 10 экспертов ждёт освобождения торгового потока (каждый в своём независимом потоке) что может произойти если если случайно совпадёт хотя бы 2.
Я считаю и использую другие принципы. Если торговый поток кем то занят то остальные эксперты просто не работают (return) и это проверяется в начале эксперта(чего анализировать если всё равно ничего не сделать).Как Вам такой подход в свете "арбитражить"?
Спасибо.
Причина обращения: