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 MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   zeitliche Schließung von Orders (http://www.expert-advisor.com/forum/showthread.php?t=1905)

Mast83 02.02.12 10:37

zeitliche Schließung von Orders
 
Hallo zusammen,

kann mir jemand mal sagen wie ich es hinbekomme eine Order zu schließen nachdem eine gewisse Zeit zum Beispiel 1 Std abgelaufen ist?
Darüber hinaus...wo füge ich die ein?

Vielen Dank

Marc

Free99 02.02.12 15:23

- hol dir die Öffnungszeit der Order (ist als Unix-Timestamp gespeichert)
-- OrderSelect(...) und dann OrderOpenTime()
- frag mit TimeCurrent() die aktuelle Serverzeit ab

OrderSelect(...)
if ((OrderOpenTime()+3600) < TimeCurrent()
{
OrderClose(...);
}

wo kommt auf deinen EA an

Mast83 03.02.12 13:47

Zitat:

Zitat von Free99 (Beitrag 8984)
- hol dir die Öffnungszeit der Order (ist als Unix-Timestamp gespeichert)
-- OrderSelect(...) und dann OrderOpenTime()
- frag mit TimeCurrent() die aktuelle Serverzeit ab

OrderSelect(...)
if ((OrderOpenTime()+3600) < TimeCurrent()
{
OrderClose(...);
}

wo kommt auf deinen EA an

Hallo...erst mal vielen Dank für die Info.
ich schaue mal ob ich das hinbekomme :)
Ich stelle ansonsten den Code mal rein und dann könnt ihr mal schauen. Ich probiere da erst aber mal mein Glpck....noch mals vielen Dank :)

Free99 03.02.12 13:54

dreh bitte bevor du es probierst das < um^^

Code:

OrderSelect(...)
if ((OrderOpenTime()+3600) > TimeCurrent()
{
OrderClose(...);
}

sonst schließt er die Order sofort nach dem öffnen ^^

Mast83 03.02.12 14:06

Stimmt...hatte ich auch schon gesehen :)

Mast83 03.02.12 14:07

vorher wollte ich versuchen die Zeit hoch zu zählen und nicht herunter wie bei Time Current.
Ich probiere es mal aus...

Mast83 05.02.12 20:25

Guten Abend Zusammen,

folgenden EA möchte ich gerne komplettieren:

//+------------------------------------------------------------------+
//| Der Stundentrader.mq4 |
//| Der Marc |
//| Es gibt gar keine Internetseite |
//+------------------------------------------------------------------+
#property copyright "Der Marc"
#property link "Es gibt gar keine Internetseite"

//Wichtige Variablen
extern double Lots=0.01;
extern int Slippage=5;
extern int MagicNumber =1;
extern int TradeHour3=3;
extern int TradeHour4=4;
extern int TradeHour7=7;
extern int TradeHour10=10;
extern int TradeHour17=17;
extern int TradeHour18=18;
extern int TradeHour20=20;
extern int TradeHour12=12;
extern int TradeHour23=23;

//Globale Variablen
int BuyTicket;
int SellTicket;
double UsePoint;
int UseSlippage;


//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
UsePoint = PipPoint(Symbol());
UseSlippage = GetSlippage(Symbol(), Slippage);
}

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
// Buy criteria
OrderSelect(SellTicket || BuyTicket, SELECT_BY_TICKET);
//Close Order
if(OrderCloseTime() == 0 && SellTicket > 0 || BuyTicket > 0)
{
double CloseLots = OrderLots();
double ClosePrice = Ask;
bool Closed = OrderClose(SellTicket ,CloseLots, ClosePrice, UseSlippage, Red);
}
double OpenPrice = Ask;
//BuyOrder
if ((TradeHour3==Hour())||(TradeHour4==Hour())||(Trad eHour7==Hour())||(TradeHour10==Hour())||(TradeHour 17==Hour())||(TradeHour18==Hour())||(TradeHour20== Hour())) //Signal Buy
{
int openbuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippag e,0,0,"time trader buy order ",MagicNumber,0,Blue);
}
SellTicket = 0;
BuyTicket = 0;

// Sell criteria
OrderSelect(BuyTicket || SellTicket, SELECT_BY_TICKET);
//Close Order
if(OrderCloseTime() == 0 && BuyTicket > 0 || BuyTicket > 0)
{
CloseLots = OrderLots();
ClosePrice = Bid;
Closed = OrderClose(BuyTicket, CloseLots, ClosePrice, UseSlippage, Red);
}
OpenPrice = Bid;
//SellOrder
if ((TradeHour12==Hour())||(TradeHour23==Hour())) //Signal Sell
{
int opensell=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slipp age,0,0,"time trader sell order ",MagicNumber,0,Green);
}
SellTicket = 0;
BuyTicket = 0;

//----
return(0);
}
//+------------------------------------------------------------------+
//Pip Point Function
double PipPoint (string Currency)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01;
else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001;
return (CalcPoint);
}

//Get Slippage Function
int GetSlippage(string Currency, int SlippagePips)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 3) double CalcSlippage = SlippagePips;
else if(CalcDigits == 4 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
return (CalcSlippage);
}



Es geht darum stündlich, zu gewissen Zeiten, eine Kauf oder Verkauf Position zu erstellen, die dann nach der Laufenden Std in der sie am Markt aktiv ist geschlossen wird.
Ich habe bereits ausprobiert, ob die Möglichkeit besteht die bestehende Order zu suchen, bin aber trotz der Hilfe nicht dort angekommen wo ich hin wollte.
Darüber hinaus soll sich die Lotgröße automatisch der FreeaccountMargin anpassen. Hier stieß ich ebenfalls an meine Grenze^^

Vielen Dank für die weitere Unterstützung

Marc

Mast83 05.02.12 20:47

//+------------------------------------------------------------------+
//| Der Stundentrader.mq4 |
//| Der Marc |
//| Es gibt gar keine Internetseite |
//+------------------------------------------------------------------+
#property copyright "Der Marc"
#property link "Es gibt gar keine Internetseite"

//Wichtige Variablen
extern double Minlot=0.01;
extern int Digits2Round=2;
extern int PercentOfFreeDepo=1;
extern int Slippage=5;
extern int MagicNumber =1;
extern int TradeHour3=3;
extern int TradeHour4=4;
extern int TradeHour7=7;
extern int TradeHour10=10;
extern int TradeHour17=17;
extern int TradeHour18=18;
extern int TradeHour20=20;
extern int TradeHour12=12;
extern int TradeHour23=23;
extern int StopLoss=40;

//Globale Variablen
int BuyTicket;
int SellTicket;
double UsePoint;
int UseSlippage;


//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
UsePoint = PipPoint(Symbol());
UseSlippage = GetSlippage(Symbol(), Slippage);
double FreeDepo=NormalizeDouble(AccountBalance()-AccountMargin(),Digits2Round);
double Risk=NormalizeDouble((FreeDepo*PercentOfFreeDepo/100),Digits2Round);
double Lot=NormalizeDouble(Risk/(StopLoss/0.0001)*0.1,Digits2Round);
//===================== Lets determine lot size and risk ===================================

if ( Lot < Minlot )
{
Lot=Minlot;
}
Comment( "\n","Acceptable risk is ",PercentOfFreeDepo, "% = ",Risk," of the free money ",FreeDepo," in lots = ",Lot);



}

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
// Buy criteria
OrderSelect(SellTicket || BuyTicket, SELECT_BY_TICKET);
//Close Order
if(OrderCloseTime() == 0 && SellTicket > 0 || BuyTicket > 0)
{
double CloseLots = OrderLots();
double ClosePrice = Ask;
bool Closed = OrderClose(SellTicket ,CloseLots, ClosePrice, UseSlippage, Red);
}
double OpenPrice = Ask;
//BuyOrder
if ((TradeHour3==Hour())||(TradeHour4==Hour())||(Trad eHour7==Hour())||(TradeHour10==Hour())||(TradeHour 17==Hour())||(TradeHour18==Hour())||(TradeHour20== Hour())) //Signal Buy
{
int openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage ,StopLoss,0,"time trader buy order ",MagicNumber,0,Blue);
}
SellTicket = 0;
BuyTicket = 0;

// Sell criteria
OrderSelect(BuyTicket || SellTicket, SELECT_BY_TICKET);
//Close Order
if(OrderCloseTime() == 0 && BuyTicket > 0 || BuyTicket > 0)
{
CloseLots = OrderLots();
ClosePrice = Bid;
Closed = OrderClose(BuyTicket, CloseLots, ClosePrice, UseSlippage, Red);
}
OpenPrice = Bid;
//SellOrder
if ((TradeHour12==Hour())||(TradeHour23==Hour())) //Signal Sell
{
int opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippa ge,StopLoss,0,"time trader sell order ",MagicNumber,0,Green);
}
SellTicket = 0;
BuyTicket = 0;

//----
return(0);
}
//+------------------------------------------------------------------+
//Pip Point Function
double PipPoint (string Currency)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01;
else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001;
return (CalcPoint);
}

//Get Slippage Function
int GetSlippage(string Currency, int SlippagePips)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 3) double CalcSlippage = SlippagePips;
else if(CalcDigits == 4 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
return (CalcSlippage);
}











Leiderkomme ich noch den Fehlerhinweis beim Kompilieren, dass "Lot" nicht definiert wurde...??

Mast83 05.02.12 21:23

//+------------------------------------------------------------------+
//| Der Stundentrader.mq4 |
//| Der Marc |
//| Es gibt gar keine Internetseite |
//+------------------------------------------------------------------+
#property copyright "Der Marc"
#property link "Es gibt gar keine Internetseite"

//Wichtige Variablen
extern double Minlot=0.01;
extern int Digits2Round=2;
extern int PercentOfFreeDepo=1;
extern int Slippage=5;
extern int MagicNumber =1;
extern int TradeHour3=3;
extern int TradeHour4=4;
extern int TradeHour7=7;
extern int TradeHour10=10;
extern int TradeHour17=17;
extern int TradeHour18=18;
extern int TradeHour20=20;
extern int TradeHour12=12;
extern int TradeHour23=23;
extern int StopLoss=40;

//Globale Variablen
int BuyTicket;
int SellTicket;
double UsePoint;
int UseSlippage;


//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
UsePoint = PipPoint(Symbol());
UseSlippage = GetSlippage(Symbol(), Slippage);
}

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double FreeDepo=NormalizeDouble(AccountBalance()-AccountMargin(),Digits2Round);
double Risk=NormalizeDouble((FreeDepo*PercentOfFreeDepo/100),Digits2Round);
double Lot=NormalizeDouble(Risk/(StopLoss/0.0001)*0.1,Digits2Round);
//===================== Lets determine lot size and risk ===================================
if ( Lot<Minlot )
{
Lot=Minlot;
}
Comment( "\n","Acceptable risk is ",PercentOfFreeDepo, "% = ",Risk," of the free money ",FreeDepo," in lots = ",Lot);
// Buy criteria
OrderSelect(SellTicket || BuyTicket, SELECT_BY_TICKET);
//Close Order
if(OrderCloseTime() == 0 && SellTicket > 0 || BuyTicket > 0)
{
double CloseLots = OrderLots();
double ClosePrice = Ask;
bool Closed = OrderClose(SellTicket ,CloseLots, ClosePrice, UseSlippage, Red);
}
double OpenPrice = Ask;
//BuyOrder
if ((TradeHour3==Hour())||(TradeHour4==Hour())||(Trad eHour7==Hour())||(TradeHour10==Hour())||(TradeHour 17==Hour())||(TradeHour18==Hour())||(TradeHour20== Hour())) //Signal Buy
{
int openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage ,StopLoss,0,"time trader buy order ",MagicNumber,0,Blue);
}
SellTicket = 0;
BuyTicket = 0;
// Sell criteria
OrderSelect(BuyTicket || SellTicket, SELECT_BY_TICKET);
//Close Order
if(OrderCloseTime() == 0 && BuyTicket > 0 || BuyTicket > 0)
{
CloseLots = OrderLots();
ClosePrice = Bid;
Closed = OrderClose(BuyTicket, CloseLots, ClosePrice, UseSlippage, Red);
}
OpenPrice = Bid;
//SellOrder
if ((TradeHour12==Hour())||(TradeHour23==Hour())) //Signal Sell
{
int opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippa ge,StopLoss,0,"time trader sell order ",MagicNumber,0,Green);
}
SellTicket = 0;
BuyTicket = 0;

//----
return(0);
}
//+------------------------------------------------------------------+
//Pip Point Function
double PipPoint (string Currency)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01;
else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001;
return (CalcPoint);
}

//Get Slippage Function
int GetSlippage(string Currency, int SlippagePips)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 3) double CalcSlippage = SlippagePips;
else if(CalcDigits == 4 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
return (CalcSlippage);
}


So nun schaut es besser aus...
Übrigens...ich habe festegestellt, dass die offene Position direkt geschlossen wird und nicht erst nach der Stunde..nochmals vielen Dank für die Hilfe

VG und Danke Marc

Mast83 05.02.12 21:56

Habe nun OrderOpenTime beigepackt und gegen TimeCurrent laufen lassen...leider öffnet der immer noch mehrere Positionen und diese laufen auch wundervoll in den Stop...
Der soll doch nur eine Position eröffnen...Jetzt benötige ich Hilfe bzgl meines Denkfehlers:

//+------------------------------------------------------------------+
//| Der Stundentrader.mq4 |
//| Der Marc |
//| Es gibt gar keine Internetseite |
//+------------------------------------------------------------------+
#property copyright "Der Marc"
#property link "Es gibt gar keine Internetseite"

//Wichtige Variablen
extern double Minlot=0.01;
extern int Digits2Round=2;
extern int PercentOfFreeDepo=1;
extern int Slippage=5;
extern int MagicNumber =1;
extern int TradeHour3=3;
extern int TradeHour4=4;
extern int TradeHour7=7;
extern int TradeHour10=10;
extern int TradeHour17=17;
extern int TradeHour18=18;
extern int TradeHour20=20;
extern int TradeHour12=12;
extern int TradeHour23=23;
extern int StopLoss=40;

//Globale Variablen
int BuyTicket;
int SellTicket;
double UsePoint;
int UseSlippage;


//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
UsePoint = PipPoint(Symbol());
UseSlippage = GetSlippage(Symbol(), Slippage);
}

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double FreeDepo=NormalizeDouble(AccountBalance()-AccountMargin(),Digits2Round);
double Risk=NormalizeDouble((FreeDepo*PercentOfFreeDepo/100),Digits2Round);
double Lot=NormalizeDouble(Risk/(StopLoss/0.0001)*0.1,Digits2Round);
//===================== Lets determine lot size and risk ===================================
if ( Lot<Minlot )
{
Lot=Minlot;
}
Comment( "\n","Acceptable risk is ",PercentOfFreeDepo, "% = ",Risk," of the free money ",FreeDepo," in lots = ",Lot);
// Buy criteria
OrderSelect(SellTicket || BuyTicket, SELECT_BY_TICKET);
//Close Order
if((OrderOpenTime()+3600) > TimeCurrent() && SellTicket > 0 || BuyTicket > 0)
{
double CloseLots = OrderLots();
double ClosePrice = Ask;
bool Closed = OrderClose(SellTicket ,CloseLots, ClosePrice, UseSlippage, Red);
}
double OpenPrice = Ask;
//BuyOrder
if ((TradeHour3==Hour())||(TradeHour4==Hour())||(Trad eHour7==Hour())||(TradeHour10==Hour())||(TradeHour 17==Hour())||(TradeHour18==Hour())||(TradeHour20== Hour())) //Signal Buy
{
int openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage ,StopLoss,0,"time trader buy order ",MagicNumber,0,Blue);
}
SellTicket = 0;
BuyTicket = 0;
// Sell criteria
OrderSelect(BuyTicket || SellTicket, SELECT_BY_TICKET);
//Close Order
if((OrderOpenTime()+3600) > TimeCurrent() && SellTicket > 0 || BuyTicket > 0)
{
CloseLots = OrderLots();
ClosePrice = Bid;
Closed = OrderClose(BuyTicket, CloseLots, ClosePrice, UseSlippage, Red);
}
OpenPrice = Bid;
//SellOrder
if ((TradeHour12==Hour())||(TradeHour23==Hour())) //Signal Sell
{
int opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippa ge,StopLoss,0,"time trader sell order ",MagicNumber,0,Green);
}
SellTicket = 0;
BuyTicket = 0;

//----
return(0);
}
//+------------------------------------------------------------------+
//Pip Point Function
double PipPoint (string Currency)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01;
else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001;
return (CalcPoint);
}

//Get Slippage Function
int GetSlippage(string Currency, int SlippagePips)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips;
else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
return (CalcSlippage);
}

Free99 06.02.12 06:15

also erstmal:
wenn du Code postest: den Code Button (ich weiss, hab ich beim ersten Mal auch nicht gemacht ^^) drücken und den Code dort reinkopieren...
dann bitte strukturierter schreiben, wenn du willst, dass andere sich einlesen können. Dann solltest du allgemein mal schaun, ob du solche Codeschnipsel wirklich so meinst...

Code:

if((OrderOpenTime()+3600) > TimeCurrent() && SellTicket > 0 || BuyTicket > 0)
ggf. mal nach Boolescher Algebra googlen...
das bedeutet: wenn die Order abgelaufen ist UND es ein SellTicket ist
ODER aber es ist ein BuyTicket...

ich denke aber du meinst
wenn die Order abgelaufen ist UND (entweder Sell oder Buy)

verstehst du was ich meine?

du machst im Prinzip aus einem gemeinten 4 * (3 + 2) = 20
ein
(4 * 3) + 2 = 14 (Klammer hab ich nur der Übersicht halber gesetzt, ist nat. nicht nötig)

//edith
Achso... und beim Posten bitte auch etwas Struktur ... Deine genaue Frage? Markierung des Codeabschnitts um den es nun wirklich geht, evtl. hast du schon eine Ahnung in welcher Ecke das Problem liegt, siehst es aber nicht ^^

Mast83 06.02.12 10:09

Guten Morgen,

Code:

//+------------------------------------------------------------------+
//| Der Stundentrader.mq4 |
//| Der Marc |
//| Es gibt gar keine Internetseite |
//+------------------------------------------------------------------+
#property copyright "Der Marc"
#property link "Es gibt gar keine Internetseite"

//Wichtige Variablen
extern double Minlot=0.01;
extern int Digits2Round=2;
extern int PercentOfFreeDepo=1;
extern int Slippage=5;
extern int MagicNumber =1;
extern int TradeHour3=3;
extern int TradeHour4=4;
extern int TradeHour7=7;
extern int TradeHour10=10;
extern int TradeHour17=17;
extern int TradeHour18=18;
extern int TradeHour20=20;
extern int TradeHour12=12;
extern int TradeHour23=23;
extern int StopLoss=40;

//Globale Variablen
int BuyTicket;
int SellTicket;
double UsePoint;
int UseSlippage;


//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
UsePoint = PipPoint(Symbol());
UseSlippage = GetSlippage(Symbol(), Slippage);
}

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double FreeDepo=NormalizeDouble(AccountBalance()-AccountMargin(),Digits2Round);
double Risk=NormalizeDouble((FreeDepo*PercentOfFreeDepo/100),Digits2Round);
double Lot=NormalizeDouble(Risk/(StopLoss/0.0001)*0.1,Digits2Round);
//===================== Lets determine lot size and risk ===================================
if ( Lot<Minlot )
{
Lot=Minlot;
}
Comment( "\n","Acceptable risk is ",PercentOfFreeDepo, "% = ",Risk," of the free money ",FreeDepo," in lots = ",Lot);
// Buy criteria
OrderSelect(SellTicket || BuyTicket, SELECT_BY_TICKET);
//Close Order
if((OrderOpenTime()+3600) > TimeCurrent() && SellTicket > 0 || BuyTicket > 0)
{
double CloseLots = OrderLots();
double ClosePrice = Ask;
bool Closed = OrderClose(SellTicket ,CloseLots, ClosePrice, UseSlippage, Red);
}
double OpenPrice = Ask;
//BuyOrder
if ((TradeHour3==Hour())||(TradeHour4==Hour())||(Trad eHour7==Hour())||(TradeHour10==Hour())||(TradeHour 17==Hour())||(TradeHour18==Hour())||(TradeHour20== Hour())) //Signal Buy
{
int openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage ,StopLoss,0,"time trader buy order ",MagicNumber,0,Blue);
}
SellTicket = 0;
BuyTicket = 0;
// Sell criteria
OrderSelect(BuyTicket || SellTicket, SELECT_BY_TICKET);
//Close Order
if((OrderOpenTime()+3600) > TimeCurrent() && SellTicket > 0 || BuyTicket > 0)
{
CloseLots = OrderLots();
ClosePrice = Bid;
Closed = OrderClose(BuyTicket, CloseLots, ClosePrice, UseSlippage, Red);
}
OpenPrice = Bid;
//SellOrder
if ((TradeHour12==Hour())||(TradeHour23==Hour())) //Signal Sell
{
int opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippa ge,StopLoss,0,"time trader sell order ",MagicNumber,0,Green);
}
SellTicket = 0;
BuyTicket = 0;

//----
return(0);
}
//+------------------------------------------------------------------+
//Pip Point Function
double PipPoint (string Currency)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01;
else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001;
return (CalcPoint);
}

//Get Slippage Function
int GetSlippage(string Currency, int SlippagePips)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips;
else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
return (CalcSlippage);
}

Beim Fehler gehe ich davon aus, dass etwas mit der OrderSelect nicht stimmt...aber leider steige ich nicht dahinter... Es werden zu viele Trade auf einmal platziert...dann folgt das Problem, dass die SL nicht beachtet wird. Wo der Fehler genau liegt kann ich allerdings nicht sagen :(

Mast83 06.02.12 11:06

Zitat:

Zitat von Free99 (Beitrag 9110)
also erstmal:
wenn du Code postest: den Code Button (ich weiss, hab ich beim ersten Mal auch nicht gemacht ^^) drücken und den Code dort reinkopieren...
dann bitte strukturierter schreiben, wenn du willst, dass andere sich einlesen können. Dann solltest du allgemein mal schaun, ob du solche Codeschnipsel wirklich so meinst...

Code:

if((OrderOpenTime()+3600) > TimeCurrent() && SellTicket > 0 || BuyTicket > 0)
ggf. mal nach Boolescher Algebra googlen...
das bedeutet: wenn die Order abgelaufen ist UND es ein SellTicket ist
ODER aber es ist ein BuyTicket...

ich denke aber du meinst
wenn die Order abgelaufen ist UND (entweder Sell oder Buy)

verstehst du was ich meine?

du machst im Prinzip aus einem gemeinten 4 * (3 + 2) = 20
ein
(4 * 3) + 2 = 14 (Klammer hab ich nur der Übersicht halber gesetzt, ist nat. nicht nötig)

//edith
Achso... und beim Posten bitte auch etwas Struktur ... Deine genaue Frage? Markierung des Codeabschnitts um den es nun wirklich geht, evtl. hast du schon eine Ahnung in welcher Ecke das Problem liegt, siehst es aber nicht ^^

Im Endeffekt will ich ja zu den vorgegebenen Std eine Marktorder platzieren und diese soll nach der Stunde automatisch geschlossen

naranjoe 06.02.12 15:23

So wird das nix.
Zunächst stimmt das ">" nicht. Richtig muss die Zeile heissen
if((OrderOpenTime()+3600) < TimeCurrent()

Dann ist dein komplettes "OrderSelect" falsch, das kann so nicht funktionieren.

Außerdem fragst du beim setzen einer Order auch nicht ab, ob schon eine geöffnet ist. Dadurch werden permanent neue Order geöffnet.

Ich habe dir das mal soweit korrigiert
Code:

//+------------------------------------------------------------------+
//| Der Stundentrader.mq4 |
//| Der Marc |
//| Es gibt gar keine Internetseite |
//+------------------------------------------------------------------+
#property copyright "Der Marc"
#property link "Es gibt gar keine Internetseite"

//Wichtige Variablen
extern double Minlot=0.01;
extern int Digits2Round=2;
extern int PercentOfFreeDepo=1;
extern int Slippage=5;
extern int MagicNumber =1;
extern int TradeHour3=3;
extern int TradeHour4=4;
extern int TradeHour7=7;
extern int TradeHour10=10;
extern int TradeHour17=17;
extern int TradeHour18=18;
extern int TradeHour20=20;
extern int TradeHour12=12;
extern int TradeHour23=23;
extern int StopLoss=40;

//Globale Variablen
int BuyTicket;
int SellTicket;
double UsePoint;
int UseSlippage;

int openbuy = 0;
int opensell = 0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
UsePoint = PipPoint(Symbol());
UseSlippage = GetSlippage(Symbol(), Slippage);
}

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double FreeDepo=NormalizeDouble(AccountBalance()-AccountMargin(),Digits2Round);
double Risk=NormalizeDouble((FreeDepo*PercentOfFreeDepo/100),Digits2Round);
double Lot=NormalizeDouble(Risk/(StopLoss/0.0001)*0.1,Digits2Round);
//===================== Lets determine lot size and risk ===================================
if ( Lot<Minlot )
{
Lot=Minlot;
}
Comment( "\n","Acceptable risk is ",PercentOfFreeDepo, "% = ",Risk," of the free money ",FreeDepo," in lots = ",Lot);
for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
      if((OrderOpenTime()+3600) < TimeCurrent())
          {
          if (OrderType() == OP_BUY)         
              {
              bool Closed = OrderClose(OrderTicket() ,OrderLots(), Ask, UseSlippage, Red);         
              openbuy = 0;
              }
          if (OrderType() == OP_SELL)         
              {
              Closed = OrderClose(OrderTicket() ,OrderLots(), Bid, UseSlippage, Red); 
              opensell = 0;       
              }             
          }
      }
    }


//BuyOrder
if ((TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour7==Hour())||(TradeHour10==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour20== Hour()) && openbuy == 0) //Signal Buy
{
  openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage ,Ask - StopLoss * Point,0,"time trader buy order ",MagicNumber,0,Blue);
}
//SellOrder
if ((TradeHour12==Hour())||(TradeHour23==Hour())&& opensell == 0) //Signal Sell
{
  opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Bid + StopLoss * Point,0,"time trader sell order ",MagicNumber,0,Green);
}

//----
return(0);
}
//+------------------------------------------------------------------+
//Pip Point Function
double PipPoint (string Currency)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01;
else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001;
return (CalcPoint);
}

//Get Slippage Function
int GetSlippage(string Currency, int SlippagePips)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips;
else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
return (CalcSlippage);
}

Ist jetzt nicht gerade elegant gelöst, funktioniert aber :).
MinLot solltest du beim Broker erfragen (MODE_MINLOT), könnte sonst vieleicht nicht passen!

Gruß
naranjoe

Free99 06.02.12 16:34

tja da dachte ich ich hatte nen Denkfehler und am Ende wars dann doch richtig ^^

Mast83 06.02.12 17:31

Zitat:

Zitat von naranjoe (Beitrag 9131)
So wird das nix.
Zunächst stimmt das ">" nicht. Richtig muss die Zeile heissen
if((OrderOpenTime()+3600) < TimeCurrent()

Dann ist dein komplettes "OrderSelect" falsch, das kann so nicht funktionieren.

Außerdem fragst du beim setzen einer Order auch nicht ab, ob schon eine geöffnet ist. Dadurch werden permanent neue Order geöffnet.

Ich habe dir das mal soweit korrigiert
Code:

//+------------------------------------------------------------------+
//| Der Stundentrader.mq4 |
//| Der Marc |
//| Es gibt gar keine Internetseite |
//+------------------------------------------------------------------+
#property copyright "Der Marc"
#property link "Es gibt gar keine Internetseite"

//Wichtige Variablen
extern double Minlot=0.01;
extern int Digits2Round=2;
extern int PercentOfFreeDepo=1;
extern int Slippage=5;
extern int MagicNumber =1;
extern int TradeHour3=3;
extern int TradeHour4=4;
extern int TradeHour7=7;
extern int TradeHour10=10;
extern int TradeHour17=17;
extern int TradeHour18=18;
extern int TradeHour20=20;
extern int TradeHour12=12;
extern int TradeHour23=23;
extern int StopLoss=40;

//Globale Variablen
int BuyTicket;
int SellTicket;
double UsePoint;
int UseSlippage;

int openbuy = 0;
int opensell = 0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
UsePoint = PipPoint(Symbol());
UseSlippage = GetSlippage(Symbol(), Slippage);
}

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double FreeDepo=NormalizeDouble(AccountBalance()-AccountMargin(),Digits2Round);
double Risk=NormalizeDouble((FreeDepo*PercentOfFreeDepo/100),Digits2Round);
double Lot=NormalizeDouble(Risk/(StopLoss/0.0001)*0.1,Digits2Round);
//===================== Lets determine lot size and risk ===================================
if ( Lot<Minlot )
{
Lot=Minlot;
}
Comment( "\n","Acceptable risk is ",PercentOfFreeDepo, "% = ",Risk," of the free money ",FreeDepo," in lots = ",Lot);
for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
      if((OrderOpenTime()+3600) < TimeCurrent())
          {
          if (OrderType() == OP_BUY)         
              {
              bool Closed = OrderClose(OrderTicket() ,OrderLots(), Ask, UseSlippage, Red);         
              openbuy = 0;
              }
          if (OrderType() == OP_SELL)         
              {
              Closed = OrderClose(OrderTicket() ,OrderLots(), Bid, UseSlippage, Red); 
              opensell = 0;       
              }             
          }
      }
    }


//BuyOrder
if ((TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour7==Hour())||(TradeHour10==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour20== Hour()) && openbuy == 0) //Signal Buy
{
  openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage ,Ask - StopLoss * Point,0,"time trader buy order ",MagicNumber,0,Blue);
}
//SellOrder
if ((TradeHour12==Hour())||(TradeHour23==Hour())&& opensell == 0) //Signal Sell
{
  opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Bid + StopLoss * Point,0,"time trader sell order ",MagicNumber,0,Green);
}

//----
return(0);
}
//+------------------------------------------------------------------+
//Pip Point Function
double PipPoint (string Currency)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01;
else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001;
return (CalcPoint);
}

//Get Slippage Function
int GetSlippage(string Currency, int SlippagePips)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips;
else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
return (CalcSlippage);
}

Ist jetzt nicht gerade elegant gelöst, funktioniert aber :).
MinLot solltest du beim Broker erfragen (MODE_MINLOT), könnte sonst vieleicht nicht passen!

Gruß
naranjoe


Hallo Naranjoe,

auch Dir vielen Dank für Deine hilfe. Ich hatte bereits daran gedacht das ganze durch aufzähung zu lösen, aber mal ne Frage...ich werde aus der Dokumentation inm MQL Forum nicht ganz schlau...woher weiß ich was ich in die Orderselect alles reinpacken kann?
Gibt es eine Übersicht auf Deutsch zu diesem Thema...obwohl ich denke vom Verständnis tut sich in beiden Sprachen nicht sonderlich viel...
Immer wen ihc denke ich habe etwas geschafft tut sich was neues auf und ich habe nicht das Gefühl weiter zu kommen. Ich hatte mir vor einiger zeit das Buch "Expert Advisor Programming" geholt. Ein wenig komme ich damit zu recht, aber allein für die ersten beiden Kapitel...vll so 30 Seiten...habe ich schon 2 Monate gebraucht um vll mal wirklich ein wenig hinter die Thematik zu kommen und zu verstehen wie sich so ein Aufbau gliedern soll/muss...

VG und Danke

Marc

Mast83 06.02.12 18:04

Eine letzte Frage habe ich aber noch...es werden nur 2 der ganzen Orders platziert...bzw ausgeführt...einmal die um 12 Uhr und die um 23 Uhr...das sind die beiden Verkauforders...nun aber...die Kauforders...ich habe spontan jetzt keinen Fehler bei Dir entdecken können^^

Mast83 06.02.12 18:16

Noch eine Sache die ich gerne wissen wollte...beim Backtesting vom 01.01.2011 bis heute rechnet der gerade mal die ersten 3 Monate des Jahres 2011...gibt darüber hinaus keine weiteren Fehlerhinweise und weiter passiert nichts...auch die Margin wird nicht aufgefressen bzw hab ich eine offene Position im Markt...was kann das sein?

naranjoe 07.02.12 08:25

Zitat:

Eine letzte Frage habe ich aber noch...es werden nur 2 der ganzen Orders platziert...bzw ausgeführt...einmal die um 12 Uhr und die um 23 Uhr...das sind die beiden Verkauforders...nun aber...die Kauforders...ich habe spontan jetzt keinen Fehler bei Dir entdecken können
Hast du beim Tester auch "Long&Short" eingestellt.
Eigentlich laufen alle Positionen wie eingestellt.
Aber ein Fehler steckt noch drin
Zitat:

Noch eine Sache die ich gerne wissen wollte...beim Backtesting vom 01.01.2011 bis heute rechnet der gerade mal die ersten 3 Monate des Jahres 2011...gibt darüber hinaus keine weiteren Fehlerhinweise und weiter passiert nichts...auch die Margin wird nicht aufgefressen bzw hab ich eine offene Po
Das hängt wohl daran, das die openbuy bzw. opensell nicht zurückgesetzt wird, wenn eine Order ins SL läuft. Müsstest du noch einpflegen.

gruß
naranjoe

naranjoe 07.02.12 10:24

OrderSelect
 
Hallo,

also eigentlich ist die beste Hilfe für alle mql4 funktionen im Metaeditor enthalten.
In der MQL4-Reference steht alles was du wissen must.
Um die Thematik besser zu verstehen gilt der Grundsatz "Learning bei doing".
Du machst das schon ganz gut. Überlege dir eigene Projekte und versuche diese umzusetzen. Wenns mal gar nicht will, bekommst du hier sicherlich Hilfe.

Gruß
naranjoe

Mast83 07.02.12 12:09

Zitat:

Zitat von naranjoe (Beitrag 9179)
Hast du beim Tester auch "Long&Short" eingestellt.
Eigentlich laufen alle Positionen wie eingestellt.
Aber ein Fehler steckt noch drin

Das hängt wohl daran, das die openbuy bzw. opensell nicht zurückgesetzt wird, wenn eine Order ins SL läuft. Müsstest du noch einpflegen.

gruß
naranjoe

Hallo Naranjoe,

also ich habe das Problem mit dem einpflegen der Rücksetzung erst mal dadurch behoben, dass ich den SL gänzlich entfernt habe.
Learning by Doing scheint wirklich das bete zu sein, aber es ist langwierig und ich muss ehrlich gestehen, dass ich als absoluter newbie gar keinen plan davon habe wie weit das ganze noch gehen kann...derzeit hole ich mir die Grundgerüste von diversenen Seiten aus denen ich zumindest annähernd verstehen kann worum es in dem EA geht und ob ich das gleiche Ziel verfolge...also vom Inhalt...

Mast83 07.02.12 12:13

vorerst Finaler EA...mit Mäßigem Durchschnitt :(
 
Code:

//+------------------------------------------------------------------+
//| Der Stundentrader.mq4 |
//| Der Marc |
//| Es gibt gar keine Internetseite |
//+------------------------------------------------------------------+
#property copyright "Der Marc"
#property link "Es gibt gar keine Internetseite"

//Wichtige Variablen
extern double Minlot=0.01;
extern int Digits2Round=2;
extern int PercentOfFreeDepo=1;
extern int Slippage=5;
extern int MagicNumber =1;
extern int TradeHour3=3;
extern int TradeHour4=4;
extern int TradeHour7=7;
extern int TradeHour10=10;
extern int TradeHour17=17;
extern int TradeHour18=18;
extern int TradeHour20=20;
extern int TradeHour12=12;
extern int TradeHour23=23;
extern int StopLoss=300;
extern int TakeProfit=500;

//Globale Variablen
int BuyTicket;
int SellTicket;
double UsePoint;
int UseSlippage;

int openbuy = 0;
int opensell = 0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
UsePoint = PipPoint(Symbol());
UseSlippage = GetSlippage(Symbol(), Slippage);
}

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double FreeDepo=NormalizeDouble(AccountBalance()-AccountMargin(),Digits2Round);
double Risk=NormalizeDouble((FreeDepo*PercentOfFreeDepo/100),Digits2Round);
double Lot=NormalizeDouble(Risk/(StopLoss/0.0001)*0.1,Digits2Round);
//===================== Lets determine lot size and risk ===================================
if ( Lot<Minlot )
{
Lot=Minlot;
}
Comment( "\n","Acceptable risk is ",PercentOfFreeDepo, "% = ",Risk," of the free money ",FreeDepo," in lots = ",Lot);
for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
      if((OrderOpenTime()+3600) < TimeCurrent())
          {
          if (OrderType() == OP_BUY || OP_SELL)         
              {
              bool Closed = OrderClose(OrderTicket() ,OrderLots(), OrderClosePrice(), UseSlippage, Red);         
              openbuy = 0;
              opensell = 0;
              }
          if (OrderType() == OP_SELL || OP_BUY)         
              {
              Closed = OrderClose(OrderTicket() ,OrderLots(), OrderClosePrice(), UseSlippage, Red); 
              opensell = 0;
              openbuy = 0;       
              }             
          }
      }
    }
//BuyOrder
if ((TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour7==Hour())||(TradeHour10==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour20== Hour()) && openbuy == 0) //Signal Buy
{
  openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage ,0,0,"time trader buy order ",MagicNumber,0,Blue);
  if (openbuy < 0) Print("OrderSend OP_BUY failed, error: ", GetLastError() );
}
//SellOrder
if ((TradeHour12==Hour())||(TradeHour23==Hour())&& opensell == 0) //Signal Sell
{
  opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,0,0,"time trader sell order ",MagicNumber,0,Green);
  if (opensell < 0) Print("OrderSend OP_SELL failed, error: ", GetLastError() );
}

//----
return(0);
}
//+------------------------------------------------------------------+
//Pip Point Function
double PipPoint (string Currency)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01;
else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001;
return (CalcPoint);
}

//Get Slippage Function
int GetSlippage(string Currency, int SlippagePips)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips;
else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
return (CalcSlippage);
}


Jetzt aber folgendes noch zum Rücksetzen von openbuy und opensell auf = 0. Ich dachte ich kann das machen indem ich bei der eigentlichen Orderausführung den Wert auf 0 setze...also:
Code:

//BuyOrder
if ((TradeHour3==Hour())||(TradeHour4==Hour())||(TradeHour7==Hour())||(TradeHour10==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour20== Hour()) && openbuy == 0) //Signal Buy
{
  openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage ,0,0,"time trader buy order ",MagicNumber,0,Blue);
  if (openbuy < 0) Print("OrderSend OP_BUY failed, error: ", GetLastError() );
opensell = 0;
openbuy = 0;

}
//SellOrder
if ((TradeHour12==Hour())||(TradeHour23==Hour())&& opensell == 0) //Signal Sell
{
  opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,0,0,"time trader sell order ",MagicNumber,0,Green);
  if (opensell < 0) Print("OrderSend OP_SELL failed, error: ", GetLastError() );
opensell = 0;
openbuy = 0;

}

Das hat aber zur Folge, dass der Wert immer wieder auf 0 gesetzt wird und ich das alte Spiel habe...Es werden "unendlich" viele Marktorders platziert...also muss ich schauen, dass ich es mit dem SL verknüpfe oder? Da fehlt mir nun der Ansatz...Zu Berücksichtigen ist, dass ich den SL und den TP noch nicht aktiviert habe, sondern einfach nur die beiden Definiert habe ohne, dass diese zum Einsatz kommen bzw. abgefragt werden.

naranjoe 07.02.12 14:59

Also,

die openbuy/opensell variable enthält nach dem setzen der Order das Orderticket. openbuy=OrderSend(Symbol()...
Wenn also openbuy/opensell nicht 0 ist, ist eine Order geöffnet und es soll keine weitere geöffnet werden. Das ist natürlich nur bedingt sinnvoll, da ja die Sache mit dem SL nicht berücksichtigt wird.

Warum hast du denn die OrderClose Funktion geändert? Diese Änderung verursacht Fehlermeldungen!!!

Mast83 07.02.12 15:36

Zitat:

Zitat von naranjoe (Beitrag 9199)
Also,

die openbuy/opensell variable enthält nach dem setzen der Order das Orderticket. openbuy=OrderSend(Symbol()...
Wenn also openbuy/opensell nicht 0 ist, ist eine Order geöffnet und es soll keine weitere geöffnet werden. Das ist natürlich nur bedingt sinnvoll, da ja die Sache mit dem SL nicht berücksichtigt wird.

Warum hast du denn die OrderClose Funktion geändert? Diese Änderung verursacht Fehlermeldungen!!!

Also inzwischen schaut es folgender Maßen aus und ich erhalte keine Fehlermeldungen...Orderclose wird jetzt auch mit MagicNumber verknüpft:
Code:

//+------------------------------------------------------------------+
//| Der Stundentrader.mq4 |
//| Der Marc |
//| Es gibt gar keine Internetseite |
//+------------------------------------------------------------------+
#property copyright "Der Marc"
#property link "Es gibt gar keine Internetseite"

//Wichtige Variablen
extern double Minlot=0.01;
extern int Digits2Round=2;
extern int PercentOfFreeDepo=1;
extern int Slippage=5;
extern int MagicNumber=1;
extern int TradeHour0=0;
extern int TradeHour1=1;
extern int TradeHour2=2;
extern int TradeHour3=3;
extern int TradeHour4=4;
extern int TradeHour5=5;
extern int TradeHour6=6;
extern int TradeHour7=7;
extern int TradeHour8=8;
extern int TradeHour9=9;
extern int TradeHour10=10;
extern int TradeHour11=11;
extern int TradeHour12=12;
extern int TradeHour13=13;
extern int TradeHour14=14;
extern int TradeHour15=15;
extern int TradeHour16=16;
extern int TradeHour17=17;
extern int TradeHour18=18;
extern int TradeHour19=19;
extern int TradeHour20=20;
extern int TradeHour21=21;
extern int TradeHour22=22;
extern int TradeHour23=23;
extern int StopLoss=300;
extern int TakeProfit=500;

//Globale Variablen
int BuyTicket;
int SellTicket;
double UsePoint;
int UseSlippage;

int openbuy = 0;
int opensell = 0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
UsePoint = PipPoint(Symbol());
UseSlippage = GetSlippage(Symbol(), Slippage);
}

//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
double FreeDepo=NormalizeDouble(AccountBalance()-AccountMargin(),Digits2Round);
double Risk=NormalizeDouble((FreeDepo*PercentOfFreeDepo/100),Digits2Round);
double Lot=NormalizeDouble(Risk/(StopLoss/0.0001)*0.1,Digits2Round);
//===================== Lets determine lot size and risk ===================================
if ( Lot<Minlot )
{
Lot=Minlot;
}
Comment( "\n","Acceptable risk is ",PercentOfFreeDepo, "% = ",Risk," of the free money ",FreeDepo," in lots = ",Lot);
opensell = 0;
openbuy =0;
for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))  //==> select also on magicnumber and symbol
      {
      if(OrderMagicNumber()== MagicNumber && OrderSymbol()== Symbol() && OrderType() == OP_BUY){openbuy++;}
      if(OrderMagicNumber()== MagicNumber && OrderSymbol()== Symbol() && OrderType() == OP_SELL){opensell++;}
      if((OrderOpenTime()+3600) < TimeCurrent() && OrderMagicNumber()== MagicNumber && OrderSymbol()== Symbol())
          {
          if (OrderType() == OP_BUY)         
              {
              bool Closed = OrderClose(OrderTicket() ,OrderLots(), OrderClosePrice(), UseSlippage, Red);         
              openbuy = openbuy-1;    //openbuy--;
              }
          if (OrderType() == OP_SELL)         
              {
              Closed = OrderClose(OrderTicket() ,OrderLots(), OrderClosePrice(), UseSlippage, Red); 
              opensell = opensell-1;    //opensell--;
              }             
          }
      }
    }
//BuyOrder
if ((TradeHour3==Hour())||(TradeHour10==Hour())||(TradeHour15==Hour())||(TradeHour17==Hour())||(TradeHour21==Hour()) && openbuy == 0) //Signal Buy
{
  openbuy=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage ,Ask - StopLoss * Point,Bid + TakeProfit * Point,"time trader buy order ",MagicNumber,0,Blue);
  if (openbuy < 0) Print("OrderSend OP_BUY failed, error: ", GetLastError() );
}
//SellOrder
if ((TradeHour0==Hour())||(TradeHour11==Hour())||(TradeHour12==Hour())||(TradeHour13==Hour())||(TradeHour14==Hour())||(TradeHour16==Hour())||(TradeHour20==Hour())&& opensell == 0) //Signal Sell
{
  opensell=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Bid + StopLoss * Point,Ask - TakeProfit * Point,"time trader sell order ",MagicNumber,0,Green);
  if (opensell < 0) Print("OrderSend OP_SELL failed, error: ", GetLastError() );
}

//----
return(0);
}
//+------------------------------------------------------------------+
//Pip Point Function
double PipPoint (string Currency)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01;
else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001;
return (CalcPoint);
}

//Get Slippage Function
int GetSlippage(string Currency, int SlippagePips)
{
int CalcDigits = MarketInfo(Currency, MODE_DIGITS);
if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips;
else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
return (CalcSlippage);
}


Mast83 08.02.12 14:57

Inzwischen klappt es :) Vielen Dank für eure Hilfe


Alle Zeitangaben in WEZ +2. Es ist jetzt 14: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