Если буфер не EMPTY_VALUE , то соединяет линией точки open[j] open[i]
При этом ещё должен определить куда направлена свеча? Я правильно понимаю? Или это уже определено до того как…? Сколько баров должно быть найдено? Один или все на указанном участке?
Самый тупой вариант, перебирая цикл в цикле заполнять вспомогательный массив, а потом из него рисовать линии.
При этом ещё должен определить куда направлена свеча? Я правильно понимаю? Или это уже определено до того как…? Сколько баров должно быть найдено? Один или все на указанном участке?
Самый тупой вариант, перебирая цикл в цикле заполнять вспомогательный массив, а потом из него рисовать линии.
Я понимаю, что цикл в цикле не очень хорошо, но как правильно сделать не понимаю.
суть того что мне надо:
есть буфер, если свеча нисходящая = close, если восходящая = EMPTY_VALUE
на новом баре от цены open надо провести линии к каждому значению буфера != EMPTY_VALUE за последние n-баров
Если не сложно сделай набросок кода или подскажи где можно посмотреть подобное.
Я понимаю, что цикл в цикле не очень хорошо, но как правильно сделать не понимаю.
суть того что мне надо:
есть буфер, если свеча нисходящая = close, если восходящая = EMPTY_VALUE
на новом баре от цены open надо провести линии к каждому значению буфера != EMPTY_VALUE за последние n-баров
Если не сложно сделай набросок кода или подскажи где можно посмотреть подобное.
Ну так если на новом баре, то зачем цикл в цикле? Есть один массив с данными, есть первая свеча. Вот этот массив и перебираешь.
Или это надо на всю историю рисовать? Тогда твой рисунок не соответствует задаче. Ведь на рисунке только от первой свечи трендовые нарисованы, а ведь и дальше были свечи удовлетворяющие условию. Ты задачу невнятно ставишь.
Как узнать, сколько в данный момент используется агентов оптимизатора? Имею ввиду, что пользователь может отключить часть локальных агентов, интересует именно сколько активных агентов в данный момент.
А желательно знать вообще сколько всего агентов активных, в том числе и подключенных по сети (не облако).
Всем доброго! Может кто подскажет как добавить на Айфоне линейку, типа как в ТрейдВью: короткая/длинная, отношение риск/прибыль, длина в пипсах/тейках. Есть в Маркете вроде Free, но как добавить не знаю. Кто может знает? Пояснит. Спасибо
Cripta_Nick #: Всем доброго! Может кто подскажет как добавить на Айфоне линейку, типа как в ТрейдВью: короткая/длинная, отношение риск/прибыль, длина в пипсах/тейках. Есть в Маркете вроде Free, но как добавить не знаю. Кто может знает? Пояснит. Спасибо
Никак. На мобильном нет возможности прикреплять к графику пользовательские скрипты/индикаторы/советники.
Буду очень признателен, если поможете, подправить код индикатора. Переписал код своего индикатора с использованием функций OnCalculate() и OnTimer() , но достичь поставленных целей не получилось. Индикатор выставляет заданное количество линий Хай-Лоу Дней, Недель, Месяцев. Индикатор должен обновляться один раз в сутки на первом тике дневной свечи , либо по заданному времени, к примеру в 1 час 15 минут. При обновлении дневной свечи на графике любого таймфрейма (несмотряна переключения между таймфреймами) отрисовываются линии не задетые ценой. На текущей дневной цене при пробитии ценой линий, они должны оставаться на месте, даже при переключении между таймфреймами, до очередного первого тика новой свечи. После этого все линии обновляются. Проблема в том, что примеров с использованием функции OnTimer() я так и не нашел.Может у кого-то имеется подобный по замыслу код индикатора.
С уважением, Вячеслав.
//+------------------------------------------------------------------+//| HL_LEVEL.mq4 |//+------------------------------------------------------------------+#property copyright"kochegarov.vm"#property link"kochegarov.vm@mail.ru"#property version"1.00"#property strict#property indicator_chart_windowexternstring General = "//////////////////////////////////////////";
externint TimeFrame = 0;
externbool Ray = true; // длинна линий при true - до конца графика, при false - до текущей цены на графикеexternstring D1_Settings = "//////////////////////////////////////////";
externint ObjD1 = 3; // количество дней для отрисовки линий хай-лоуexterncolor ColorHigh_D1 = clrRed;
externcolor ColorLow_D1 = clrBlue;
externint LineStyle_D1 = 0;
externint LineWidth_D1 = 2;
externstring W1_Settings = "//////////////////////////////////////////";
externint ObjW1 = 3; // количество недель для отрисовки линий хай-лоуexterncolor ColorHigh_W1 = clrMagenta;
externcolor ColorLow_W1 = clrDeepSkyBlue;
externint LineStyle_W1 = 0;
externint LineWidth_W1 = 4;
externstring MN_Settings = "//////////////////////////////////////////";
externint ObjM1 = 3; // количество месяцев для отрисовки линий хай-лоуexterncolor ColorHigh_MN = clrRed;
externcolor ColorLow_MN = clrBlue;
externint LineStyle_MN = 0;
externint LineWidth_MN = 5;
externdouble Max_Spread = 5;
externint CalculatedDays = 50; //Calculated Daysexternbool ShowLotInfo = true;
externbool ShowOrdersInfo = true;
double D1h[], D1l[], W1h[], W1l[], M1h[], M1l[];
datetime D1ts[], D1te[], W1ts[], W1te[], M1ts[], M1te[];
int MaxObj=0;
int PipsDivided = 1;
datetime TimeNewBar = 0;
datetime time_bar_ontimer_all;
//+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
if(Digits == 3 || Digits == 5) PipsDivided=10;
EventSetTimer(1440);
ArrayResize(D1h,ObjD1+1); ArrayResize(D1l,ObjD1+1); ArrayResize(D1ts,ObjD1+1); ArrayResize(D1te,ObjD1+1);
ArrayResize(W1h,ObjW1+1); ArrayResize(W1l,ObjW1+1); ArrayResize(W1ts,ObjW1+1); ArrayResize(W1te,ObjW1+1);
ArrayResize(M1h,ObjM1+1); ArrayResize(M1l,ObjM1+1); ArrayResize(M1ts,ObjM1+1); ArrayResize(M1te,ObjM1+1);
if (ObjD1+1 > MaxObj) MaxObj=ObjD1+1;
if (ObjW1+1 > MaxObj) MaxObj=ObjW1+1;
if (ObjM1+1 > MaxObj) MaxObj=ObjM1+1;
Print("Инициализация индикатора");
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+ voidOnDeinit(constint reason)
{
EventKillTimer();
rLines(MaxObj+1);
Comment("");
Print("Деинициализация индикатора");
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
if(TimeNewBar == iTime(NULL,PERIOD_D1,0)) return(rates_total); //Выполнять дальнейшие условия только при появлении нового Бара//TimeNewBar = iTime(NULL,PERIOD_CURRENT,0); //сохраняем текущее времяfor(int x=0; x<MaxObj; x++)
{
D1h[x]=iHigh(Symbol(),1440,x); D1l[x]=iLow(Symbol(),1440,x);
W1h[x]=iHigh(Symbol(),10080,x); W1l[x]=iLow(Symbol(),10080,x);
M1h[x]=iHigh(Symbol(),43200,x); M1l[x]=iLow(Symbol(),43200,x);
D1ts[x]=iTime(Symbol(),1440,x); D1te[x]=Time[0];
W1ts[x]=iTime(Symbol(),10080,x); W1te[x]=Time[0];
M1ts[x]=iTime(Symbol(),43200,x); M1te[x]=Time[0];
}
dD1(ObjD1+1);
dW1(ObjW1+1);
dM1(ObjM1+1);
return(rates_total);
}
//+------------------------------------------------------------------+//| Timer function |//+------------------------------------------------------------------+voidOnTimer()
{
//--- время первого вызова OnTimer()staticdatetime start_time=TimeCurrent();
//--- локальное время на компьютереdatetime local_time=TimeLocal();
//---
}
//+----------------------------------------------------------------------------+void dD1(int Obj)
{
for (int x=1; x<Obj; x++)
{
int nb1=iBarShift(NULL,0, D1ts[x],false);
int nb2=iBarShift(NULL,0, D1te[x],false);
double up=High[iHighest(NULL,0, MODE_HIGH, nb1-nb2, nb2)];
double dn=Low [iLowest(NULL,0, MODE_LOW, nb1-nb2, nb2)];
if(LineStyle_D1>0) LineWidth_D1=1;
SetTLine(ColorHigh_D1,"D1_High_"+(string)x,iTime(NULL,PERIOD_D1,x),D1h[x],Time[0],D1h[x],Ray,LineStyle_D1,LineWidth_D1);
if(up>D1h[x]) {ObjectDelete("D1_High_"+(string)x);}
SetTLine(ColorLow_D1,"D1_Low_"+(string)x,iTime(NULL,PERIOD_D1,x),D1l[x],Time[0],D1l[x],Ray,LineStyle_D1,LineWidth_D1);
if(dn<D1l[x]) {ObjectDelete("D1_Low_"+(string)x);}
}
}
//+----------------------------------------------------------------------------+void dW1(int Obj)
{
for (int x=1; x<Obj; x++)
{
int nb1=iBarShift(NULL,0, W1ts[x],false);
int nb2=iBarShift(NULL,0, W1te[x],false);
double up=High[iHighest(NULL,0, MODE_HIGH, nb1-nb2, nb2)];
double dn=Low [iLowest(NULL,0, MODE_LOW, nb1-nb2, nb2)];
if(LineStyle_W1>0) LineWidth_W1=1;
SetTLine(ColorHigh_W1,"W1_High_"+(string)x,iTime(NULL,PERIOD_W1,x),W1h[x],Time[0],W1h[x],Ray,LineStyle_W1,LineWidth_W1);
if(up>W1h[x]) {ObjectDelete("W1_High_"+(string)x);}
SetTLine(ColorLow_W1,"W1_Low_"+(string)x,iTime(NULL,PERIOD_W1,x),W1l[x],Time[0],W1l[x],Ray,LineStyle_W1,LineWidth_W1);
if (dn<W1l[x]) {ObjectDelete("W1_Low_"+(string)x);}
}
}
//+----------------------------------------------------------------------------+void dM1(int Obj)
{
for (int x=1; x<Obj; x++)
{
int nb1=iBarShift(NULL,0, M1ts[x],false);
int nb2=iBarShift(NULL,0, M1te[x],false);
double up=High[iHighest(NULL,0, MODE_HIGH, nb1-nb2, nb2)];
double dn=Low [iLowest(NULL,0, MODE_LOW, nb1-nb2, nb2)];
if(LineStyle_MN>0) LineWidth_MN=1;
SetTLine(ColorHigh_MN,"M1_High_"+(string)x,iTime(NULL,PERIOD_MN1,x),M1h[x],Time[0],M1h[x],Ray,LineStyle_MN,LineWidth_MN);
if(up>M1h[x]) {ObjectDelete("M1_High_"+(string)x);}
SetTLine(ColorLow_MN,"M1_Low_"+(string)x,iTime(NULL,PERIOD_MN1,x),M1l[x],Time[0],M1l[x],Ray,LineStyle_MN,LineWidth_MN);
if (dn<M1l[x]) {ObjectDelete("M1_Low_"+(string)x);}
}
}
//+----------------------------------------------------------------------------+void SetTLine( color cl,
string nm="",
datetime t1=0,
double p1=0,
datetime t2=0,
double p2=0,
bool ry=False,
int st=0,
int wd=1 ) {
if (nm=="") nm=DoubleToStr(Time[0], 0);
if (t1<=0) t1=Time[10];
if (p1<=0) p1=Low[10];
if (t2<=0) t2=Time[0];
if (p2<=0) p2=Bid;
if (ObjectFind(nm)<0) ObjectCreate(nm, OBJ_TREND, 0, 0,0, 0,0);
ObjectSet(nm, OBJPROP_TIME1 , t1);
ObjectSet(nm, OBJPROP_PRICE1, p1);
ObjectSet(nm, OBJPROP_TIME2 , t2);
ObjectSet(nm, OBJPROP_PRICE2, p2);
ObjectSet(nm, OBJPROP_COLOR , cl);
ObjectSet(nm, OBJPROP_RAY , ry);
ObjectSet(nm, OBJPROP_STYLE , st);
ObjectSet(nm, OBJPROP_WIDTH , wd);
}
//+------------------------------------------------------------------+void rLines(int Obj)
{
for (int x=1; x<Obj; x++)
{
ObjectDelete("D1_High_"+(string)x);
ObjectDelete("D1_Low_"+(string)x);
ObjectDelete("W1_High_"+(string)x);
ObjectDelete("W1_Low_"+(string)x);
ObjectDelete("M1_High_"+(string)x);
ObjectDelete("M1_Low_"+(string)x);
}
}
//+------------------------------------------------------------------+
Хочу открывать два отложенных ордера и уходить, если пока меня нету откроется один из ордеров то чтобы закрывался второй (и оставалась одна открытая позиция и ноль отложенных), вот код скажите всё ли правильно?
//+------------------------------------------------------------------+//| Удаление отложенных ордеров |//+------------------------------------------------------------------+voidOnTrade()
{
//-- объявление и инициализация запроса и результатаMqlTradeRequest request={};
MqlTradeResult result={};
int total=OrdersTotal(); // количество установленных отложенных ордеровfor(int i=total; i>0;)
{
ulong order_ticket=OrderGetTicket(i); // тикет ордераulong magic=OrderGetInteger(ORDER_MAGIC); // MagicNumber ордера
i--;
//--- если MagicNumber ордера совпадаетif(magic==EXPERT_MAGIC)
{
//--- обнуление значений запроса и результатаZeroMemory(request);
ZeroMemory(result);
//--- установка параметров операции
request.action=TRADE_ACTION_REMOVE; // тип торговой операции(указывает на закрытие отложенного ордера)
request.order = order_ticket; // тикет ордера//--- отправка запросаif(!OrderSend(request,result)) // исполняет операциюPrintFormat("OrderSend error %d",GetLastError()); // если отправить запрос не удалось, вывести код ошибки//--- информация об операции PrintFormat("retcode=%u deal=%I64u order=%I64u",result.retcode,result.deal,result.order);
}
}
}
Ну и соответсвенно на график добавляю эксперта только после того как установленны два отложника
Как узнать, сколько в данный момент используется агентов оптимизатора? Имею ввиду, что пользователь может отключить часть локальных агентов, интересует именно сколько активных агентов в данный момент.
А желательно знать вообще сколько всего агентов активных, в том числе и подключенных по сети (не облако).
Профиль > Агенты > Агенты > "Активные за последние сутки"
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
В результате что должно получиться? Цель сравнения какая?
Если буфер не EMPTY_VALUE , то соединяет линией точки open[j] open[i]
Если буфер не EMPTY_VALUE , то соединяет линией точки open[j] open[i]
При этом ещё должен определить куда направлена свеча? Я правильно понимаю? Или это уже определено до того как…? Сколько баров должно быть найдено? Один или все на указанном участке?
Самый тупой вариант, перебирая цикл в цикле заполнять вспомогательный массив, а потом из него рисовать линии.
При этом ещё должен определить куда направлена свеча? Я правильно понимаю? Или это уже определено до того как…? Сколько баров должно быть найдено? Один или все на указанном участке?
Самый тупой вариант, перебирая цикл в цикле заполнять вспомогательный массив, а потом из него рисовать линии.
Я понимаю, что цикл в цикле не очень хорошо, но как правильно сделать не понимаю.
суть того что мне надо:
есть буфер, если свеча нисходящая = close, если восходящая = EMPTY_VALUE
на новом баре от цены open надо провести линии к каждому значению буфера != EMPTY_VALUE за последние n-баров
Если не сложно сделай набросок кода или подскажи где можно посмотреть подобное.
Я понимаю, что цикл в цикле не очень хорошо, но как правильно сделать не понимаю.
суть того что мне надо:
есть буфер, если свеча нисходящая = close, если восходящая = EMPTY_VALUE
на новом баре от цены open надо провести линии к каждому значению буфера != EMPTY_VALUE за последние n-баров
Если не сложно сделай набросок кода или подскажи где можно посмотреть подобное.
Ну так если на новом баре, то зачем цикл в цикле? Есть один массив с данными, есть первая свеча. Вот этот массив и перебираешь.
Или это надо на всю историю рисовать? Тогда твой рисунок не соответствует задаче. Ведь на рисунке только от первой свечи трендовые нарисованы, а ведь и дальше были свечи удовлетворяющие условию. Ты задачу невнятно ставишь.
Как узнать, сколько в данный момент используется агентов оптимизатора? Имею ввиду, что пользователь может отключить часть локальных агентов, интересует именно сколько активных агентов в данный момент.
А желательно знать вообще сколько всего агентов активных, в том числе и подключенных по сети (не облако).
Всем доброго! Может кто подскажет как добавить на Айфоне линейку, типа как в ТрейдВью: короткая/длинная, отношение риск/прибыль, длина в пипсах/тейках. Есть в Маркете вроде Free, но как добавить не знаю. Кто может знает? Пояснит. Спасибо
Никак. На мобильном нет возможности прикреплять к графику пользовательские скрипты/индикаторы/советники.
Здравствуйте!
Буду очень признателен, если поможете, подправить код индикатора. Переписал код своего индикатора с использованием функций OnCalculate() и OnTimer() , но достичь поставленных целей не получилось. Индикатор выставляет заданное количество линий Хай-Лоу Дней, Недель, Месяцев. Индикатор должен обновляться один раз в сутки на первом тике дневной свечи , либо по заданному времени, к примеру в 1 час 15 минут. При обновлении дневной свечи на графике любого таймфрейма (несмотря на переключения между таймфреймами) отрисовываются линии не задетые ценой. На текущей дневной цене при пробитии ценой линий, они должны оставаться на месте, даже при переключении между таймфреймами, до очередного первого тика новой свечи. После этого все линии обновляются. Проблема в том, что примеров с использованием функции OnTimer() я так и не нашел. Может у кого-то имеется подобный по замыслу код индикатора.
С уважением, Вячеслав.
Как узнать, сколько в данный момент используется агентов оптимизатора? Имею ввиду, что пользователь может отключить часть локальных агентов, интересует именно сколько активных агентов в данный момент.
А желательно знать вообще сколько всего агентов активных, в том числе и подключенных по сети (не облако).
Профиль > Агенты > Агенты > "Активные за последние сутки"