[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No podría ir a ningún sitio sin ti - 2. - página 126

 
eddy:
¿Qué son las pérdidas y el DecreaseFactor ?

pérdidas - operaciones no rentables

DecreaseFactor - el grado de reducción del lote en una serie de operaciones perdedoras.

 

Sergey_Rogozin:

¡¡¡Si DecreaseFactor=3 y pérdidas=3, entonces según la fórmula obtenemos Lot=0 !!!

En caso de pérdidas>3, obtenemos Lot<0

por eso no se abrirá el trato, ese es el cálculo)

si hay demasiadas operaciones perdedoras

 
sergeev:
para que no pase nada. La función Funk2 - no devuelve ningún valor. es nula

En este caso, la función en cuestión es

void TestFunction (double &return_value1, double &return_value2)
 
sergeev:
Función Funk2
funk:)
 
eddy:

por eso no se abre el trato, con eso contamos)

si ya hay muchas pérdidas.

Así que eso cierra la posibilidad de involucrarse en absoluto.

¿De dónde saldrán entonces las operaciones rentables? ))))

 
Sergey_Rogozin:

Así que se cierra la posibilidad de encender en absoluto.

Así que no pongas el DecreaseFactor o ponlo pequeño)
 
Sergey_Rogozin:

pérdidas - operaciones no rentables

DecreaseFactor - la medida en que el lote se reduce en una serie de operaciones perdedoras.

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:

Sí, a eso me refiero exactamente.

Qué ocurre cuando las pérdidas / DecreaseFactor >= 1 ????

¡Ahhh! Se abre con el lote inicial.

Gracias.

 
Sergey_Rogozin:

Sí, a eso me refiero exactamente.

Qué ocurre cuando las pérdidas / DecreaseFactor >= 1 ????

se dividirá por 3 si el anterior no fue rentable, si el lote es menor que el mínimo en la división entonces la función de lote mínimo tendrá efecto
lot = minlot;
 
Martingeil:
El anterior no era rentable y si el lote es menor que el lote mínimo, la función de lote mínimo se hará cargo.

Sí, gracias.

Lo tengo.