Indikatoren: YURAZ_MCCH Berechnung Indikator

 

YURAZ_MCCH Berechnung Indikator:

Der Indikator berechnet % des Wachstums oder Falles Richtung SCHLUSSKURS. Es ist durch Einsatz von Objekt-orientierter Programmierung geschrieben und kann problemlos in jeden Expert Advisor oder anderen Indikator integriert werden.

Autor: Yuriy Zaytsev

[Gelöscht]  

Ich bitte um Entschuldigung, ich muss zwei Warnungen hinzufügen.

#property indicator_plots   0

und hier

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
 
Alexsandr San:

Ich bitte um Entschuldigung und möchte zwei Warnungen hinzufügen.

und hier


Der Code wurde 2009 geschrieben, seither hat sich viel geändert.

Der Code funktioniert sowohl für FOREX als auch für den Aktienmarkt.

//+------------------------------------------------------------------+
//|Yuraz_CH_moex.mq5 |
//|Copyright 2020,YuraZ |
//| https://www.mql5.com/de/users/yuraz |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020,YuraZ"
#property link      "https://www.mql5.com/de/users/yuraz"
#property version   "1.02"
#property indicator_chart_window
#property indicator_plots   1
#property indicator_buffers 1


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Klassenberechnung CH%
//
struct SymbolStruct
  {
   // bool work;
   string            sSymbol;
   int               y;
   int               x;
   double            CH;
   int               HandleInd; // Handl-Indikator zum Abrufen von Kursen aus einem anderen Diagramm
   long              chart_id;
  };
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
class CChmcYZ
  {
public:
   SymbolStruct      sSymb[];
   color             lColorSym;
   color             lColorChPlus;
   color             lColorChMinus;
   color             lColorCH;

   int               indicatorWindow; // Arbeit im Hauptfenster
   void              CChmcYZ()
     {
      indicatorWindow=0;
      lColorSym=Aqua;
      lColorCH=White;
      lColorChPlus  =LimeGreen;
      lColorChMinus =Red;
     } // Konstrukteur
   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); // Berechnung eines Paares abschließen und anzeigen
   color             lColor;
   double            dClose[3];                    // Array zum Kopieren der Höchstpreise
   int               i_SymbolsTotal;
  };


//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void CChmcYZ::CreateSymbol(void)
  {
   i_SymbolsTotal =SymbolsTotal(true);    // false - alle Symbole , true - nur Symbole in MarketWatch
   int i;
   int yPos=12;
   ArrayResize(sSymb,i_SymbolsTotal+1,i_SymbolsTotal+1);   // Füllen Sie das Array mit Symbolen von 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); // Berechnung des CH%-Tages
      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);    // Berechnung des CH%-Tages
      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") // nur unsere Objekte aus dem Diagramm löschen
        {
         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;
        }
     }
  }

//+------------------------------------------------------------------+
//|| Berechnung mit Ausgabe
//+------------------------------------------------------------------+
void CChmcYZ::RCHsay(int iPos, string sSym,datetime db,datetime de,int XD,int YD) // Vollständige Berechnung von nur einem Paar
  {
   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;

//+------------------------------------------------------------------+
//| Benutzerdefinierte Initialisierungsfunktion für Indikatoren |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Zuordnung von Indikatorpuffern
   chmc.CreateSymbol(); // Symbole aus der Umgebung erstellen
//---
   EventSetMillisecondTimer(1);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void OnTimer()
  {
   chmc.MyOnTimer();
  }
//+------------------------------------------------------------------+
//| Benutzerdefinierte Indikator-Iterationsfunktion |
//+------------------------------------------------------------------+
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();
//--- Rückgabe des Wertes von prev_calculated für den nächsten Aufruf
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| ChartEvent-Funktion|
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
  }
//+------------------------------------------------------------------+

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   chmc.DeleteSymbolFromCrafic();
  }
//+------------------------------------------------------------------+