Questions des débutants MQL4 MT4 MetaTrader 4 - page 61

 
Renat Akhtyamov:
J'espère qu'une valeur est attribuée à la variable Percent dans OnInit()?
La variable Pourcentage est définie par l'utilisateur. J'ai laissé tomber OnInit().
 
Michail_David:
Ma variable Percent est définie par l'utilisateur. OnInit() j'ai laissé tomber.
Si Lots=0, le testeur n'ouvrira rien.
 
Renat Akhtyamov:
si Lots=0, rien ne sera ouvert par le testeur
J'ai beaucoup de calculs relatifs au pourcentage. Le testeur calcule le nombre de lots, mais pas de transactions.

 Margin_Percent=AccountFreeMargin()*Percent/100; 

Lots=Margin_Percent/MarketInfo(Symbol(),MODE_MARGINREQUIRED);

      Lots_Volume=(MathFloor(Lots)+MarketInfo(Symbol(),MODE_LOTSTEP));

if(Lots>Lots_Volume)
        {
         Lots=Lots_Volume;
        }
      else if(Lots<Lots_Volume)
         Lots=MathFloor(Lots);
      Print("Количество лотов : ",Lots);
      return;
 
Michail_David:
J'ai beaucoup de calculs relatifs au pourcentage. Le testeur calcule le nombre de lots, mais il n'y a pas de transactions.

Et encore, où dans le code est fixé le pourcentage

et que signifie la commande suivante print("Lots : ",Lots) ; ?

 
Renat Akhtyamov:

Pourtant, où dans le code est le pourcentage

et que signifie la commande suivante print("Nombre de lots : ",Lots) ; ?

#property link      ""
#property version   "1.00"
#property strict
//--- input parameters
input int      Percent=50;
input int      Fast_EMA_Period=12;
input int      Slow_EMA_Period=25;
input int      Signal_Period=9;
input double   Step_PSAR=0.02;
input double   Maximum_PSAR=0.2;
input int      MAGICNUMBER=413;
static datetime New_Time;// Время текущего бара
double Margin_Percent;  //Используемые средства для открытия ордеров
double Lots;//Определение общего количества лотов
double Lots_Volume;
double MacdCurrent;//Параметры MACD основной линии текущего бара
double MacdPrevious1;//Параметры MACD основной линии предыдущего бара
double MacdPrevious2;//Параметры MACD основной линии со смещением на 2 бара
double StopLoss;//Параметры Трейлинг стоп по параметрам ParabolicSAR текущего бара
double Previous_StopLoss;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
double CurrentPSAR;//Параметры СтопЛосс по параметрам ParabolicSAR предыдущего бара
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

   bool New_Bar=false;                    // Флаг нового бара
   int ticket,total,cnt;
//---------------------------------------------------------------------------
   New_Time=TimeCurrent();
   if(Time[0]==New_Time) // Сравниваем время
      New_Bar=true;      // Поймался новый бар
   else if(New_Bar==false) // Если бар не новый..
La cinquième ligne précise le pourcentage. Le journal imprime : "Montant des lots : 90.0100000001". Peut-être devrions-nous ajouter NormalizeDouble( ) ?
 
Michail_David:
Dans la cinquième ligne, le pourcentage est fixé. Le journal indique : "Le nombre de lots est de 90.0100000001". Peut-être devrions-nous ajouter NormalizeDouble() ?

Il n'y a pas de problème avec le terrain.

Recherchez une erreur dans la logique d'ouverture de l'ordre.

Dans ce cas, j'ai l'habitude de fixer une condition explicite qui ouvrira l'ordre.

 
Renat Akhtyamov:

Il n'y a pas de problème avec le terrain.

Recherchez une erreur dans la logique d'ouverture de l'ordre.

En général, dans ces cas-là, je fixe une condition explicite à l'ouverture de l'ordre.

Veuillez nous donner un exemple avec une condition explicite. Si je comprends bien, il devrait y avoir une condition d'ouverture de la boucle. Est-ce correct ?
 
Michail_David:
Veuillez donner un exemple avec une condition explicite. Si je comprends bien, il devrait y avoir une condition dans la boucle pour l'ouverture. N'est-ce pas ?
Donnez une commande pour ouvrir un ordre au début du code, juste après le calcul du lot et assurez-vous que le testeur fonctionne correctement. Ensuite, vous pouvez tout remettre en place.
 
Renat Akhtyamov:
Donnez une commande pour ouvrir un ordre au début du code, juste après avoir calculé le lot, et assurez-vous que le testeur fonctionne correctement. Ensuite, vous pouvez tout remettre en place.
Merci. J'ai trouvé une erreur. J'ai eu un retour ; après calcul des lots. C'est pourquoi les lots n'ont pas été ouverts.
 
Michail_David:
La cinquième ligne précise le pourcentage. Le journal affiche : "Nombre de lots 90.0100000001". Peut-être devrions-nous ajouter NormalizeDouble() ?
Oui, vous devriez. Et pas seulement les lots, mais toutes les autres valeurs qui sont transmises au serveur. Les lots sont également utiles pour vérifier le minimum et le maximum autorisés dans la valeur du compte, également sur le changement d'étape, il y avait des cas où le lot peut être modifié par incréments de 0,03, donc 90,01 ne fonctionnera pas, au moins écrasé.