Ваши вопросы по языку MQL4

ansol

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

Тогда откуда куча ордеров в стейте взялась? Разницу в 1-2 пипса спишем на ошибки вычисления "канала", но по одной и той же цене?! оО
 

vlad_123

Местный знаток
Т.е. команда на открытие на данный момент уже послана и ордер должен быть открыт, но брокер этот ордер не открыл из-за какой-то задержки своей внутренней. Из-за этой задержки по каждому тику снова выдаются команды на открытие ордеров и происходит дублирование первой команды
Какое значение вернет команда OrderSend в первом и втором случаях?
Подсказываю, что по мануалу она возвращает либо номер тикета, либо -1.
 

ansol

Местный знаток
Какое значение вернет команда OrderSend в первом и втором случаях?
Подсказываю, что по мануалу она возвращает либо номер тикета, либо -1.

Вот-вот, а стейт показывает несколько ордеров по одной цене.
Как-то надо бороться с безобразием ;)
 

vladradon

Программист
Вы не правы. Пока Ордерзенд не получит ответа от сервера об открытии ордеа или неудачном открытии программа выполняться не будет,новые тики будут пропускаться.
При запросе на открытие сервер сразу возвращает тикет нового ордера, но может задержать его открытие, взависимости от загруженности, а за это время даже на ECN счетах может проскочить несколько тиков и по каждому будут посылаться новые команды на открытие - я с этим сталкивался не раз в своих разработках. А при сильном тренде загрузка у сервера максимальная и он может уже исполнять команды на уровне инстанта, а не ECN.
 
Последнее редактирование:

alexshell

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

Если действительно так, то может быть. Тут я не уверен.
 

vladradon

Программист
Вот-вот, а стейт показывает несколько ордеров по одной цене.
Как-то надо бороться с безобразием ;)
Ну... вот последний вариант, что предложил, как раз должен справиться в этом плане, т.к. при правильном запросе по ордерсенд (когда результат больше -1 по коду), новые ордера не будут открываться, пока не будет в общем списке новый ордер, который просчитывается функцией подсчета ордеров по меджику.
 

ansol

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

Я попробую сегодня так сделать
 

vladradon

Программист
Это совершенно не так. Даже если сов отправил запрос и вдруг прервалась связь, то сов будет висеть и подвесит весь терминал.
У меня мультивалютник, который торгует одновременно по 378 парам пар (на 5-ке), ни разу не подвешивал терминал ни при каких обстоятельствах. Зато был печальный опыт, когда у одного брокера на 3-х одинаковых реальных счетах один и тот же сов с одинаковыми настройками на одной паре: один сов на домашнем компе и 2 на VPS-ах и запущены практически одновременно, но на одном VPS счете сов начинает открывать ордера без всякой логики с промежутком в спред и в итоге слив, а 2 параллельных сова нормально продолжили торги как положено. Причину я так и не смог найти, но стараюсь как можно больше разных проверок вносить в свои разработки.
 

vladradon

Программист
А может сделать совсем по-простому - при OrderSend > -1 слипнуть на 5-10-15-... секунд?
Это первое, что и я предложил, но в этом случае весь сов будет висеть эти секунды, а мог бы на резких скачках закрыть пару сделок в плюс. Поэтому правильней лучше один раз внести пару сложных проверок, которые блокируют только то, что нужно, а не весь сов, тем более, что трал должен работать.
 

ansol

Местный знаток
Ну, хозяин - барин, конечно...
Но у меня - глубокое сомнение, что на реале такая торговля будет жизнеспособна. Как минимум - реквотами задолбят.

На ECN нету реквот, там "рыночное" исполнение, только вот глюк пролазит такой.
Глюк как-то связан с расширением спреда, на GBPAUD чаще всего вызазит, а там спред и так немаленький изначально.

Убрал свой "iCustom(1ATR)", воткнул стандартный iATR - на тестере результат один в один, вероятно, встроенный будет быстрее работать, не засек время теста за полгода, к сожалению.

2015.04.29 16:31:41.910 EURUSD,M5: 10996846 tick events (36985 bars, 11746241 bar states) processed within 702114 ms (total time 707527 ms)
Это на тиковой истории дукаскопи
 

Вложения

  • AnSol-ZOG3.mq4
    20,8 КБ · Просмотры: 26
Последнее редактирование:

Viko2000

Почетный гражданин
Коллеги, у меня тут идея пришла…*hi*.Для версии бота для оптимизации, реально ли с помощью программного кода, реализовать имитацию доливки депо. Давайте подумаем…));) Допустим –50 проц…..доливка 500 проц. в долларах….
 
Последнее редактирование:

lolopepe

Новичок форума
Всем доброго времени суток. подскажите пожалуйста,как сделать чтобы после каждого закрытия сделок/сделки в советнике автоматически менялся мэджик(типа динамический меджик) и возможно ли это вообще?
 

vlad_123

Местный знаток
Коллеги, у меня тут идея пришла…*hi*.Для версии бота для оптимизации, реально ли с помощью программного кода, реализовать имитацию доливки депо. Давайте подумаем…));) Допустим –50 проц…..доливка 500 проц. в долларах….
А чего тут думать? Считайте размер лота не от всего депо, а от части, по необходимости эту часть увеличивайте.
 

Viko2000

Почетный гражданин
А чего тут думать? Считайте размер лота не от всего депо, а от части, по необходимости эту часть увеличивайте.

Идея....?..*hi*...Так не теория надо....Зачем мне теория ..:).....Желательно само исполнение в коде...:embrace:.........
 

Viko2000

Почетный гражданин
А чего тут думать? Считайте размер лота не от всего депо, а от части, по необходимости эту часть увеличивайте.

extern double PercentLos = 50; // Процент убытка

if (AccountEquity()<=AccountBalance()*(1-PercentLos/100))
{



пока так сообразил.......есть предложения:)
 

Viko2000

Почетный гражданин
А чего тут думать? Считайте размер лота не от всего депо, а от части, по необходимости эту часть увеличивайте.

Переосмыслив:).... подумав ….нееее…..ты не врубился в то что я предложил…:embrace:.
Будет желание, сообрази по новой….и желательно с кодом….)))):)
 
Верх