![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Посмотрел. Увы - не смогу ответить!
Поставьте Ваш вопрос - прямо там, - в ветке. И автор советника оперативно даст ответ!
А что такое Bar, это один пункт или тот бар который формируется на графике (bar=1 свечка)?
Здравствуйте.
Подскажите, как сделать так чтобы советник ждал, когда на индикаторе zig-zag образуется излом, то есть, допустим, максимум или минимум достигнуты и график пошел в другом направление, но излом не появился, как сделать чтобы после образования той висячей линии сигнализирующей что излом произошел, сразу например, сделать торговую операцию.
С уважение Сергей.
Может этот пример поможет
//+------------------------------------------------------------------+
//| Schreibikus_ZizZag_1_4_0001.mq4 |
//| Copyright © 2008 Роман Щуклин |
//| https://forextd.webasyst.net/shop/ |
//| ere@bk.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008 Роман Щуклин"
#property link "ere@bk.ru"
//#define MAGIC1 140408
//#define MAGIC2 240408
#include <stdlib.mqh> // библиотека отображения ошибок
// Если в рынке есть ордер BUY то противоположный ордер SEL не открывается
// а стоп ордера BUY ставится на уровень отложки SEL +- 2 пункта
// безубыток по играющему ордеру выставляется 1 пункт + спред
//---- input parameters
extern int ExtDepth=12; //Значения ZigZag
extern int ExtDeviation=5; //Значения ZigZag
extern int ExtBackstep=3; //Значения ZigZag
extern int ExtDlina = 70; //Значения ZigZag
extern int ExtTP = 50; //Значения ТэйкПрофита
extern double ExtTS = 15; //Значения Трала
extern double ExtLots=0.05; //Первоначальный объем Лота
extern int MAGIC1=111111; //Магическе числоо для BUY
extern int MAGIC2=222222; //Магическе числоо для SELL
int i,TP,TS,ticket; //Целые числа
double zp,zc,zcn,zpn,PriceB1,PriceS1,UD,SL; //Дробные числа
//double SL=zc;
int start()
{
bool f;
for(f=true,i=1;i<Bars;i++) //Проверка наличия свечей
{
zp=iCustom(NULL,0,"ZigZag",ExtDepth,ExtDeviation,ExtBackstep,0,i); //Расчет индикатора ZigZag
if(zp>0) { if(f) { f=false; zc=zp; } else break; }
}
if((zp-zc)>=(ExtDlina/10000)) //Расчет растояния между точками последнего колена zp - верхняя точка zc - нижняя точка
//Comment("Выполнили расчет длины колена "," zp-zc= ",zp-zc," >= "," Длина= ",ExtDlina);
{
if(zp>zc)
{
double w=zc+MathAbs((zp-zc)/4);
PriceB1=NormalizeDouble(w,Digits); //расчет 1/4 длины BUY для определеления цены ордера
//Comment("Расчитанная цена от длины колена PriceB1= ",PriceB1," w= ",w);
if(PriceB1 > Ask) //Выставление отложенного ордера BUY
{
if(OrdersTotal()==0)
{
double TPNorm = NormalizeDouble(PriceB1+ExtTP*Point,Digits); // Нормализованный TakeProfit
//Comment("Пробую выставить отложку по цене= ",PriceB1);
ticket=OrderSend(Symbol(),OP_BUYSTOP,ExtLots,NormalizeDouble(PriceB1,Digits),9,zc,TPNorm,NULL,MAGIC1,0,Green); //Условие выставления ордера
if(ticket<0) // ticket Уникальный порядковый номер ордера
{Print("Oшибка: ",ErrorDescription(GetLastError()));
Print("Текущ. цена= ",DoubleToStr((Bid),Digits));
Print("Цена установки BUY-ST= ", DoubleToStr(PriceB1,Digits));
Print("SL for BUY-ST= ", DoubleToStr(zc,Digits));
Print("TP for BUY-ST= ", DoubleToStr(TPNorm,Digits));
}
}
if(Bid <= zc) //Bid текущая цена изменения рынка zc нижняя расчетная точка
{
if (OrderSelect(ticket,SELECT_BY_TICKET)==true) // Выбор ордера для работы
{ //если есть ордер и цена текущая опустилась ниже стопа
OrderDelete(OrderTicket()); //Удаление ордера
//Comment("Удаляю ордер при Bid<=zc ",Bid," <= ",zc);
}
else Print("Oшибка удаления ордера ",ErrorDescription(GetLastError()));
}
}else // иначе Ask (текущая цена) больше, чем PriceB1 (цена отложенного ордера)
{
if( (PriceB1 + Point * ExtTS) <= (Ask - Point * ExtTS) ) // условия модификации ордера
{
if (OrderSelect(ticket,SELECT_BY_TICKET)==true) // Выбор ордера для работы
{
Comment("OrderOpenPrice = ",OrderOpenPrice(),"OrderStopLoss = ",OrderStopLoss());
if(Bid - OrderOpenPrice()>Point*ExtTS) //Следующее условие для модификации
{
if(OrderStopLoss()<Bid-Point*ExtTS) //Следующее условие для модификации
{
double SLNorm = NormalizeDouble(Bid-ExtTS*Point,Digits);
if(OrderModify(ticket,PriceB1,SLNorm,OrderTakeProfit(),0,Blue)==false) //Модификация ордера
{
Print("Не могу модифицировать ордер: ", ErrorDescription(GetLastError()));
Print("Номер ордера= ",ticket);
Print("Цена открытия ордера= ", DoubleToStr(PriceB1,Digits));
Print("SL= ", DoubleToStr(SLNorm,Digits));
Print("TP= ", DoubleToStr(TPNorm,Digits));
}
}
}
}
/*
double SLNorm = NormalizeDouble(Ask-ExtTS*Point,4);
if(OrderModify(ticket,PriceB1,SLNorm,TPNorm,0,Blue)==false)
{
Print("Не могу модифицировать ордер: ", ErrorDescription(GetLastError()));
Print("Номер ордера= ",ticket);
Print("Цена открытия ордера= ", DoubleToStr(PriceB1,Digits));
Print("SL= ", DoubleToStr(SLNorm,Digits));
Print("TP= ", DoubleToStr(TPNorm,Digits));
}
*/
}
}
}
}
return(0);
}
//+------------------------------------------------------------------+
Подскажите вот эта строчка
if (iCustom(NULL, 0, "ZUP_v49mod", minPercent, minSize, minBars, 0, 0)>0)
показывает, что если >0 то что? То есть, какое значение дает iCustom(NULL, 0, "ZUP_v49mod", minPercent, minSize, minBars, 0, 0) и что этим характеризует? Я как понял это проверка последнего бара, то есть если >0 то получен максимум? и какое он значение принимает, может быть в пунктах от максимума?
И за одно расскажите что делает этот код.
switch (filter)
{
case 1: ray_length=NormalizeDouble((peak2*minPercent/100), 4); break;
case 2: ray_length=minSize*Point; break;
}
С уважением Сергей
1. Индюк "ZUP_v49mod" возвращяет параметр нулевого буффера на нулевом барре. В зависимости от этого выполняется (если >0) или не выполняется (<0) условие if (iCustom(NULL, 0, "ZUP_v49mod", minPercent, minSize, minBars, 0, 0)>0)
2. Надо побольше кода. Откуда функция вызывается? Смахивает на размер лотта