YURAZ_MCCH インジケーター - MetaTrader 5 用の成長率計算ツール

Mike 2015.01.22 21:54 80 0 0
添付ファイル

このインジケーターは、クローズ価格に対する成長率や減少率を計算します。オブジェクト指向プログラミングを用いて作成されており、どのシステムトレーディングや他のインジケーターにも簡単に統合できます。

  • 前日クローズの変化率(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