Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL5 (http://www.expert-advisor.com/forum/forumdisplay.php?f=221)
-   -   Eigenen Index erstellen (http://www.expert-advisor.com/forum/showthread.php?t=6993)

Max2018 22.05.21 16:49

Eigenen Index erstellen
 
Hi,

ich habe einen kleinen Indikator in MQL5 geschrieben mit dem man einen eigenen Index erstellen kann. Die Aktien mit deren Gewichtung einfach eintragen (entsprechend der SymbolBestimmungen des Brokers . hier am Beispiel Admiral Markets). Ich habe auch ein Beispiel für einen Aktiensplit bei Google eingetragen.....
Ihr könnt die Aktien natürlich erweitern.
Der Indikator funktioniert. Wer noch eine elegantere Lösung hat, gerne her damit

Code:



#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots  1
#property indicator_level1  14
#property indicator_type1  DRAW_LINE
#property indicator_color1  clrYellow
#property indicator_label1  "EIGENER-INDEX"

//--- input params
//---- buffers
double DPCBuffer[];
double A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,CC,OA,OB,OC,OD,OE,OF,OG,OH,OI,OJ,OK,OL,OM,ON,OO,OP,OQ,OR,OS,OT,OU,OV,OW,OAa;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                        |
//+------------------------------------------------------------------+
int OnInit()
  {
  IndicatorSetString(INDICATOR_SHORTNAME,"EIGENER-INDEX");
//---- index buffer
  SetIndexBuffer(0,DPCBuffer,INDICATOR_DATA);
  ArraySetAsSeries(DPCBuffer,true);
//  PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,100);
  return(INIT_SUCCEEDED);
//---- OnInit done
  }
//+------------------------------------------------------------------+
//| Calculation                                        |
//+------------------------------------------------------------------+
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[])
  {
datetime tm=StringToTime("2014.03.25 00:00:00");
Comment(tm);
//--- check for bars count
  if(rates_total<1440/Period())
      return(0); //exit with zero result

//--- prevent total recalculation
  int i=rates_total-1;
  if(prev_calculated>0)
      i=rates_total-prev_calculated -1;

//--- current value should be recalculated
  if(i<0)
      i=0;
//---
  while(i>=0)
    {
      datetime date=iTime(NULL,0,i);
      int Hour=TimeHourMQL4(date);
      int Minute=TimeMinuteMQL4(date);
      //    Print("i = ",i," Hour = ",Hour," Minute = ",Minute);
      OAa=iOpen("#ATVI",0,i) *4.37;
OA=iOpen("#ADS",0,i)*1.69;
OB=iOpen("#ADBE",0,i)*0.85;
if(date>=tm)OC=iOpen("#GOOG",0,i)*0.18;
if(date<tm)OC=iOpen("#GOOG",0,i)*0.18*0.5;
OD=iOpen("#AMZN",0,i)*0.13;
OE=iOpen("#AAPL",0,i)*3.32;
        DPCBuffer[i]=OA+OB+OC+OAa+OD+OE;
      i--;

    }

//----
  return(rates_total);
  }
//+------------------ Functions -----------------------------------------------+

int TimeHourMQL4(datetime date)
  {
  MqlDateTime tm;
  TimeToStruct(date,tm);
  return(tm.hour);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int TimeMinuteMQL4(datetime date)
  {
  MqlDateTime tm;
  TimeToStruct(date,tm);
  return(tm.min);
  }
//+------------------------------------------------------------------+


Indikator-Trading 22.05.21 20:37

Ich sehe hier zwei potenzielle Probleme. Period() liefert im mt5 leider nicht mehr das was man im mt4 gewöhnt ist, daher passt die Verwendung hier im Indikator nicht. Zweitens glaube ich das die Definition von i hier Probleme machen könnte. Ich würde persönlich die while schleife gegen eine For austauschen. Gruß Timo

traderdoc 22.05.21 21:06

Zitat:

Zitat von Indikator-Trading (Beitrag 45373)
Ich sehe hier zwei potenzielle Probleme. Period() liefert im mt5 leider nicht mehr das was man im mt4 gewöhnt ist, daher passt die Verwendung hier im Indikator nicht. Zweitens glaube ich das die Definition von i hier Probleme machen könnte. Ich würde persönlich die while schleife gegen eine For austauschen. Gruß Timo

Eigenartigerweise gibt Period() auch im MT5 denselben Integer-Wert zurück, aber nur von M1 bis M30?? Keine Ahnung, warum ab H1 keine exakten Werte mehr zurückgegeben werden.

traderdoc

Indikator-Trading 22.05.21 22:41

Zitat:

Zitat von traderdoc (Beitrag 45374)
Eigenartigerweise gibt Period() auch im MT5 denselben Integer-Wert zurück, aber nur von M1 bis M30?? Keine Ahnung, warum ab H1 keine exakten Werte mehr zurückgegeben werden.

traderdoc

Metaquotes hat die ENUM Definition geändert, als sie M2 M6 und so weiter eingeführt haben im MT5.

Eine Funktion, mit der du diese Vergleiche durchführen kannst, ist PeriodSeconds(Period())
Diese gibt dir die Sekunden des jeweiligen Timeframes zurück. Diese kannst du dann wie gewohnt direkt mit anderen Timeframes vergleichen, aber auch in Minuten oder Stunden zurück rechnen.

Ich hoffe das hilft dir jetzt etwas weiter, Gruß Timo

Max2018 23.05.21 06:30

Danke

und wie soll ich Period() und while ersetzen :confused:
:confused:

Indikator-Trading 23.05.21 14:33

Für den MT4 Period() Aufruf: (PeriodSeconds()/60.0)

Die While-schleife musst du nicht zwingend gegen eine For-Schleife austauschen, da sind eher andere Probleme dringender, nämlich die mögliche ungleiche Länge der historischen Daten in den aufgerufenen Symbolen.

Dies ist mit iBars abfragbar. Dann nur die kürzeste Länge für die Berechnung des Indikators nutzen.


Alle Zeitangaben in WEZ +2. Es ist jetzt 20:19 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum