主图指标
mt4指标类型:震荡指标
是否能用在mt4手机版上:否
是否含有未来函数:无
//------------------------------------------------------------------/
// 软滂赅蝾-耦忮蝽桕, 铖眍忄睇 磬 蝈铕梃 腻爨痍  漕镱腠屙扈
// 奏耱 觐溧 忡蜞 桤 桧滂赅蝾疣 Ind-TD-DeMark-3-1.mq4 [Kara 
//------------------------------------------------------------------/
#property copyright "GreenDog" 
#property link      "
[email protected]" // v2.3
#property indicator_chart_window 
#property indicator_buffers 2
#property indicator_color1 Red 
#property indicator_color2 Blue 
extern int showBars=200; // 羼腓 = 0, 蝾 桧濑 铗钺疣驵弪 潆 怦邈 沭圄桕
extern int LevDP=3; // 箴钼屙 蝾麇 溴爨痍; 2 = 鲥眚疣朦睇 徉 狍溴 恹(龛驽) 2 徉痤 耠邂  2 徉痤 耧疣忄
extern int qSteps=1; // 觐腓麇耱忸 铗钺疣驵屐 泐, 礤 犷脲 3
extern int BackStep=0; // 觐腓麇耱忸 泐 磬玎
extern int startBar=0; // 羼腓 0, 蝾 疱觐戾礓圉梃 潆 蝈牦泐 徉疣, 羼腓 1 - 蝾 潆 镳邃镱豚汔屐钽 耠邃簋泐 徉疣
extern bool TrendLine=true; // false = 腓龛 蝠屙溧 礤 狍溴
extern bool HorizontLine=true; // true = 蝾 狍潴 镳铕桉钼囗 箴钼龛 镳钺栩
extern bool ChannelLine=true; // true = 耱痤栩 镟疣脲朦眍 腓龛 蝠屙溧 赅磬臌 
extern bool TakeLines=true; // true = 蝾 痂耋屐 箴钼龛 蝈殛
extern bool Comments=true; // true = 狍潴 铗钺疣驵螯 觐祆屙蜞痂
extern int Trend=0; // 1 = 蝾朦觐 潆 UpTrendLines, -1 = 蝾朦觐 潆 DownTrendLines, 0 = 潆 怦艴 TrendLines
double Buf1; 
double Buf2; 
string Col={"署囫磬","谚","蓄珙忄","妙塍徉","暑痂黜邂","燕豚蝽"};
int ColNum={Red,DarkBlue,Coral,DodgerBlue,SaddleBrown,MediumSeaGreen};
int qPoint=0; // 镥疱戾眄 潆 眍痨嚯桤圉梃 鲥睇
int qBars; double qTime=0; // 镥疱戾眄 潆 腓赈桎圉梃 汶钼 镳 玎沭箸赍
int init() 
  {
   qBars=Bars;
   qSteps=MathMin(3,qSteps);
   while (NormalizeDouble(Point,qPoint)==0)qPoint++;
   int code=161; string Rem="DLines  GameOver";
   IndicatorShortName(Rem); 
   SetIndexStyle(0,DRAW_ARROW); 
   SetIndexStyle(1,DRAW_ARROW); 
   SetIndexArrow(0,code); 
   SetIndexArrow(1,code); 
   SetIndexBuffer(0,Buf1); 
   SetIndexBuffer(1,Buf2); 
   SetIndexEmptyValue(0,0.0);
   SetIndexEmptyValue(1,0.0);
   SetIndexLabel(0,Rem); 
   SetIndexLabel(1,Rem); 
   return(0);
  } 
int deinit() {
   Comment("");
   ArrayInitialize(Buf1,0.0);
   ArrayInitialize(Buf2,0.0);
   for(int i=1;i<=LevDP;i++){
      ObjectDelete("HA_"+i);ObjectDelete("LA_"+i);
      ObjectDelete("HL_"+i);ObjectDelete("LL_"+i);
      ObjectDelete("HHL_"+i);ObjectDelete("HLL_"+i);
      ObjectDelete("HCL_"+i);ObjectDelete("LCL_"+i);
      for(int j=0;j<4;j++) {ObjectDelete("HTL_"+i+j);ObjectDelete("LTL_"+i+j);}
   }
}
  
int start(){
   if (qBars!=Bars){ deinit(); Sleep(1000); qBars=Bars; qTime=0; return(0);}
   if (qTime==Time[0]) return(0); qTime=Time[0]; // 玎矬耜噱鲟 蝾赅 磬 1 蜩赍
   // 玎镱腠桦  铗钺疣玷腓 蝾麝 溴爨痍
   if (showBars==0) showBars=Bars-LevDP;
   for (int cnt=showBars;cnt>LevDP;cnt--) {
      Buf1[cnt]=DemHigh(cnt,LevDP);
      Buf2[cnt]=DemLow(cnt,LevDP);
   }
   
   string Comm;
   Comm="髓龛 蝠屙溧["+On(TrendLine)+"]; 枢磬 ["+On(ChannelLine)+
   "]; 羽钼屙 镳钺 ["+On(HorizontLine)+"]; 皱腓 ["+On(TakeLines)+"]\n";
   for(cnt=1;cnt<=qSteps;cnt++) Comm=Comm+(TDMain(cnt));
   Comm=Comm+"棗棗  GameOver 棗棗";
   if (Comments==true) Comment(Comm);
   return(0); 
}
string TDMain(int Step){
   int H1,H2,L1,L2,qExt,i,col;
   double tmp,qTL,qLevel,HT[4],LT[4];
   bool isHitch;
   string Comm="粭粭 剜 "+Step+" 桤 "+qSteps+" (BackStep "+BackStep+")\n",Text,Rem,qp;
   
   // 潆 DownTrendLines
   if (Trend<=0){
      Comm=Comm+" "+Col[Step*2-2]+" DownTrendLine ";
      col=ColNum[Step*2-2];
      H1=GetTD(Step+BackStep,Buf1);
      H2=GetNextHighTD(H1);
      qTL=(High[H2]-High[H1])/(H2-H1);
      qExt=Lowest(NULL,0,MODE_LOW,H2-H1-1,H1+1); // 腩赅朦睇 扈龛祗 戾驿 蝾麝囔
      qLevel=High[H2]-qTL*(H2); if (Step+BackStep==1) qLevel=qLevel-qTL*startBar;
      if (H1<0 || H2<0) Comm=Comm+"磬 沭圄桕 礤漕耱囹铟眍 蝾麇 潆 镱耱痤屙峸渀";
      else {
         Comm=Comm+"["+DoubleToStr(High[H2],qPoint)+""+DoubleToStr(High[H1],qPoint)+"]";
         Comm=Comm+"; Level "+DoubleToStr(qLevel,qPoint);
         if (Step+BackStep==1) {
            if (startBar>0) Comm=Comm+"; Future Bar "+UpHitch(-1,qLevel);
            else Comm=Comm+"; Last Bar "+UpHitch(startBar,qLevel);
         }
         Comm=Comm+"\n";
         // 理嚯桤 - 猁 腓 镳钺铋 蝠屙漕忸 腓龛
         i=H1;isHitch=false;Text="";
         while(i>0 && isHitch==false){
            tmp=High[H2]-qTL*(H2-i);
            Rem="HA_"+Step;
            if (High>tmp){
               qp=UpHitch(i,tmp);
               if (qp!=""){
                  isHitch=true;
                  Text=Text+"锐. "+DoubleToStr(tmp,qPoint)+" "+qp;
                  ObjectCreate(Rem,OBJ_ARROW,0,0,0,0,0);
                  ObjectSet(Rem,OBJPROP_COLOR,col);
                  ObjectSet(Rem,OBJPROP_PRICE1,Low-Point);
                  ObjectSet(Rem,OBJPROP_TIME1,Time);
                  ObjectSet(Rem,OBJPROP_ARROWCODE,241);
                  while(i>0){ // 镳钺铋 铗戾礤, 羼腓 镱耠 镳钺 猁 眍恹 腩 桦 玎牮拣 龛驽
                     i--;
                     if (Low
=0){
      Comm=Comm+" "+Col[Step*2-1]+" UpTrendLine ";
      col=ColNum[Step*2-1];
      L1=GetTD(Step+BackStep,Buf2);
      L2=GetNextLowTD(L1);
      qTL=(Low[L1]-Low[L2])/(L2-L1);
      qExt=Highest(NULL,0,MODE_HIGH,L2-L1-1,L1+1); // 腩赅朦睇 扈龛祗 戾驿 蝾麝囔
      qLevel=Low[L2]+qTL*L2; if (Step+BackStep==1) qLevel=qLevel+qTL*startBar;
      if (L1<0 || L2<0) Comm=Comm+"磬 沭圄桕 礤漕耱囹铟眍 蝾麇 潆 镱耱痤屙峸渀";
      else {
         Comm=Comm+"["+DoubleToStr(Low[L2],qPoint)+""+DoubleToStr(Low[L1],qPoint)+"]";
         Comm=Comm+"; Level "+DoubleToStr(qLevel,qPoint);
         if (Step+BackStep==1) {
            if (startBar>0) Comm=Comm+"; Future Bar "+DownHitch(-1,qLevel);
            else Comm=Comm+"; Last Bar "+DownHitch(startBar,qLevel);
         }
         Comm=Comm+"\n";
         // 理嚯桤 - 猁 腓 镳钺铋 蝠屙漕忸 腓龛
         i=L1;isHitch=false;Text="";
         while(i>0 && isHitch==false){
            tmp=Low[L2]+qTL*(L2-i);
            Rem="LA_"+Step;
            if (Low0){ // 镳钺铋 铗戾礤, 羼腓 镱耠 镳钺 猁 眍恹 踵 桦 玎牮拣 恹
                     i--;
                     if (High>High[qExt] || Close>High[qExt]-(High[qExt]-Low[L1])*0.236){
                        Text=Text+" (铗戾礤)";
                        ObjectSet(Rem,OBJPROP_PRICE1,Low-Point);
                        ObjectSet(Rem,OBJPROP_TIME1,Time);
                        ObjectSet(Rem,OBJPROP_ARROWCODE,251);
                        break;
                     }
                  }
               }
               else { Text=Text+"祟. "+DoubleToStr(tmp,qPoint)+"; "; ObjectDelete(Rem);}
            }
            i--;
         }
         if (Text=="") Text="橡钺 礤 猁腩.";
         Comm=Comm+Text+"\n";
         // end analysis
         Rem="LL_"+Step; // 耦狁眍 腓龛 蝠屙溧
         if (TrendLine==1) {
            ObjectCreate(Rem,OBJ_TREND,0,0,0,0,0);
            ObjectSet(Rem,OBJPROP_TIME1,Time[L2]);ObjectSet(Rem,OBJPROP_TIME2,Time[L1]);
            ObjectSet(Rem,OBJPROP_PRICE1,Low[L2]);ObjectSet(Rem,OBJPROP_PRICE2,Low[L1]);
            ObjectSet(Rem,OBJPROP_COLOR,col);
            ObjectSet(Rem,OBJPROP_WIDTH,3-MathMin(2,Step));
         }    
         else ObjectDelete(Rem);
         Rem="HLL_"+Step; // 箴钼屙 镳钺 腓龛 蝠屙溧
         if (HorizontLine && (Step+BackStep)==1){
            ObjectCreate(Rem,OBJ_HLINE,0,0,0,0,0);
            ObjectSet(Rem,OBJPROP_PRICE1,qLevel);
            ObjectSet(Rem,OBJPROP_COLOR,col);
         }
         else ObjectDelete(Rem);
         Rem="LCL_"+Step; // 腓龛 赅磬豚
         if (ChannelLine){
            ObjectCreate(Rem,OBJ_TREND,0,0,0,0,0);
            ObjectSet(Rem,OBJPROP_TIME1,Time[qExt]);ObjectSet(Rem,OBJPROP_TIME2,Time[0]);
            ObjectSet(Rem,OBJPROP_PRICE1,High[qExt]);ObjectSet(Rem,OBJPROP_PRICE2,High[qExt]+qTL*qExt);
            ObjectSet(Rem,OBJPROP_COLOR,col);
         }
         else ObjectDelete(Rem);
         Rem="LTL_"+Step;
         if (TakeLines){ // 腓龛 鲥脲
            LT[3]=qLevel-High[qExt]+(High[qExt]-Low[L1])*1.618; // 漕 箴钼屙
            LT[0]=High[qExt]-qTL*(L2-qExt)-Low[L2];
            LT[1]=Close[qExt]-qTL*(L2-qExt)-Low[L2];
            qExt=Highest(NULL,0,MODE_CLOSE,L2-L1,L1);
            LT[2]=Close[qExt]-qTL*(L2-qExt)-Low[L2];
            Comm=Comm+"皱腓: ";
            for(i=0;i<4;i++){
               qTL=NormalizeDouble(qLevel-LT,qPoint);
               ObjectCreate(Rem+i,OBJ_HLINE,0,0,0,0,0);
               ObjectSet(Rem+i,OBJPROP_PRICE1,qTL);
               ObjectSet(Rem+i,OBJPROP_STYLE,STYLE_DOT);
               ObjectSet(Rem+i,OBJPROP_COLOR,col);
               Comm=Comm+DoubleToStr(qTL,qPoint)+" ("+DoubleToStr(LT/Point,0)+".) ";
             }
            Comm=Comm+"\n";
         }
         else {
            for(i=0;i<4;i++) ObjectDelete(Rem+i);
         }
      }
   }
   return(Comm);
}
int GetTD(int P, double Arr){
   int i=0,j=0;
   while(jshowBars-2)return(-1);} j++;}
   return (i);         
}
int GetNextHighTD(int P){ 
   int i=P+1;
   while(Buf1<=High[P]){i++;if(i>showBars-2)return(-1);}
   return (i);
}
int GetNextLowTD(int P){
   int i=P+1;
   while(Buf2>=Low[P] || Buf2==0){i++;if(i>showBars-2)return(-1);}
   return (i);
}
// 疱牦瘃桠磬 镳钼屦赅 磬 篑腩忤 腻爨痍 (踵), 忸玮疣弪 珥圜屙桢 桦 0
double DemHigh(int cnt, int sh){
   if (High[cnt]>=High[cnt+sh] && High[cnt]>High[cnt-sh]) {
      if (sh>1) return(DemHigh(cnt,sh-1));
      else return(High[cnt]);
   }
   else return(0);
}
// 疱牦瘃桠磬 镳钼屦赅 磬 篑腩忤 腻爨痍 (腩), 忸玮疣弪 珥圜屙桢 桦 0
double DemLow(int cnt, int sh){
   if (Low[cnt]<=Low[cnt+sh] && Low[cnt]1) return(DemLow(cnt,sh-1));
      else return(Low[cnt]);
   }
   else return(0);
}
string On(bool On){
   if (On) return("玛"); else return("蔓觌");
}
string UpHitch(int P, double qLevel){ // 铒疱溴脲龛 赈嚯梏桕囹铕钼 镳铕 忖屦
   string Comm="";
   if (Close[P+1]=0 && Open[P]>qLevel) Comm=Comm+" 2";
   if (2*Close[P+1]-Low[P+1]Close[P+2]) Comm=Comm+" 1";
   if (P>=0 && Open[P]qLevel) Comm=Comm+" 3";
   if (Comm!="") Comm="[ 殊.橡:"+Comm+" ]";
   return(Comm);
}
 Demark_trend_alert_and_mail.jpg
Demark_trend_alert_and_mail.jpg