[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 561

 
Vinsant:

Ayúdame a entender la lógica de este indicador.

Puedes ser expulsado por descompilar aquí.
 
Reshetov:
Podrían expulsarte por descompilar aquí.
¿Dónde se puede ver que es una descomposición? ) Desgraciadamente no he podido encontrar al autor y este indicador mostraba buenas entradas en el mercado en 2006, hoy lo he recordado)) y quiero entender en qué se basa su lógica.
 
sergeev:

Proceso mediante MinLot y LotStep

Necesito hacer por ejemplo esto - NormalizarDoble(lotes,precisión);

¿Qué haría esto (MinLot y LotStep)?

 
Vinsant:
¿Dónde se indica que está descompuesto? )
Ya vendrá un moderador a averiguar la lógica del código que has puesto. Así que será mejor que lo escondas antes de que te enseñen dónde puedes y no puedes verlo.
 
Reshetov:
Ya vendrá un moderador a averiguar la lógica del código que has puesto. Así que será mejor que lo escondas, antes de que se te indique dónde puedes y no puedes verlo.
Seguí tu consejo.
 
fore-x:

Necesito hacer por ejemplo esto - NormalizarDoble(lotes,precisión);

¿Qué haría esto (MinLot y LotStep)?

Sólo lo he esbozado. Es algo así:
double minlot = MarketInfo(Symbol, MODE_MINLOT);

int d = 0;
 
if (minlot < 0.9999) {
  if (minlot < 0.09999) {
    d = 2;
  } else {
    d = 1;
  }
}

 ... 

NormalizeDouble(lots, d);
 
Reshetov:
Sólo lo he esbozado. Es algo así:

Oh, ya veo, así que es un ejercicio científico. El parámetro no se almacena en ningún sitio, así que lo sabremos.

 
fore-x:

Oh, ya veo, así que es un ejercicio científico. El parámetro no se almacena en ningún sitio, así que lo sabremos.

No se puede almacenar en ningún lugar del terminal, porque la palanca puede ser flotante y sólo el servidor lo sabe. En mi opinión, la forma más correcta de calcularlo es la siguiente:

double minlot = MarketInfo(Symbol(), MODE_MINLOT);
double maxlot = MarketInfo(Symbol(), MODE_MAXLOT);
double lotstep = MarketInfo(Symbol(), MODE_LOTSTEP);

double SMALL = 0.0000001;

double lot, nextlot;

//обнуляем внутреннюю переменную ошибки
GetLastError();

//смотрим, насколько дают открыться
for(lot=0; lot<maxlot+SMALL && GetLastError()!=ERR_NOT_ENOUGH_MONEY; lot = nextlot)
{
   if(lot<minlot) nextlot = minlot;
   else nextlot = lot+lotstep;
   AccoutFreeMarginCheck(Symbol(), OP_BUY, nextlot);
}

// ответ на вопрос уже в переменной lot, а если вообще открыться нельзя, то там 0. Осталось нормализовать.
// Нормализацию правильно проводить от lotstep, а не от minlot, т.к. встречаются ситуации когда, например, 
// minlot = 3.0, а lotstep = 0.1

int dig = -MathFloor(MathLog(lotstep)/MathLog(10));

lot = NormalizeDouble(lot, dig);

 

Dígame por qué puede haber un error 130

ticket1 = OrderSend(Symbol(),OP_BUYLIMIT,Lot,Level,Slippage,0,0,0,MagicNumber,0,Green);
 
sss2019:

Dígame por qué puede haber un error 130


ticket1 = OrderSend(Symbol(),OP_BUYLIMIT,Lot,Level,Slippage,0,0,0,MagicNumber,0,Green);
                                                                ^
                                                          Что за хрень?
Razón de la queja: