自己做了个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天以上的订单全部平仓
自己做了个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天以上的订单全部平仓
自己做了个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); } } } } } //+------------------------------------------------------------------+