インジケータ
//+------------------------------------------------------------------+//| //+------------------------------------------------------------------+#property copyright "nyxjf@ybb.ne.jp"#property link "http://hanma.zouri.jp/"#property version "1.00" #property indicator_chart_window#property indicator_buffers 7//+------------------------------------------------------------------+extern string PassNeme="IwaoHanma";int X0=400;int Xp0=20;//+------------------------------------------------------------------+int HH00=0;int HH01=5;int HH02=0;int XXXXX0;double BandsDeviations=2.618;double koeff=0.0005;bool Interpolate=false;bool alertsOnCurrent=0;bool alertsOnHighLow=0;//+------------------------------------------------------------------+string IndicatorFileName;bool calculatingTma=false;bool returningBars=false;int timeFrame;int c1=0,c2=0;double bufr0[],bufr1[],bufr2[],bufr3[],bufr4[],bufr5[],bufr6[];double MM0=0,MaxLot0=0;string sTfTable[] = {"M1","M5","M15","M30","H1","H4","D1","W1","MN"};int iTfTable[] = {1,5,15,30,60,240,1440,10080,43200};//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int init(){ if(PassNeme=="IwaoHanma") PassNeme="0"; timeFrame=stringToTimeFrame(PassNeme); XXXXX0=MathMax(X0,1); IndicatorBuffers(7); if(X0==25) { SetIndexBuffer(0,bufr0); SetIndexStyle(0,DRAW_LINE,EMPTY,HH01,Red); SetIndexBuffer(1,bufr1); SetIndexStyle(1,DRAW_LINE,EMPTY,HH02,White); SetIndexBuffer(2,bufr2); SetIndexStyle(2,DRAW_LINE,EMPTY,HH02,White); } else { SetIndexBuffer(0,bufr0); SetIndexStyle(0,DRAW_NONE,EMPTY,HH01,Red); SetIndexBuffer(1,bufr1); SetIndexStyle(1,DRAW_NONE,EMPTY,HH02,White); SetIndexBuffer(2,bufr2); SetIndexStyle(2,DRAW_NONE,EMPTY,HH02,White); } if(X0==400) { SetIndexBuffer(1,bufr1); SetIndexStyle(1,DRAW_LINE,EMPTY,2,clrAqua); SetIndexBuffer(2,bufr2); SetIndexStyle(2,DRAW_LINE,EMPTY,2,clrAqua); SetIndexBuffer(3,bufr3); SetIndexStyle(3,DRAW_ARROW,EMPTY,HH00,White); SetIndexArrow(3,233); SetIndexBuffer(4,bufr4); SetIndexStyle(4,DRAW_ARROW,EMPTY,HH00,White); SetIndexArrow(4,234); } else { SetIndexBuffer(3,bufr3); SetIndexStyle(3,DRAW_NONE,EMPTY,HH00,White); SetIndexArrow(3,233); SetIndexBuffer(4,bufr4); SetIndexStyle(4,DRAW_NONE,EMPTY,HH00,White); SetIndexArrow(4,234); } SetIndexBuffer(5,bufr5); SetIndexStyle(5,DRAW_NONE,EMPTY,HH00,White); SetIndexBuffer(6,bufr6); SetIndexStyle(6,DRAW_NONE,EMPTY,HH00,White); if(X0==400) SetIndexBuffer(5,bufr5); SetIndexStyle(5,DRAW_LINE,EMPTY,HH01,Red); if(PassNeme=="calculateTma") { calculatingTma=true; return(0); } if(PassNeme=="returnBars") { returningBars=true; return(0); } IndicatorFileName=WindowExpertName(); Fixedindication(0,"",White); Fixedindication(1,"",White); return(0);}//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+int start(){ Hyouji(); int counted_bars=IndicatorCounted(); int i,limit; if(counted_bars<0) return(-1); if(counted_bars>0) counted_bars--; limit=MathMin(Bars-1,Bars-counted_bars+XXXXX0); if(returningBars) { bufr0[0] = limit; return(0); } if(calculatingTma) { calculateTma(limit); return(0); } limit=limit/10; if(timeFrame>Period()) limit=MathMax(limit,MathMin(Bars-1,iCustom(NULL,timeFrame,IndicatorFileName,"returnBars",0,0)*timeFrame/Period())); for(i=limit; i>=0; i--) { int shift1 = iBarShift(NULL,timeFrame,Time[i]); datetime time1 = iTime (NULL,timeFrame,shift1); bufr0[i] = iCustom(NULL,timeFrame,IndicatorFileName,"calculateTma",XXXXX0,PRICE_CLOSE,BandsDeviations,0,shift1); bufr1[i] = iCustom(NULL,timeFrame,IndicatorFileName,"calculateTma",XXXXX0,PRICE_CLOSE,BandsDeviations,1,shift1); bufr2[i] = iCustom(NULL,timeFrame,IndicatorFileName,"calculateTma",XXXXX0,PRICE_CLOSE,BandsDeviations,2,shift1); bufr4[i] = EMPTY_VALUE; bufr3[i] = EMPTY_VALUE; if(High[i+1]>bufr1[i+1] && Close[i+1]>Open[i+1] && Close[i]<Open[i]) bufr4[i] = High[i]+iATR(NULL,0,20,i)+koeff; if( Low[i+1]<bufr2[i+1] && Close[i+1]<Open[i+1] && Close[i]>Open[i]) bufr3[i] = Low[i]-iATR(NULL,0,20,i)-koeff; if(timeFrame<=Period() || shift1==iBarShift(NULL,timeFrame,Time[i-1])) continue; if(!Interpolate) continue; for(int n=1; i+n<Bars && Time[i+n]>=time1; n++) continue; double factor=1.0/n; for(int k=1; k<n; k++) { bufr0[i+k] = k*factor*bufr0[i+n] + (1.0-k*factor)*bufr0[i]; bufr1[i+k] = k*factor*bufr1[i+n] + (1.0-k*factor)*bufr1[i]; bufr2[i+k] = k*factor*bufr2[i+n] + (1.0-k*factor)*bufr2[i]; } } if(alertsOnCurrent) int forBar = 0; else forBar = 1; if(alertsOnHighLow) { if(High[forBar]>bufr1[forBar] && High[forBar+1]<bufr1[forBar+1]) doAlert("high penetrated upper bar"); if(Low[forBar]<bufr2[forBar] && Low[forBar+1]>bufr2[forBar+1]) doAlert("low penetrated lower bar"); } else { if(Close[forBar]>bufr1[forBar] && Close[forBar+1]<bufr1[forBar+1]) doAlert("close penetrated upper bar"); if(Close[forBar]<bufr2[forBar] && Close[forBar+1]>bufr2[forBar+1]) doAlert("close penetrated lower bar"); } if(X0==400) { for(i=limit; i>=0; i--) { bufr5[i]=iMA(NULL,0,Xp0,0,MODE_SMMA,PRICE_MEDIAN,i); } } return(0);}//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void calculateTma(int limit){ int i,j,k; double FullLength=2.0*XXXXX0+1.0; for(i=limit; i>=0; i--) { double sum = (XXXXX0+1)*iMA(NULL,0,1,0,MODE_SMA,PRICE_CLOSE,i); double sumw = (XXXXX0+1); for(j=1,k=XXXXX0; j<=XXXXX0; j++,k--) { sum += k*iMA(NULL,0,1,0,MODE_SMA,PRICE_CLOSE,i+j); sumw += k; if(j<=i) { sum += k*iMA(NULL,0,1,0,MODE_SMA,PRICE_CLOSE,i-j); sumw += k; } } bufr0[i]=sum/sumw; double diff=iMA(NULL,0,1,0,MODE_SMA,PRICE_CLOSE,i)-bufr0[i]; if(i>(Bars-XXXXX0-1)) continue; if(i==(Bars-XXXXX0-1)) { bufr1[i] = bufr0[i]; bufr2[i] = bufr0[i]; if(diff>=0) { bufr5[i] = MathPow(diff,2); bufr6[i] = 0; } else { bufr6[i] = MathPow(diff,2); bufr5[i] = 0; } continue; } if(diff>=0) { bufr5[i] = (bufr5[i+1]*(FullLength-1)+MathPow(diff,2))/FullLength; bufr6[i] = bufr6[i+1]*(FullLength-1)/FullLength; } else { bufr6[i] = (bufr6[i+1]*(FullLength-1)+MathPow(diff,2))/FullLength; bufr5[i] = bufr5[i+1]*(FullLength-1)/FullLength; } bufr1[i] = bufr0[i] + BandsDeviations*MathSqrt(bufr5[i]); bufr2[i] = bufr0[i] - BandsDeviations*MathSqrt(bufr6[i]); }}//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void doAlert(string doWhat){ static string previousAlert=""; static datetime previousTime; if(previousAlert!=doWhat || previousTime!=Time[0]) { previousAlert = doWhat; previousTime = Time[0]; Alert(Symbol()+" M"+DoubleToString(Period(),0)+" sel bye"); } }//-------------------------------------------------------------------////-------------------------------------------------------------------int stringToTimeFrame(string tfs) { StringToUpper(tfs); for(int i=ArraySize(iTfTable)-1; i>=0; i--) if(tfs==sTfTable[i] || tfs==""+iTfTable[i]) return(MathMax(iTfTable[i],Period())); return(Period());}//+------------------------------------------------------------------+//|//+------------------------------------------------------------------+double mPRG0_lot() { MM0=0; MaxLot0=0; c1=0; c2=0; int total=OrdersTotal(),i=0; if(total>0) { for(i=0; i<total; i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { c1++; MM0=MM0+OrderProfit(); MaxLot0=MaxLot0+OrderLots(); } if(OrderType()==OP_SELL) { c2++; MM0=MM0+OrderProfit(); MaxLot0=MaxLot0+OrderLots(); } } } } } return(MaxLot0);}//+------------------------------------------------------------------+//|//+------------------------------------------------------------------+int Hyouji(){ color cr00=White; mPRG0_lot(); double SP00=MarketInfo(Symbol(),MODE_SPREAD); double ID0=AccountEquity(); double ID1=AccountProfit(); datetime TimeTo=PeriodSeconds()-(TimeCurrent()-Time[0]); string Out=StringFormat("%.2d",TimeSeconds(TimeTo)); if(TimeTo>=3600) { Out=StringFormat("%.2d:%s",TimeMinute(TimeTo),Out); if(TimeTo>=86400) Out=StringFormat("%d day(s) %.2d:%s",int(TimeTo/86400),TimeHour(TimeTo),Out); else Out=StringFormat("%d:%s",TimeHour(TimeTo),Out); } else Out=StringFormat("%d:%s",TimeMinute(TimeTo),Out); if(MM0<0) cr00=Red; Fixedindication(0,Out+":"+DoubleToString(ID0,0)+","+DoubleToString(ID1,0)+","+DoubleToString(MM0,0)+","+DoubleToString(MaxLot0,2)+"Lot"+","+DoubleToString(SP00,0)+"pips",cr00); return(0);}//+------------------------------------------------------------------+//|//+------------------------------------------------------------------+int Fixedindication(int Lin0=0,string s00="",color cr0=White){ string sob="I53091504"+string(Lin0); int j0=16,xATR0=0; int yy0=13+(5+j0)*Lin0; ObjectCreate(sob,OBJ_LABEL,0,0,0); ObjectSet(sob,OBJPROP_XDISTANCE,xATR0); ObjectSet(sob,OBJPROP_YDISTANCE,yy0); ObjectSetText(sob, s00,j0,"Verdana",cr0); return(0);}//+------------------------------------------------------------------+//|//+------------------------------------------------------------------+int deinit() { Fixedindication(0,"",White); Fixedindication(1,"",White); return(0); }//+------------------------------------------------------------------+//|//+------------------------------------------------------------------+