Code:
//+------------------------------------------------------------------+
//| Signal Dax.mq4 |
//| xxx |
//| https://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright "xxx"
#property link "https://www.mql4.com"
#property version "1.00"
#property strict
//+------------------------------------------------------------------+
// --- 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;
// --- String für Dax30 festlegen
string syDax = "EUREX.FDX";
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
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;
// Überprüfen ob ein neuer Periodenbeginn vorliegt
if (PeriondenStartZeit != Time[0])
{
NeuePeriodeBegonnen = true;
PeriondenStartZeit = Time[0];
}
else NeuePeriodeBegonnen = false;
// --- MA20 für Dax Abfragen
double maDAX = iMA(syDax,0,20,0,MODE_SMA,PRICE_CLOSE,0);
// ---Aktuellen BID Kurs für Dax Abfragen (letzter Kurs?)
double bidDax = MarketInfo(syDax, MODE_BID);
// Anzeige auf Bildschirm
Print("DAX 30 MA Kurve =",maDAX);
//+------------------------------------------------------------------+
//| 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;
}
}
// Jetzt erst Long Order eröffnen
while(LongOrder<=0)
{
LongOrder = OrderSend(syDax,OP_BUY,HandelsLots,Ask,10,0,0,"Dax30 LONG",MagicNummer,0,Green);
}
}
// 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;
}
}
// Verkaufs Order jetzt eröffnen
while(ShortOrder<=0)
{
ShortOrder = OrderSend(syDax,OP_SELL,HandelsLots,Bid,10,0,0,"Dax30 SHORT",MagicNummer,0,Red);
}
}
//+------------------------------------------------------------------+
//|StopLoos und TakeProfit setzen |
//+------------------------------------------------------------------+
// SL bei Long Deals setzen
if (OrderSelect(LongOrder,SELECT_BY_TICKET)==true)
{
if(OrderCloseTime()==0 && OrderStopLoss()==0)
{
StoppLoss = NormalizeDouble(OrderOpenPrice()/(1+(SL_Prozent/100)),Digits);
OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StoppLoss,OrderTakeProfit(),0,Yellow);
}
}
// SL bei Short Deals setzen
if (OrderSelect(ShortOrder,SELECT_BY_TICKET)==true)
{
if(OrderCloseTime()==0 && OrderStopLoss()==0)
{
StoppLoss = NormalizeDouble(OrderOpenPrice()*(1+(SL_Prozent/100)),Digits);
OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),StoppLoss,OrderTakeProfit(),0,Yellow);
}
}
// TP bei Long Deals setzen
if (OrderSelect(LongOrder,SELECT_BY_TICKET)==true)
{
if(OrderCloseTime()==0 && OrderTakeProfit()==0)
{
TakeProfit = NormalizeDouble(OrderOpenPrice()*(1+(TP_Prozent/100)),Digits);
OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Orange);
}
}
// TP bei Short Deals setzen
if (OrderSelect(ShortOrder,SELECT_BY_TICKET)==true)
{
if(OrderCloseTime()==0 && OrderTakeProfit()==0)
{
TakeProfit = NormalizeDouble(OrderOpenPrice()/(1+(TP_Prozent/100)),Digits);
OrderAngepasst = OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),TakeProfit,0,Orange);
}
}
// 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;
}
//+------------------------------------------------------------------+
}