Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1125

 
Evgeniy Oshurkevich:
Да я уже понял, и на этом спасибо, перед любым торговым приказом уже прописал везде функцию обработки ошибок, я вот пока зациклился как теперь тормозить советник, если будут ошибки именно из за моей ошибки, и где именно прописать. Т.е. пытался открыть ордер, но произошла ошибка, как её получить? К примеру OrderSend(....); совершил операцию, как получить инфо удачно ли сработал?

А справку по функции открыть и посмотреть что она возвращает? А _LastError?

В частности  OrderSend возвращает тикет ордера или -1. Догадайтесь в каком случае будет -1 самостоятельно ;)

 
Vitalie Postolache:

А справку по функции открыть и посмотреть что она возвращает? А _LastError?

В частности  OrderSend возвращает тикет ордера или -1. Догадайтесь в каком случае будет -1 самостоятельно ;)

уже минут 10 об этом сейчас читаю :)
 
Evgeniy Oshurkevich:
уже минут 10 об этом сейчас читаю :)
Вот как пример вполне пригоден
 
Vitaly Muzichenko:
Вот как пример вполне пригоден

А я уже начал подбирать себе коды ошибок, спасибо :) А на счёт как тормознуть советник уже почти доделал)

В этом примере не могу найти значение "Slippage" он в OrderSend находится, он может не такой значительный или обязательный, ИНТЕРЕСНО же!  

 
Evgeniy Oshurkevich:

А я уже начал подбирать себе коды ошибок, спасибо :) А на счёт как тормознуть советник уже почти доделал)

В этом примере не могу найти значение "Slippage" он в OrderSend находится, он может не такой значительный или обязательный, ИНТЕРЕСНО же!  

А это надо ловить код 135 или 129 и увеличивать значение проскальзывания для следующей попытки. Или, если увеличенное проскальзывание не привлекательно выглядит, просто посчитать определённое количество секунд до следующей попытки. А ещё следить за спредом, если спред в это время увеличен, дождаться его уменьшения и попытаться снова. Ещё желательно не пользоваться Sleep(), это конечно упрощает написание кода и вреда не приносит особого кгода спячка на полсекунды или на секунду, но если советник - быстрый пипсовщик, которому каждая миллисекунда важна, или нужна пауза в десятки секунд, тут уж лучше не использовать спячку, во время спячки советник парализован и не может не только торговать, но и выполнять мониторинг торгового окружения или другие вычисления, не отвечает на действия пользователя и т.д.

Можно зафиксировать текущее время, отсчитать нужное количество секунд (или миллисекунд) и потом действовать. 

 
Evgeniy Oshurkevich:

А я уже начал подбирать себе коды ошибок, спасибо :) А на счёт как тормознуть советник уже почти доделал)

В этом примере не могу найти значение "Slippage" он в OrderSend находится, он может не такой значительный или обязательный, ИНТЕРЕСНО же!  

На сегодня Slippage не такой актуальный как раньше, он как правило используется на счетах с фикс-спредом, но таких счетов в природе осталось несколько штук, и на них торгуют человек 5-7. Если спред плавающий, то там нет Slippage, там уже лучше отслеживать сам спред, и если он сильно раздвинут, то воздержаться от входа, но опять-же, всё зависит от стратегии, насколько критичен большой спред.
 
Vitaly Muzichenko:
На сегодня Slippage не такой актуальный как раньше, он как правило используется на счетах с фикс-спредом, но таких счетов в природе осталось несколько штук, и на них торгуют человек 5-7. Если спред плавающий, то там нет Slippage, там уже лучше отслеживать сам спред, и если он сильно раздвинут, то воздержаться от входа, но опять-же, всё зависит от стратегии, насколько критичен большой спред.

Чушь... 

На ECN очень популярных ДЦ проскальзывания на новостях - мама не горюй. Иногда сотни пипс (5зн). Или просто мурыжат ордера целые минуты, выдавая "новая цена", "цены нет" и т.д.

 
Vitalie Postolache:

А это надо ловить код 135 или 129 и увеличивать значение проскальзывания для следующей попытки. Или, если увеличенное проскальзывание не привлекательно выглядит, просто посчитать определённое количество секунд до следующей попытки. А ещё следить за спредом, если спред в это время увеличен, дождаться его уменьшения и попытаться снова. Ещё желательно не пользоваться Sleep(), это конечно упрощает написание кода и вреда не приносит особого кгода спячка на полсекунды или на секунду, но если советник - быстрый пипсовщик, которому каждая миллисекунда важна, или нужна пауза в десятки секунд, тут уж лучше не использовать спячку, во время спячки советник парализован и не может не только торговать, но и выполнять мониторинг торгового окружения или другие вычисления, не отвечает на действия пользователя и т.д.

Можно зафиксировать текущее время, отсчитать нужное количество секунд (или миллисекунд) и потом действовать. 

Evgeniy Oshurkevich:

А я уже начал подбирать себе коды ошибок, спасибо :) А на счёт как тормознуть советник уже почти доделал)

В этом примере не могу найти значение "Slippage" он в OrderSend находится, он может не такой значительный или обязательный, ИНТЕРЕСНО же!  

Во время спячки по команде Sleep советник действительно парализован. Даже в случае одного терминала необходимо обеспечить работу штук двадцати различных потоков, то есть пустить каждого занять процессорное время. Хотя бы для того, чтобы вывести что-нибудь на экран, не говоря уже о критически важной для миллисекундного пипсовщика задаче приема приходящих тиков. Реально есть еще десятки служб и сервисов операционной системы, которым тоже хочется поработать, то есть занять процессор своими нуждами. Если это не будет сделано командой Sleep, планировщик потоков ОС принудительно сделает это, но уже по своим соображениям, кому сколько дать времени. Можно полагаться и на него и загружать процессор постоянно почти на 100% одним лишь этим советником. Только вряд-ли кому нибудь это подойдет. Если программист далек от планирования распределения процессорных ресурсов, в подавляющем большинстве случаев ему вполне подходит реализованный в MQL подход, когда советнику дается процессор в момент прихода тика по одному инструменту, после обработки советником этого прихода советник "парализуется" и до нового тика не занимает процессор.

Параметр Slippage в OrderSend (не путать с реальным проскальзыванием в случае режима исполнения ордеров "Market execution", по рынку) имеет смысл задавать только в режиме исполнения "Instant execution", немедленное исполнение, когда ордер либо исполняется по заявленной цене, либо отклоняется, то есть получает отказ. Наибольшее допустимое отклонение цены исполнения от заявленной в ордере можно задать ненулевым. В режиме "Market execution" этот параметр ничего не значит, в этом случае цена исполнения назначается дилинговым центром, отклонение от заявленной в ордере цены ничем не ограничено.

 
Vitalie Postolache:

Чушь... 

На ECN очень популярных ДЦ проскальзывания на новостях - мама не горюй. Иногда сотни пипс (5зн). Или просто мурыжат ордера целые минуты, выдавая "новая цена", "цены нет" и т.д.

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

Есть условие для открытия ордера BUY. Открывается ордер, как сделать переход к SELL условию после закрытия BUY ордера?




if(High[1]-Close[1]>=NormalizeDouble(xbs1*_Point,_Digits))
   {
    int b_tik=OrderSend(_Symbol,OP_BUY,Lots,Ask,Slip,Low[2]-sl,High[1]+ tp,"",Magic,0,clrBlue)==true; //открытие ордера
      
       GlobalVariableSet("B_order",0); // Больше не ищем вход Buy

       //-----?????
       GlobalVariableSet("S_order",1); // Переходим к поиску Sell
       return;
   }