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 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 13:59 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