Einzelnen Beitrag anzeigen
  #21 (permalink)  
Alt 28.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

hier nochmal der ganze code :

Code:
// 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;
//+------------------------------------------------------------------+
// --- Variablen fest Festlegen: (Global)
//+------------------------------------------------------------------+

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



// --- 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()
{
//---

double StoppLoss;
double TakeProfit;
bool OrderAngepasst;
int TP;
int SL;
double NachkommaTP;
double NachkommaSL;

// Ü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); 


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


if (NeuePeriodeBegonnen == true)
{ 

     //  --- Kauf Signal --- 

     if (bidDax>maDAX)
     {
     LongSignal = true;
     }
     else LongSignal = false;

     // --- Verkauf Signal ---

     if (bidDax<maDAX)
     {
     ShortSignal = true;
     }
     else ShortSignal = false;
}
else
{
LongSignal = false;
ShortSignal = false;
}


//+------------------------------------------------------------------+
//| Kauf / Verkauf Signal umsetzen                                   |
//+------------------------------------------------------------------+  
 
// Kaufen
if(LongSignal == true)
{
       // Evtl Short Order vorher Schließen
       if(ShortOrder>0)
          {
             if(OrderSelect(ShortOrder,SELECT_BY_TICKET)==true)
             {
             bool ShortOrderGeschlossen = OrderClose(ShortOrder,OrderLots(),Ask,10,Blue);
             if (ShortOrderGeschlossen==true) ShortOrder=0;
             Print("Short Order geschlossen bei ",AnzahlMA20);
             } 
          }
       // Jetzt erst Long Order eröffnen
       while(LongOrder<=0)
           {
           LongOrder = OrderSend(syDax,OP_BUY,HandelsLots,Ask,10,0,0,"Dax30 LONG",MagicNummer,0,Green);
           Print("Long Order geöffnet bei ",AnzahlMA20);
           }
}

// Verkaufen
if (ShortSignal == true)
{
      // Evtl Long Order vorher Schließen
     if (LongOrder>0)
        {
           if(OrderSelect(LongOrder,SELECT_BY_TICKET)==true)
           {
           bool LongOrderGeschlossen = OrderClose(LongOrder,OrderLots(),Bid,10,Blue);
           if (LongOrderGeschlossen==true) LongOrder=0;
           Print("Long Order geschlossen bei ",AnzahlMA20);
           }
        }
      // Verkaufs Order jetzt eröffnen
      while(ShortOrder<=0)
         {
         ShortOrder = OrderSend(syDax,OP_SELL,HandelsLots,Bid,10,0,0,"Dax30 SHORT",MagicNummer,0,Red);
         Print("Short Order geöffnet bei ",AnzahlMA20);
         }
}

//+------------------------------------------------------------------+
//|StopLoos und TakeProfit setzen                                   |
//+------------------------------------------------------------------+  
 
// SL bei Long Deals setzen - Erst aber umrechnung für 0,25 Schritt Broker
// Umrechnung SL_Prozent in 0,25er Schritten
StoppLoss = NormalizeDouble(OrderOpenPrice()/(1+(SL_Prozent/100.0)),2);  
SL = (int)StoppLoss;  //zur Sicherheit!
NachkommaSL = StoppLoss - SL;
if (NachkommaSL <= 0.12) StoppLoss = SL;
if (NachkommaSL > 0.12 && NachkommaSL <= 0.37) StoppLoss = SL + 0.25;
if (NachkommaSL > 0.37 && NachkommaSL <= 0.62) StoppLoss = SL + 0.5;
if (NachkommaSL > 0.62 && NachkommaSL <= 0.87) StoppLoss = SL + 0.75;
if (NachkommaSL > 0.87) StoppLoss = SL + 1.0;

// SL bei Long Deals setzen
if (OrderSelect(LongOrder,SELECT_BY_TICKET)==true)
{
    if(OrderCloseTime()==0 && OrderStopLoss()==0)
      {
      OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StoppLoss,OrderTakeProfit(),0,Yellow);
      Print("SL für Long Order gesetzt bei = ",StoppLoss);
      }
}

// SL bei Short Deals setzen - Erst aber umrechnung für 0,25 Schritt Broker
// Umrechnung SL_Prozent in 0,25er Schritten
StoppLoss = NormalizeDouble(OrderOpenPrice()*(1+(SL_Prozent/100.0)),2);  
SL = (int)StoppLoss;  //zur Sicherheit!
NachkommaSL = StoppLoss - SL;
if (NachkommaSL <= 0.12) StoppLoss = SL;
if (NachkommaSL > 0.12 && NachkommaSL <= 0.37) StoppLoss = SL + 0.25;
if (NachkommaSL > 0.37 && NachkommaSL <= 0.62) StoppLoss = SL + 0.5;
if (NachkommaSL > 0.62 && NachkommaSL <= 0.87) StoppLoss = SL + 0.75;
if (NachkommaSL > 0.87) StoppLoss = SL + 1.0;

// SL bei Short Deals setzen
if (OrderSelect(ShortOrder,SELECT_BY_TICKET)==true)
{
    if(OrderCloseTime()==0 && OrderStopLoss()==0)
      {
      OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StoppLoss,OrderTakeProfit(),0,Yellow);
      Print("SL für Short Order gesetzt bei = ",StoppLoss);
      }
}



// TP bei Long Deals setzen - Erst aber umrechnung für 0,25 Schritt Broker
// Umrechnung TP_Prozent in 0,25er Schritten

TakeProfit = NormalizeDouble(OrderOpenPrice()*(1+(TP_Prozent/100.0)),2);   
TP = (int)TakeProfit;  //zur Sicherheit!
NachkommaTP = TakeProfit - TP;
if (NachkommaTP <= 0.12) TakeProfit = TP;
if (NachkommaTP > 0.12 && NachkommaTP <= 0.37) TakeProfit = TP + 0.25;
if (NachkommaTP > 0.37 && NachkommaTP <= 0.62) TakeProfit = TP + 0.5;
if (NachkommaTP > 0.62 && NachkommaTP <= 0.87) TakeProfit = TP + 0.75;
if (NachkommaTP > 0.87) TakeProfit = TP + 1.0;

// TP bei Long Deals setzen
if (OrderSelect(LongOrder,SELECT_BY_TICKET)==true)
{
    if(OrderCloseTime()==0 && OrderTakeProfit()==0)
      {
      OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Orange);
      Print("TP für Long Order gesetzt bei = ",TakeProfit);
      }
}


// TP bei Short Deals setzen - Erst aber umrechnung für 0,25 Schritt Broker
// Umrechnung TP_Prozent in 0,25er Schritten

TakeProfit = NormalizeDouble(OrderOpenPrice()/(1+(TP_Prozent/100.0)),2);   
TP = (int)TakeProfit;  //zur Sicherheit!
NachkommaTP = TakeProfit - TP;
if (NachkommaTP <= 0.12) TakeProfit = TP;
if (NachkommaTP > 0.12 && NachkommaTP <= 0.37) TakeProfit = TP + 0.25;
if (NachkommaTP > 0.37 && NachkommaTP <= 0.62) TakeProfit = TP + 0.5;
if (NachkommaTP > 0.62 && NachkommaTP <= 0.87) TakeProfit = TP + 0.75;
if (NachkommaTP > 0.87) TakeProfit = TP + 1.0;

// TP bei Short Deals setzen
if (OrderSelect(ShortOrder,SELECT_BY_TICKET)==true)
{
    if(OrderCloseTime()==0 && OrderTakeProfit()==0)
      {
      OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Orange);
      Print("TP für Short Order gesetzt bei = ",TakeProfit);
      }
}



// Ticketnummern nach schließen auf 0 zurücksetzen
if(OrderSelect(LongOrder,SELECT_BY_TICKET)==true)
{
   if(OrderTicket()>0 && OrderCloseTime()>0) LongOrder=0;
}

if(OrderSelect(ShortOrder,SELECT_BY_TICKET)==true)
{
   if(OrderTicket()>0 && OrderCloseTime()>0) ShortOrder=0;
}




//+------------------------------------------------------------------+
}