このインジケーターは、クローズ価格に対する成長率や減少率を計算します。オブジェクト指向プログラミングを用いて作成されており、どのシステムトレーディングや他のインジケーターにも簡単に統合できます。
- 前日クローズの変化率(CH%)を計算します。
- チャート上にオブジェクトを作成します。オブジェクト指向プログラミングスタイルで書かれています。
- 任意のエキスパートアドバイザーや他のインジケーターに簡単に統合可能です。クラスを記述し、活性化するだけで十分です。
他のインジケーターやエキスパートアドバイザーに統合されたコードサイズを推定できます。
以下の2行があります:
CChmcYZ chmc;
chmc.RCHsay("EURUSD",TimeCurrent() - 86400 * 5,TimeCurrent(),5,16); // 今日のCH%を計算しましょう
オブジェクト指向プログラミングは多くの可能性を提供し、必要なクラスが書かれたら、次に構築を行います。

//+------------------------------------------------------------------+//| yuraz_mcch.mq5 |//| Copyright 2009, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright"2009, MetaQuotes Software Corp."#property link "http://www.mql5.com"#property version "1.00"#property indicator_chart_window//////////////////////////////////////////////////////////////////////////////////////////////////////////////////// CH% 計算クラス //struct SymbolStruct { bool work; string sSymbol; int y; int x; double CH; }; //+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+class CChmcYZ { public: SymbolStruct sSymb; color lColorSym; color lColorChPlus; color lColorChMinus; color lColorCH; int indicatorWindow; // メインウィンドウで動作 void CChmcYZ() { indicatorWindow=0; lColorSym=DarkBlue; // ダークターコイズ lColorCH=DarkGreen; // ホワイト; lColorChPlus = Green; // ライムグリーン; lColorChMinus = FireBrick ; // レッド; } // コンストラクタ void RCH(string sSym,datetime db,datetime de); // 1ペアの完全な計算(表示なし) void RCHsay(string sSym,datetime db,datetime de,int X,int Y); // 1ペアの完全な計算とその表示private: color lColor; double dClose[7000]; // 最大価格をコピーするための配列 }; //+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+void CChmcYZ::RCH(string sSymbol,datetime DATEBEG,datetime DATEEND) { sSymb.CH = 0; int CountBar; DATEBEG = StringToTime( TimeToString(DATEBEG,TIME_DATE)); DATEEND = StringToTime( TimeToString(DATEEND,TIME_DATE)); CountBar= CopyClose(sSymbol,PERIOD_D1,DATEEND,2,dClose); if(CountBar>=0) { if(NormalizeDouble(dClose[1],5)!=0.0 && NormalizeDouble(dClose[0],5)!=0.0) { sSymb.CH=(dClose[1*100]/dClose[0]) - 100; } } } //+------------------------------------------------------------------+//| 計算と出力//+------------------------------------------------------------------+void CChmcYZ::RCHsay(string sSym,datetime db,datetime de,int XD,int YD) // 1ペアの完全な計算のみ { RCH(sSym,db,de); if(ObjectFind(indicatorWindow,"oYZ"+sSym)==-1) { ObjectCreate(indicatorWindow,"oYZ"+sSym,OBJ_LABEL,indicatorWindow,0,0); ObjectSetInteger(indicatorWindow,"oYZ"+sSym,OBJPROP_XDISTANCE,XD); ObjectSetInteger(indicatorWindow,"oYZ"+sSym,OBJPROP_YDISTANCE,YD); ObjectSetInteger(indicatorWindow,"oYZ"+sSym,OBJPROP_CORNER,CORNER_LEFT_UPPER); ObjectSetString(indicatorWindow,"oYZ"+sSym,OBJPROP_TEXT,sSym); ObjectSetString(indicatorWindow,"oYZ"+sSym,OBJPROP_FONT,"Arial"); ObjectSetInteger(indicatorWindow,"oYZ"+sSym,OBJPROP_FONTSIZE,7); ObjectSetInteger(indicatorWindow,"oYZ"+sSym,OBJPROP_COLOR,lColorSym); ObjectSetInteger(indicatorWindow,"oYZ"+sSym,OBJPROP_SELECTABLE,true); } if(ObjectFind(indicatorWindow,"oYZ_"+sSym)==-1) { ObjectCreate(indicatorWindow,"oYZ_"+sSym,OBJ_LABEL,indicatorWindow,0,0); ObjectSetInteger(indicatorWindow,"oYZ_"+sSym,OBJPROP_XDISTANCE,XD+45); ObjectSetInteger(indicatorWindow,"oYZ_"+sSym,OBJPROP_YDISTANCE,YD); ObjectSetInteger(indicatorWindow,"oYZ_"+sSym,OBJPROP_CORNER,CORNER_LEFT_UPPER); ObjectSetString(indicatorWindow,"oYZ_"+sSym,OBJPROP_TEXT,sSym); ObjectSetString(indicatorWindow,"oYZ_"+sSym,OBJPROP_FONT,"Arial"); ObjectSetInteger(indicatorWindow,"oYZ_"+sSym,OBJPROP_FONTSIZE,7); ObjectSetInteger(indicatorWindow,"oYZ_"+sSym,OBJPROP_COLOR,lColorCH); ObjectSetInteger(indicatorWindow,"oYZ_"+sSym,OBJPROP_SELECTABLE,true); } YD=YD+11; lColor=lColorCH; if(sSymb.CH>0) { lColor=lColorChPlus; ObjectSetString(indicatorWindow,"oYZ_"+sSym,OBJPROP_TEXT," "+DoubleToString(sSymb.CH,5)); ObjectSetInteger(indicatorWindow,"oYZ_"+sSym,OBJPROP_XDISTANCE,XD+45); } if(sSymb.CH<0) { lColor=lColorChMinus; ObjectSetString(indicatorWindow,"oYZ_"+sSym,OBJPROP_TEXT,DoubleToString(sSymb.CH,5)); ObjectSetInteger(indicatorWindow,"oYZ_"+sSym,OBJPROP_XDISTANCE,XD+46); } ObjectSetInteger(indicatorWindow,"oYZ_"+sSym,OBJPROP_COLOR,lColor); } //// クラスの終わり////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// クラスが使用されるコード// CChmcYZ chmc; //+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+intOnInit() { //--- インジケータバッファのマッピング chmc.RCHsay("EURUSD",TimeCurrent() - 86400 * 5,TimeCurrent(),5,16); // 今日のCH%を計算しましょう chmc.RCHsay("AUDUSD",TimeCurrent() - 86400 * 5,TimeCurrent(),5,16+12 ); chmc.RCHsay("GBPUSD",TimeCurrent() - 86400 * 5,TimeCurrent(),5,16+12*2 ); chmc.RCHsay("USDCHF",TimeCurrent() - 86400 * 5,TimeCurrent(),5,16+12*3 ); chmc.RCHsay("USDCAD",TimeCurrent() - 86400 * 5,TimeCurrent(),5,16+12*4 ); return(0); } //+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+intOnCalculate(constint rates_total, constint prev_calculated, constdatetime &time[], constdouble &open[], constdouble &high[], constdouble &low[], constdouble &close[], constlong &tick_volume[], constlong &volume[], constint &spread[]) { chmc.RCHsay("EURUSD",TimeCurrent() - 86400 * 5,TimeCurrent(),5,16); // 今日のCH%を計算しましょう chmc.RCHsay("AUDUSD",TimeCurrent() - 86400 * 5,TimeCurrent(),5,16+12 ); chmc.RCHsay("GBPUSD",TimeCurrent() - 86400 * 5,TimeCurrent(),5,16+12*2 ); chmc.RCHsay("USDCHF",TimeCurrent() - 86400 * 5,TimeCurrent(),5,16+12*3 ); chmc.RCHsay("USDCAD",TimeCurrent() - 86400 * 5,TimeCurrent(),5,16+12*4 ); return(rates_total); } voidOnDeinit() { int i=ObjectsTotal(0); // オブジェクトを削除 while( i > 0 ) { if(StringSubstr(ObjectName(0,i ),0,3)=="oYZ") { ObjectDelete(0,ObjectName(0,i )); } i--; } }

コメント 0