Исполнение Buy-Sell ордеров, отложек - тема для программистов📌

От garanyan1985, 24 июля, 2011 в Уголок Программиста

Страница 3 из 3
#51

Хранить данные в комментарии можно но лучше воздерживать или дублировать во внешней БД. Для компрессии строк можно применять base64 кодирование.

Если есть подозрения на то что сторонний скрипт или советник может поставить ордер с таким же меджиком или меджиками как у вас то можно делать вычисление контрольной суммы, например на основе CRC32 и вписывать в комментарий, например так, ставим отложку по заранее недостижимой цене, удаляем ордер, запоминаем номер ордера.
Далее, считаем CRC32 для НомерОрдераОтложки и вписываем значение в комментарий. Для компактности можно использовать hex значение.

Есть ли в истории ордера с нашим меджиком? Да, есть, проверяем комментарий. Если в комментарии нет нашего хеша то это не наш ордер. Нужно предусмотреть возможность обойти это правило в случае обнуления части истории счета.
Далее каждый следующий ордер будет получать CRC значение от предыдущего ордера, своего рода блокчейн подпись. Однако такие методики надо проверить на частичном закрытии, когда в ордере есть from #НомерОрдера и закрытии встречным ордером.

Лично я рекомендую не опираться особо на текст в комментариях, а тщательно прописывать логику работы советника, пользоваться csv файлами или внешними БД или еще лучше запросами на свой сервер с php скриптами, если прямые запросы к БД неприемлемы.

#52

Длина строки комментариев к ордеру 31 или 33 символа (точно не помню, но точно больше 30). На комментарии никогда не опираюсь когда пишу советники. В основном если нужно записывать информацию, то пишу в глобальные переменные (GlobalVariableSet(name,value)). В вашем случае, если нужно советник запускать на другом терминале и при этом чтобы советник смог прочитать состояние советника с другого терминала, то лучше конечно писать информацию в файл. А еще лучше логику советника писать таким образом, чтобы при каждом новом запуске (будь то на этом же терминале или на другом терминале) в блоке инициализации советник читал информацию об открытых/закрытых ордерах, и на основе этой информации определял текущее состояние (номер колена, маджик противоположного ордера и др.).

#53

Полностью согласен с maxstah, требуют особого учёта только данные тиковых индикаторов или данные, которые совы тянут с мухобука и биржи, имхо.

#54

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

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

#55
zhab3r поделитесь с форумом результатами. Глубоких исследований комментов никто не делал - Вы будете первым.
#56

zhab3r поделитесь с форумом результатами. Глубоких исследований комментов никто не делал - Вы будете первым.



Обязательно, только пока не понятно когда будет запущена в работу появится реализация описанного выше.
#57

Спасибо за ответы, сделал для себя вывод: что комментарии можно использовать при разработке и тестировании на истории


А в тестере комменты к файлам точно прописываются?
Как-то я их в стейтменте из тестера искал и вроде не нашел...
#58

А в тестере комменты к файлам точно прописываются?
Как-то я их в стейтменте из тестера искал и вроде не нашел...



Возможно вы имели в виду: "...комменты к ордерам..."
В тестере комментарии к ордерам работают точно так же, как в режиме реального времени, просто комментарии в тестере нигде не посмотришь, но комментарии к ордерам можно например в журнал выводить после открытия ордера при помощи Print(comment)
#59

А в тестере комменты к файлам точно прописываются?
Как-то я их в стейтменте из тестера искал и вроде не нашел...



100%. В моей версии "перевертыша" магики тикеты предыдущего ордера пишутся в комменты как hex, в тестере проблем нет. Вопрос в том насколько это надежно...

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

Изменено 5 ноября, 2017 пользователем zhab3r

#60
zhab3r просто интересно: зачем менять магики и потом запоминать?
#61

zhab3r просто интересно: зачем менять магики и потом запоминать?



Прочитал пост выше и понял что был не прав. :) Хранить тикеты.

Пример, есть конструкция: рыночный ордер и отложенный, который должен быть удален при срабатывании ТП рыночного ордера. У отложенного ордера в комментарии тикет рыночного "сигнального". Таких конструкций может быть несколько.

Пока запущен советник все прекрасно, в памяти хранятся все необходимые данные анализируем, работаем.

Когда перезапустили советник нужно все взаимосвязи восстановить, читаем из комментария тикет и всстанавливаем взаимосвязь. Как то так...
#62

Увы комментарии похоже ненадежны. Даже в тестере, при частичном закрытии ордера комментарий переписывается. Вот простой код для демонстрации:


int OnInit()
{
int ticket=OrderSend(_Symbol,OP_BUY,0.1,Ask,2,0,0,"First",1234);
OrderClose(ticket,0.03,Bid,2);
for (int i=0; i {
OrderSelect(i,SELECT_BY_POS);
OrderClose(OrderTicket(),OrderLots(),Bid,3);
}
for (int i=0; i {
OrderSelect(i,SELECT_BY_POS,MODE_HISTORY);
Print(OrderTicket(),"-",OrderComment(),"-",OrderMagicNumber());
}
//---
return(INIT_SUCCEEDED);
}
#63

Ваш алгоритм восстановления серий ордеров, конечно, идеален, если-бы не одно НО... Я пошёл другим путём - попроще:
в каждый коммент ордера серии пишется дата начала серии, при перезапуске ищется первый коммент с датой, потом запускается от этой даты до конца, ордера с битым комментом плюсуются к текущей серии . Колени в принципе не считаю - брокер может один ордер на 3 разбить (лично наблюдал), поэтому считаю только лотность и ПЛ. Ограничение только одно - одна разнонаправленная серия на паре в ед. времени.

#64

Еще одну печать узнал- брокер может изменить тикет при заливке отложенного ордера.

#65

Вот это хреновая новость, а откуда узнали?

#66

Вот на такое обсуждение наткнулся

#67

Можно написать функцию выбора ордера по тикету. 1,2,3,4,5,... бай и 1,2,3,4,5,... селл

В уроках есть находящая последний открытый ордер. Мне же нужно например 3 первых ордера на бай или сел.

Сам писал фигня получается не могу с циклами разобраться.

Спасибо !

//+------------------------------------------------------------------+
double FindLastSellPrice()
{
int oldticket=0;
ticket = 0;
double oldopenprice = 0;
for (int cnt = OrdersTotal()-1; cnt>=0; cnt--)
{
if (OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
{
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic && OrderType() == OP_SELL)
{
oldticket = OrderTicket();
if (oldticket > ticket)
{
ticket = oldticket;
oldopenprice = OrderOpenPrice();
}
}
}
}
return(oldopenprice);
}
//+------------------------------------------------------------------+

#68
1 час назад, Сахалинец сказал:

Сам писал фигня получается не могу с циклами разобраться.

Имхо тут циклы не причём. Вы в каком виде желаете получить информацию о 3 ордерах? только цену открытия и всё?

Приведённый пример ищет самый старший ордер (по времени) среди открытых, Вы пишите о 3 "первых" - откуда считать первые? 

#69

Вот советник сетка почти из уроков. Вывел Comment. Но работает через одно место. Где я ошибся? :((

123.mq49 скач. 123.ex44 скач.

#70

Всем привет. Такой случай на реале. В OrderSend указан Slippage = 1. Обычно ордера по рынку открывались с проскальзыванием 0-0,5. Сегодня же ордер открылся с проскальзыванием 130 новых пунктов на спокойном рынке, пара GBPCAD 22:04 MSK, время открытия 172 мс. Так вот вопрос, этот параметр Slippage он должен работать на ECN ? Или он может игнорироваться? Самое интересное, что и цен таких не было, по которым ордер открылся. Котировки пишутся у меня.

Изменено 31 июля, 2019 пользователем atnet

#71
20 минут назад, atnet сказал:

должен работать на ECN ?

Нет.

Работает только на счетах Instant-исполнения.

#72

 

 

 

 

 

что сделать в коде для открытия ордеров с отрицательной арифметической прогрессией

Pyramiding.mq47 скач.

Страница 3 из 3

Для публикации сообщений создайте учётную запись или авторизуйтесь

Перейти к списку тем
Форум · 2.0.20260627.0025