主图指标
mt4指标类型:趋势指标
是否能用在mt4手机版上:否
是否含有未来函数:无
[list=1]
[*]
[/list]//------------------------------------------------------------------/
// 软滂赅蝾?-耦忮蝽桕, 铖眍忄睇? 磬 蝈铕梃 腻爨痍? ? 祛桁? 漕镱腠屙??扈
// 奏耱? 桎彖 忡?蜞 桤 桧滂赅蝾疣 demark指标3-1.mq4 [Kara
//------------------------------------------------------------------/
#property copyright "GreenDog"
#property link "
[email protected]" // v2.3.1
#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=false; // true = 蝾 狍潴? 镳铕桉钼囗? 箴钼龛 镳钺??
extern bool ChannelLine=true; // true = 耱痤栩? 镟疣脲朦眍 腓龛?? 蝠屙溧 赅磬臌
extern bool TakeLines=true; // true = 蝾 痂耋屐 箴钼龛 蝈殛?
extern int Trend=0; // 1 = 蝾朦觐 潆? UpTrendLines, -1 = 蝾朦觐 潆? DownTrendLines, 0 = 潆? 怦艴 TrendLines
double Buf1;
double Buf2;
string Col[6]={"署囫磬?","谚???","蓄珙忄?","妙塍徉?","暑痂黜邂??","燕豚蝽??"};
int ColNum[6]={Red,DarkBlue,Coral,DodgerBlue,SaddleBrown,MediumSeaGreen};
int qBars; double qTime=0; // 镥疱戾眄 潆? 腓赈桎圉梃 汶 钼 镳? 玎沭箸赍
int init()
{
qBars=Bars;
qSteps=MathMin(3,qSteps);
int code=161; string Rem="DemarkLines ? 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(); Comment("Demark, 忮瘃?? ? GameOver\n项漕驿栩?, 桎弪 玎沭箸赅 徉痤?...");
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 棗棗";
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+"磬 沭圄桕? 礤漕耱囹铟眍 蝾麇? 潆? 镱耱痤屙??\n";
else {
Comm=Comm+"["+DoubleToStr(High[H2],Digits)+"?"+DoubleToStr(High[H1],Digits)+"]";
Comm=Comm+"; Level "+DoubleToStr(qLevel,Digits);
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,Digits)+") "+qp;
ObjectCreate(Rem,OBJ_ARROW,0,Time,Low-Point);
ObjectSet(Rem,OBJPROP_COLOR,col); 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+"磬 沭圄桕? 礤漕耱囹铟眍 蝾麇? 潆? 镱耱痤屙??\n";
else {
Comm=Comm+"["+DoubleToStr(Low[L2],Digits)+"?"+DoubleToStr(Low[L1],Digits)+"]";
Comm=Comm+"; Level "+DoubleToStr(qLevel,Digits);
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,Digits)+"); "; ObjectDelete(Rem);}
}
i--;
}
if (Text=="") Text="橡钺?? 礤 猁腩.";
Comm=Comm+Text+"\n";
// end analysis
Rem="LL_"+Step; // 耦狁眍 腓龛? 蝠屙溧
if (TrendLine==1) {
ObjectCreate(Rem,OBJ_TREND,0,Time[L2],Low[L2],Time[L1],Low[L1]);
ObjectSet(Rem,OBJPROP_COLOR,col); ObjectSet(Rem,OBJPROP_WIDTH,3-MathMin(2,Step));
}
Rem="HLL_"+Step; // 箴钼屙? 镳钺?? 腓龛? 蝠屙溧
if (HorizontLine && (Step+BackStep)==1){
ObjectCreate(Rem,OBJ_HLINE,0,0,qLevel);
ObjectSet(Rem,OBJPROP_COLOR,col);
}
Rem="LCL_"+Step; // 腓龛? 赅磬豚
if (ChannelLine){
ObjectCreate(Rem,OBJ_TREND,0,Time[qExt],High[qExt],Time[0],High[qExt]+qTL*qExt);
ObjectSet(Rem,OBJPROP_COLOR,col);
}
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,Digits);
ObjectCreate(Rem+i,OBJ_HLINE,0,0,qTL,0,0);
ObjectSet(Rem+i,OBJPROP_STYLE,STYLE_DOT); ObjectSet(Rem+i,OBJPROP_COLOR,col);
Comm=Comm+DoubleToStr(qTL,Digits)+" ("+DoubleToStr(LT/Point,0)+"?.) ";
}
Comm=Comm+"\n";
}
}
}
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.jpg