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(); } //+------------------------------------------------------------------+
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
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