я извиняюсь! предупреждения 2 надо добавить
#property indicator_plots 0
и тут
//+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnDeinit(const int reason) {
Alexsandr San:
я извиняюсь! предупреждения 2 надо добавить
и тут
Код писался 2009 году , с тех пор столько изменилось.
Код работает как для FOREX так и для рынка АКЦИЙ.
//+------------------------------------------------------------------+ //| Yuraz_CH_moex.mq5 | //| Copyright 2020,YuraZ | //| https://www.mql5.com/ru/users/yuraz | //+------------------------------------------------------------------+ #property copyright "Copyright 2020,YuraZ" #property link "https://www.mql5.com/ru/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; // Handl индикатора для получения котировок с другого графика 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); // Полный расчт одной пары и отображение ее 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) // Полный расчт только одной пары { 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 initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping chmc.CreateSymbol(); // Создадим символы из окружения //--- 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(); } //+------------------------------------------------------------------+

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
YURAZ_MCCH Индикатор расчета CH%:
Автор: Yuriy Zaytsev