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

 
bij:

if(iTime(NULL,PERIOD_D1,i+1)!=iTime(NULL,PERIOD_D1,i)&& comment écrire cela ? )

Vous devez extraire la date de time[i] et la comparer à time[i+1]. S'ils ne sont pas égaux, alors extrayez le temps de time[i] et comparez-le au temps donné. S'ils sont identiques, mettez-les en ligne.

Je vous ai montré comment extraire tout cela dans le script. Il ne reste plus qu'à y réfléchir.

 
Artyom Trishkin:

Vous devez extraire la date de time[i] et la comparer à time[i+1]. S'il n'est pas égal, extraire le temps de time[i] et le comparer avec le temps donné. S'ils sont identiques, tracez une ligne.

Comment tout cela est extrait - je l'ai montré dans le script. Il ne reste plus qu'à y penser.

Vendredi soir, en pensant mal) Rien ne se construit. Pourquoi ?

   datetime date1=time[i]; 
   datetime date2=time[i+1];
 
   MqlDateTime str1,str2; 
   TimeToStruct(date1,str1); 
   TimeToStruct(date2,str2); 
  if(str1.day!=str2.day&&str1.mon!=str2.mon&&str1.year!=str2.year&&str2.hour==17&&str2.min==30){
  
   if(!TrendCreate(0,"closek"+time[i],0,iTime(NULL,PERIOD_D1,i+1),iClose(i+1,NULL,PERIOD_M30),iTime(NULL,PERIOD_D1,i),0,clrLime,STYLE_SOLID,2,false,false,false,false,0))
        {
         continue;
        }
        }
 
Artyom Trishkin:

puis extraire l'heure de time[i] et la comparer avec l'heure fixée.

Probablement time[i+1], je dois mettre la ligne au jour précédent après la clôture du jour.

 

Bonjour.

Question stupide mais quand même, aidez-nous)

J'ai entré une transaction à un certain prix, je suis toujours long) Et je compare le prix de la transaction avec l'offre actuelle, si nous avons augmenté de 0,5%, je ferme.maudit à l'offre((((

   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0])          //если значение индикатора были выше цены закрытия и стали ниже
     {
      if(m_Position.Select(my_symbol))                             //если уже существует позиция по этому символу
        {
         if((m_Position.PositionType()==POSITION_TYPE_BUY) && (fabs(DEAL_PRICE-Bid[0])/DEAL_PRICE)>= 0.005) m_Trade.PositionClose(my_symbol);   //и тип этой позиции Buy, то закрываем ее
          return;                            
        }
      m_Trade.Buy(0.1,my_symbol);                                 //если дошли сюда, значит позиции нет, открываем ее
     }
 
ISL:

J'ai entré une transaction à un certain prix, je suis toujours à la recherche d'un acheteur) et je compare le prix de la transaction avec l'offre actuelle, si nous avons augmenté de 0,5%, je ferme.

Probablement parce que c'est MQL5. Il n'y a pas d'"offre" ici maisSymbolInfoDouble(_Symbol, SYMBOL_BID)


 
ISL:

Bonjour.

Question stupide mais quand même, aidez-nous)

J'ai entré une transaction à un certain prix, je suis toujours long) Et je compare le prix de la transaction avec l'offre actuelle, si nous avons augmenté de 0,5%, je ferme.il jure à l'offre((((

Vous avez raison de jurer. Il n'existe pas de tableau de ce type avec les prix de l'offre dans MQL5.

Remplacez-la par

m_symbol.Bid()

et avant le cycle, n'oubliez pas de mettre à jour les prix :

   if(!RefreshRates())
      return;
 
Vladimir Karputov:

Et il a raison de jurer. Il n'existe pas de tableau de ce type avec les prix de l'offre dans MQL5.

Remplacez-la par

et avant la boucle n'oubliez pas de mettre à jour les prix :

Je l'ai fait de deux manières différentes :

1) L'Expert Advisor fonctionne, mais malheureusement il ne me donne pas l'idée. C'est simple, j'achète lorsque la bougie précédente a fermé en dessous et que la suivante a fermé au-dessus. Et je ne ferme que si le prix a augmenté de 0,5 %.

Il fait des affaires étranges(((

   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0])          //если значение индикатора были выше цены закрытия и стали ниже
     {
      if(m_Position.Select(my_symbol))                             //если уже существует позиция по этому символу
        {
         if((m_Position.PositionType()==POSITION_TYPE_BUY) && (SymbolInfoDouble(_Symbol,SYMBOL_BID)-DEAL_PRICE)/DEAL_PRICE>= 0.005) m_Trade.PositionClose(my_symbol);   //и тип этой позиции Buy, то закрываем ее
          return;                            
        }
      m_Trade.Buy(0.1,my_symbol);                                 //если дошли сюда, значит позиции нет, открываем ее
     }

2) Ma méthode est la suivante :

if(!RefreshRates())
      return; 
   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0])          //если значение индикатора были выше цены закрытия и стали ниже
     {
      if(m_Position.Select(my_symbol))                             //если уже существует позиция по этому символу
        {
         if((m_Position.PositionType()==POSITION_TYPE_BUY) && (m_symbol.Bid())-DEAL_PRICE)/DEAL_PRICE>= 0.005) m_Trade.PositionClose(my_symbol);   //и тип этой позиции Buy, то закрываем ее
          return;                            
        }
      m_Trade.Buy(0.1,my_symbol);                                 //если дошли сюда, значит позиции нет, открываем ее
     }

Je crois que j'ai tout gâché(((.

Il génère une erreur :


 
ISL:

Je l'ai fait de deux manières différentes :

1) Le conseiller expert fonctionne, mais malheureusement il ne met pas en œuvre l'idée. C'est simple, j'achète lorsque la bougie précédente a clôturé plus bas et que la suivante a clôturé plus haut. Et je ne ferme que si le prix a augmenté de 0,5 %.

Il fait des affaires étranges(((

2) Ma méthode est la suivante :

Je crois que j'ai tout gâché(((.

Il émet une erreur :


Ouvrez n'importe lequel de mes codes et vous y verrez à la fois m_symbol et RefreshRates.

 
Vladimir Karputov:

Ouvrez n'importe lequel de mes codes et vous y verrez à la fois m_symbol et RefreshRates.

Merci. Je l'ai lu et fait.

Maintenant je n'arrive pas à comprendre pourquoi l'algorithme ne fonctionne pas.

      if(!RefreshRates())
         return;
1)   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0])          //если значение индикатора были выше цены закрытия и стали ниже
     {
2)      if(m_Position.Select(Symbol()))                             //если уже существует позиция по этому символу
        {
         
          return;                            
        }
2*)    m_Trade.Buy(0.1,Symbol());                                 //если дошли сюда, значит позиции нет, открываем ее
     }
3)  if 
   ((m_Position.PositionType()==POSITION_TYPE_BUY) && (((m_symbol.Bid()-DEAL_PRICE)/DEAL_PRICE)>= 0.1))
       {
         m_Trade.PositionClose(Symbol());   //и тип этой позиции Buy, то закрываем ее
      }


Ce qui se passe est le suivant : l'achat est effectué sous la condition que

1) Si la condition est remplie ;

2) Je vérifie s'il y a déjà une position ouverte, si c'est le cas, je passe au point 3), sinon, j'ouvre une 2*).

3) Si la position est achetée, et que la condition est remplie que le prix a augmenté de 10% par rapport au prix d'entrée, alors je la ferme.

Dans le test, il se passe ce qui suit, la position s'ouvre et se ferme, pas sur les conditions (( Encore une fois, s'il vous plaît, aidez-nous !

 
ISL:

Merci. J'ai fait la lecture.

Maintenant je n'arrive pas à comprendre pourquoi l'algorithme ne fonctionne pas.


Ce qui se passe est le suivant : l'achat est effectué à la condition que

1) Si la condition est remplie ;

2) Je vérifie s'il y a déjà une position ouverte, si c'est le cas, je passe au point 3), sinon, j'ouvre une 2*).

3) Si la position est achetée, et que la condition est remplie que le prix a augmenté de 10% par rapport au prix d'entrée, alors je la ferme.

Lors du test, il se produit ce qui suit : la position s'ouvre et se ferme, mais pas en fonction des conditions (( Encore une fois, aidez-nous s'il vous plaît !

Je propose l'algorithme suivant :

   if(!RefreshRates())
      return;
   if(MA1_buf[1]>Close_buf[1] && MA1_buf[0]<Close_buf[0]) //если значение индикатора были выше цены закрытия и стали ниже
     {
      if(m_Position.Select(Symbol())) //если уже существует позиция по этому символу
        {
         if(m_Position.PositionType()==POSITION_TYPE_BUY && (m_symbol.Bid()-m_Position.PriceOpen())/m_Position.PriceOpen()>=0.1)
           {
            m_Trade.PositionClose(Symbol());   //и тип этой позиции Buy, то закрываем ее
            return;
           }
        }
      else
         m_Trade.Buy(0.1,Symbol()); //если дошли сюда, значит позиции нет, открываем ее
     }

Faites attention à m_Position.PrixOuvrir()

Raison: