Questions des débutants MQL5 MT5 MetaTrader 5 - page 832

 
void OnTick()
  {
 TimeCurrent(dt); 
//--- Достаточно ли количество баров для работы
   if(Bars(_Symbol,_Period)<10) // общее количество баров на графике меньше 10?
     {
      Alert("На графике меньше 10 баров, советник не будет работать!!");
      return;
     }
//--- сначала нужно записать в массивы значения буферов индиктора Fractal
//--- заполнение данными буфера

   ArraySetAsSeries(Signal,true);
   ArraySetAsSeries(Main,true);

   
   if(CopyBuffer(Stochastic_handle,0,0,100,Main)<=0) return;
   if(CopyBuffer(Stochastic_handle,1,0,100,Signal)<=0) return;

   double Main_1=Main[1];
   Main_1=NormalizeDouble(Main_1,5);
   Print("Main_1=",DoubleToString(Main_1,5));
    
   double Main_2=Main[2];
   Main_2=NormalizeDouble(Main_2,5);
   
   double Main_3=Main[3];
   Main_3=NormalizeDouble(Main_3,5);
   
   double Signal_1=Signal[1];
   Signal_1=NormalizeDouble(Signal_1,5);
   Print("Signal_1=",DoubleToString(Signal_1,5));
   
   double Signal_2=Signal[2];
   Signal_2=NormalizeDouble(Signal_2,5);
   
   double Signal_3=Signal[3];
   Signal_3=NormalizeDouble(Signal_3,5);
   
   
// Для сохранения значения времени бара мы используем static-переменную Old_Time.
// При каждом выполнении функции OnTick мы будем сравнивать время текущего бара с сохраненным временем.
// Если они не равны, это означает, что начал строится новый бар.

   static datetime Old_Time;
   datetime New_Time[1];
   bool IsNewBar=false;

// копируем время текущего бара в элемент New_Time[0]
   int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
   if(copied>0) // ok, успешно скопировано
     {
      if(Old_Time!=New_Time[0]) // если старое время не равно
        {
         IsNewBar=true;   // новый бар
         if(MQL5InfoInteger(MQL5_DEBUGGING)) Print("Новый бар",New_Time[0],"старый бар",Old_Time);
         Old_Time=New_Time[0];   // сохраняем время бара
        }
     }
   else
     {
      Alert("Ошибка копирования времени, номер ошибки =",GetLastError());
      ResetLastError();
      return;
     }
     
     
// открытие покупок

     if(Main_1>Signal_1&&Main_2<Signal_2&&Main_3<Signal_3&&Main_2<20)
     {
      if(IsNewBar!=false)
        {
           
              {
               open_by_market();

              }
        }
     }
  

  // закрытие покупок 
 
   if (Signal_3>80&&Signal_2>80&&Signal_1<80)
   {
   if(PositionsTotal()>0)
        {
         for(int i=0;i<PositionsTotal();i++)
           {
            ulong orders_ticket=PositionGetTicket(i);
            if(((PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) ))
              
              
              {  trade.PositionClose(orders_ticket); }        
            
         }
     }           
   }
 
}
   

Bonjour, veuillez préciser comment mettre en œuvre deux tâches (en utilisant les signaux d'achat comme exemple).

donné : point d'entrée - croisement de la ligne stochastique en dessous de 20

clôture de la transaction - franchissement du niveau 80 à la baisse par la ligne stochastique lente

c'est-à-dire ne pas ouvrir plusieurs positions sur le même niveau comme sur la photo ci-jointe.

2. clôturer au deuxième et non au premier franchissement du niveau 80 de haut en bas avec une ligne stochastique lente.

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
Dossiers :
121.png  27 kb
 
gastinets:

Bonjour, veuillez préciser comment mettre en œuvre deux tâches (en utilisant les signaux d'achat comme exemple).

donné : point d'entrée - croisement de la ligne stochastique en dessous de 20

clôture de la transaction - franchissement du niveau 80 à la baisse par la ligne stochastique lente

c'est-à-dire ne pas ouvrir plusieurs positions sur le même niveau comme sur la photo ci-jointe.

2) Le deuxième ordre serait fermé au deuxième, et non au premier, franchissement du niveau 80 vers le bas par la ligne stochastique lente.

Formulez-la d'abord clairement :

  • condition d'ouverture de la position
  • condition proche

 
Veuillez indiquer comment accéder aux informations sur les positions dans la fonction OnTick du conseiller expert construit. Du moins, qu'elle soit ouverte ou non. Où puis-je trouver un pointeur sur la position ? Ou bien cela doit être fait d'une autre manière ?
 
VHS:
Veuillez indiquer comment accéder aux informations sur les positions dans la fonction OnTick d'un conseiller expert construit. Du moins, si elle est ouverte ou non. Où puis-je trouver un pointeur sur la position ? Ou bien cela doit être fait d'une autre manière ?

Le conseiller expert a été conçu par qui ?

Veuillez me montrer le code.
 
Les commentaires non liés à ce sujet ont été déplacés vers "Questions des débutants de MQL4 MT4 MetaTrader 4".
 
Vladimir Karputov:

L'expert est conçu par qui ?

Montrez le code, s'il vous plaît.
Le conseiller expert est conçu par l'assistant qui utilise une classe de signal personnalisée et une classe de négociation personnalisée. Le code du conseiller expert lui-même est standard. ExtExpert.OnTick() est appelé dans OnTick, le reste du code est construit en utilisant la bibliothèque standard. En fait, cette question fait suite à la précédente, à laquelle personne n'a répondu. Je veux que le conseiller expert conçu par l'assistant utilise la classe de signaux personnalisés uniquement pour ouvrir des positions et les fermer uniquement lors de la négociation et en ignorant les signaux de la classe de signaux. J'ai compris comment ignorer les signaux. Mais je ne comprends pas comment obtenir l'information dans onTick pour savoir s'il y a une position ouverte pour permettre l'ignorance.
 
VHS:
***Et je n'ai jamais conclu qu'en négociant des contrats.

Ce n'est pas clair.

 

VHS:
***а закрывал уже только по трейдингу ***

Vladimir Karputov:

Ce n'est pas clair.

"D" et "L" l'un à côté de l'autre sur le clavier. Mon erreur.

 
Artyom Trishkin:

"D" et "L" l'un à côté de l'autre sur le clavier. Faux.

Oui, Artyom, merci beaucoup. Apparemment auto-remplacement (ou mains tordues). Et la classe personnalisée et la fermeture n'est pas trayDing, c'est trayLing.
Dans la classe CExpert, la méthode Processing entre d'abord dans la direction et vérifie la présence d'un signal provenant de la classe signal. Et ensuite (seulement s'il y a un SelectPosition), il vérifie le Trailing. Par conséquent, s'il existe une position ouverte, elle sera parfois fermée en l'absence de signaux de la classe de suivi, en obtenant un signal de la classe de signaux.
La variante précédente, qui consistait à prendre des informations sur la présence d'une position ouverte dans la classe Trailing Stop et à les transmettre à Ignore via OnTick, ne fonctionnait pas. J'ai appris à mémoriser dans OnInit l'objet suiveur et à le transférer dans OnTick. Mais cela ne fonctionne que lorsque la position est ouverte. Mais après sa fermeture, le traitement ne commence pas à suivre et Ignore reste ignoré. Il n'y a donc qu'une seule touche finale : après avoir fermé la position, définir ce moment dans OnTick et retourner la valeur Ignore "0". Mais je ne comprends pas comment obtenir efficacement des informations sur (présence/absence de) une position dans OnTick.
 
VHS:
Oui, Artem, merci beaucoup. Apparemment auto-changement (ou mains tordues). Et la classe personnalisée et la fermeture n'est pas trayDing, c'est trayLing.
Dans la classe CExpert, la méthode Processing entre d'abord dans la direction et vérifie la présence d'un signal provenant de la classe signal. Et ensuite (seulement s'il y a un SelectPosition), il vérifie le Trailing. Par conséquent, s'il existe une position ouverte, elle sera parfois fermée en l'absence de signaux de la classe de suivi, en obtenant un signal de la classe de signaux.
La variante précédente, qui consistait à prendre des informations sur la présence d'une position ouverte dans la classe Trailing Stop et à les transmettre à Ignore via OnTick, ne fonctionnait pas. J'ai appris à mémoriser dans OnInit l'objet suiveur et à le transférer dans OnTick. Mais cela ne fonctionne que lorsque la position est ouverte. Mais après sa fermeture, le traitement ne commence pas à suivre et Ignore reste ignoré. Il n'y a donc qu'une seule touche finale : après avoir fermé la position, définir ce moment dans OnTick et retourner la valeur Ignore "0". Mais je ne comprends pas comment obtenir efficacement des informations sur (présence/absence de) une position dans OnTick.

Je pense que vous pouvez rendre cela beaucoup plus facile - dans votre EA, définissez le seuil de fermeture à 100, et donnez un poids de 0,5 au signal - ainsi un signal avec un poids de 0,5 ne dépassera JAMAIS le seuil de 100.