I apologise! I have two warnings to add.
#property indicator_plots 0
and here
//+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void OnDeinit(const int reason) {
Alexsandr San:
I apologise! I have two warnings to add.
and here
The code was written in 2009, since then so much has changed.
The code works both for FOREX and for the stock market.
//+------------------------------------------------------------------+ //|Yuraz_CH_moex.mq5 | //|Copyright 2020,YuraZ | //| https://www.mql5.com/en/users/yuraz | //+------------------------------------------------------------------+ #property copyright "Copyright 2020,YuraZ" #property link "https://www.mql5.com/en/users/yuraz" #property version "1.02" #property indicator_chart_window #property indicator_plots 1 #property indicator_buffers 1 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // class calculation CH% // struct SymbolStruct { // bool work; string sSymbol; int y; int x; double CH; int HandleInd; // Handl indicator to get quotes from another chart long chart_id; }; //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ class CChmcYZ { public: SymbolStruct sSymb[]; color lColorSym; color lColorChPlus; color lColorChMinus; color lColorCH; int indicatorWindow; // work in the main window void CChmcYZ() { indicatorWindow=0; lColorSym=Aqua; lColorCH=White; lColorChPlus =LimeGreen; lColorChMinus =Red; } // constructor 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); // Complete calculation of one pair and display it color lColor; double dClose[3]; // array for copying maximum prices int i_SymbolsTotal; }; //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void CChmcYZ::CreateSymbol(void) { i_SymbolsTotal =SymbolsTotal(true); // false - All symbols , true - only symbols in MarketWatch int i; int yPos=12; ArrayResize(sSymb,i_SymbolsTotal+1,i_SymbolsTotal+1); // Fill the array with symbols from 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); // calculate the CH% day 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); // calculate the CH% day 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") // delete only our objects from the chart { 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; } } } //+------------------------------------------------------------------+ //|| Calculation with output //+------------------------------------------------------------------+ void CChmcYZ::RCHsay(int iPos, string sSym,datetime db,datetime de,int XD,int YD) // Full calculation of only one pair { 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; //+------------------------------------------------------------------+ //| Custom indicator initialisation function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping chmc.CreateSymbol(); // Create symbols from the environment //--- EventSetMillisecondTimer(1); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void OnTimer() { chmc.MyOnTimer(); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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(); //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //| ChartEvent function| //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) { //--- } //+------------------------------------------------------------------+ //+------------------------------------------------------------------+ //|| //+------------------------------------------------------------------+ void OnDeinit(const int reason) { chmc.DeleteSymbolFromCrafic(); } //+------------------------------------------------------------------+
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
YURAZ_MCCH Calculation Indicator:
The indicator calculates % of growth or drop towards CLOSE. It is written via use of object-oriented programming and can be easily integrated into any Expert Advisor or other indicator.
Author: Yuriy Zaytsev