在给定时间和/或SL后自动关闭订单 - 页 2

 
别担心,你会习惯的
 
nirvanamac:


是的,我当然明白......我不希望我的EA有奴隶,....,我唯一需要知道的是如何理解一个程序的工作方式......

如果你有一个简单的EA,如SMA Cross......这不是一个很大的问题......但你想实现的东西越多,就越困难......(至少对我来说是这样)。


//-------------------------------------------------------------------+
//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;}
        }
     }
}

看起来你所使用的大部分代码都来自这个https://www.mql5.com/en/code

根据你的说法,你所使用的上面的程序行是做什么的?

 
nirvanamac:
我想你是指洞口的代码还是?
我重复一遍
你只需要编写代码就可以了。你的OrderClose()和你的时间测试在哪里?
nirvanamac:
我的问题是把代码填入我现在的代码中......。
这里没有奴隶,学习 编码或付钱给别人。我们不打算为你编码。我们愿意帮助你。
 

你好,我想我找到了正确的方法,但它仍然是错误的。通常情况下,代码是这样的。

//+------------------------------------------------------------------+
//|                                            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);
  }

我有一个问题,我的EA在开仓后关闭了所有订单。正如你所看到的,我为所有的买入和卖出订单填写了OrderClosetime。我找不到告诉EA必须在1小时后关闭的功能......

 
nirvanamac:


是的,我当然明白......我不希望我的EA有奴隶,....,我唯一需要知道的是如何理解一个程序以何种方式工作......

如果你有一个简单的EA,如SMA Cross......这不是一个大问题......但你想实现的目标越多,就越困难......(至少对我来说)。

我目前的EA相当简单......。我有超过2000行的代码 ......其中大部分与方法无关,只是一些内务管理和标准功能,需要在我写的任何EA中出现。......比如计算头寸大小、下单、计算订单、检查订单在触及TP或SL时是否关闭、错误报告,等等,等等。我花了几个月的时间编写、测试、修改、测试......我的代码。
 
RaptorUK:
我目前的EA相当简单 ......我有超过2000行的代码 ......其中大部分与方法无关,只是一些内务管理和标准功能,需要在我写的任何EA中出现。......比如计算头寸大小、下单、计算订单、检查订单在触及TP或SL时是否关闭、错误报告,等等,等等。 我花了几个月的时间编写、测试、修改、测试......我的代码。


你把它上传到这里了吗?

 
nirvanamac:


你把它上传到这里了吗?

没有,我为什么要这样做?
 
我的代码(不包括交易逻辑)有1500多行,我确实上传了它。
 

大家好。

在花了几天的时间进行编程并查看了其他的EA之后,你可以看到目前的结果。

//+------------------------------------------------------------------+
//|                                            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);
  }

现在我有一个问题,就是在有更多的订单打开时,我也得到错误信息 "130"...