[Архив!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 2. - страница 126

 
eddy:
ну а что такое losses и DecreaseFactor то?

losses - убыточные сделки

DecreaseFactor - степень снижения Лота при серийных убыточных сделках.

 

Sergey_Rogozin:

Если DecreaseFactor=3 и losses=3, то, согласно формуле, мы получаем Lot=0 !!!

В случае если losses>3, то мы получаем Lot<0

вот сделка и не откроется, на то и расчёт)

если убыточных и так много

 
sergeev:
так ничего не будет. Функция Funk2 - не возвращает никакого значения. она void

В данном случае имелась в виду функция

void TestFunction (double &return_value1, double &return_value2)
 
sergeev:
Функция Funk2
фанк:)
 
eddy:

вот сделка и не откроется, на то и расчёт)

если убыточных и так много

Так это закрывает возможность вообще включиться.

Откуда же взяться тогда прибыльным сделкам? ))))

 
Sergey_Rogozin:

Так это закрывает возможность вообще включиться.

ну так не выставляй DecreaseFactor или ставь маленьким)
 
Sergey_Rogozin:

losses - убыточные сделки

DecreaseFactor - степень снижения Лота при серийных убыточных сделках.

extern string a = "ЛОТ ММ";
extern bool   MM=false;      // если false - то работает обычный лот, если true - работает ММ
extern double Lots = 0.1;    // обычный лот
extern double balans = 200;  // баланс при увеличении которого, следующий лот будет увеличен на лот MaximumRisk При ММ
double MaximumRisk = 0.1;    // лот прибавляемый к предыдущему при ММ
double DecreaseFactor = 3.0; // если позиция проигрышная то следующая позиция откроется с лотом /3 При ММ



double LotsOptimized() {
double lot = Lots;
double minlot = MarketInfo(Symbol(), MODE_MINLOT);
double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
if (MM){
int orders = OrdersHistoryTotal();
int losses = 0;
lot = NormalizeDouble(AccountFreeMargin() * MaximumRisk / balans, 2);
if (DecreaseFactor > 0.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.0) break;
if (OrderProfit() < 0.0) losses++;
}
if (losses > 1) lot = NormalizeDouble(lot - lot * losses / DecreaseFactor, 2);
}}
if(lot < minlot) lot = minlot;
if(lot > maxlot) lot = maxlot;
return (lot);}
 
Martingeil:

Да, я как раз говорю об этом.

Что происходит, когда losses / DecreaseFactor >= 1 ????

А-а-а-а! Откроется с начальным Лотом.

Спасибо.

 
Sergey_Rogozin:

Да, я как раз говорю об этом.

Что происходит, когда losses / DecreaseFactor >= 1 ????

будет деление на 3 если предыдущая была убыточная, если лот будет меньше минимального при делении то вступит функция минимального лота
lot = minlot;
 
Martingeil:
будет деление на 3 если предыдущая была убыточная, если лот будет меньше минимального при делении то вступит функция минимального лота

Да, спасибо!

Все понял.

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