[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 561

 
Vinsant:

Aidez-moi à comprendre la logique de cet indicateur.

Vous pouvez vous faire interdire la décompilation ici.
 
Reshetov:
Vous pourriez être banni pour avoir décompilé ici.
Où pouvez-vous voir qu'il s'agit d'un décomplément ? ) Malheureusement je n'ai pas pu trouver l'auteur et cet indicateur montrait de bonnes entrées sur le marché en 2006, aujourd'hui je m'en suis souvenu)) et je veux comprendre sur quoi est basée sa logique.
 
sergeev:

Processus via MinLot et LotStep

J'ai besoin de faire par exemple ceci - NormalizeDouble(lots,precision) ;

Qu'est-ce que cela ferait (MinLot et LotStep) ?

 
Vinsant:
Où est-il indiqué que c'est incomplet ? )
Un modérateur va venir et comprendre la logique du code que vous avez posté. Vous feriez mieux de le cacher avant qu'ils ne vous montrent où vous pouvez et ne pouvez pas le voir.
 
Reshetov:
Un modérateur va venir et comprendre la logique derrière le code que vous avez posté. Vous feriez donc mieux de le cacher, avant que l'on vous indique clairement où vous pouvez le voir et où vous ne pouvez pas le voir.
J'ai suivi vos conseils.
 
fore-x:

J'ai besoin de faire par exemple ceci - NormalizeDouble(lots,precision) ;

Qu'est-ce que cela ferait (MinLot et LotStep) ?

Je l'ai juste esquissé. Ça donne quelque chose comme ça :
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:
Je l'ai juste esquissé. Ça donne quelque chose comme ça :

Oh, je vois, donc c'est un exercice scientifique. Le paramètre n'est stocké nulle part, donc nous le saurons.

 
fore-x:

Oh, je vois, donc c'est un exercice scientifique. Le paramètre n'est stocké nulle part, donc nous le saurons.

Il ne peut être stocké nulle part dans le terminal, car le levier peut être flottant et seul le serveur le connaît. À mon avis, la façon la plus correcte de le calculer est la suivante :

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

 

Dites-moi pourquoi il peut y avoir une erreur 130

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

Dites-moi pourquoi il peut y avoir une erreur 130


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