Сделал такой вариант.. Сразу после открытия вызываю функцию ModifyPos()
OrderSend(...);
ModifyPos();void ModifyPos(){if(OrderSelect(0,SELECT_BY_POS)==true)// Если есть открытый ордер{if(OrderType()==OP_BUY)OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Stop*Point,Bid-TakeProfit*Point,0,Red);if(OrderType()==OP_SELL)OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Stop*Point,Ask+TakeProfit*Point,0,Red);}}
Вы сами прикиньте! Почему это у вас вдруг для позиции бай тейкпрофит оказался ниже иекущнй цены?
Неудивительно, что генерируется ошибка
Rid огромное спасибо!
не внимательность моя)... получилось и даже заработало)
void ModifyPos(){if(OrderSelect(0,SELECT_BY_POS)==true)// Если есть открытый ордер{if(OrderType()==OP_BUY)OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Stop*Point,OrderTakeProfit(),0,Red);if(OrderType()==OP_SELL)OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Stop*Point,OrderTakeProfit(),0,Red);}}
Обновление данных в предопределенных переменных и массивах-таймсериях. Эта функция используется, когда эксперт или скрипт производит вычисления в течение долгого времени и нуждается в обновленных данных. Возвращается TRUE, если данные обновлены, иначе FALSE. Данные могут не обновиться только по той причине, что они соответствуют текущему состоянию клиентского терминала. Эксперты и скрипты работают с собственной копией исторических данных. Копия данных по текущему инструменту создается при первоначальном запуске эксперта или скрипта. При каждом следующем запуске эксперта (напомним, что скрипт выполняется однократно и не зависит от приходящих тиков) первоначально созданная копия обновляется. За то время, пока эксперт или скрипт работает, может прийти один или несколько новых тиков, поэтому данные могут устареть.
"Для того чтобы программа работала устойчиво, с минимальным количеством отклонённых торговых приказов, перед исполнением функции OrderSend() необходимо обновлять используемые программой параметры информационного окружения с помощью функций MarketInfo() и RefreshRates()."
Если советник мультивалютный, То нужно.
Тем более,что и значения Bid и Point у вас уже, наверное, заданы(заявлены) через MarketInfo().
Я когда то заводил ветку по мультивалютному эксперту. Гляньте и некоторые вопросы будут проясняться....
'Вопрос по мультивалютному советнику'
А вот тут конкретно по модификации
'Вопрос по мультивалютному советнику'
Сделал такой вариант.. Сразу после открытия вызываю функцию ModifyPos()
Stop - 20
TakeProfit - 100
В журнале ошибка - OrderModify error 130
Попробуйте для тейков позиции бай сделать
Вы сами прикиньте! Почему это у вас вдруг для позиции бай тейкпрофит оказался ниже текущей цены?
Неудивительно, что генерируется ошибка
И для позиции селл тож самое...
НО если вам не нужно изменять тейкпрофит, то лучше сделать так:
Аналогично, для селлВы сами прикиньте! Почему это у вас вдруг для позиции бай тейкпрофит оказался ниже иекущнй цены?
Неудивительно, что генерируется ошибка
Rid огромное спасибо!
не внимательность моя)... получилось и даже заработало)
Последняя ошибка которая сейчас в журнале при тестировании - OrderSend error 138
Идет без перерыва, когда нет сделок, т.е. на каждый тик эта ошибка.
Как только срабатывает ордер, ошибка исчезает.. ордер закрывается и ошибка снова идет..
Похоже в холостую без сигналов пытается послать ордер.. Но не пойму почему, т.к. условие (if) есть для продажи и для покупки
Последняя ошибка которая сейчас в журнале при тестировании - OrderSend error 138
Идет без перерыва, когда нет сделок, т.е. на каждый тик эта ошибка.
Как только срабатывает ордер, ошибка исчезает.. ордер закрывается и ошибка снова идет..
Похоже в холостую без сигналов пытается послать ордер.. Но не пойму почему, т.к. условие (if) есть для продажи и для покупки
ну не читали вы прочтите внимательно https://book.mql4.com/ru/content там все есть
Прочитать и понять это разные вещи... Я хочу понять на практике)
Есть условие для входа, после выполнения этих условий и передается управление функции в которой происходит открытие ордера..
Вот и не могу понять как минуя условия пытается сработать OrderSend.. и что логично выдает ошибку.. т.к. нет условийвхода
Обновление данных в предопределенных переменных и массивах-таймсериях. Эта функция используется, когда эксперт или скрипт производит вычисления в течение долгого времени и нуждается в обновленных данных. Возвращается TRUE, если данные обновлены, иначе FALSE. Данные могут не обновиться только по той причине, что они соответствуют текущему состоянию клиентского терминала. Эксперты и скрипты работают с собственной копией исторических данных. Копия данных по текущему инструменту создается при первоначальном запуске эксперта или скрипта. При каждом следующем запуске эксперта (напомним, что скрипт выполняется однократно и не зависит от приходящих тиков) первоначально созданная копия обновляется. За то время, пока эксперт или скрипт работает, может прийти один или несколько новых тиков, поэтому данные могут устареть.
//------------------------------------------------------------------------------
Попробуйте вставить эту функцию Перед выполнением ф-и OrderSend
См. : Открытие и установка ордеров 2008-05-05 14:26:13
"Для того чтобы программа работала устойчиво, с минимальным количеством отклонённых торговых приказов, перед исполнением функции OrderSend() необходимо обновлять используемые программой параметры информационного окружения с помощью функций MarketInfo() и RefreshRates()."
не помогает...