Вопрос OrderModify()

 

Здравствуйте форум MQL4,

{OrderModify(ticket,0,Ask-500*Point,0,0,Blue);}}}}

Код выше работает, но перемещает sl вверх или вниз, когда цена спроса движется вверх или вниз.

В качестве решения я попробовал следующее...

{OrderModify(ticket,0,OrderOpenPrice()-500*Point,0,0,Blue);}}}}

(выбранный ордер - ордер на покупку).

Я проверил журнал на наличие полученной ошибки, и он прочитал 4051. Есть несколько ошибок 4051. В принципе, это не работает, и мне интересно, решал ли кто-нибудь ранее эту проблему и имеет ли объяснение.

Я не понимаю, почему это решение не будет работать (да, я верю, что правильно выбираю заказ, потому что первое неправильное решение OrderModify работает).

Спасибо.

 
WhooDoo22:


Я проверил журнал на наличие полученной ошибки, и он прочитал 4051. Есть несколько ошибок 4051. В общем, это не работает, и мне интересно, решал ли кто-нибудь ранее эту проблему и имеет ли объяснение.

Когда у вас возникает проблема с функцией, читайте документацию по этой функции ... . OrderModify()<----- Click ME ! ! !

Вы не можете изменить цену открытия ордера на 0.0 ... если вы правильно выполнили OrderSelect(), используйте OrderOpenPrice() для второго параметра, который вы передаете в OrderModify().

 

Саймон, я прочитал документацию по функции OrderModify() и заметил, что в примере используется трейлинг-стоп. Я не хочу использовать трейлинг-стоп для советника. Это потому, что если я использую трейлинг-стоп, то (согласно примеру) советнику потребуется, чтобы рынок прошел x пунктов выше текущего sl, чтобы изменить sl на указанную цену. В принципе, это слишком сложно. Я просто хочу добавить стоп-лосс к ордеру ПОСЛЕ того, как ордер был отправлен на рынок.

В любом случае, в настоящее время я также пробую новые решения.

Спасибо.

 
WhooDoo22:

Саймон, я прочитал документацию по функции OrderModify() и заметил, что в примере используется трейлинг-стоп. Я не хочу использовать трейлинг-стоп для советника. Это потому, что если я использую трейлинг-стоп, то (согласно примеру) советнику потребуется, чтобы рынок прошел x пунктов выше текущего sl, чтобы изменить sl на указанную цену. В принципе, это слишком сложно. Я просто хочу добавить стоп-лосс к ордеру ПОСЛЕ того, как ордер был отправлен на рынок.

В любом случае, в настоящее время я также пробую новые решения.

Спасибо.

Почему вы пытаетесь изменить цену открытия на 0.0? Вам нужно оставить цену открытия неизменной, т.е. OrderOpenPrice() попробуйте...
 

Саймон,

Испытатель стратегий:

1. Визуальный режим

2. Скорость 31

3. 2010.12.29

4. EURUSD

5. M15

запускать"Только открытые цены", а не каждый тик.


MetaEditor: Edit -> Find... -> "// выбор 1."


выбор 1. = ошибок нет, но мне это явно не нужно.

выбор 2. = вкладка Журнал -> Журнал читает: "ошибка 4051".

Спасибо.

Файлы:
test1.mq4  12 kb
 

Очевидно, что использование функции OrderOpenPrice() внутри параметров OrderModify() считается "недопустимым параметром функции" в соответствии с ошибкой 4051. Я думаю "?" :) Я мог бы сохранить значение OrderOpenPrice() и включить его в параметры функции OrderModify(), чтобы сделать то, что я хочу, но неужели? Наверняка есть более простой способ! Я снова возвращаюсь к старой работе. ;)

Спасибо.

 
WhooDoo22:
Очевидно, что использование функции OrderOpenPrice() внутри параметров OrderModify() считается "недопустимым параметром функции" в соответствии с ошибкой 4051.
Очевидно, ваш код неверен. С функцией OrderOpenPrice() все в порядке. Опубликуйте код, включая ваш orderSelect.
 

Уильям,

Очевидно, я разместил советник в ссылке, чтобы вы могли скачать и просмотреть его в MetaEditor, если вы хотите оказать поддержку. Функция OrderSelect() в настоящее время не является проблемой. Знаете что? Я опубликую это специально для вас, Уильям.

//***************************************************
// EMERGENCY BUY ORDER STOP LOSS PROTECTION SECTION ;
//***************************************************

   OrderSelect(0,SELECT_BY_TICKET,MODE_TRADES); // was ticket.
   if(OrdersTotal()>0)                                                                         {
   if(OrderType()==OP_BUY)                                                                     {
   if(OrderSend1==true)                                                                        {
//   if(iMA(NULL,0,1,0,MODE_SMMA,PRICE_CLOSE,1)<=OrderOpenPrice()-500*Point)                     {
     
// choice 1.     
//     {OrderModify(ticket,OrderOpenPrice(),Ask-500*Point,0,0,Blue);}}}}
// choice 2.
     {OrderModify(ticket,OrderOpenPrice(),OrderOpenPrice()-500*Point,0,0,Blue);}}}}

Как вы и просили.

Спасибо.

 
WhooDoo22:

Уильям,

Очевидно, я разместил советник в ссылке, чтобы вы могли скачать и просмотреть его в MetaEditor, если вы хотите оказать поддержку. Функция OrderSelect() в настоящее время не является проблемой. Знаете что? Я опубликую это специально для вас, Уильям.

Как вы и просили.

Спасибо.

0 НЕ является действительным номером билета, даже в тестере стратегий, протестируйте свой OrderSelect() и вы убедитесь в этом сами. ...
 

Саймон, я проведу тесты, чтобы выяснить это.

Спасибо.

 

Ах-ха! Я поменял номер билета 0 на 1, после чего все заработало как часы. Да, я ошибался, Уильям... Проблема была в функции OrderSelect(). Очевидно, что функция OrderSelect() должна выбрать билет. Если номер билета равен 0, какой билет выберет эксперт? :O "?". Спасибо вам обоим за помощь.

Спасибо.

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