Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 70
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Уважаемые форумчане!
Просьба помочь, проблемы следующие: 1) Как прописать в коде, чтобы сделка, скажем, на SELL, открывалась при достижении верхней границы канала, а закрывалась при достижении нижней границы; 2) При одном сигнале должна открываться только одна сделка; 3) при установке советника сделка открывается сразу, а нужно, чтобы сделка открывалась только при достижении линии канала.
Буду благодарен за помощь.
extern double Lots = 0.1;
extern int TakeProfit = 30; //тейкпрофит (отрицательное число или ноль чтобы не использовать);
extern int StopLoss = 20; // уровень Stop Loss для покупки;
extern int Slippage = 2; // проскальзывание
extern string Сomment = "Keller";
extern int Magic = 333;
extern string Indi = "Данные индикатора";
extern string TimeFrame = "current time frame";
extern int MA_Period = 10; // 0 - SMA, 1 - EMA, 2 - SMMA, 3 - LWMA
extern int Mode_MA = 0; // 0 - Close, 1 - Open, 2 - High, 3 - Low, 4 - Median, 5 - Typical, 6 - Weighted
extern int Price_Type = 5;
double PriceHigh, PriceLow, SL, TP;
int ticket;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
if (Digits ==3 || Digits ==3) // для пятизначного брокера
{
TakeProfit *= 10;
StopLoss *= 10;
Slippage *= 10;
}
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
PriceHigh = iCustom (Symbol(), 0, "Keller", TimeFrame, MA_Period, Mode_MA, Price_Type, 0, 0); // красная верхняя буфер 0
PriceLow = iCustom (Symbol(), 0, "Tma", TimeFrame, MA_Period, Mode_MA, Price_Type, 2, 0); // красная нижняя буфер 2
if (Bid >= PriceHigh && CountSell() == 0) // где Countsell проверка, что бы ордера открывались по одному, а не на каждом тике
{
SL = NormalizeDouble (Bid + StopLoss * Point, Digits);
TP = NormalizeDouble (Bid - TakeProfit * Point, Digits);
ticket = OrderSend (Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, Сomment, Magic, 0, Red); // где 0 это SL и TP (для есн счетов ставится 0) и последний 0 - это эксперейшен
if (ticket > 0) // проверка наличия открытого ордера
{
if (OrderSelect (ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
OrderModify (ticket, OrderOpenPrice(), SL, TP, 0); // где 0 - это эксперейшен
}
}
if (Ask <= PriceLow && CountBuy() == 0)// где Countsell проверка, что бы ордера открывались по одному, а не на каждом тике
{
SL = NormalizeDouble (Ask - StopLoss * Point, Digits);
TP = NormalizeDouble (Ask + TakeProfit * Point, Digits);
ticket = OrderSend (Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0, Сomment, Magic, 0, Blue); // где 0 это SL и TP (для есн счетов ставится 0) и последний 0 - это эксперейшен
if (ticket > 0) // проверка наличия открытого ордера
{
if (OrderSelect (ticket, SELECT_BY_TICKET, MODE_TRADES) == true)
OrderModify (ticket, OrderOpenPrice(), SL, TP, 0); // где 0 - это эксперейшен
}
}
if (Bid >= PriceHigh && CountBuy() > 0) // если цена достигла верхней границы канала и количество ордеров больше 0
{
for (int i=OrdersTotal()-1; i >= 0; i--)
{
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)== true)
{
if (OrderMagicNumber() == Magic && OrderType() == OP_BUY) // проверка наш ли это ордер на покупку
OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, Black); // закрываем ордер на верхней границе канала
}
}
}
if (Ask <= PriceLow && CountSell() > 0) // если цена достигла нижней границы канала и количество ордеров больше 0
{
for ( i=OrdersTotal()-1; i >= 0; i--) // определение переменной для buy уже int не ставится
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)== true)
{
if (OrderMagicNumber() == Magic && OrderType() == OP_SELL) // проверка наш ли это ордер на продажу
OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, Black); // закрываем ордер на нижней границе канала
}
}
}
return(0);
}
//+------------------------------------------------------------------+
int CountSell()// проверка - количество ордеров на продажу, которые в работе
{
int Count = 0;
for (int trade = OrdersTotal() - 1; trade >=0; trade --)
{
OrderSelect (trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_SELL)
Count++;
}
}
return(Count);
}
//+------------------------------------------------------------------+
int CountBuy()// проверка - количество ордеров на покупку, которые в работе
{
int Count = 0;
for (int trade = OrdersTotal() - 1; trade >=0; trade --)
{
OrderSelect (trade, SELECT_BY_POS, MODE_TRADES);
if (OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
{
if (OrderType() == OP_BUY)
Count++;
}
}
return(Count);
}
Нет, не разошлись. Мельком глянул на ваш код и ответил "не глядя". Ваша строка:
- присваивает индексу цикла i величину, равную общему количеству горизонтальных линий. Если их у вас 3, то и цикл будет от 2 до 0. А там уж, что в вашем цикле - неясно, но будет всего три итерации от 2 до 0.
Ага - ну, вот... А я именно за это и переживал. Дело в том, что без специально поставленных экспериментов, а просто по наблюдениям, это все-таки работало при наличии иных объектов.
И на вскидку работало правильно. Но сомнения именно в описанном Вами как раз и возникали. Поэтому и хотел уточнить этот аспект.
И рад, что Ваши мнения согласованно подтвердили и мое предположение. Будем считать, что определенность в этом вопросе достигнута.
Еще раз Большое Спасибо!
есть индикатор у меня, кастомный, идёт гистограммой, причём все значения максимальные, имеет значение, лишь цвет баров в гистограмме, входных параметров у него нет, буфера 2 : 0 - с красным цветом бара, и 1- синий цвет бара, Империческим методом я выяснил, что в 0 буфер, не меняется значение, а в 1 меняется. Как написать критерии для сделки не могу понять, пожалуйста объясните как, заранее спасибо.
Если есть исходный код индикатора, то совсем не сложно: Смотрим исходный код и находим в индикаторе условия для смены цвета. По ним формируем сигнал. Сделать это можно 2-мя способами: первым - написав "обертку" для анализа условий смены значений буферов при этом код индикатора не меняется, используется iCustom(), 2-й преобразовав код индикатора в функцию, которую можно вызвать из эксперта. Оба способа описаны в статьях на сайте.
Если есть интерес, например, к сглаженному Хейкин-Аши - поройтесь по сайту - по этому индикатору было обсуждение, насколько я помню, обсуждали и правильность алгоритма и анализ сигналов. Код его открыт и есть в базе кодов (там вообще много чего есть).
Если индикатор какой-то уникальный, и без исходного кода, то дело намного осложняется: реверсинжиниринг, который, кстати, не всегда оправдывает затраченные усилия.
Если есть исходный код индикатора, то совсем не сложно: Смотрим исходный код и находим в индикаторе условия для смены цвета. По ним формируем сигнал. Сделать это можно 2-мя способами: первым - написав "обертку" для анализа условий смены значений буферов при этом код индикатора не меняется, используется iCustom(), 2-й преобразовав код индикатора в функцию, которую можно вызвать из эксперта. Оба способа описаны в статьях на сайте.
Если есть интерес, например, к сглаженному Хейкин-Аши - поройтесь по сайту - по этому индикатору было обсуждение, насколько я помню, обсуждали и правильность алгоритма и анализ сигналов. Код его открыт и есть в базе кодов (там вообще много чего есть).
Если индикатор какой-то уникальный, и без исходного кода, то дело намного осложняется: реверсинжиниринг, который, кстати, не всегда оправдывает затраченные усилия.
большое спасибо, буду пробовать. Не могли бы вы помочь мне с поиском статей по поводу "обёртки" и преобразованию кода индикатора, т.к. боюсь, не смогу интерпретировать это в поисковый запрос.
Помогите, пожалуйста. Индикатор рисует линии high и low предыдущего дня. Нужно чтобы он рисовал линии на истории каждый день. Спасибо.
большое спасибо, буду пробовать. Не могли бы вы помочь мне с поиском статей по поводу "обёртки" и преобразованию кода индикатора, т.к. боюсь, не смогу интерпретировать это в поисковый запрос.
https://www.mql5.com/ru/forum/114117 здесь пример создания функции-обертки для интерпретации сигналов индикатора
вот статьи по использованию кодов индикаторов:
https://www.mql5.com/ru/articles/1456
https://www.mql5.com/ru/articles/1457
Спасибо!
https://www.mql5.com/ru/forum/114117 здесь пример создания функции-обертки для интерпретации сигналов индикатора
вот статьи по использованию кодов индикаторов:
https://www.mql5.com/ru/articles/1456
https://www.mql5.com/ru/articles/1457
ещё раз, большое спасибо