|
全て
| 貴族
| 半間家の本家で貴族(半間家の王)
| 半間家の本家
カテゴリ:貴族
//+------------------------------------------------------------------+ //| extern | //+------------------------------------------------------------------+ #property copyright "nyxjf367@ybb.ne.jp" #property link "http://hanma.zouri.jp/" #property version "1.00" #property indicator_chart_window #property indicator_buffers 2 //+------------------------------------------------------------------+ extern int Periods0=60; int MaxBarsBack=6*20*12; //+------------------------------------------------------------------+ bool AdditionalDigit; 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[]; double TICK,SumTMAPeriod,TickScaleFactor,Threshold,PriorTick,FullSumW; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int init() { IndicatorBuffers(2); SetIndexBuffer(0,Bfer00); SetIndexStyle(0,DRAW_LINE,EMPTY,2,White); SetIndexBuffer(1,Bfer01); SetIndexStyle(1,DRAW_LINE,EMPTY,2,White); AdditionalDigit=MarketInfo(Symbol(),MODE_MARGINCALCMODE)==0&&MarketInfo(Symbol(),MODE_PROFITCALCMODE)==0&&Digits%2==1; TICK=MarketInfo(Symbol(),MODE_TICKSIZE); if(AdditionalDigit) TICK*=10; TimeFrameValue=stringToTimeFrame(TimeFrame); IndicatorShortName(TimeFrameValueToString(TimeFrameValue)+" TMA bands ("+Periods0+")"); SumTMAPeriod=0; for(int i=1;i<=Periods0;i++) SumTMAPeriod+=i; FullSumW=Periods0+1+2*SumTMAPeriod; TickScaleFactor=(Periods0+1)/(Periods0+1+SumTMAPeriod); PriorTick=Close[0]; if(Digits<4) Threshold=10*0.01; else Threshold=10*0.0001; FirstAvailableBar=iBars(NULL,TimeFrameValue)-Periods0-1; 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 { PriceAtFullRecalc=Close[0]; if(counted_bars>0) counted_bars--; double barsPerTma=(TimeFrameValue/Period()); limit=MathMin(Bars-1,MaxBarsBack); limit=MathMin(limit,Bars-counted_bars+ Periods0*barsPerTma); int mtfShift=0; int lastMtfShift=999; double prevTma=Bfer00[limit+1]; double tmaVal=Bfer00[limit+1]; for(i=limit;i>=0;i--) { 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; prevTma = tmaVal; tmaVal = CalcTma(mtfShift); if(range == 0) range = 1; if(barsPerTma>1){Bfer00[i]=prevTma+((tmaVal-prevTma)*(1/barsPerTma));} else {Bfer00[i]=tmaVal;} Bfer01[i]=Bfer00[i+Periods0]; } } return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double CalcTma(int inx) { double ttma; if(inx>=Periods0) ttma=CalcPureTma(inx); else ttma=CalcTmaEstimate(inx); return(ttma); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double CalcPureTma(int i) { int k,j=Periods0 + 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<=Periods0;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=Periods0+1; sumW=0; for(k=0;k<=Periods0;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 = Periods0; 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 deinit() { return(0); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+
お気に入りの記事を「いいね!」で応援しよう
最終更新日
2022.05.24 03:53:26
コメント(0) | コメントを書く |
|