Вопрос!

 
Вопрос!
Добрый день. Скажите, пожалуйста как написать на языке MQL (MQL2) следующее: открыть позицию (buy/sell), если текущая цена ((ask+bid)/2), больше/меньше от открытия текущего бара (Open(0)) на определенное кол-во пипсов, допустим 5.
Заранее благодарен!
 
условие
Примерно так:

if( ((Bid+Ask)/2-Open)>5*Point )
{
SetOrder(...);
Exit;
};
 
Re: условие
Спасибо!
Я, собственно, так и писал, только я писал Open(0), - как написано в руководстве по MQL, на вашем сайте, следовательно у меня возникает следуйщий вопрос: чем отличается Open от Open(0), ведь как я понял (0) означает текущий бар. И еще: я хочу не установить ордер на покупку/продажу SetOrder(...);, а сделать так, чтобы он сразу открывал позицию.
Заранее благодарен.
P.S.
Извиняюсь за глупые вопросы - я только начинаю осваивать MQL и программирование в целом.
 
Re: условие
Спасибо!
Я, собственно, так и писал, только я писал Open(0), - как написано в руководстве по MQL, на вашем сайте, следовательно у меня возникает следуйщий вопрос: чем отличается Open от Open(0), ведь как я понял (0) означает текущий бар. И еще: я хочу не установить ордер на покупку/продажу SetOrder(...);, а сделать так, чтобы он сразу открывал позицию.
Заранее благодарен.
P.S.
Извиняюсь за глупые вопросы - я только начинаю осваивать MQL и программирование в целом.
 
Вопрос
Еще пример к вашему вопросу.


Определяем переменные, в том числе, которые можно менять в процессе тестирования

defines: Otstup(10);
// Это именно та переменная, которую вы хотели установить


var: Vos(0);
var: m2(0);

// Названия этих переменных от балды, то, что на клавиатуре попалось
Vos = (Open[0]-Otstup*Point);
m2=(Open[0]+Otstup*Point);

……

/* Проверяем возможность стать в позицию Bay
*/

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

If …(какое то ваше условие) …. and Abs(Vos) -(Ask+Bid)/2 <(1*Point)then

// здесь мы поставили, условие, когда разница между ценой и переменной Vos в 1 пипс.


{


SetOrder(OP_BUY,Lots,Ask,3,Bid-(StopLoss*Point),Ask+TakeProfit*Point,GREEN);

Exit;
};


//Точно также для Sell
// Проверяем на возможность стать в продажу SELL:

…….
If …(какое то ваше условие) …. and Abs(m2) -(Ask+Bid)/2 <(1*Point)then
{
SetOrder(OP_SELL,Lots,Bid,3,Ask+(StopLoss*Point),Bid-TakeProfit*Point,BLUE);
Exit;
};
// Все это хорошо. Но не работает. Советник берет любую цену ниже цены открытия бара, при открытии в покупку, и, наоборот, при открытии в продажу. Так было и MQ, так есть и в MT 2.25, надеюсь пока.

Поэтому пока приходится просто учитывать, что советник вам подыгрывает.

Скорее всего, разработчики на это обратят внимание и исправят.
Я вижу интенсивную работу программиста, создающего MT. Это утешает.

Так что пока ждем.
 
во вопросу
Во первых, лишний Abs в Abs(Vos), так как Vos всегда положительный.
Во вторых, условие:
Abs(Vos) -(Ask+Bid)/2 <(1*Point)
а более точно:
(Vos-(Ask+Bid)/2)<(1*Point)
Означает, что надо открыть позицию BUY, если текущая средняя цена выше или равна цене отклонения.
Например:
Open=123.50
Otstup=10
Vos=123.40
Bid=123.47 Ask=123.52 (Bid+Ask)/2=123.49

Проверка:

if( (123.40-123.49)<0.01 ) then

или в расчетах:
if( -0.09 < 0.01) then
Это условие сработает при любой средней цене выше цены отступа.

Советник берет любую цену ниже цены открытия бара, при открытии в покупку, и, наоборот, при открытии в продажу.
Именно так.
Также не забывайте, что имитация развития бара проходит множество точек(это управляется моделью тестирования).
 
открытие позиции
Вообще то надо писать Open[кол-во периодов назад], то если Open без скобок, то это означает что берется Close текущего бара.

Чтобы открыть позицию, используется функция SetOrder, которая может выставлять отложенные ордеры и открывать позиции.

SetOrder - главная функция по открытию позиции или установке отложенного ордера
Синтаксис: SetOrder( operation, lots, price, slippage, stoploss, takeprofit, color )
Параметры:
operation - тип операции, может принимать следующие значения: OP_BUY (открытие позиции на покупку), OP_SELL (открытие позиции на продажу), OP_BUYLIMIT, OP_SELLLIMIT, OP_BUYSTOP, OP_SELLSTOP (установки отложенного ордера);
lots - количество лотов;
price - предпочитаемая цена совершения сделки;
slippage - величина максимального проскальзывания для операций OP_BUY и OP_SELL;
stoploss - уровень ограничения потерь;
takeprofit - уровень снятия прибыли;
color - цвет стрелки, помещаемой на график при вызове функции.


Посмотрите как используется эта функция в примерах экспертов, что идут в составе MetaTrader.

Важное замечание: MQL в MetaQuotes и MQLII в MetaTrader не совместимы.
 
Да, да спасибо
Я именно это и хотел от Вас услышать
Причина обращения: