Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
int init() { //---- indicators IndicatorBuffers(4); SetIndexStyle(0,DRAW_ZIGZAG); SetIndexBuffer(0,SwingsBuffer); SetIndexEmptyValue(0,0.0); SetIndexBuffer(1,HighsBuffer); SetIndexBuffer(2,LowsBuffer); SetIndexBuffer(3,TrendBuffer);То есть стиль реально в компилято встроен.
то замена стиля на DRAW_ZIGZAG ничего не рисует, хотя в "Окне данных" значения есть:
//+------------------------------------------------------------------+ //| GannSwingsVIII.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Rosh" #property link "http://www.metaquotes.net" #property indicator_chart_window #property indicator_buffers 5 #property indicator_color1 White #property indicator_color2 Blue #property indicator_color3 Red #property indicator_color4 Aqua #property indicator_color5 HotPink extern int kind=1;// тип тенденции, 1- малая, 2 - промежуточная, 3 - основная extern bool MoveLastSwing=false; // если равно true, то кончик хвоста будет сдвигаться ближе к нулевому бару для двух одинаковых баров по High или Low //---- buffers double SwingsBuffer[]; double HighsBuffer[]; double LowsBuffer[]; double TrendBuffer[]; double UpCloseOutSideBuffers[]; double DownCloseOutSideBuffers[]; double SwingHigh,SwingLow; int prevSwing,LastSwing,myBars,lowCounter,highCounter; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorBuffers(6); SetIndexStyle(0,DRAW_ZIGZAG); SetIndexBuffer(0,SwingsBuffer); SetIndexEmptyValue(0,0.0); SetIndexBuffer(1,HighsBuffer); SetIndexStyle(1,DRAW_ARROW); SetIndexArrow(1,159); SetIndexBuffer(2,LowsBuffer); SetIndexStyle(2,DRAW_ARROW); SetIndexArrow(2,159); SetIndexBuffer(3,UpCloseOutSideBuffers); SetIndexStyle(3,DRAW_ARROW); SetIndexArrow(3,108); SetIndexBuffer(4,DownCloseOutSideBuffers); SetIndexStyle(4,DRAW_ARROW); SetIndexArrow(4,108); SetIndexBuffer(5,TrendBuffer); for (int i=Bars-1; i>=0; i--) { SwingsBuffer[i]=0.0; HighsBuffer[i]=0.0; LowsBuffer[i]=0.0; TrendBuffer[i]=0.0; UpCloseOutSideBuffers[i]=0.0; DownCloseOutSideBuffers[i]=0.0; } SwingHigh=0.0; SwingLow=0.0; prevSwing=0; LastSwing=0.0; myBars=0; lowCounter=0; highCounter=0; //---- return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| return shift of last swing | //+------------------------------------------------------------------+ int GetLastSwing() { //---- int point=1; while (SwingsBuffer[point]==0.0 && point<Bars) point++; //---- return(point); } //+------------------------------------------------------------------+ //| Check prev swing | //+------------------------------------------------------------------+ void SetPrevSwing() { //---- int LastPoint; LastPoint=GetLastSwing(); SwingsBuffer[0]=0.0; SwingHigh=High[LastPoint]; SwingLow=Low[LastPoint]; LastSwing=LastPoint; //---- return; } //+------------------------------------------------------------------+ //| check Out side bar | //+------------------------------------------------------------------+ bool isOutSideSwingBar(int shift) { bool res=false; //---- res=((High[shift]>High[shift+1])&&(Low[shift]<Low[shift+1])); if (res) { if (Close[shift]>Open[shift]) UpCloseOutSideBuffers[shift]=(High[shift]+Low[shift])/2.0; else DownCloseOutSideBuffers[shift]=(High[shift]+Low[shift])/2.0; } //---- return(res); } //+------------------------------------------------------------------+ //| Check new low | //+------------------------------------------------------------------+ void SetSwings(int shift) { //---- //---- return; } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); int limit; bool nonOutSide; if (counted_bars==0) { limit=Bars-1; LowsBuffer[limit]=Low[limit]; SwingsBuffer[limit]=Low[limit]; SwingHigh=High[limit]; SwingLow=Low[limit]; LastSwing=limit; TrendBuffer[limit]=-1.0; } if (counted_bars>0) limit=Bars-counted_bars; if ( (counted_bars<0)|| ((counted_bars>0)&&(Bars-myBars>1)) ) init(); limit--; //Print("Bars=",Bars," counted_bars=",counted_bars,); //---- for (int cnt=limit;cnt>=0;cnt--) { if (limit<3)Print("cnt=",cnt," myBars=",myBars," LastSwing=",LastSwing); //if (cnt==0) SetPrevSwing(); nonOutSide=!isOutSideSwingBar(cnt); if (High[cnt]>SwingHigh) {highCounter++;SwingHigh=High[cnt];HighsBuffer[cnt]=SwingHigh;} if (Low[cnt]<SwingLow) {lowCounter++;SwingLow=Low[cnt];LowsBuffer[cnt]=SwingLow;} //isOutSideSwingBar(cnt); TrendBuffer[cnt]=TrendBuffer[cnt+1];// если не будут изменений - тренд сохранится if ((TrendBuffer[cnt+1]==-1.0) && (lowCounter==1))// && nonOutSide) { //if (LastSwing=!cnt) if (LastSwing!=Bars-1) SwingsBuffer[LastSwing]=0.0; // затрем предыдущий свинг LastSwing=cnt; SwingHigh=High[cnt]; SwingLow=Low[cnt]; //TrendBuffer[cnt]=-1.0; highCounter=0; lowCounter=0; SwingsBuffer[cnt]=Low[cnt]; HighsBuffer[cnt]=SwingHigh; //Print("продолжение даунтренда"); } else { if (TrendBuffer[cnt+1]==-1.0 &&highCounter==kind) { //if (LastSwing=!cnt) LastSwing=cnt; SwingHigh=High[cnt]; SwingLow=Low[cnt]; TrendBuffer[cnt]=1.0; highCounter=0; lowCounter=0; SwingsBuffer[cnt]=High[cnt]; LowsBuffer[cnt]=SwingLow; //Print("разворот даунтренда"); } else { if (TrendBuffer[cnt+1]==-1.0 && Low[cnt]==SwingLow && MoveLastSwing) { SwingsBuffer[LastSwing]=0.0; LastSwing=cnt; /* SwingLow=Low[cnt]; SwingHigh=High[cnt]; highCounter=0; lowCounter=0; */ SwingsBuffer[cnt]=Low[cnt]; } } } if ((TrendBuffer[cnt+1]==1.0) && (highCounter==1))// && nonOutSide) { //if (LastSwing=!cnt) if (LastSwing!=Bars-1) SwingsBuffer[LastSwing]=0.0; // затрем предыдущий свинг LastSwing=cnt; SwingHigh=High[cnt]; SwingLow=Low[cnt]; //TrendBuffer[cnt]=1.0; highCounter=0; lowCounter=0; SwingsBuffer[cnt]=High[cnt]; LowsBuffer[cnt]=SwingLow; //Print("продолжение аптренда"); } else { if (TrendBuffer[cnt+1]==1.0 &&lowCounter==kind) { //if (LastSwing=!cnt) LastSwing=cnt; SwingHigh=High[cnt]; SwingLow=Low[cnt]; TrendBuffer[cnt]=-1.0; highCounter=0; lowCounter=0; SwingsBuffer[cnt]=Low[cnt]; HighsBuffer[cnt]=SwingHigh; //Print("разворот аптренда"); } else { if (TrendBuffer[cnt+1]==1.0 && High[cnt]==SwingHigh && MoveLastSwing) { SwingsBuffer[LastSwing]=0.0; LastSwing=cnt; /* SwingLow=Low[cnt]; SwingHigh=High[cnt]; highCounter=0; lowCounter=0; */ SwingsBuffer[cnt]=High[cnt]; } } } } myBars=Bars; //---- return(0); } //+------------------------------------------------------------------+то замена стиля на DRAW_ZIGZAG ничего не рисует, хотя в "Окне данных" значения есть:
зигзаг рисуется между 2-мя буферами - чётным и нечётным
Код :
//+------------------------------------------------------------------+ //| GannSwings8Zigzag.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Rosh" #property link "http://www.metaquotes.net" #property indicator_chart_window #property indicator_buffers 5 #property indicator_color1 White #property indicator_color2 Aqua #property indicator_color3 White #property indicator_color4 Yellow #property indicator_color5 HotPink extern int kind=1;// тип тенденции, 1- малая, 2 - промежуточная, 3 - основная extern bool MoveLastSwing=false; // если равно true, то кончик хвоста будет сдвигаться ближе к нулевому бару для двух одинаковых баров по High или Low //---- buffers double SwingsBuffer[]; double HighsBuffer[]; double LowsBuffer[]; double TrendBuffer[]; double UpCloseOutSideBuffers[]; double DownCloseOutSideBuffers[]; double SwingHigh,SwingLow; int prevSwing,LastSwing,myBars,lowCounter,highCounter; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorBuffers(6); SetIndexStyle(0,DRAW_NONE); SetIndexBuffer(0,SwingsBuffer); SetIndexLabel(0,"Swings"); SetIndexEmptyValue(0,0.0); SetIndexBuffer(1,UpCloseOutSideBuffers); SetIndexStyle(1,DRAW_ARROW); SetIndexLabel(1,"UpClose"); SetIndexArrow(1,108); SetIndexBuffer(2,LowsBuffer); SetIndexStyle(2,DRAW_ZIGZAG); SetIndexLabel(2,"Lows"); // SetIndexArrow(2,159); SetIndexBuffer(3,HighsBuffer); SetIndexStyle(3,DRAW_ZIGZAG); SetIndexLabel(3,"Highs"); // SetIndexArrow(3,159); SetIndexBuffer(4,DownCloseOutSideBuffers); SetIndexStyle(4,DRAW_ARROW); SetIndexLabel(4,"DownClose"); SetIndexArrow(4,108); SetIndexBuffer(5,TrendBuffer); for (int i=Bars-1; i>=0; i--) { SwingsBuffer[i]=0.0; HighsBuffer[i]=0.0; LowsBuffer[i]=0.0; TrendBuffer[i]=0.0; UpCloseOutSideBuffers[i]=0.0; DownCloseOutSideBuffers[i]=0.0; } SwingHigh=0.0; SwingLow=0.0; prevSwing=0; LastSwing=0.0; myBars=0; lowCounter=0; highCounter=0; //---- return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| return shift of last swing | //+------------------------------------------------------------------+ int GetLastSwing() { //---- int point=1; while (SwingsBuffer[point]==0.0 && point<Bars) point++; //---- return(point); } //+------------------------------------------------------------------+ //| Check prev swing | //+------------------------------------------------------------------+ void SetPrevSwing() { //---- int LastPoint; LastPoint=GetLastSwing(); SwingsBuffer[0]=0.0; SwingHigh=High[LastPoint]; SwingLow=Low[LastPoint]; LastSwing=LastPoint; //---- return; } //+------------------------------------------------------------------+ //| check Out side bar | //+------------------------------------------------------------------+ bool isOutSideSwingBar(int shift) { bool res=false; //---- res=((High[shift]>High[shift+1])&&(Low[shift]<Low[shift+1])); if (res) { if (Close[shift]>Open[shift]) UpCloseOutSideBuffers[shift]=(High[shift]+Low[shift])/2.0; else DownCloseOutSideBuffers[shift]=(High[shift]+Low[shift])/2.0; } //---- return(res); } //+------------------------------------------------------------------+ //| Check new low | //+------------------------------------------------------------------+ void SetSwings(int shift) { //---- //---- return; } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); int limit; bool nonOutSide; if (counted_bars==0) { limit=Bars-1; LowsBuffer[limit]=Low[limit]; SwingsBuffer[limit]=Low[limit]; SwingHigh=High[limit]; SwingLow=Low[limit]; LastSwing=limit; TrendBuffer[limit]=-1.0; } if (counted_bars>0) limit=Bars-counted_bars; if ( (counted_bars<0)|| ((counted_bars>0)&&(Bars-myBars>1)) ) init(); limit--; //Print("Bars=",Bars," counted_bars=",counted_bars,); //---- for (int cnt=limit;cnt>=0;cnt--) { if (limit<3)Print("cnt=",cnt," myBars=",myBars," LastSwing=",LastSwing); //if (cnt==0) SetPrevSwing(); nonOutSide=!isOutSideSwingBar(cnt); if (High[cnt]>SwingHigh) {highCounter++;SwingHigh=High[cnt];HighsBuffer[cnt]=SwingHigh;} if (Low[cnt]<SwingLow) {lowCounter++;SwingLow=Low[cnt];LowsBuffer[cnt]=SwingLow;} //isOutSideSwingBar(cnt); TrendBuffer[cnt]=TrendBuffer[cnt+1];// если не будут изменений - тренд сохранится if ((TrendBuffer[cnt+1]==-1.0) && (lowCounter==1))// && nonOutSide) { //if (LastSwing=!cnt) if (LastSwing!=Bars-1) SwingsBuffer[LastSwing]=0.0; // затрем предыдущий свинг LastSwing=cnt; SwingHigh=High[cnt]; SwingLow=Low[cnt]; //TrendBuffer[cnt]=-1.0; highCounter=0; lowCounter=0; SwingsBuffer[cnt]=Low[cnt]; HighsBuffer[cnt]=SwingHigh; //Print("продолжение даунтренда"); } else { if (TrendBuffer[cnt+1]==-1.0 &&highCounter==kind) { //if (LastSwing=!cnt) LastSwing=cnt; SwingHigh=High[cnt]; SwingLow=Low[cnt]; TrendBuffer[cnt]=1.0; highCounter=0; lowCounter=0; SwingsBuffer[cnt]=High[cnt]; LowsBuffer[cnt]=SwingLow; //Print("разворот даунтренда"); } else { if (TrendBuffer[cnt+1]==-1.0 && Low[cnt]==SwingLow && MoveLastSwing) { SwingsBuffer[LastSwing]=0.0; LastSwing=cnt; /* SwingLow=Low[cnt]; SwingHigh=High[cnt]; highCounter=0; lowCounter=0; */ SwingsBuffer[cnt]=Low[cnt]; } } } if ((TrendBuffer[cnt+1]==1.0) && (highCounter==1))// && nonOutSide) { //if (LastSwing=!cnt) if (LastSwing!=Bars-1) SwingsBuffer[LastSwing]=0.0; // затрем предыдущий свинг LastSwing=cnt; SwingHigh=High[cnt]; SwingLow=Low[cnt]; //TrendBuffer[cnt]=1.0; highCounter=0; lowCounter=0; SwingsBuffer[cnt]=High[cnt]; LowsBuffer[cnt]=SwingLow; //Print("продолжение аптренда"); } else { if (TrendBuffer[cnt+1]==1.0 &&lowCounter==kind) { //if (LastSwing=!cnt) LastSwing=cnt; SwingHigh=High[cnt]; SwingLow=Low[cnt]; TrendBuffer[cnt]=-1.0; highCounter=0; lowCounter=0; SwingsBuffer[cnt]=Low[cnt]; HighsBuffer[cnt]=SwingHigh; //Print("разворот аптренда"); } else { if (TrendBuffer[cnt+1]==1.0 && High[cnt]==SwingHigh && MoveLastSwing) { SwingsBuffer[LastSwing]=0.0; LastSwing=cnt; /* SwingLow=Low[cnt]; SwingHigh=High[cnt]; highCounter=0; lowCounter=0; */ SwingsBuffer[cnt]=High[cnt]; } } } } myBars=Bars; //---- return(0); } //+------------------------------------------------------------------+Всегда один и тот же наклон, надо разбираться - мешает это или нет. Второй цвет тоже заявлен для проформы похоже, ну да ладно.
Но если я пробую изменить свойства индиатора (в данном случае цвет змгзага) , то получаю некрасивость.
PS Похоже, кириллические названия рисунков не проходят на www.mql4.com
"MQL4: Вопросы по MQL4."
Почитай, если не видел - "Исчезает индикатор на графике"
Возможно, не надо будет биться с двуся буферами в стиле draw_section, тем более что битва заведомо проигрышная.
PS Имеется ввиду draw_zigzag, только я могу догадываться о механизме реализации этого стиля( хелпа и примеров нет).
ага, спасибо за наводку, что-то я совсем из виду выпустил, и в справку давненько не заглядывал, да и твой код к сожалению посмотреть не удосужился (чуть голову не сломал). теперь нужно будет знакомиться с особенностями этого стиля, в справке инфы - кот наплакал :(
дописка: но похоже одним зигзагом для малой тенденции не обойтись :(
#97554 - 30/11/2005 21:33
http://forex.kbpauk.ru/showflat.php?Cat=0&Number=97554&page=0&vc=1&PHPSESSID=#Post97554
//+------------------------------------------------------------------+ //| GannSwingsX.mq4 | //| Copyright © 2005, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Rosh" #property link "http://www.metaquotes.net" #property indicator_chart_window #property indicator_buffers 6 #property indicator_color1 White #property indicator_color2 Yellow #property indicator_color3 Blue #property indicator_color4 Red #property indicator_color5 Aqua #property indicator_color6 HotPink extern int kind=1;// тип тенденции, 1- малая, 2 - промежуточная, 3 - основная extern int drawBars=30;// сколько всего баров считаем от конца extern bool MoveLastSwing=false; // если равно true, то кончик хвоста будет сдвигаться ближе к нулевому бару для двух одинаковых баров по High или Low //---- buffers double HighSwings[]; double LowSwings[]; double HighsBuffer[]; double LowsBuffer[]; double TrendBuffer[]; double UpCloseOutSideBuffers[]; double DownCloseOutSideBuffers[]; double SwingHigh,SwingLow; int prevSwing,LastSwing,myBars,lowCounter,highCounter; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init() { //---- indicators IndicatorBuffers(7); SetIndexStyle(0,DRAW_ZIGZAG); SetIndexBuffer(0,HighSwings); SetIndexEmptyValue(0,0.0); SetIndexLabel(0,"HighSwing"); SetIndexStyle(1,DRAW_ZIGZAG); SetIndexBuffer(1,LowSwings); SetIndexEmptyValue(1,0.0); SetIndexLabel(1,"LowSwing"); SetIndexBuffer(2,HighsBuffer); SetIndexStyle(2,DRAW_ARROW); SetIndexArrow(2,159); SetIndexLabel(2,"HighActive"); SetIndexBuffer(3,LowsBuffer); SetIndexStyle(3,DRAW_ARROW); SetIndexArrow(3,159); SetIndexLabel(3,"LowActive"); SetIndexBuffer(4,UpCloseOutSideBuffers); SetIndexStyle(4,DRAW_ARROW); SetIndexArrow(4,108); SetIndexLabel(4,"UpClose"); SetIndexBuffer(5,DownCloseOutSideBuffers); SetIndexStyle(5,DRAW_ARROW); SetIndexArrow(5,108); SetIndexLabel(5,"DownClose"); SetIndexBuffer(6,TrendBuffer); for (int i=Bars-1; i>=0; i--) { HighSwings[i]=0.0; LowSwings[i]=0.0; HighsBuffer[i]=0.0; LowsBuffer[i]=0.0; TrendBuffer[i]=0.0; UpCloseOutSideBuffers[i]=0.0; DownCloseOutSideBuffers[i]=0.0; } SwingHigh=0.0; SwingLow=0.0; prevSwing=0; LastSwing=0.0; myBars=0; lowCounter=0; highCounter=0; //Comment("Считаем ",drawBars," баров"); //---- return(0); } //+------------------------------------------------------------------+ //| Custor indicator deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| return shift of last swing | //+------------------------------------------------------------------+ int GetLastSwing() { //---- int point=1; while (HighSwings[point]==0.0 && LowSwings[point]==0.0 && point<Bars) point++; //---- return(point); } //+------------------------------------------------------------------+ //| Check prev swing | //+------------------------------------------------------------------+ void SetPrevSwing() { //---- int LastPoint; LastPoint=GetLastSwing(); HighSwings[0]=0.0; SwingHigh=High[LastPoint]; SwingLow=Low[LastPoint]; LastSwing=LastPoint; //---- return; } //+------------------------------------------------------------------+ //| check Out side bar | //+------------------------------------------------------------------+ bool isOutSideSwingBar(int shift) { bool res=false; //---- res=((High[shift]>High[shift+1])&&(Low[shift]<Low[shift+1])); if (res) { if (Close[shift]>Open[shift]) UpCloseOutSideBuffers[shift]=(High[shift]+Low[shift])/2.0; else DownCloseOutSideBuffers[shift]=(High[shift]+Low[shift])/2.0; } //---- return(res); } //+------------------------------------------------------------------+ //| Check new low | //+------------------------------------------------------------------+ void SetSwings(int shift) { //---- //---- return; } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); int limit; bool nonOutSide; if (counted_bars==0) { limit=Bars-1; LowsBuffer[limit]=Low[limit]; LowSwings[limit]=Low[limit]; SwingHigh=High[limit]; SwingLow=Low[limit]; LastSwing=limit; TrendBuffer[limit]=-1.0; } if (counted_bars>0) limit=Bars-counted_bars; if ( (counted_bars<0)|| ((counted_bars>0)&&(Bars-myBars>1)) ) init(); limit--; //Print("Bars=",Bars," counted_bars=",counted_bars,); //---- // for (int cnt=limit;cnt>=Bars-drawBars;cnt--) for (int cnt=limit;cnt>0;cnt--) { //Print("Bar=",Bars-cnt," Time=",TimeToStr(Time[cnt])); //if (limit<3)Print("cnt=",cnt," myBars=",myBars," LastSwing=",LastSwing); //if (cnt==0) SetPrevSwing(); nonOutSide=!isOutSideSwingBar(cnt); if (High[cnt]>SwingHigh) {highCounter++;SwingHigh=High[cnt];HighsBuffer[cnt]=SwingHigh;} if (Low[cnt]<SwingLow) {lowCounter++;SwingLow=Low[cnt];LowsBuffer[cnt]=SwingLow;} //isOutSideSwingBar(cnt); TrendBuffer[cnt]=TrendBuffer[cnt+1];// если не будут изменений - тренд сохранится if (nonOutSide) { if ((TrendBuffer[cnt+1]==-1.0) && (lowCounter==1) ) { //if (LastSwing=!cnt) if (LastSwing!=Bars-1) LowSwings[LastSwing]=0.0; // затрем предыдущий свинг //Print("затрем предыдущий Down свинг"); LastSwing=cnt; SwingHigh=High[cnt]; SwingLow=Low[cnt]; //TrendBuffer[cnt]=-1.0; highCounter=0; lowCounter=0; LowSwings[cnt]=Low[cnt]; HighsBuffer[cnt]=SwingHigh; //Print("продолжение даунтренда"); } else { if (TrendBuffer[cnt+1]==-1.0 &&highCounter==kind) { //if (LastSwing=!cnt) LastSwing=cnt; SwingHigh=High[cnt]; SwingLow=Low[cnt]; TrendBuffer[cnt]=1.0; highCounter=0; lowCounter=0; HighSwings[cnt]=High[cnt]; LowsBuffer[cnt]=SwingLow; //Print("разворот даунтренда"); } else { if (TrendBuffer[cnt+1]==-1.0 && Low[cnt]==SwingLow && MoveLastSwing) { LowSwings[LastSwing]=0.0; LastSwing=cnt; /* SwingLow=Low[cnt]; SwingHigh=High[cnt]; highCounter=0; lowCounter=0; */ LowSwings[cnt]=Low[cnt]; } } } if ((TrendBuffer[cnt+1]==1.0) && (highCounter==1)) { //if (LastSwing=!cnt) if (LastSwing!=Bars-1) HighSwings[LastSwing]=0.0; // затрем предыдущий свинг //Print("затрем предыдущий UP свинг"); LastSwing=cnt; SwingHigh=High[cnt]; SwingLow=Low[cnt]; //TrendBuffer[cnt]=1.0; highCounter=0; lowCounter=0; HighSwings[cnt]=High[cnt]; HighsBuffer[cnt]=SwingHigh; LowsBuffer[cnt]=SwingLow; //Print("продолжение аптренда"); } else { if (TrendBuffer[cnt+1]==1.0 &&lowCounter==kind) { //if (LastSwing=!cnt) LastSwing=cnt; SwingHigh=High[cnt]; SwingLow=Low[cnt]; TrendBuffer[cnt]=-1.0; highCounter=0; lowCounter=0; LowSwings[cnt]=Low[cnt]; HighsBuffer[cnt]=SwingHigh; LowsBuffer[cnt]=SwingLow; //Print("разворот аптренда"); } else { if (TrendBuffer[cnt+1]==1.0 && High[cnt]==SwingHigh && MoveLastSwing) { HighSwings[LastSwing]=0.0; LastSwing=cnt; /* SwingLow=Low[cnt]; SwingHigh=High[cnt]; highCounter=0; lowCounter=0; */ HighSwings[cnt]=High[cnt]; } } }//TrendBuffer[cnt+1]==1.0 }// if (nonOutSide_ else // outSideBars if (isOutSideSwingBar(cnt)) { if (TrendBuffer[cnt+1]==1.0 && Close[cnt]>Open[cnt] && highCounter==1) { SwingLow=Low[cnt]; SwingHigh=High[cnt]; LowSwings[cnt]=Low[cnt]; HighSwings[cnt]=High[cnt]; highCounter=0; lowCounter=0; LastSwing=cnt; //Print("Продолжение аптренд через внешний бар"); //SwingsBuffer[cnt]=SwingLow; } if (TrendBuffer[cnt+1]==1.0 && Close[cnt]<Open[cnt]) { SwingLow=Low[cnt]; SwingHigh=High[cnt]; if (High[cnt]>HighSwings[LastSwing]) { HighSwings[LastSwing]=0.0; HighSwings[cnt]=High[cnt]; } LowSwings[cnt]=Low[cnt]; highCounter=0; lowCounter=0; LastSwing=cnt; //Print("Разворот аптренда через внешний бар"); //SwingsBuffer[cnt]=SwingHigh; TrendBuffer[cnt]=-1.0; } if (TrendBuffer[cnt+1]==-1.0 && Close[cnt]<Open[cnt] && lowCounter==1) { SwingLow=Low[cnt]; SwingHigh=High[cnt]; HighSwings[cnt]=High[cnt]; LowSwings[cnt]=Low[cnt]; highCounter=0; lowCounter=0; LastSwing=cnt; //Print("Продолжение даунтренд через внешний бар"); //SwingsBuffer[cnt]=SwingHigh; } if (TrendBuffer[cnt+1]==-1.0 && Close[cnt]>Open[cnt]) { SwingLow=Low[cnt]; SwingHigh=High[cnt]; if (Low[cnt]<LowSwings[LastSwing]) { LowSwings[LastSwing]=0.0; LowSwings[cnt]=Low[cnt]; } HighSwings[cnt]=High[cnt]; highCounter=0; lowCounter=0; LastSwing=cnt; //Print("Разворот даунтренда через внешний бар"); //SwingsBuffer[cnt]=SwingLow; TrendBuffer[cnt]=1.0; } } } myBars=Bars; //---- return(0); } //+------------------------------------------------------------------+Самый прикол в том, что стиль DRAW_ZIGZAG я по отрывкам собрал :) Надеюсь, он не изменится уже.