ホーム テクニカル指標 投稿

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

添付ファイル
11347.zip (1.59 KB, ダウンロード 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; //+------------------------------------------------------------------+ //|                                                                  | //+------------------------------------------------------------------+ int OnInit()   { //--- インジケータバッファのマッピング    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);   } //+------------------------------------------------------------------+ //|                                                                  | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total,                 const int prev_calculated,                 const datetime &time[],                 const double &open[],                 const double &high[],                 const double &low[],                 const double &close[],                 const long &tick_volume[],                 const long &volume[],                 const int &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);   } void OnDeinit()   {    int i=ObjectsTotal(0); // オブジェクトを削除    while( i > 0  )      {       if(StringSubstr(ObjectName(0,i ),0,3)=="oYZ")         {          ObjectDelete(0,ObjectName(0,i ));         }         i--;       }   }

関連記事

コメント (0)