Заблудился в ММ

 
Не могу самостоятельно осилить ....как из кода ясно – всё довольно просто, и всё же...
//+------------------------------------------------------------------+
//| GetLots |
//+------------------------------------------------------------------+
double GetLots(int magic) 
{
  if (LotSizeF == false && LotSizeL == false && LotSizeP == false && LotSizeD == false) return (MinLot);

  int hist = OrdersHistoryTotal();
  if (hist == 0) return (MinLot);
   
  double fr = NormalizeDouble(AccountFreeMargin()*RiskFree/1000,1);
  double ls = MathMin(OrderLots() + Risk, MaxLot);
  double pr = MathMin(OrderLots() - Risk, MaxLot);
  double db = MathMin(OrderLots() * 2, MaxLot);
   
  for (int i = 0; i < hist; i++) {
  OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
  if (OrderSymbol() == Symbol() && OrderMagicNumber() == magic) 
  {
  if (OrderProfit() > 0 ) { losses = 0;profit++;} 
  if (OrderProfit() < 0 ) { profit = 0;losses++;}
  } 
  if ( LotSizeF == true && ((losses < StepLosses) || (profit < StepProfit)) ) { lot = fr;}  
  if ( LotSizeF == false && ((losses < StepLosses) || (profit < StepProfit)) ) { lot = MinLot;} 
  if ( LotSizeP == true && profit >= StepProfit ) { lot = pr;}
  if ( LotSizeL == true && losses >= StepLosses ) { lot = ls;}
  if ( LotSizeD == true && losses >= StepLosses ) { lot = db;} 
  }
  if(lot<MinLot) lot=MinLot;
  if(lot>MaxLot) lot=MaxLot;  
   
  return (lot);
 }

мало того что код (сами видите), но ещё и функционально не совсем тот что нужно
….он должен работать как по отдельным «true», так и по вариациям.
 

Больно мудрено. Нарисуйте блок схему алгоритма, и по ней напишите что хотите.

старт

делаем то то

если это равно тому то делаем это

иначе делаем это

выход

 

Многие убедились, что ММ не маловажную играет роль. В данном случае пытаюсь реализовать свою идею (бо как аналогичную не нашел) .

Всё просто. Проверяем ордера на истории и далее…

//---- внешние переменные
extern bool LotSizeF = false; - процент от депо
extern bool LotSizeP = false; -уменьшаем лот при профите
extern bool LotSizeL = false; -увеличиваем при лоссе
extern bool LotSizeD = false; - удваиваем при лосе 
extern double MinLot = 0.1; - стартовый лот
extern double MaxLot = 1.5; - максимальный лот
extern double Risk = 0.1; - уменьшаем или увеличиваем на этот размер
extern double RiskFree = 0.1; -процент от депо
extern int StepProfit = 2; -после этого кол-ва профита уменьшаем на Risk
extern int StepLosses = 2; - после этого кол-ва лосей начинаем увеличивать на Risk

всё это работает и очень хорошо увеличивает ПФ практически в любом эксперте .

Нужно немного усложнить при этом упростив.


1. Минимальный лот должен быть минимально возможным
2. «MinLot» должен быть только стартовым или возвращаемым при доп.условиях
3. После «StepLosses» увеличиваем с каждым последующим лосём на кол-во «Risk» с возвратом либо на лот размера от депо (если LotSizeF = true), либо на MinLot(если LotSizeF = false), либо минимально возможный (если уже MinLot не вариант открыть)
3. После «StepProfit» уменьшаем с каждым последующим профитом на кол-во «Risk» с возвратом либо на лот размера от депо (если LotSizeF = true), либо на MinLot(если LotSizeF = false), либо минимально возможный (если уже MinLot не вариант открыть)....


 

...и тишина-а-а !!!... или даром уже не-е...или идея не нова...

 

Вы сначала почитайте про ММ, здесь на форуме есть очень хорошие статьи. Например, эта. То, что Вы задумали, мне не осилить, говорю сразу, даже и пытаться не буду.

 
OrlandoMagic >>:

Вы сначала почитайте про ММ, здесь на форуме есть очень хорошие статьи. Например, эта. То, что Вы задумали, мне не осилить, говорю сразу, даже и пытаться не буду.

Всё равно спасибо...и за ссылку...немного не то что хотелось бы, но полезно...

Причина обращения: