[ARCHIVIO] Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 3. - pagina 561

 
Vinsant:

Aiutatemi a capire la logica di questo indicatore.

Puoi essere bannato per la decompilazione qui.
 
Reshetov:
Potresti essere bannato per la decompilazione qui.
Dove si vede che è una decomposizione? ) Purtroppo non sono riuscito a trovare l'autore e questo indicatore mostrava buone entrate a mercato nel 2006, oggi me ne sono ricordato)) e voglio capire su cosa si basa la sua logica.
 
sergeev:

Processo tramite MinLot e LotStep

Ho bisogno di fare per esempio questo - NormalizeDouble(lots,precision);

Cosa farebbe questo (MinLot e LotStep)?

 
Vinsant:
Dove si vede che è decompleto? )
Un moderatore verrà a capire la logica del codice che hai postato. Quindi è meglio che lo nascondiate prima che vi mostrino dove potete e non potete vederlo.
 
Reshetov:
Un moderatore arriverà e capirà la logica del codice che hai postato. Quindi è meglio che lo nascondiate, prima che vi venga mostrato con precisione dove potete e non potete vederlo.
Ho seguito il tuo consiglio.
 
fore-x:

Ho bisogno di fare per esempio questo - NormalizeDouble(lots,precision);

Cosa farebbe questo (MinLot e LotStep)?

L'ho solo abbozzato. Va più o meno così:
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:
L'ho solo abbozzato. Va più o meno così:

Oh, capisco, quindi è un esercizio scientifico. Il parametro non è memorizzato da nessuna parte, quindi lo sapremo.

 
fore-x:

Oh, capisco, quindi è un esercizio scientifico. Il parametro non è memorizzato da nessuna parte, quindi lo sapremo.

Non può essere memorizzato da nessuna parte nel terminale, perché la leva può essere fluttuante e solo il server ne è a conoscenza. Secondo me, il modo più corretto di calcolarlo è il seguente:

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);

 

Dimmi perché potrebbe esserci un errore 130

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

Dimmi perché potrebbe esserci un errore 130


ticket1 = OrderSend(Symbol(),OP_BUYLIMIT,Lot,Level,Slippage,0,0,0,MagicNumber,0,Green);
                                                                ^
                                                          Что за хрень?