求教: 如何将所有超出X天以上的订单全部平仓

 
自己做了个EA,测试后发现持仓22天以上的订单,基本是亏多赚少,想将所有超出X天以上的订单全部平仓
 
void CloseOrderOverDays(int magic, string symbol,int days=22)
{  
   for(int i=OrdersTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i,SELECT_BY_POS))
      {
         if(OrderMagicNumber()==magic && OrderType()<=1 && OrderSymbol()==symbol)
         {
            if(iBarShift(symbol,PERIOD_D1,OrderOpenTime())>=days)
            {
               bool res = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),100,clrNONE);
            }
         }
      }
   }
}
//+------------------------------------------------------------------+
 
databelieve:
自己做了个EA,测试后发现持仓22天以上的订单,基本是亏多赚少,想将所有超出X天以上的订单全部平仓

直接給你自定義函數 

至於怎麼用就要自己像瞜 

測過分鐘可以用

加進去記得先測試

編成腳本也可以用 隨時想超時平倉舊讓他平倉


input int OverDays=22;


void OnTick()

{

.

.

deleteorderX(OverDays); //自己找合適的地方加 

.

.

.

}


void deleteorderX(int overtime)

  {

   datetime time=TimeCurrent()-overtime*24*60*60;

   for(int i=OrdersTotal()-1;i>=0;i--)

     {

      if(OrderSelect(i,SELECT_BY_POS))

         if(OrderOpenTime()<=time)

           {

            if(OrderType()>=2)

              {

               if(OrderDelete(OrderTicket())==false)

                  printf("OrderClose");

               i=OrdersTotal();

              }

           }

        }

  }


 
databelieve:
自己做了个EA,测试后发现持仓22天以上的订单,基本是亏多赚少,想将所有超出X天以上的订单全部平仓

哈哈哈 :D,  这样做还是亏损的哦,,,等你的好消息

 

私信得知,楼主用的MT5。

MT5版本的平仓代码,供参考:

//+------------------------------------------------------------------+
//|                                   test_ClosePositionOverDays.mq5 |
//|                                           Copyright 2020,fxMeter |
//|                            https://www.mql5.com/en/users/fxmeter |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020,fxMeter"
#property link      "https://www.mql5.com/en/users/fxmeter"
#property version   "1.00"
#include <Trade\Trade.mqh>
input ulong MagicNumber=0;
CTrade trade;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
//---
   trade.SetExpertMagicNumber(MagicNumber);
   trade.SetTypeFillingBySymbol(Symbol());

//---
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
//---
   ClosePositionOverDays(MagicNumber,22);
}
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//缺陷:不能平当日开仓的单子
void ClosePositionOverDays(ulong magic,int days)
{
   if(days<=0)return;//days = 0 会导致即开即平 

   ulong ticket=0;
   for(int i=PositionsTotal()-1; i>=0; i--)
   {
      ticket = PositionGetTicket(i);
      if(ticket>0)
      {
         if(PositionGetInteger(POSITION_MAGIC)==magic && PositionGetString(POSITION_SYMBOL)==Symbol())
         {
            int shift = iBarShift(Symbol(),PERIOD_D1,PositionGetInteger(POSITION_TIME));
            if(shift>=0 && shift>=days)
            {
               trade.PositionClose(ticket);
            }
         }
      }
   }
}
//+------------------------------------------------------------------+
原因: