условие
Примерно так:
if( ((Bid+Ask)/2-Open)>5*Point )
{
SetOrder(...);
Exit;
};
Примерно так:
if( ((Bid+Ask)/2-Open)>5*Point )
{
SetOrder(...);
Exit;
};
Re: условие
Спасибо!
Я, собственно, так и писал, только я писал Open(0), - как написано в руководстве по MQL, на вашем сайте, следовательно у меня возникает следуйщий вопрос: чем отличается Open от Open(0), ведь как я понял (0) означает текущий бар. И еще: я хочу не установить ордер на покупку/продажу SetOrder(...);, а сделать так, чтобы он сразу открывал позицию.
Заранее благодарен.
P.S.
Извиняюсь за глупые вопросы - я только начинаю осваивать MQL и программирование в целом.
Спасибо!
Я, собственно, так и писал, только я писал Open(0), - как написано в руководстве по MQL, на вашем сайте, следовательно у меня возникает следуйщий вопрос: чем отличается Open от Open(0), ведь как я понял (0) означает текущий бар. И еще: я хочу не установить ордер на покупку/продажу SetOrder(...);, а сделать так, чтобы он сразу открывал позицию.
Заранее благодарен.
P.S.
Извиняюсь за глупые вопросы - я только начинаю осваивать MQL и программирование в целом.
Re: условие
Спасибо!
Я, собственно, так и писал, только я писал Open(0), - как написано в руководстве по MQL, на вашем сайте, следовательно у меня возникает следуйщий вопрос: чем отличается Open от Open(0), ведь как я понял (0) означает текущий бар. И еще: я хочу не установить ордер на покупку/продажу SetOrder(...);, а сделать так, чтобы он сразу открывал позицию.
Заранее благодарен.
P.S.
Извиняюсь за глупые вопросы - я только начинаю осваивать MQL и программирование в целом.
Спасибо!
Я, собственно, так и писал, только я писал 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. Это утешает.
Так что пока ждем.
Еще пример к вашему вопросу.
Определяем переменные, в том числе, которые можно менять в процессе тестирования
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
Это условие сработает при любой средней цене выше цены отступа.
Советник берет любую цену ниже цены открытия бара, при открытии в покупку, и, наоборот, при открытии в продажу.
Именно так.
Также не забывайте, что имитация развития бара проходит множество точек(это управляется моделью тестирования).
Во первых, лишний 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 не совместимы.
Вообще то надо писать 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 не совместимы.
Да, да спасибо
Я именно это и хотел от Вас услышать
Я именно это и хотел от Вас услышать
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добрый день. Скажите, пожалуйста как написать на языке MQL (MQL2) следующее: открыть позицию (buy/sell), если текущая цена ((ask+bid)/2), больше/меньше от открытия текущего бара (Open(0)) на определенное кол-во пипсов, допустим 5.
Заранее благодарен!