申し訳ありません!2つほど警告を加えさせていただきます。
#property indicator_plots 0
そしてこちら
//+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void OnDeinit(const int reason) {
Alexsandr San:
申し訳ない! 2つほど警告を付け加えておく。
そしてこちら
このコードは2009年に書かれたもので、それ以来多くのことが変わっている。
このコードはFOREXと株式市場の両方で動作します。
//+------------------------------------------------------------------+ //|Yuraz_CH_moex.mq5 //|著作権について //| https://www.mql5.com/ja/users/yuraz //+------------------------------------------------------------------+ #property copyright "Copyright 2020,YuraZ" #property link "https://www.mql5.com/ja/users/yuraz" #property version "1.02" #property indicator_chart_window #property indicator_plots 1 #property indicator_buffers 1 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // クラス計算 CH // struct SymbolStruct { // bool work; string sSymbol; int y; int x; double CH; int HandleInd; // 別のチャートから相場を取得するハンドルのインジケーター long chart_id; }; //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ class CChmcYZ { public: SymbolStruct sSymb[]; color lColorSym; color lColorChPlus; color lColorChMinus; color lColorCH; int indicatorWindow; // メイン・ウィンドウでの作業 void CChmcYZ() { indicatorWindow=0; lColorSym=Aqua; lColorCH=White; lColorChPlus =LimeGreen; lColorChMinus =Red; } // コンストラクタ void CreateSymbol(void); void DeleteSymbolFromCrafic(void); void MyOnCalculate(void); void MyOnTimer(); private: void RCH(int iPos, string sSymbol,datetime DATEBEG,datetime DATEEND); void RCHsay(int iPos, string sSym,datetime db,datetime de,int X,int Y); // 1組の計算を完了し、表示する color lColor; double dClose[3]; // 最高価格をコピーするための配列 int i_SymbolsTotal; }; //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void CChmcYZ::CreateSymbol(void) { i_SymbolsTotal =SymbolsTotal(true); // false - すべてのシンボル、true - MarketWatchのシンボルのみ int i; int yPos=12; ArrayResize(sSymb,i_SymbolsTotal+1,i_SymbolsTotal+1); // MarketWatchのシンボルで配列を埋める for(i=0; i<i_SymbolsTotal; i++) { sSymb[i].sSymbol = SymbolName(i, true); Sleep(1000); chmc.RCHsay(i, sSymb[i].sSymbol,TimeCurrent()-86400*5,TimeCurrent(),5,16+yPos); // CH%日を計算する yPos += 12; } long id_ChartFirst = ChartFirst(); long idC = ChartFirst(); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void CChmcYZ::MyOnTimer(void) { MyOnCalculate(); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void CChmcYZ::MyOnCalculate(void) { int yPos=12; for(int i=0; i<i_SymbolsTotal; i++) { chmc.RCHsay(i, sSymb[i].sSymbol,TimeCurrent()-86400*5,TimeCurrent(),5,16+yPos); // CH%日を計算する yPos += 12; } } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void CChmcYZ::DeleteSymbolFromCrafic(void) { int i=ObjectsTotal(0,-1,-1); while(i>0) { string sObjYZ = ObjectName(0,i); if(StringSubstr(sObjYZ,0,3)=="oYZ") // チャートからオブジェクトだけを削除する。 { ObjectDelete(0,sObjYZ); } i--; } ChartRedraw(); } void CChmcYZ::RCH(int iPos, string sSymbol,datetime DATEBEG,datetime DATEEND) { sSymb[iPos].CH=0; int CountBar; // DATEBEG = StringToTime( TimeToString(DATEBEG,TIME_DATE)); DATEEND = StringToTime( TimeToString(DATEEND,TIME_DATE)); CountBar= CopyClose(sSymb[iPos].sSymbol,PERIOD_D1,DATEEND,2,dClose); if(CountBar>=0) { if(NormalizeDouble(dClose[1],5)!=0.0 && NormalizeDouble(dClose[0],5)!=0.0) { sSymb[iPos].CH=(dClose[1]*100)/dClose[0]-100; } } } //+------------------------------------------------------------------+ //|| 出力のある計算 //+------------------------------------------------------------------+ void CChmcYZ::RCHsay(int iPos, string sSym,datetime db,datetime de,int XD,int YD) // 1組のみの完全計算 { RCH(iPos, 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[iPos].CH>=0) { lColor=lColorChPlus; ObjectSetString(indicatorWindow,"oYZ_"+sSym,OBJPROP_TEXT," "+DoubleToString(sSymb[iPos].CH,2)); ObjectSetInteger(indicatorWindow,"oYZ_"+sSym,OBJPROP_XDISTANCE,XD+45); } if(sSymb[iPos].CH<0) { lColor=lColorChMinus; ObjectSetString(indicatorWindow,"oYZ_"+sSym,OBJPROP_TEXT,DoubleToString(sSymb[iPos].CH,2)); ObjectSetInteger(indicatorWindow,"oYZ_"+sSym,OBJPROP_XDISTANCE,XD+46); } ObjectSetInteger(indicatorWindow,"oYZ_"+sSym,OBJPROP_COLOR,lColor); } ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// CChmcYZ chmc; //+------------------------------------------------------------------+ //| カスタムインジケータ初期化関数 //+------------------------------------------------------------------+ int OnInit() { //--- インジケータ・バッファのマッピング chmc.CreateSymbol(); // 環境からシンボルを作成する //--- EventSetMillisecondTimer(1); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void OnTimer() { chmc.MyOnTimer(); } //+------------------------------------------------------------------+ //| カスタム・インジケータ反復関数 //+------------------------------------------------------------------+ 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.MyOnCalculate(); //--- 次の呼び出しのためにprev_calculatedの値を返す return(rates_total); } //+------------------------------------------------------------------+ //| チャートイベント機能| //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { chmc.DeleteSymbolFromCrafic(); } //+------------------------------------------------------------------+
取引の機会を逃しています。
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索
YURAZ_MCCH計算指標:
この指標は終値に向けた上昇/下降の%を計算します。オブジェクト指向プログラミングが使われており、任意のエキスパートアドバイザーや他の指標への統合は簡易です。
作者: Yuriy Zaytsev