support 发表于 2022-12-31 12:21:22

仓位管理,最小下0.1手,根据保证金占比来计算下单手数

仓位管理,最小下0.1手,根据保证金占比来计算下单手数

double LotsOptimized()
{
   double lot=Lots;//0.1
   int    orders=HistoryTotal();   // history orders total
   int    losses=0;                  // number of losses orders without a break
//--- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//--- calcuulate number of losses orders without a break
   if(DecreaseFactor>0)
   {
      for(int i=orders-1;i>=0;i--)
      {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
         {
            Print("Error in history!");
            break;
         }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL)
            continue;
         //---
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
      }
      if(losses>1)
         lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
   }
//--- return lot size
   if(lot<0.1) lot=0.1;
   return(lot);
}

页: [1]
查看完整版本: 仓位管理,最小下0.1手,根据保证金占比来计算下单手数