1. Определить тип последней позиции.
//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает тип последней открытой позиции или -1 | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ int GetTypeLastOpenPos(string sy="", int mn=-1) { datetime t; int i, k=OrdersTotal(), r=-1; if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if ((OrderSymbol()==sy || sy=="") && (mn<0 || OrderMagicNumber()==mn)) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (t<OrderOpenTime()) { t=OrderOpenTime(); r=OrderType(); } } } } } return(r); }
2. Определить цену открытия последней позиции.
//+----------------------------------------------------------------------------+ //| Автор : Ким Игорь В. aka KimIV, http://www.kimiv.ru | //+----------------------------------------------------------------------------+ //| Версия : 19.02.2008 | //| Описание : Возвращает цену открытия последней открытой позиций. | //+----------------------------------------------------------------------------+ //| Параметры: | //| sy - наименование инструмента ("" - любой символ, | //| NULL - текущий символ) | //| op - операция (-1 - любая позиция) | //| mn - MagicNumber (-1 - любой магик) | //+----------------------------------------------------------------------------+ double PriceOpenLastPos(string sy="", int op=-1, int mn=-1) { datetime t; double r=0; int i, k=OrdersTotal(); if (sy=="0") sy=Symbol(); for (i=0; i<k; i++) { if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if (OrderSymbol()==sy || sy=="") { if (OrderType()==OP_BUY || OrderType()==OP_SELL) { if (op<0 || OrderType()==op) { if (mn<0 || OrderMagicNumber()==mn) { if (t<OrderOpenTime()) { t=OrderOpenTime(); r=OrderOpenPrice(); } } } } } } } return(r); }
3. Выставить лимитник функцией OrderSend().
'(' - function definition unexpected
и указывает, что ошибка в строчках:
int GetTypeLastOpenPos(string sy="", int mn=-1) {
double PriceOpenLastPos(string sy="", int op=-1, int mn=-1) {
Подскажите, пожалуйста как ее исправить?
Игорь. Продублируйте пож. выложенные функции в Вашу веточку 'Полезные функции от KimIV'
Хотелось бы, чтобы в одном месте сосредоточить всё. Многие из посетителей "сохраняют" ту вашу ветку....
Здравствуйте, KimIV. Возникла проблемка... При компеляции советника с кодами, которые вы выложили выше, компилятор выдает ошибку
'(' - function definition unexpected
и указывает, что ошибка в строчках:
int GetTypeLastOpenPos(string sy="", int mn=-1) {
double PriceOpenLastPos(string sy="", int op=-1, int mn=-1) {
Подскажите, пожалуйста как ее исправить?
Я, Иван, скопировал свои функции в чистый MQ4-файл и попробовал скомпилировать в метаэдиторе. Всё нормально. Нет никаких ошибок. Следовательно, одно из двух:
1. Вы неправильно (не полностью) скопировали мои функции в свой советник.
2. В коде Вашего советника присутствуют сиснтаксические ошибки.
Игорь. Продублируйте пож. выложенные функции в Вашу веточку 'Полезные функции от KimIV'
Хотелось бы, чтобы в одном месте сосредоточить всё. Многие из посетителей "сохраняют" ту вашу ветку....
и указывает, что ошибка в строчках:
int GetTypeLastOpenPos(string sy="", int mn=-1) {
double PriceOpenLastPos(string sy="", int op=-1, int mn=-1) {
Подскажите, пожалуйста как ее исправить?
Сделал вроде все правильно, но как показала практика правильно все только для компилятора. Советник только открывает ордер по рынку, а вот определить цену открытой позиции и использовать ее в следующем шаге у него не получается, выдает ошибку. Подскажите пожалуйста в чем может быть ошибка? файл прилагается.
'(' - function definition unexpected
и указывает, что ошибка в строчках:
int GetTypeLastOpenPos(string sy="", int mn=-1) {
double PriceOpenLastPos(string sy="", int op=-1, int mn=-1) {
Подскажите, пожалуйста как ее исправить?
Ну тут все ясно: объявление функции в теле другой. В MQL4 (как и в Си) такие паскуалевские вольности непозволительны. И как это у тебя так вышло, yokme? Игорь вроде как такой код не выкладывал...
Спасибо, я уже с этим разобрался, действительно не там поставил коды этих функций в теле другой, буду теперь внимательнее
Иван, я считаю это очень неприличным, просить кого-то разобраться в коде, в котором чёрт ногу сломит. Это всё равно, что кого-то постороннего просить прибраться в своей комнате после пьяного дебоша.
В том месте, в котором Вы пытаетесь использовать мою функцию, советник не всегда видит открытую позицию. Видимо, это особенности кэширования или многопоточности, я не знаю. Не разбираюсь в этом. Более менее достоверно использовать открытую позицию можно только на следующем тике после открытия. А Вы пытаетесь это сделать на том же тике, на котором её открываете.
В прицепе причёсанный код.
Иван, я считаю это очень неприличным, просить кого-то разобраться в коде, в котором чёрт ногу сломит. Это всё равно, что кого-то постороннего просить прибраться в своей комнате после пьяного дебоша.
В том месте, в котором Вы пытаетесь использовать мою функцию, советник не всегда видит открытую позицию. Видимо, это особенности кэширования или многопоточности, я не знаю. Не разбираюсь в этом. Более менее достоверно использовать открытую позицию можно только на следующем тике после открытия. А Вы пытаетесь это сделать на том же тике, на котором её открываете.
В прицепе причёсанный код.
Я старался подписывать коментарии к каждой отдельной части кода, функции и переменнным, но как оказалось получилось это плохо))
Спсибо за помощь, буду стараться разобраться в чем неточности.
PS: не сочтите за наглость, если прийдется еще раз обратиться
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Например, советник согласно своего алгоритма работы открывает Sell ордер по EURUSD по цене 1500 и в этот же момент необходимо выставить ордер Sell Limit по цене 1,5050, то есть +50 пунктов от цены открытия (либо наоборот, при открытии советником BUY ордера по цене 1,500 выставить ордер Buy limit на уровень 1,4970, то есть -30 пунктов от цены открытия). При этом желательно наличие возможности изменения уровня выставления лимитников без в мешательство в исходник советника.
Спасибо