Einzelnen Beitrag anzeigen
  #1 (permalink)  
Alt 31.01.15
Benutzerbild von markusrgb
markusrgb markusrgb ist offline
Mitglied
 
Registriert seit: Jan 2015
Beiträge: 34
markusrgb befindet sich auf einem aufstrebenden Ast
Standard Aus eigenen Werten mehrere Durchschnitte berechnen und vergleichen

hallo zusammen,

bin mal wieder am rumbastelln

und frage mich ob das so funktionieren könnte

ich erhalte aufgrund von berechnungen nach jedem Tick einen double wert ...

nun möchte ich folgendes erreichen:

sammeln der ersten 20 werte -> daraus denn durchschnitt berechnen und Temporär in einer Variable "Durchschnitt [5] speichern

sammeln der nächsten 20 werte -> daraus denn durchschnitt berechnen und Temporär in einer Variable "Durchschnitt [4] speichern
...
sammeln der letzten 20 werte -> daraus denn durchschnitt berechnen und Temporär in einer Variable "Durchschnitt [0] speichern

dann soll z.b Durchschnitt [0] mit Durchschnitt [1] verglichen werden und darauf eine handels entscheidung getroffen werden...

dannach sollt der ältere Durchschnitt [5] hinten heraus fallen, alle anderen eine stelle nachrücken, und vorne der Durchschnitt[0] durch die neuen 20 Tickwerte berechnet werden.

könnte das so funktioniern wie ich es mir zusammen gebastelt habe:

hier der mal der betreffende Ausschnitt:

Code:
//+------------------------------------------------------------------+
//|                                              Signal Idee Dax.mq4 |
//|                                                    Markus |
//|                                             https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "Markus "
#property link      "https://www.mql4.com"
#property version   "1.00"
#property strict
// GLOBALE VARIABLEN --- UM SIE IN ALLEN FUNKTIONEN ZU VERWENDEN!!!
//+------------------------------------------------------------------+
// --- Variablen vom Benutzer Festlegen: (Global)
//+------------------------------------------------------------------+
extern double HandelsLots = 0.1; // Größe der Handels Lots
extern double SL_Prozent = 0.5; // StopLoos in Prozent
extern double TP_Prozent = 1.5; // TakeProfit in Prozent
extern int MagicNummer = 12345;
extern int Periode = 10; // Perioden Länge Extern einstellen
//+------------------------------------------------------------------+
// --- Variablen fest Festlegen: (Global)
//+------------------------------------------------------------------+

datetime PeriondenStartZeit; // zum feststellen einer neuen Perionde
bool NeuePeriodeBegonnen;
bool LongSignal;
bool ShortSignal;
int LongOrder;
int ShortOrder;

//+------------------------------------------------------------------+
// --- Variablen für Durschnitts Berechnungen AnzahlMA20               
//+------------------------------------------------------------------+

double Du[Periode-1]; // erstellt Extern Eingestellte Anzahl an "Du" Variablen (z.B. Du 0-9) 
int PeriodenVergleich = Periode; // PeriodenVergleich wird nicht mehr geändert und dient als Reverenz
double Durchschnitt[5]; //insgesammt 6 Perioden Durchschnitte sollen erstellt werden
int PeriodenStueckzahl=5; //Anzahl der Letzten Perioden die für Berechnungen zwischen gespeichert werden sollen (6Stück)
bool BerechnungsFreigabe;




// --- Strings für Symbole des Dax30 festlegen
string syDax = "EUREX.FDX";


//+------------------------------------------------------------------+
//| Expert initialization function - Start von EA                    |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   PeriondenStartZeit = Time[0];
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function - Ausführen beim Ende von EA    |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function  (StartZeit                                 |
//+------------------------------------------------------------------+
void OnTick()
{
//---

//+------------------------------------------------------------------+
// --- Variablen für ST/TP Berechnungen                              |
//+------------------------------------------------------------------+

double StoppLossLO, StoppLossSO;
double TakeProfitLO, TakeProfitSO;
bool OrderAngepasst;
int TPLO, TPSO;
int SLLO, SLSO;
double NachkommaTPLO, NachkommaTPSO;
double NachkommaSLLO, NachkommaSLSO;


// Überprüfen ob ein neuer Periodenbeginn vorliegt
if (PeriondenStartZeit != Time[0])
{
NeuePeriodeBegonnen = true;
PeriondenStartZeit = Time[0];
}
else NeuePeriodeBegonnen = false;

   
// --- MA20 für Dax Abfragen - Symbole durch die Strings ersetzt
double maDAX = iMA(syDax,0,20,0,MODE_SMA,PRICE_CLOSE,0);

// ---Aktuellen BID für Dax Abfragen
double bidDax  = MarketInfo(syDax, MODE_BID);


//+------------------------------------------------------------------+
//| Berechnung AnzahlMA20                                            |
//+------------------------------------------------------------------+


double AnzahlMA20 = bidDax - maDAX

// Anzeige auf Bildschirm 
Comment("DAX =",AnzahlMA20); 

//+------------------------------------------------------------------+
//| Durchschnitte für AnzahlMA20 Berechnen                           |
//+------------------------------------------------------------------+  

if (Periode<PeriodenVergleich+1 && Periode>0) //wenn Perioder 0-9 (10Stück)
   {
   Du[Periode-1] = AnzahlMA20; //Du[9]=AnzahlMA20 .... Du[8]=AnzahlMA20 ... ---> Du[0]=AnzahlMA20
   Periode --    // 10-1=9 ... 9-1=8 ... 8-1=7 ---> 1-1=0
   }


if (Periode=<1) //Wenn alle Werte der Variablen von 9-0 vergeben sind
    {
    double ZwSumm = 0;
    for(int i=0; i<PeriodenVergleich;i++) // so lange "i" kleiner als "PeriodenVergleich"(10) ist wird "Du" zusammengezählt
       {
       ZwSumm = ZwSumm + Du[i] // Rechnet alle Du0-Du9 zusammen 
       }
    Durchschnitt[PeriodenStueckzahl] = NormalizeDouble (ZwSumm/PeriodenVergleich),2; //Errechnet denn Durchschnitt und kürzt auf 2 Kommastellen
    PeriodenStueckzahl--;
    if (PeriodenStueckzahl<0) PeriodenStueckzahl=0 // Stellt "PeriodenStueckzahl" auf 0 wenn alle [0-5] Durchschnitte befüllt sind, um im nächsten Durchlauf denn Durchschnitt der aktuellen Periode berechnen zu können
    Periode = PeriodenVergleich;
    }


if (Durchschnitt[5]>0 && Durchschnitt[4]>0 && Durchschnitt[3]>0 && Durchschnitt[2]>0 && Durchschnitt[1]>0 && Durchschnitt[0]>0) //Wennn die 6 letzten Durchschnitte berechnet wurden
   {
   BerechnungsFreigabe = true;
   }
else BerechnungsFreigabe = false;

//+------------------------------------------------------------------+
//| HandelsSignale ermitteln    / Beispiel                           |
//+------------------------------------------------------------------+  

if (NeuePeriodeBegonnen == true) && (BerechnungsFreigabe == true)
{ 

     //  --- Kauf Signal --- 

     if (Durchschnitt[0]>Durchschnitt[1])
     {
     LongSignal = true;
     }
     else LongSignal = false;

     // --- Verkauf Signal ---

     if (Durchschnitt[0]<Durchschnitt[1])
     {
     ShortSignal = true;
     }
     else ShortSignal = false;
}
else
{
LongSignal = false;
ShortSignal = false;
}
//+----------------------------------------------------------------------------------------+
//| Speicher des Aktuellen "Durchschnitte[0]" auf 0 Stellen und denn Rest um 1 Verschieben |
//+----------------------------------------------------------------------------------------+ 
if (BerechnungsFreigabe == true)
{ 
Durchschnitt[5]=Durchschnitt[4];
Durchschnitt[4]=Durchschnitt[3];
Durchschnitt[3]=Durchschnitt[2];
Durchschnitt[2]=Durchschnitt[1];
Durchschnitt[1]=Durchschnitt[0];
Durchschnitt[0]=0;
}


//+------------------------------------------------------------------+
//| Kauf / Verkauf Signal umsetzen                                   |
//+------------------------------------------------------------------+  
 
}