Надо в цикле бежать в глубь истории до нахождения значения в буфере, да нужно не одно значение, а несколько, чтобы определить направление.
В любом случае этот зигзаг для эксперта очень плохая затея, тормоза невероятные.
Помогите прописать закрытие по Зигзаг. Все перепробовала закрытие не получается.
Первая проблема в этих строках. Надо-бы убедиться что там не пустые значения а именно 0, в чём я сомневаюсь.
int i=2; while(iCustom(NULL,0,"Bi D ZigXard-Pointer-V3",ExtDepth,ExtDeviation,ExtBackstep,0,i)==0) i++; double Zig_1=iCustom(NULL,0,"Bi D ZigXard-Pointer-V3",ExtDepth,ExtDeviation,ExtBackstep,0,i);
Да и вообще не мешало-бы посмотреть что это за ZigZag Не обязательно сам индикатор или его код, хотя-бы картинку. Сколько там буферов, когда отрисовывается новая ступень?
Если ориентироваться на тот который в комплекте, то код вообще некудышный. Искать значения Zig_0 и Zig_1 надо в одном цикле. Если найдено первое значение и оно равно High той-же свечи, то дальше надо искать значение равное Low Таким образом получим два значения которые можно сравнивать.
Или можно подумать, нет-ли варианта обойтись одним значением ZigZag`a Ведь если это значение равно High свечи, то следующее будет явно ниже этого и будет равно Low и так-же наоборот.
Это уже ближе к правильному ответу. Используется два буфера, соответственно надо в цикле определять оба их значения.
Zig_0=iCustom(Symbol(),0,"Bi D ZigXard-Pointer-V3",ExtDepth,ExtDeviation,ExtBackstep,0,i); Zig_1=iCustom(Symbol(),0,"Bi D ZigXard-Pointer-V3",ExtDepth,ExtDeviation,ExtBackstep,1,i);
И выход из цикла по условию
if(Zig_0 > 0 && Zig_1 > 0) break;
Это уже ближе к правильному ответу. Используется два буфера, соответственно надо в цикле определять оба их значения.
И выход из цикла по условию
if(Zig_0 > 0 && Zig_1 > 0) break;
наверно так:
if(Zig_0 > 0 || Zig_1 > 0) break;
Это уже ближе к правильному ответу. Используется два буфера, соответственно надо в цикле определять оба их значения.
И выход из цикла по условию
if(Zig_0 > 0 && Zig_1 > 0) break;
И выход из цикла if(Zig_0 > 0 && Zig_1 > 0) break; нужно вставлять в отдельный блок закрытия? Например сюда:
for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { if(Zig_0 > 0 || Zig_1 > 0) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); return(0); } } else { if(Zig_0 < 0 || Zig_1 < 0) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); return(0); } } } }
И выход из цикла if(Zig_0 > 0 && Zig_1 > 0) break; нужно вставлять в отдельный блок закрытия? Например сюда:
for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { if((Zig_0 > 0 && Zig_0!=EMPTY_VALUE) || (Zig_1 > 0 && Zig_1!=EMPTY_VALUE))
{ OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); return(0); } } else { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); return(0); } } }лучше так
Закрытие все равно не ставится. Идет сделка только на продажу. Посмотрите пожалуйста, где ошибка.
//+------------------------------------------------------------------+ //| ZZ.mq4 | //| Mr. Gold | //| anna.furmanova@yandex.ru | //+------------------------------------------------------------------+ #property copyright "Mr. Gold" #property link "anna.furmanova@yandex.ru" #property version "1.00" #property strict #include <My Lib.mqh> extern string ZigXard = "===== Параметры ZigXard ====="; extern int ExtDepth = 57; extern int ExtDeviation = 65; extern int ExtBackstep = 40; extern int MaxRisk = 2; extern int MG = 888; extern double Lots = 0.01; extern bool Clock = true; extern int TestingMode = 1; static int PreBars=0; static int DT=0; datetime Today=0; static int prevtime=0; int tiket,cnt,total=OrdersTotal(); //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string CurDay() { string CurDay; switch(DayOfWeek()) { case 0: CurDay = "Вс";break; case 1: CurDay = "Пн";break; case 2: CurDay = "Вт";break; case 3: CurDay = "Ср";break; case 4: CurDay = "Чт";break; case 5: CurDay = "Пт";break; case 6: CurDay = "Сб";break; } return(CurDay); } //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { if(TestingMode>0) { if(TestingMode==1) { if(Bars == PreBars) return(0); else PreBars=Bars; } else { if(Bars!=PreBars) { DT=0; PreBars=Bars; } if(TimeCurrent() < Time[0]+DT) return(0); else DT=DT+Period()*60/TestingMode; } } if(Clock) ObjectSetText("Clock",TimeToStr(TimeCurrent(),TIME_MINUTES)+", "+CurDay(),20,"Tahoma",Maroon); if(GlobalVariableCheck("g_TestingMode")==true) TestingMode=GlobalVariableGet("g_TestingMode"); if(DayOfWeek()==0 || DayOfWeek()==6) return(0); if(!IsTradeAllowed()) return(0); if(Time[0]==Today) return(0); Today=Time[0]; double Lot=GetLot(MaxRisk); if(Lot==0) {Alert("Недостаточно средств!");return(0);} int signal; double y3=0,y3_1=0,y2=0,y2_1=0,y1=0,y1_1=0,Zig_0,Zig_1; int x3,x3_1,x2,x2_1,x1,x1_1; for(int i=1; i<Bars; i++) { Zig_0=iCustom(Symbol(),0,"Bi D ZigXard-Pointer-V3",ExtDepth,ExtDeviation,ExtBackstep,0,i); if(Zig_0!=0) if(y1==0) { x1=i; y1=Zig_0; } else if(y2==0) { x2=i; y2=Zig_0; } else if(y3==0) { x3=i; y3=Zig_0; } { if(Zig_0>0 && Zig_0!=EMPTY_VALUE) { tiket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0,"",MG,0,Red); } } Zig_1=iCustom(Symbol(),0,"Bi D ZigXard-Pointer-V3",ExtDepth,ExtDeviation,ExtBackstep,1,i); if(Zig_1!=0) if(y1_1==0) { x1_1=i; y1_1=Zig_1; } else if(y2_1==0) { x2_1=i; y2_1=Zig_1; } else if(y3_1==0) { x3_1=i; y3_1=Zig_1; } { if(Zig_1>0 && Zig_1!=EMPTY_VALUE) { tiket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0,"",MG,0,Red); } } } for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES); if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { if(Zig_0>0 && Zig_0!=EMPTY_VALUE) { OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); return(0); } } else { if(Zig_1>0 && Zig_1!=EMPTY_VALUE) { OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); return(0); } } } } return(0); } //+------------------------------------------------------------------+
наверно так:
лучше так
Влад, а посмотреть код о котором идёт речь не позволяет религия? Да и код индикатора приложен именно для того чтобы убедиться в том что используется нуль а не пустое значение.
я исправлял не те ошибки.
и всегда проверяю на непустое значение. неважно что там установлено в переменной пустого значения.
if(Zig_0 > 0 && Zig_1 > 0) break;
не имеет логического завершения, индикатор не выдаст на два буфера точки
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Помогите прописать закрытие по Зигзаг. Все перепробовала закрытие не получается.