Больно мудрено. Нарисуйте блок схему алгоритма, и по ней напишите что хотите.
старт
делаем то то
если это равно тому то делаем это
иначе делаем это
выход
Многие убедились, что ММ не маловажную играет роль. В данном случае пытаюсь реализовать свою идею (бо как аналогичную не нашел) .
Всё просто. Проверяем ордера на истории и далее…
//---- внешние переменные
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 не вариант открыть)....
...и тишина-а-а !!!... или даром уже не-е...или идея не нова...
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
//+------------------------------------------------------------------+
//| 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», так и по вариациям.