仓位管理,最小下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);
- }
复制代码
|