皆さん、こんにちは!今日はMetaTrader 4用に作成した「FEフィボナッチ拡張」インジケーターについてお話ししたいと思います。
このインジケーターは、2つのオブジェクト(P[2])を使って、各方向(上昇または下降)の特性を表現しています。
クラスの構造
class FEExpansion { public: int aa, bb, cc; double A, B, C; FEExpansion(): aa(0), bb(0), cc(0), A(0.0), B(0.0), C(0.0) {} ~FEExpansion() {} } P[2];
各方向には、上価格(A)、下価格(B)、その間の価格(C)が必要です。また、aa, bb, ccはそれぞれの価格のバー位置を示します。
次に、フラクタルの計算式を使って、3つのポイント(上・下・その間の価格)を決定し、その方向を決めるために少し修正しました。
ループ処理の実装
//--- int i=0; int m=0, n=0; bool stop=false; double hi=0.0, lo=0.0; //--- A=0.0; B=0.0; C=0.0; for(m=0, n=0, i=0; i<Bars-5&&!stop; i++) { hi=( iHigh(_Symbol,0,i+2)>=iHigh(_Symbol,0,i+0) && iHigh(_Symbol,0,i+2)>=iHigh(_Symbol,0,i+1) && iHigh(_Symbol,0,i+2)>=iHigh(_Symbol,0,i+3) && iHigh(_Symbol,0,i+2)>=iHigh(_Symbol,0,i+4)) ?iHigh(_Symbol,0,i+2):0.0; lo=( iLow(_Symbol,0,i+2)<=iLow(_Symbol,0,i+0) && iLow(_Symbol,0,i+2)<=iLow(_Symbol,0,i+1) && iLow(_Symbol,0,i+2)<=iLow(_Symbol,0,i+3) && iLow(_Symbol,0,i+2)<=iLow(_Symbol,0,i+4)) ?iLow(_Symbol,0,i+2):0.0;
このようにして、上昇または下降方向の3つのポイントが見つかると、ループが終了します。
ポイントの描画
if(P[0].A!=0.0&&P[0].B!=0.0&&P[0].C!=0.0) { DrawExpansion(tool,"FE ->",Time[P[0].aa],P[0].A,Time[P[0].bb],P[0].B,Time[P[0].cc],P[0].C,-1); }
最後に、OBJ_EXPANSIONオブジェクトを使用して描画します。
void DrawExpansion(string name,string label,datetime t1,double p1,datetime t2,double p2,datetime t3,double p3,int fl=0) { //--- ObjectDelete(name); color wrn=(fl>0)?clrSkyBlue:(fl<0)?clrTomato:clrWhite; if(ObjectFind(0,name)!=0) ObjectCreate(name,OBJ_EXPANSION,0,t1,p1,t2,p2,t3,p3); ObjectSet(name,OBJPROP_FIBOLEVELS,5); ObjectSet(name,OBJPROP_FIRSTLEVEL+0,0.618); ObjectSet(name,OBJPROP_FIRSTLEVEL+1,1.000); ObjectSet(name,OBJPROP_FIRSTLEVEL+2,1.618); ObjectSet(name,OBJPROP_FIRSTLEVEL+3,2.618); ObjectSet(name,OBJPROP_FIRSTLEVEL+4,4.236); //--- ObjectSet(name,OBJPROP_LEVELCOLOR,clrMediumPurple); ObjectSet(name,OBJPROP_LEVELWIDTH,1); ObjectSet(name,OBJPROP_LEVELSTYLE,0); ObjectSet(name,OBJPROP_COLOR,wrn); //--- }
ここで、0.618、1.000、1.618、2.618、4.236のレベルを使用しています。
