//+------------------------------------------------------------------+//| Расчет оптимальной на взгляд автора величины лота |//+------------------------------------------------------------------+double LotsOptimized(){double lot=Lots;if(isFloatLots ==true)// если флаг true то проводится// оптимизация величины лота, иначе лот неизменен{int orders=HistoryTotal();// history orders totalint losses=0;// number of losses orders without a break//---- select lot size
lot=NormalizeDouble(AccountFreeMargin()*MaxR/1000.0,1);//---- calcuulate number of losses orders without a breakif(DcF>0){for(int i=orders-1;i>=0;i--){if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false){Print("Ошибка в истории!");break;}if(OrderSymbol()!=Symbol()||OrderType()>OP_SELL)continue;if(OrderProfit()>0)break;if(OrderProfit()<0) losses++;}if(losses>1) lot=NormalizeDouble(lot-lot*losses/DcF,1);}}//---- return lot sizeif(lot<0.1) lot=0.1;return(lot);}
Сделал вот так :
double LotsOptimized(){double lot=Lots;if(isFloatLots ==true)// если флаг true то //проводится оптимизация величины лота, иначе лот неизменен{int orders=HistoryTotal();// history orders totalint losses=0;// number of losses orders without a break//---- select lot size
lot=NormalizeDouble(AccountFreeMargin()*MaxR/1000.0,2);//---- calcuulate number of losses orders without a breakif(DcF>0){for(int i=orders-1;i>=0;i--){if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false){Print("Ошибка в истории!");break;}if(OrderSymbol()!=Symbol()||OrderType()>OP_SELL)continue;if(OrderProfit()>0)break;if(OrderProfit()<0) losses++;}if(losses>1) lot=NormalizeDouble(lot-lot*losses/DcF,2);}}//---- return lot sizeif(lot<0.01) lot=0.01;return(lot);}
Исправил так. Вместо
Сделал вот так :
Исправил так. Вместо
Сделал вот так :
Благодарствую Тебе rid, такой же прицип применяется и в других советниках?
Не всегда.
Это зависит от алгоритма работы советника. Наличия блока ММ и т.п. ...