Спасибо за подсказку
Обучение языку MQL4 под MetaTrader 4📌
От xbms, 13 апреля, 2013 в Уголок Программиста
Помогите, кому не трудно написать условие для входа допустим в sell: анализируем 2 свечи, первая должна закрыться за линией болинджера MODE_UPPER (то есть свеча бычья), вторая свеча должна быть медвежья независимо от линии и на закрытии этой свечи вход. Заранее спасибо.
Помогите, кому не трудно написать условие для входа допустим в 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
Подскажите пожалуйста, как можно подсчитать профит за определенный период, например за последнюю неделю?
Подскажите пожалуйста, как можно подсчитать профит за определенный период, например за последнюю неделю?
Если в тестере - то по ходу запоминаем Баланс на начало недели, через AccountBalance()
и смотрим результат на конец недели.
Если на какой-то текущий момент на реале то внутри необходимого интервала дат перебираются итоги
всех задействованных ордеров и через OrderProfit(), OrderSwap(), OrderCommission() по каждому ордеру
высчитывается итог каждого ордера ну и соответственно интересующего нас периода.
Подскажите пожалуйста, как можно подсчитать профит за определенный период, например за последнюю неделю?
Если в тестере - то по ходу запоминаем Баланс на начало недели, через AccountBalance()
и смотрим результат на конец недели.
Если на какой-то текущий момент на реале то внутри необходимого интервала дат перебираются итоги
всех задействованных ордеров и через OrderProfit(), OrderSwap(), OrderCommission() по каждому ордеру
высчитывается итог каждого ордера ну и соответственно интересующего нас периода.
Спасибо. Я так и мыслю. Только как задать даты интервала? Пробовал через
int day = TimeDay(TimeCurrent());
возвращает текущую дату. А как получить например понедельник 14.11.2016?
Подскажите пожалуйста, как можно подсчитать профит за определенный период, например за последнюю неделю?
Если в тестере - то по ходу запоминаем Баланс на начало недели, через AccountBalance()
и смотрим результат на конец недели.
Если на какой-то текущий момент на реале то внутри необходимого интервала дат перебираются итоги
всех задействованных ордеров и через OrderProfit(), OrderSwap(), OrderCommission() по каждому ордеру
высчитывается итог каждого ордера ну и соответственно интересующего нас периода.
Спасибо. Я так и мыслю. Только как задать даты интервала? Пробовал через
int day = TimeDay(TimeCurrent());
возвращает текущую дату. А как получить например понедельник 14.11.2016?
Сергей Есть функция TimeDayOfWeek() возвращает день недели указанной даты в нее загоняете TimeDay(TimeCurrent()) и минусуя разницу между текущим днем недели и понедельником получаете
дату понедельника
alex161271 У вас в условии уже "цикл" заложен, который выполняется с каждым тиком
"Удаляем противоположный ордер - Открываем новый "
на следующем тике опять "Удаляем противоположный ордер - Открываем новый" и тд и тп
По идее, если условие не верно, то удаляться не должен. Подскажите пожалуйста как от этого избавиться перепробовал разные варианты, ничего не выходит.
Изменено 18 ноября, 2016 пользователем alex161271
alex161271 У вас в условии уже "цикл" заложен, который выполняется с каждым тиком
"Удаляем противоположный ордер - Открываем новый "
на следующем тике опять "Удаляем противоположный ордер - Открываем новый" и тд и тп
По идее, если условие не верно, то удаляться не должен. Подскажите пожалуйста как от этого избавиться перепробовал разные варианты, ничего не выходит.
Какое условие неверно ?
Подход такой :
Я так понимаю у вас не должен удаляться ордер, если он уже был открыт с удвоенным лотом. Вы переменную вначале программы объявите тип bool со значением false, как только произошло переоткрытие ордера ставим ей true и обнуляем эту переменную если первый ордер закроется (это надо отдельно проверять). А в ветке программы где переоткрывается ордер ставим допусловие для входа по значению
этой переменной false.
Здравствуйте трейдеры. У меня к вам вопрос касательно уровня БУ. Я при создании прикрепленного ниже советника решил добавить в него данную функцию, однако в связи с его спецификой у меня возникли трудности ее применения. В интернете решение этой проблемы отсутствует. Буду благодарен вам за помощь в разрешении этой проблемы. P.S. Более подробное описание всех функций и характеристик записаны внутри.
Здравствуйте трейдеры. У меня к вам вопрос касательно уровня БУ. Я при создании прикрепленного ниже советника решил добавить в него данную функцию, однако в связи с его спецификой у меня возникли трудности ее применения. В интернете решение этой проблемы отсутствует. Буду благодарен вам за помощь в разрешении этой проблемы. P.S. Более подробное описание всех функций и характеристик записаны внутри.
Я такого замудренного кода еще не видел, пытался разобратся но как в анегдоте про фоменко: я бросал пить, бросал бросал, да и бросил бросать пить(может я просто такой тугодум). Все переменные с манипуляциями цен нужно нормализовывать обязательно через - NormalizeDouble();
Здравствуйте трейдеры. У меня к вам вопрос касательно уровня БУ. Я при создании прикрепленного ниже советника решил добавить в него данную функцию, однако в связи с его спецификой у меня возникли трудности ее применения. В интернете решение этой проблемы отсутствует. Буду благодарен вам за помощь в разрешении этой проблемы. P.S. Более подробное описание всех функций и характеристик записаны внутри.
Александр_F Я вижу две ошибки. У Вас BU Задается как 30 по умолчанию, затем вы его при инициализации зачем-то два раза (????) умножаете на 10.
А при проверке надобности установки БУ Вы BULevel берете и вычитаете (или складываете) с ценой Bid или Ask (они из себя представляют X.XXXXX (для пятизнака) и тд и тп). Вы к виду цены через умножение на _Point забыли привести.
Организуется цикл, который по перебирает все ордера, открытые этим советником (проверяет по меджику).
Считается разница между текущей ценой и ценой открытия ордера - результаты всех ордеров суммируются.
Если сумма больше определенного убытка - получаем сигнал на закрытие.
Организуем второй цикл, где все ордера с нашим меджиком закрываются
Добавлено: 17-11-2016 14:05:18
alex161271 У вас в условии уже "цикл" заложен, который выполняется с каждым тиком
"Удаляем противоположный ордер - Открываем новый "
на следующем тике опять "Удаляем противоположный ордер - Открываем новый" и тд и тп
Спасибо! Очень помогли!
Сейчас занимаюсь следующим - пятым уроком.
Здесь снова вопрос. В ДЗ нужно включать ТрейлингСтоп, опираясь на фракталы.
Фракталы рисуют стрелочки вверх и вниз.
Как объяснить советнику, что когда стрелочка вверх, то покупаем, а когда вниз - продаем. И что делаем это именно на N баре, после стрелочки?
Ребят, подскажите пожалуйста.
Есть некий советник, выглядящий следующим образом:
Цитата
void OnTick()
{
OrderSend(бла-бла-бла);
}
И если поставить его на график - немедленно произойдёт открытие ордера.
Вопрос в следующем.
Как сделать так, что б работа советника начиналась со следующей свечи.
А текущую игнорировать и не рассматривать.
Суть в том чтобы робот начал работать и искать условия для входа, на следующих свечах, а не открывал сразу же ордер, после установки его на график. Надеюсь внятно изложил. :-?
Изменено 20 ноября, 2016 пользователем Richie Rich
Вот например не самый удачный пример, но работает
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(бла-бла-бла);
}
}
AndreyGold Большое Спасибо вам за помощь! Я принял во внимание ваши советы, с нетерпением жду открытия рынка
Поправив синтаксис ваш код принимает такой рабочий вид:
Цитата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(бла-бла-бла);
}
}
xbms... Прекрасная подача учебного материала. Немногим Великим было дано. И ежели отрок посетил сию нишу, желание сиюминутное может оборотиться потребностью вопиющей.
Здравствуйте подскажите как дописать код чтобы советник закрывал часть лота при достижении определенного кол-ва прибыли в пунктах ?
Здравствуйте подскажите как дописать код чтобы советник закрывал часть лота при достижении определенного кол-ва прибыли в пунктах ?
Алгоритм - циклом перебираем все открытые ордера, считаем текущую прибыль в пунктах.
При достижении заданного уровня прибыли через функцию OrderClose() закрываем "часть лота".
Извините а как это выглядит в коде ?
Как-то так :
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
Товарищи программисты, подскажите пожалуйста.
В данном советнике, при компиляции выскакивает два "жёлтых" предупреждения,
связанных с выносом настроек индикатора во внешние переменные.
Не могу придумать как от них избавится.
На работу программы не влияют, а глаз мозолят. ~x(СпойлерЦитата
избавился
Для публикации сообщений создайте учётную запись или авторизуйтесь
Перейти к списку тем
