Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 5 > Programmierung MQL5

Programmierung MQL5 Hier gehts rund ums Programmieren in MQL5.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4715
Beiträge: 42147
Benutzer: 7.067
Aktive Benutzer: 154
Links: 83
Wir begrüßen unseren neuesten Benutzer: caps4476
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 21:38).
Neue Benutzer:
vor 3 Tagen
- caps4476
vor 4 Tagen
- michi023
vor einer Woche
- severus
vor einer Woche
- droyo33
vor 2 Wochen
- Jonam

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 26
Gesamt: 26
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Like Tree1Likes
  • 1 Post By Indikator-Trading
Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt vor 4 Wochen
Mitglied
 
Registriert seit: Sep 2018
Beiträge: 229
Max2018 befindet sich auf einem aufstrebenden Ast
Standard 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);
  }
//+------------------------------------------------------------------+
Mit Zitat antworten
  #2 (permalink)  
Alt vor 4 Wochen
Benutzerbild von Indikator-Trading
Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 237
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

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
Mit Zitat antworten
  #3 (permalink)  
Alt vor 4 Wochen
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.547
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von Indikator-Trading Beitrag anzeigen
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
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
Mit Zitat antworten
  #4 (permalink)  
Alt vor 4 Wochen
Benutzerbild von Indikator-Trading
Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 237
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
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
traderdoc likes this.
Mit Zitat antworten
  #5 (permalink)  
Alt vor 4 Wochen
Mitglied
 
Registriert seit: Sep 2018
Beiträge: 229
Max2018 befindet sich auf einem aufstrebenden Ast
Standard

Danke

und wie soll ich Period() und while ersetzen
Mit Zitat antworten
  #6 (permalink)  
Alt vor 4 Wochen
Benutzerbild von Indikator-Trading
Mitglied
 
Registriert seit: May 2020
Ort: Bielefeld
Beiträge: 237
Indikator-Trading befindet sich auf einem aufstrebenden Ast
Standard

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.
__________________
www.SmartTradersTech.com
Der wohl umfangreichste NNFX EA den es gibt!
Mit Zitat antworten
Antwort

Lesezeichen

Stichworte
indikator eigener index

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 15:55 Uhr.





Die Suchmaschine - Der Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2021 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2020 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------