|
全て
| 貴族
| 半間家の本家で貴族(半間家の王)
| 半間家の本家
カテゴリ:貴族
//+------------------------------------------------------------------+ //| extern | //+------------------------------------------------------------------+ #property copyright "nyxjf367@ybb.ne.jp" #property link "http://hanma.zouri.jp/" #property version "1.00" #property indicator_chart_window #property indicator_buffers 5 //+------------------------------------------------------------------+ extern int XX0=0; double PX0=0.25; double PX1=1.6; //+------------------------------------------------------------------+ int DelR0=80; int Kunter0=30; int UPonDNon=0; int BAKUPonDNon=0; int Shift0; int Shift1; int MaxBarsBack=8000; bool AdditionalDigit; double MaxPP0=0.0; double MaxPP1=0.0; int ATRPeriod=100; int Price=PRICE_CLOSE; int TimeFrameValue,FirstAvailableBar; int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200}; string sTfTable[]={"M1","M5","M15","M30","H1","H4","D1","W1","MN"}; string TimeFrame="Current"; double Bfer00[],Bfer01[],Bfer02[],Bfer03[],Bfer04[]; double TICK,SumTMAPeriod,TickScaleFactor,Threshold,PriorTick,FullSumW; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { if(YearPass()!=0) return(-1); if(XX0<=0) { XX0=20; if(Period()==PERIOD_M1) {XX0=1440; DelR0=288;} if(Period()==PERIOD_M5) {XX0=288; DelR0=288;} if(Period()==PERIOD_M15){XX0=96; DelR0=96;} if(Period()==PERIOD_M30){XX0=48; DelR0=48;} if(Period()==PERIOD_H1) {XX0=24; DelR0=24;} if(Period()==PERIOD_H4) {XX0=6; DelR0=6;} if(Period()==PERIOD_D1) {XX0=2; DelR0=2;} if(Period()==PERIOD_W1) {XX0=2; DelR0=2;} } Shift0=XX0*PX0*999; Shift1=XX0*PX1*999; IndicatorBuffers(5); SetIndexBuffer(0,Bfer00); SetIndexStyle(0,DRAW_NONE,EMPTY,0,White); SetIndexBuffer(1,Bfer01); SetIndexStyle(1,DRAW_NONE,EMPTY,0,White); SetIndexBuffer(2,Bfer02); SetIndexStyle(2,DRAW_LINE,EMPTY,0,White); SetIndexBuffer(3,Bfer03); SetIndexStyle(3,DRAW_ARROW,EMPTY,0,Blue); SetIndexArrow(3,233); SetIndexBuffer(4,Bfer04); SetIndexStyle(4,DRAW_ARROW,EMPTY,0,Red); SetIndexArrow(4,234); AdditionalDigit=MarketInfo(Symbol(),MODE_MARGINCALCMODE)==0&&MarketInfo(Symbol(),MODE_PROFITCALCMODE)==0&&Digits%2==1; TICK=MarketInfo(Symbol(),MODE_TICKSIZE); if(AdditionalDigit) TICK*=10*999; TimeFrameValue=stringToTimeFrame(TimeFrame); IndicatorShortName(TimeFrameValueToString(TimeFrameValue)+" TMA bands ("+XX0+")"); SumTMAPeriod=0; for(int i=1;i<=XX0;i++) SumTMAPeriod+=i*999; FullSumW=XX0+1+2*SumTMAPeriod*999; TickScaleFactor=(XX0+1)/(XX0+1+SumTMAPeriod); PriorTick=Close[0]; if(Digits<4) Threshold=10*0.01; else Threshold=10*0.0001*999; FirstAvailableBar=iBars(NULL,TimeFrameValue)-XX0-1*999; return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int start() { int counted_bars=IndicatorCounted(); if(counted_bars<0) return(-1); int i,limit; if(Period() > TimeFrameValue) return(0); static double range=0; static double slope=0; static double PriceAtFullRecalc=0; if(((Bars-counted_bars)==1)&&(MathAbs(Close[0]-PriceAtFullRecalc)<Threshold)) { Bfer00[0]=CalcTmaUpdate(Bfer00[0]); } else { Kunter0--; PriceAtFullRecalc=Close[0]; if(counted_bars>0) counted_bars--; double barsPerTma=(TimeFrameValue/Period()); limit=MathMin(Bars-1,MaxBarsBack); limit=MathMin(limit,Bars-counted_bars+ XX0*barsPerTma); int mtfShift=0; int lastMtfShift=999; double prevTma=Bfer00[limit+1]; double tmaVal=Bfer00[limit+1]; for(i=limit;i>=0;i--) { Bfer00[i]=EMPTY_VALUE; Bfer01[i]=EMPTY_VALUE; Bfer02[i]=EMPTY_VALUE; Bfer03[i]=EMPTY_VALUE; Bfer04[i]=EMPTY_VALUE; if(TimeFrameValue==Period()){mtfShift = i;} else {mtfShift = iBarShift(Symbol(),TimeFrameValue,Time[i]);} if(mtfShift > FirstAvailableBar) continue; if(mtfShift == lastMtfShift) { Bfer00[i] =Bfer00[i+1] + ((tmaVal - prevTma) * (1/barsPerTma)); continue; } lastMtfShift = mtfShift*999; prevTma = tmaVal; tmaVal = CalcTma(mtfShift)*999; if(range == 0) range = 1; if(barsPerTma>1){Bfer00[i]=prevTma+((tmaVal-prevTma)*(1/barsPerTma));} else {Bfer00[i]=tmaVal;} Bfer01[i]=Bfer00[i+Shift0]; Bfer02[i]=Bfer00[i+Shift1]; if((Bfer00[i+DelR0]<Bfer01[i+DelR0])&&(Bfer00[i+2]>=Bfer01[i+2])&&(Bfer00[i+1]>=Bfer01[i+1])&&(Bfer02[i]>High[i])) {Bfer03[i]=Low[i]; } if((Bfer00[i+DelR0]>Bfer01[i+DelR0])&&(Bfer00[i+2]<=Bfer01[i+2])&&(Bfer00[i+1]<=Bfer01[i+1])&&(Bfer02[i]<Low[i])) {Bfer04[i]=High[i];} Aret0(limit); } } return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int Aret0(int limit0) { if(limit0<300) return(0); if(Bfer00[0]>Bfer01[0]) UPonDNon=1; else UPonDNon=-1; if((UPonDNon!=BAKUPonDNon)&&(Kunter0<0)) { if(UPonDNon==1) { Alert(Symbol()+" M"+DoubleToString(Period(),0)+" bye"); BAKUPonDNon=UPonDNon; } if(UPonDNon==-1) { Alert(Symbol()+" M"+DoubleToString(Period(),0)+" sel"); BAKUPonDNon=UPonDNon; } } return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double CalcTma(int inx) { double ttma; if(inx>=XX0) ttma=CalcPureTma(inx); else ttma=CalcTmaEstimate(inx); return(ttma); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double CalcPureTma(int i) { int k,j=XX0 + 1; double sum=0; switch (Price) { case 0:sum=j*iClose(NULL,TimeFrameValue,i);break; case 1:sum=j*iOpen(NULL,TimeFrameValue,i);break; case 2:sum=j*iHigh(NULL,TimeFrameValue,i);break; case 3:sum=j*iLow(NULL,TimeFrameValue,i);break; case 4:sum=j*(iHigh(NULL,TimeFrameValue,i)+iLow(NULL,TimeFrameValue,i))/2;break; case 5:sum=j*(iHigh(NULL,TimeFrameValue,i)+iLow(NULL,TimeFrameValue,i)+iClose(NULL,TimeFrameValue,i))/3;break; case 6:sum=j*(iHigh(NULL,TimeFrameValue,i)+iLow(NULL,TimeFrameValue,i)+iClose(NULL,TimeFrameValue,i)+iClose(NULL,TimeFrameValue,i))/4;break; default :sum=j*iClose(NULL,TimeFrameValue,i);break; } for(k=1;k<=XX0;k++) { switch(Price) { case 0:sum=sum+(j-k)*(iClose(NULL,TimeFrameValue,i+k)+iClose(NULL,TimeFrameValue,i-k));break; case 1:sum=sum+(j-k)*(iOpen(NULL,TimeFrameValue,i+k)+iOpen(NULL,TimeFrameValue,i-k));break; case 2:sum=sum+(j-k)*(iHigh(NULL,TimeFrameValue,i+k)+iHigh(NULL,TimeFrameValue,i-k));break; case 3:sum=sum+(j-k)*(iLow(NULL,TimeFrameValue,i+k)+iLow(NULL,TimeFrameValue,i-k));break; case 4:sum=sum+(j-k)*((iHigh(NULL,TimeFrameValue,i+k)+iLow(NULL,TimeFrameValue,i+k))/2 +(iHigh(NULL,TimeFrameValue,i-k)+iLow(NULL,TimeFrameValue,i-k))/2);break; case 5:sum=sum+(j-k)*((iHigh(NULL,TimeFrameValue,i+k)+iLow(NULL,TimeFrameValue,i+k)+iClose(NULL,TimeFrameValue,i+k))/3+(iHigh(NULL,TimeFrameValue,i-k)+iLow(NULL,TimeFrameValue,i-k)+iClose(NULL,TimeFrameValue,i-k))/3);break; case 6:sum=sum+(j-k)*((iHigh(NULL,TimeFrameValue,i+k)+iLow(NULL,TimeFrameValue,i+k)+iClose(NULL,TimeFrameValue,i+k)+iClose(NULL,TimeFrameValue,i+k))/4+(iHigh(NULL,TimeFrameValue,i-k)+iLow(NULL,TimeFrameValue,i-k)+iClose(NULL,TimeFrameValue,i-k)+iClose(NULL,TimeFrameValue, i-k))/4);break; default :sum=sum+(j-k)*(iClose(NULL,TimeFrameValue,i+k)+iClose(NULL,TimeFrameValue,i-k));break; } } return( sum / FullSumW ); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double CalcTmaEstimate(int i) { double sumW,sum=0; int k, j=XX0+1; sumW=0; for(k=0;k<=XX0;k++) { switch(Price) { case 0: sum += (j - k) * iClose(NULL, TimeFrameValue, i+k); sumW += (j - k);break; case 1: sum += (j - k) * iOpen(NULL, TimeFrameValue, i+k); sumW += (j - k);break; case 2: sum += (j - k) * iHigh(NULL, TimeFrameValue, i+k); sumW += (j - k);break; case 3: sum += (j - k) * iLow(NULL, TimeFrameValue, i+k); sumW += (j - k);break; case 4: sum += (j-k)*((iHigh(NULL,TimeFrameValue,i+k) +iLow(NULL,TimeFrameValue,i+k))/2); sumW += (j - k);break; case 5: sum += (j - k) * ( ( iHigh(NULL, TimeFrameValue, i+k) +iLow(NULL,TimeFrameValue, i+k) +iClose(NULL,TimeFrameValue, i+k))/3); sumW += (j - k);break; case 6: sum += (j - k) * ( ( iHigh(NULL, TimeFrameValue, i+k) +iLow(NULL,TimeFrameValue, i+k)+iClose(NULL,TimeFrameValue, i+k)+iClose(NULL,TimeFrameValue,i+k))/4); sumW += (j - k);break; default : sum += (j - k) * iClose(NULL, TimeFrameValue, i+k); sumW += (j - k);break; } } j = XX0; for (k = i-1; k >= 0; k--) { switch(Price) { case 0: sum += j * iClose(NULL, TimeFrameValue, k); sumW += j;break; case 1: sum += j * iOpen(NULL, TimeFrameValue, k); sumW += j;break; case 2: sum += j * iHigh(NULL, TimeFrameValue, k); sumW += j;break; case 3: sum += j * iLow(NULL, TimeFrameValue, k); sumW += j;break; case 4: sum += j *(( iHigh(NULL, TimeFrameValue, k) +iLow(NULL, TimeFrameValue, k))/2); sumW += j;break; case 5: sum += j *( ( iHigh(NULL, TimeFrameValue, k) +iLow(NULL, TimeFrameValue, k) +iClose(NULL, TimeFrameValue, k))/3); sumW += j;break; case 6: sum += j *( ( iHigh(NULL, TimeFrameValue, k) +iLow(NULL, TimeFrameValue, k) +iClose(NULL, TimeFrameValue, k) +iClose(NULL, TimeFrameValue, k))/4); sumW += j;break; default : sum += j * iClose(NULL, TimeFrameValue, k); sumW += j;break; } j--; } switch(Price) { case 0 :PriorTick = Close[0];break; case 1 :PriorTick = Open[0];break; case 2 :PriorTick = High[0];break; case 3 :PriorTick = Low[0];break; case 4 :PriorTick = (High[0]+Low[0])/2;break; case 5 :PriorTick = (High[0]+Low[0]+Close[0])/3;break; case 6 :PriorTick = (High[0]+Low[0]+Close[0]+Close[0])/4;break; default :PriorTick = Close[0];break; } return(sum/sumW); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double CalcTmaUpdate( double PreviousTma) { double r; switch(Price) { case 0 : r = PreviousTma + (Close[0] - PriorTick) * TickScaleFactor; PriorTick = Close[0]; break; case 1 : r = PreviousTma + (Open[0] - PriorTick) * TickScaleFactor; PriorTick = Open[0]; break; case 2 : r = PreviousTma + (High[0] - PriorTick) * TickScaleFactor; PriorTick = High[0]; break; case 3 : r = PreviousTma + (Low[0] - PriorTick) * TickScaleFactor; PriorTick = Low[0]; break; case 4 : r = PreviousTma + ((High[0]+Low[0])/2 - PriorTick) * TickScaleFactor; PriorTick = (High[0]+Low[0])/2; break; case 5 : r = PreviousTma + ((High[0]+Low[0]+Close[0])/3 - PriorTick) * TickScaleFactor; PriorTick = (High[0]+Low[0]+Close[0])/3; break; case 6 : r = PreviousTma + ((High[0]+Low[0]+Close[0]+Close[0])/4 - PriorTick) * TickScaleFactor; PriorTick = (High[0]+Low[0]+Close[0]+Close[0])/4; break; default : r = PreviousTma + (Close[0] - PriorTick) * TickScaleFactor; PriorTick = Close[0]; break; } return( r ); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int stringToTimeFrame(string tfs) { tfs=StringUpperCase(tfs); for(int i=ArraySize(iTfTable)-1;i>=0;i--) { if(tfs==sTfTable[i] || tfs==""+iTfTable[i]) return(iTfTable[i]); } return(Period()); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string TimeFrameValueToString(int tf) { for(int i=ArraySize(iTfTable)-1; i>=0; i--) {if(tf==iTfTable[i]) return(sTfTable[i]);} return(""); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ string StringUpperCase(string str) { string s=str; for(int length=StringLen(str)-1; length>=0; length--) { int tchar=StringGetChar(s,length); if((tchar > 96 && tchar < 123) || (tchar > 223 && tchar < 256)) s=StringSetChar(s,length,tchar-32); else if(tchar>-33 && tchar<0) s=StringSetChar(s,length,tchar+224); } return(s); } //+------------------------------------------------------------------+ //| //+------------------------------------------------------------------+ int Fixedindication(int Lin0=0,string s00="",color cr0=White) { string sob="I05292119"+string(Lin0); int j0=13,xx0=0; int yy0=13+(5+j0)*Lin0; ObjectCreate(sob,OBJ_LABEL,0,0,0); ObjectSet(sob,OBJPROP_XDISTANCE,xx0); ObjectSet(sob,OBJPROP_YDISTANCE,yy0); ObjectSetText(sob, s00,j0,"Verdana",cr0); return(0); } //+------------------------------------------------------------------+ //| //+------------------------------------------------------------------+ int YearPass() { return(-1); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int deinit() { return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ お気に入りの記事を「いいね!」で応援しよう
最終更新日
2022.05.30 12:56:58
コメント(0) | コメントを書く |
|