Обучение языку MQL4 под MetaTrader 4📌

От xbms, 13 апреля, 2013 в Уголок Программиста

#3926

Спасибо за подсказку

#3927

Помогите, кому не трудно написать условие для входа допустим в sell: анализируем 2 свечи, первая должна закрыться за линией болинджера MODE_UPPER (то есть свеча бычья), вторая свеча должна быть медвежья независимо от линии и на закрытии этой свечи вход. Заранее спасибо.

#3928


Помогите, кому не трудно написать условие для входа допустим в sell: анализируем 2 свечи, первая должна закрыться за линией болинджера MODE_UPPER (то есть свеча бычья), вторая свеча должна быть медвежья независимо от линии и на закрытии этой свечи вход. Заранее спасибо.



Как-то так :

if( (iOpen(NULL,0,2) iBands(NULL,0,20,2,0,PRICE_CLOSE,MODE_UPPER,2)> iClose(NULL,0,2)) && (iOpen(NULL,0,1)>iClose(NULL,0,1) )
{

.... Открытие ордера

}

Добавлено: 17-11-2016 13:22:44


Спасибо, vitek01
И снова нужна помощь по этому же уроку.
В Дом.Зад. нужно, чтобы советник закрывал все открытые им ордера при достижении определенного убытка в пунктах.
Подскажите, как это реализовать, или хотя бы откуда начинать "копать"?



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

Добавлено: 17-11-2016 14:05:18

alex161271 У вас в условии уже "цикл" заложен, который выполняется с каждым тиком
"Удаляем противоположный ордер - Открываем новый "
на следующем тике опять "Удаляем противоположный ордер - Открываем новый" и тд и тп

Изменено 17 ноября, 2016 пользователем AndreyGold

#3929

Подскажите пожалуйста, как можно подсчитать профит за определенный период, например за последнюю неделю?

#3930


Подскажите пожалуйста, как можно подсчитать профит за определенный период, например за последнюю неделю?



Если в тестере - то по ходу запоминаем Баланс на начало недели, через AccountBalance()
и смотрим результат на конец недели.
Если на какой-то текущий момент на реале то внутри необходимого интервала дат перебираются итоги
всех задействованных ордеров и через OrderProfit(), OrderSwap(), OrderCommission() по каждому ордеру
высчитывается итог каждого ордера ну и соответственно интересующего нас периода.
#3931



Подскажите пожалуйста, как можно подсчитать профит за определенный период, например за последнюю неделю?



Если в тестере - то по ходу запоминаем Баланс на начало недели, через AccountBalance()
и смотрим результат на конец недели.
Если на какой-то текущий момент на реале то внутри необходимого интервала дат перебираются итоги
всех задействованных ордеров и через OrderProfit(), OrderSwap(), OrderCommission() по каждому ордеру
высчитывается итог каждого ордера ну и соответственно интересующего нас периода.

Спасибо. Я так и мыслю. Только как задать даты интервала? Пробовал через
int day = TimeDay(TimeCurrent());
возвращает текущую дату. А как получить например понедельник 14.11.2016?
#3932
Спойлер




Подскажите пожалуйста, как можно подсчитать профит за определенный период, например за последнюю неделю?



Если в тестере - то по ходу запоминаем Баланс на начало недели, через AccountBalance()
и смотрим результат на конец недели.
Если на какой-то текущий момент на реале то внутри необходимого интервала дат перебираются итоги
всех задействованных ордеров и через OrderProfit(), OrderSwap(), OrderCommission() по каждому ордеру
высчитывается итог каждого ордера ну и соответственно интересующего нас периода.

Спасибо. Я так и мыслю. Только как задать даты интервала? Пробовал через
int day = TimeDay(TimeCurrent());
возвращает текущую дату. А как получить например понедельник 14.11.2016?

Сергей Есть функция TimeDayOfWeek() возвращает день недели указанной даты в нее загоняете TimeDay(TimeCurrent()) и минусуя разницу между текущим днем недели и понедельником получаете
дату понедельника
#3933


alex161271 У вас в условии уже "цикл" заложен, который выполняется с каждым тиком
"Удаляем противоположный ордер - Открываем новый "
на следующем тике опять "Удаляем противоположный ордер - Открываем новый" и тд и тп



По идее, если условие не верно, то удаляться не должен. Подскажите пожалуйста как от этого избавиться перепробовал разные варианты, ничего не выходит.

Изменено 18 ноября, 2016 пользователем alex161271

#3934



alex161271 У вас в условии уже "цикл" заложен, который выполняется с каждым тиком
"Удаляем противоположный ордер - Открываем новый "
на следующем тике опять "Удаляем противоположный ордер - Открываем новый" и тд и тп



По идее, если условие не верно, то удаляться не должен. Подскажите пожалуйста как от этого избавиться перепробовал разные варианты, ничего не выходит.


Какое условие неверно ?
Подход такой :
Я так понимаю у вас не должен удаляться ордер, если он уже был открыт с удвоенным лотом. Вы переменную вначале программы объявите тип bool со значением false, как только произошло переоткрытие ордера ставим ей true и обнуляем эту переменную если первый ордер закроется (это надо отдельно проверять). А в ветке программы где переоткрывается ордер ставим допусловие для входа по значению
этой переменной false.
#3935

Здравствуйте трейдеры. У меня к вам вопрос касательно уровня БУ. Я при создании прикрепленного ниже советника решил добавить в него данную функцию, однако в связи с его спецификой у меня возникли трудности ее применения. В интернете решение этой проблемы отсутствует. Буду благодарен вам за помощь в разрешении этой проблемы. P.S. Более подробное описание всех функций и характеристик записаны внутри.

Советник.mq410 скач.

#3936


Здравствуйте трейдеры. У меня к вам вопрос касательно уровня БУ. Я при создании прикрепленного ниже советника решил добавить в него данную функцию, однако в связи с его спецификой у меня возникли трудности ее применения. В интернете решение этой проблемы отсутствует. Буду благодарен вам за помощь в разрешении этой проблемы. P.S. Более подробное описание всех функций и характеристик записаны внутри.



Я такого замудренного кода еще не видел, пытался разобратся но как в анегдоте про фоменко: я бросал пить, бросал бросал, да и бросил бросать пить(может я просто такой тугодум). Все переменные с манипуляциями цен нужно нормализовывать обязательно через - NormalizeDouble();
#3937
Спойлер


Здравствуйте трейдеры. У меня к вам вопрос касательно уровня БУ. Я при создании прикрепленного ниже советника решил добавить в него данную функцию, однако в связи с его спецификой у меня возникли трудности ее применения. В интернете решение этой проблемы отсутствует. Буду благодарен вам за помощь в разрешении этой проблемы. P.S. Более подробное описание всех функций и характеристик записаны внутри.



Александр_F Я вижу две ошибки. У Вас BU Задается как 30 по умолчанию, затем вы его при инициализации зачем-то два раза (????) умножаете на 10.
А при проверке надобности установки БУ Вы BULevel берете и вычитаете (или складываете) с ценой Bid или Ask (они из себя представляют X.XXXXX (для пятизнака) и тд и тп). Вы к виду цены через умножение на _Point забыли привести.
#3938


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


Добавлено: 17-11-2016 14:05:18

alex161271 У вас в условии уже "цикл" заложен, который выполняется с каждым тиком
"Удаляем противоположный ордер - Открываем новый "
на следующем тике опять "Удаляем противоположный ордер - Открываем новый" и тд и тп


Спасибо! Очень помогли!
Сейчас занимаюсь следующим - пятым уроком.
Здесь снова вопрос. В ДЗ нужно включать ТрейлингСтоп, опираясь на фракталы.
Фракталы рисуют стрелочки вверх и вниз.
Как объяснить советнику, что когда стрелочка вверх, то покупаем, а когда вниз - продаем. И что делаем это именно на N баре, после стрелочки?
#3939
RichLux Есть функция https://docs.mql4.com/ru/indicators/ifractals в ней все есть и номер бара и тип фрактала - почитайте.
#3940

Ребят, подскажите пожалуйста.

Есть некий советник, выглядящий следующим образом:

Цитата


void OnTick()
{
OrderSend(бла-бла-бла);
}



И если поставить его на график - немедленно произойдёт открытие ордера.

Вопрос в следующем.
Как сделать так, что б работа советника начиналась со следующей свечи.
А текущую игнорировать и не рассматривать.

Суть в том чтобы робот начал работать и искать условия для входа, на следующих свечах, а не открывал сразу же ордер, после установки его на график. Надеюсь внятно изложил. :-?

Изменено 20 ноября, 2016 пользователем Richie Rich

#3941

Вот например не самый удачный пример, но работает
DateTime T;
bool work=0;
void OnInit()
{
T=iTime(Sym,Period(),0);
}
void OnTick()
{
if(iTime(Sym(),Period,0) > T)
work=true;
if(work==true)
{
OrderSend(бла-бла-бла);
}
}

#3942

AndreyGold Большое Спасибо вам за помощь! Я принял во внимание ваши советы, с нетерпением жду открытия рынка

#3943
vitek01, большое спасибо! =d> =d> =d>

Поправив синтаксис ваш код принимает такой рабочий вид:

Цитата

datetime T; bool Work = 0;

void OnInit() { T = iTime(Symbol(),Period(),0); }

void OnTick()
{
if (iTime(Symbol(),Period(),0) > T) Work = 1;

if (Work == 1)
{
bool x = OrderSend(бла-бла-бла);
}
}

#3944

xbms... Прекрасная подача учебного материала. Немногим Великим было дано. И ежели отрок посетил сию нишу, желание сиюминутное может оборотиться потребностью вопиющей.

#3945

Товарищи программисты, подскажите пожалуйста.

В данном советнике, при компиляции выскакивает два "жёлтых" предупреждения,
связанных с выносом настроек индикатора во внешние переменные.

Не могу придумать как от них избавится.
На работу программы не влияют, а глаз мозолят. ~x(

Спойлер

Цитата


#3946

Здравствуйте подскажите как дописать код чтобы советник закрывал часть лота при достижении определенного кол-ва прибыли в пунктах ?

#3947


Здравствуйте подскажите как дописать код чтобы советник закрывал часть лота при достижении определенного кол-ва прибыли в пунктах ?



Алгоритм - циклом перебираем все открытые ордера, считаем текущую прибыль в пунктах.
При достижении заданного уровня прибыли через функцию OrderClose() закрываем "часть лота".
#3948

Извините а как это выглядит в коде ?

#3949

Как-то так :

Спойлер

double punktov=0;
double nado puktov=0; // Количество пунктов, для определения частичного закрытия
double Lot=1; // Количество лотов, которые надо закрыть у каждого ордера
if(OrdersTotal()>0)
{

for(i=1;i {
if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()=="OP_BUY")
{
punktov=punktov+(Bid-OrderOpenPrice())*_Digits;
}
if(OrderType()=="OP_SELL")
{
punktov=punktov+(OrderOpenPrice()-Ask)*_Digits;
}

}

}
if(punktov>=nado puktov)
{



for(i=1;i {
if(OrderSelect(i-1,SELECT_BY_POS,MODE_TRADES))
{
if(OrderType()=="OP_BUY")
{
if(OrderClose(OrderTicket(), Lot, Bid, 0, clrGold)==0) Alert("Ошибка модификации лота");
}
if(OrderType()=="OP_SELL")
{
if(OrderClose(OrderTicket(), Lot, Ask, 0, clrGold)==0) Alert("Ошибка модификации лота");
}

}

}

}

Изменено 23 ноября, 2016 пользователем AndreyGold

#3950


Товарищи программисты, подскажите пожалуйста.

В данном советнике, при компиляции выскакивает два "жёлтых" предупреждения,
связанных с выносом настроек индикатора во внешние переменные.

Не могу придумать как от них избавится.
На работу программы не влияют, а глаз мозолят. ~x(

Спойлер

Цитата




избавился

High-Low_EA_2.31.mq48 скач.

Для публикации сообщений создайте учётную запись или авторизуйтесь

Перейти к списку тем
Форум · 2.0.20260627.0025