Разумные ограничения или Как лучше организовать советник?

 

Изначально вопрос возник на почве использования мультивалютного советника, на 15и инструментах (запущен на одном), с двумя разнонаправленными ордерами по каждому инструменту . До 5и инструментом еще нормально, но потом начинается проскальзывания. Получается слишком много приказов: и открыть, и подвинуть стоп, и профит. И ордера 2. ...

В прошедшую пятницу пришел к выводу, что нужно это оптимизировать.

Разумные ограничения

В связи с использованием торговых функций необходимо обратить внимание на ограничения более общего характера. Например, ошибка 146 возникает только в том случае, если в окне одного финансового инструмента одновременно работают несколько программ, формирующих торговые приказы. По мнению автора, такая практика, хотя и допустима, но не оправданна. Гораздо эффективнее - создать и использовать одну торгующую программу, которая учитывала бы все особенности торговли. Во время работы одной программы возможность формирования одновременно нескольких торговых приказов вообще не возникает. Кроме того, в такой программе можно более эффективно организовать весь алгоритм: учитывать вероятность успешных торгов по различным финансовым инструментам и в зависимости от этого правильно перераспределять денежные средства. Для торговых операций более эффективно использовать полноценный эксперт, а скрипт лучше применять для разовых расчётов и сообщения на экран некоторой полезной информации. Вместе с тем, в случае если трейдер не использует эксперт для автоматической торговли, применение скриптов оказывается более эффективным, чем управление ордерами с помощью панели управления клиентского терминала.

Это выдержка из учебника (торговые операции). Прочитал раза 4-е. Так как лучше организовать советник?

Спасибо за ответ.

 

если в окне одного финансового инструмента одновременно работают несколько программ, формирующих торговые приказы

Если вообще в терминале работает более одного советника.

Гораздо эффективнее - создать и использовать одну торгующую программу, которая учитывала бы все особенности торговли

дауш.... задача достойна идиотов!!!

Перед выполнением запроса делать проверку if(!IsTradeContextBusy()){OrderSend(... и т.п.

 

Интеджер!

Переведи еще раз 8) Или скажи, что у меня правильно или как лучше сделать...

Меня еще волнует вопрос одработки Send-а. Я вот без этого жил и не кашлял. Но всегда знал, что это нужно вставить.

Наснолько это поможет. Еще раз оговорюсь, что у меня этого нет и мене комфортно.

int ticket=OrderSend(Symb, OP_BUYSTOP, Lot, Price, 0, SL, TP);
//--------------------------------------------------------- 7 --
if (ticket>0) // Получилось :)
{
Alert ("Установлен ордер BuyStop ",ticket);
break; // Выход из цикла
}
//--------------------------------------------------------- 8 --
int Error=GetLastError(); // Не получилось :(
switch(Error) // Преодолимые ошибки
{
case 129:Alert("Неправильная цена. Пробуем ещё раз..");
RefreshRates(); // Обновим данные
continue; // На след. итерацию
case 135:Alert("Цена изменилась. Пробуем ещё раз..");
RefreshRates(); // Обновим данные
continue; // На след. итерацию
case 146:Alert("Подсистема торговли занята. Пробуем ещё..");
Sleep(500); // Простое решение
RefreshRates(); // Обновим данные
continue; // На след. итерацию
}

Я вот плюсов не вижу, но очень хочу вставить...

 
Перед выполнением функций OrdersSend(), OrderClose(), OrderModify(), OrderDelete(), делайте проверку торгового потока функцией IsTradeContextBusy(). Если торговый поток свободен, то выполняем эти функции. После выполнения каждой торговой функции еще делайте RefreshRates().
 
nteger писал(а) >>
Перед выполнением функций OrdersSend(), OrderClose(), OrderModify(), OrderDelete(), делайте проверку торгового потока функцией IsTradeContextBusy(). Если торговый поток свободен, то выполняем эти функции. После выполнения каждой торговой функции еще делайте RefreshRates().

IsTradeContextBusy().

RefreshRates().

С этим понятно сейчас вставлю.

case 129:Alert("Неправильная цена. Пробуем ещё раз..");
RefreshRates();
continue;
case 135:Alert("Цена изменилась. Пробуем ещё раз..");
RefreshRates();
continue;
case 146:Alert("Подсистема торговли занята. Пробуем ещё..");
Sleep(500);

continue;

Меня вот это волнует 500... оно мне надо ?

 
MarchCat писал(а) >>

Меня вот это волнует 500... оно мне надо ?

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

 
Integer писал(а) >>

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

Спасибо, что разъяснил, что такое задержка в 500 миллисекунд. Это очень хорошо конечно.

Советник у меня срабатывает раз в 2 секунды на GBPJPY. Если я буду ждать на каком-то одном ордере 0.5+0.5+0.5 ... то по остальным инструментам я буду просто простаивать.

Мне кажется, что это ожидание мне не надо. Скорее всего, меня спасет функция о занятости потока.

И давай вернемся к первому вопросу я там не совсем понял про идиотов.

У меня, с твоей точки зрения, правильно организован советник? Мультивалютный (прописаны в массиве), запущен на одном инструменте. ???????

Да или Нет?

 

Если ваш советник повторит попытку на следующем срабатывании, то не нужно задержки.

И давай вернемся к первому вопросу я там не совсем понял про идиотов.

Это не про вас). Про рекомендацию. Количество и наимнование советников используемых в данный момент в в терминале величина крайне переменная. А лепить все в один советник...

У меня, с твоей точки зрения, правильно организован советник? Мультивалютный (прописаны в массиве), запущен на одном инструменте

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

 

О! Вот именно про это я и хочу послушать совета! В моем советнике присутствуют все системы. Движения SLTP, оценки: входа, выхода, подвижки, оценки выгодности относительно инструмента... и да ж красивейший лог :)))

Может мне этот советник на каждом инструменте в отдельности запускать. Я уже сделал эту функцию. Но хочу послушать мнение эксперта!

 
На каждом инструменте и чтобы советник работал по тикам, а не в цикле.
 
Integer писал(а) >>
На каждом инструменте и чтобы советник работал по тикам, а не в цикле.

Вот мы и добрались до сути! Если приказ в обработке по одному инструменту и в этот момент по другому тоже идет приказ на открытие. МетаТрейдер корректно отработает два одновременно?

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