Auftrag automatisch nach einem bestimmten Zeitraum und/oder SL schließen - Seite 2

 
Mach dir keine Sorgen, du gewöhnst dich daran
 
nirvanamac:


Ja, natürlich verstehe ich das... Ich möchte keine Sklaven für meine EA's haben....das Einzige, was ich wissen muss, ist, wie man versteht, auf welche Weise ein Programm funktioniert...

Wenn Sie einen einfachen EA wie SMA Cross haben... ist das kein großes Problem... aber je mehr Sie erreichen wollen, desto schwieriger wird es...(zumindest für mich)


//-------------------------------------------------------------------+
//Check open orders
//-------------------------------------------------------------------+
if(OrdersTotal()>0){
  for(int i=1; i<=OrdersTotal(); i++)          // Cycle searching in orders
     {
      if (OrderSelect(i-1,SELECT_BY_POS)==true) // If the next is available
        {
          if(OrderMagicNumber()==BuyMagicNumber) {int halt1=1;}
          if(OrderMagicNumber()==SellMagicNumber) {int halt2=1;}
        }
     }
}

Es sieht so aus, als ob der Großteil des Codes, den Sie verwendet haben, von dieser https://www.mql5.com/en/code stammt.

Was machen die Programmzeilen, die Sie oben verwendet haben, Ihrer Meinung nach?

 
nirvanamac:
Ich denke, Sie meinen den gesamten Code oder?
Ich wiederhole
Sie müssen es nur codieren. Wo ist Ihr OrderClose() und Ihr Test für die Zeit?
nirvanamac:
Mein Problem ist, den Code in meinen jetzigen einzufügen...:
Keine Sklaven hier, lerne zu programmieren oder bezahle jemanden. Wir werden es nicht FÜR Sie programmieren. Wir sind bereit, Ihnen zu HILFEN.
 

Hallo zusammen, ich glaube, ich habe den richtigen Weg gefunden, aber es ist immer noch falsch. Eigentlich sieht der Code wie folgt aus:

//+------------------------------------------------------------------+
//|                                            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())||(TradeHour7==Hour())||(TradeHour10==Hour())||(TradeHour17==Hour())||(TradeHour18==Hour())||(TradeHour20==Hour())) //Signal Buy
 {
   int openbuy=OrderSend(Symbol(),OP_BUY,Lots,Ask,Slippage,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,Slippage,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);
  }

Ich habe das Problem, dass mein EA alle Orders nach dem Öffnen schließt. Wie Sie sehen können, habe ich in der OrderClosetime für alle Buy & SellTickets gefüllt. Ich kann nicht finden, die Funktion, um die EA zu sagen, dass es nach 1hour geschlossen werden muss...

 
nirvanamac:


Ja, natürlich verstehe ich das...ich will keine Sklaven für meine EA's....das Einzige, was ich wissen muss, ist, wie man versteht, auf welche Weise ein Programm funktioniert...

Wenn Sie einen einfachen EA wie SMA Cross haben, ist das kein großes Problem... aber je mehr Sie erreichen wollen, desto schwieriger wird es (zumindest für mich).

Mein aktueller EA ist ziemlich einfach... Ich habe über 2000 Zeilen Code in ihm ... das meiste davon hat nichts mit der Methode zu tun, sondern ist Housekeeping und Standardfunktionen, die in jedem EA sein müssen, den ich jemals schreiben werde ... . wie das Berechnen von Positionsgrößen, das Platzieren von Aufträgen, das Zählen von Aufträgen, das Überprüfen von Aufträgen, die geschlossen werden, wenn sie TP oder SL erreichen, Fehlerberichte, usw. usw. . Ich habe Monate damit verbracht, meinen Code zu schreiben, zu testen, zu ändern, zu testen...
 
RaptorUK:
Mein aktueller EA ist ziemlich einfach... Ich habe über 2000 Zeilen Code in ihm ... das meiste davon hat nichts mit der Methode zu tun, sondern ist Housekeeping und Standardfunktionen, die in jedem EA sein müssen, den ich jemals schreiben werde ... . wie das Berechnen von Positionsgrößen, das Platzieren von Aufträgen, das Zählen von Aufträgen, das Überprüfen von Aufträgen, die geschlossen werden, wenn sie TP oder SL erreichen, Fehlerberichte, usw. usw. . Ich habe Monate damit verbracht, meinen Code zu schreiben, zu testen, zu ändern, zu testen...


Haben Sie ihn hier hochgeladen?

 
nirvanamac:


Haben Sie es hier hochgeladen?

Nein, warum sollte ich das tun?
 
Mein Code (ohne die Handelslogik) besteht aus über 1500 Zeilen und ich habe ihn hochgeladen.
 

Hallo zusammen,

nachdem ich mich ein paar Tage mit der Programmierung beschäftigt habe und andere EA's durchgesehen habe, hier das aktuelle Ergebnis:

//+------------------------------------------------------------------+
//|                                            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())||(TradeHour7==Hour())||(TradeHour10==Hour())||(TradeHour17==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,Slippage,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);
  }

Nun habe ich das Problem, dass während der Zeit, in der mehr Orders als 1 geöffnet sind, die Fehlermeldung "130" kommt...