Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 901

 

Citation du manuel :

//+------------------------------------------------------------------+

//|Fonction d' initialisation de l'expert|
//+------------------------------------------------------------------+
intOnInit()
{
//--- obtenir la valeur de l'indicateur personnalisé
doublevalue=iCustom(_Symbol,_Period,"::Indicators\\\SampleIndicator.ex4",0,0) ;

Laréférence aux variables indicatrices dans la fonction d'initialisation, mais pas dans la fonction de démarrage ? Laréférence aux variables indicatrices dans la fonction d' initialisation n'ouvre qu'une position.

 
Il se fait tard. Artem, pourras-tu répondre demain ? Merci d'avance.
 
Oleg Kolesov:

Citation du manuel :

//+------------------------------------------------------------------+

//|Fonction d' initialisation de l'expert|
//+------------------------------------------------------------------+
intOnInit()
{
//--- obtenir la valeur de l'indicateur personnalisé
doublevalue=iCustom(_Symbol,_Period,"::Indicators\\\SampleIndicator.ex4",0,0) ;

Laréférence aux variables indicatrices dans la fonction d'initialisation, mais pas dans la fonction de démarrage ? Laréférence aux variables indicatrices dans la fonction d' initialisation n'ouvre qu'une position.

Au lieu de démarrer, il est grand temps d'utiliser OnTick() et d'autres gestionnaires d'événements. Oubliez les fonctions de l'ancien MetaTrader 4. Le nouveau MQL4 est maintenant très proche du MQL5 - les seules différences résident dans une organisation différente des fonctions de trading et des indicateurs - ils sont maintenant créés dans le handler OnInit() - un handle d'indicateur est créé et l'accès aux données de ce handle est effectué. Dans MQL4, c'est différent. Mais les ressources sont localisées de la même manière, si ma mémoire ne change pas.

Et l'accès aux données calculées n'est pas très différent de l'accès par iCustom() de manière habituelle - son nom est seulement légèrement différent.
Документация по MQL5: Обработка событий / OnTick
Документация по MQL5: Обработка событий / OnTick
  • www.mql5.com
//|                                                   TradeByATR.mq5 | //|                        Copyright 2018, MetaQuotes Software Corp. | //|                                             https://www.mql5.com | //| Expert initialization function                                   |...
 
Oleg Kolesov:
Il se fait tard. Artem, pourras-tu répondre demain ? Merci d'avance.

Pas de promesses - occupé.

En retard... il est 04:51 ... c'est "en retard".

 
Artyom Trishkin:
  1. Le prix de fixation de l'ordre n'est pas normalisé.
  2. Tous les prix doivent être vérifiés pour le StopLevel - si la distance en points de l'ordre par rapport au prix est inférieure à la valeur du StopLevel, il y aura une erreur 130 - arrêts non valides.

Je pense que le problème ne vient pas du StopLevel puisqu'il ouvre toujours un ordre. Mais les ticks suivants génèrent une erreur

#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#include  <Init_Deinit.mqh> 

// Переменные
extern double lots    = 0.01;
extern int    Level   = 300;
extern double StopL   = 300;
extern double TakeP   = 1000;


// Start Programm
void OnTick() 
  { 
  //--- вычисленные значений для BuyStop
   
   double price_buystop=NormalizeDouble (Ask+Level*Point, Digits);
   StopL =NormalizeDouble(price_buystop-StopL*Point,Digits); 
   TakeP =NormalizeDouble(price_buystop+TakeP*Point,Digits); 
   
//--- Размещаем отложный ордер BuyStop
   int ticket=OrderSend(Symbol(),OP_BUYSTOP,lots,price_buystop,3,StopL,TakeP,"Rupture",1111,0,clrGreen); 
   if(ticket<0) 
     { 
      Print("BuyStop завершилась с ошибкой #",GetLastError()); 
          } 
   else 
      Print("Функция BuyStop успешно выполнена"); 
      }
 
Doszhan:

Je pense que le problème ne vient pas du StopLevel puisqu'il ouvre toujours un ordre. Mais les ticks suivants génèrent une erreur

Vous devez vérifier si le prix est inférieur au stop loss ou au spread, alors bien sûr il y aura une erreur. C'est le premier.

A en juger par le texte, vous n'avez pas la possibilité de vérifier si la commande a déjà été ouverte ou non.

De cette façon, il s'ouvrira à l'infini à chaque tic.

 
Oleg Kolesov:

H=iCustom(NULL,TF,"::Indicators\\KChange.ex4",History,Period_1,Period_2,MA_method,0,1) ;

Le compilateur n'a pas trouvé d'erreurs, mais le testeur travaille beaucoup plus lentement ? Est-ce normal ?

//-----------------------------------------------------------------------------------------------------------------

Le manuel MQL4 dit : référence aux variables dans la fonction d'initialisation ?

Référence aux variables indicatrices dans la fonction d'initialisation, et non dans la fonction de démarrage ? Les personnes expérimentées me le disent s'il vous plaît !

si elle est lente, vous devez optimiser et accélérer l'indicateur.

vous devez appeler l'endroit où vous voulez vérifier les valeurs de l'indicateur, dans l'initialisation, une seule valeur sera reçue.

 
nalyk:

Vous cherchez une fractale sur la troisième barre, elle n'y est peut-être pas. Cherchez la première fractale du cycle.


Cela ne fonctionne pas non plus. L'ordre est placé sur la base du haut et du bas de 2 bougies.
 
Valerius:

Vous devez vérifier si le prix est inférieur au stop loss ou au spread, alors bien sûr il y aura une erreur. C'est le premier.

A en juger par le texte, vous n'avez pas la possibilité de vérifier si la commande a déjà été ouverte ou non.

Sinon, il s'ouvrira indéfiniment à chaque tic-tac.

Exactement, il ne s'ouvre pas à chaque tick, il ne s'ouvre qu'une fois.
 
Doszhan:
Exactement, il ne s'ouvre pas à chaque tick, il ne s'ouvre qu'une fois.

Y a-t-il une erreur 130 dans le journal de bord ?

Explication ci-dessus de son origine et des bons gestes à adopter pour l'éviter.

Tu ne l'as pas fait.