[Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas votre chemin. Je ne peux aller nulle part sans toi. - page 385

 
Michey25 >>:

что тут не так?

Короче этот советник я прикрепляю к часовому графику, и если цена в начале часа выше чем cn1 а текущая не привышает её на 8 пунктов то ордер должен открыться (также если цена ниже текущего уровня) А он у меня почему-то сразу открывает позицию. Почему?

Et où est écrite la condition de 8 points ? Mieux vaut multiplier huit par MarketInfo(NULL,MODE_POINT) ;

 
splxgf >>:

А где записано условие на 8 пунктов? лучше восемь умножать на MarketInfo(NULL,MODE_POINT);

(a-cn1)<0.0008)

 
Aidez-moi à fusionner deux EAs. l'Expert PYLOSE ferme les ordres avec un certain MAGIKOM lorsqu'un montant donné, et l'EA Trailing suit l'équité lorsqu'elle atteint un montant donné.aidez-moi à insérer du code de Trailing dans PYLOSE, il suit également, mais ne ferme pas les ordres avec un MAGIKOM donné lorsqu'il atteint un montant spécifié.et éventuellement commenter les fonds de trailing affichés à l'écran.merci !
Dossiers :
archive_1.zip  10 kb
 

Michey25


quand je répondais, le code était un peu différent ;)

Bien qu'il y ait quelques questions, le résultat de op(0) dépend beaucoup de la période actuelle. On ne sait pas d'où viennent les cn et de quel type ils sont.

Ne pouvez-vous pas faire Alert(Open[0],cn1,Open[0]<cn1,a,(a-cn1)<0.0008) ?

Il est également préférable d'utiliser break au lieu de i=1, ce qui permet de sortir immédiatement de la boucle au lieu d'exécuter toutes les commandes jusqu'à la fin.

int i=0;
   double a,b;
   while (i==0)
   {
     a=MarketInfo("USDCAD", MODE_ASK);
     b=MarketInfo("USDCAD", MODE_BID); 
     if((Open[0]<cn1)&&((a-cn1)<0.0008))
      {
       OrderSend("USDCAD",OP_BUY,1,a,1,SL,cn2);
       i=1;
       }
     if((Open[0]>cn11)&&((cn11-b)<0.0008))
      {
       OrderSend("USDCAD",OP_SELL,1,b,1,SL1,cn21);
       i=1;
      }  
   }
 

Bonjour. Veuillez m'aider à mettre en œuvre la chose suivante. Il y a 2 conditions indépendantes dans un EA, sur la base desquelles des ordres séparés sont ouverts, chacun avec sa propre magie. À tout moment sur un graphique, il ne peut y avoir qu'un seul ordre pour chacune des conditions, et ils peuvent être en même temps les uns avec les autres. Pour vérifier la possibilité d'ouvrir des ordres, je fais la structure suivante

int CalculateCurrentOrders(string symbol)
  {
   int buys=0, sells=0, buystop=0, sellstop=0;
//----
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && (OrderMagicNumber()== MAGIC1 || OrderMagicNumber()== MAGIC2))
              {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
          if(OrderType()==OP_BUYSTOP)  buys++;
         if(OrderType()==OP_SELLSTOP) sells++;
        }
     }
//----
   if( buys>0) return( buys);
   else       return(- sells);

Mais les commandes ne sont ouvertes qu'avec la deuxième magie.

Ensuite, les commandes sont également clôturées indépendamment les unes des autres. En même temps, la commande avec la première magie utilise une piste et la deuxième ne le fait pas.

J'ai utilisé cet exemple, mais la fermeture ne se produit pas selon les règles de la première ou de la deuxième condition, ou ne se produit pas du tout.

 

  for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) 
      if(OrderSymbol()==Symbol() && OrderMagicNumber()== MAGIC1)
     if(OrderType()==OP_BUY) 
     if ( Sell1==1)
             {
              OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
              return(0);
             }
                     
      if(OrderType()==OP_SELL) 
      if ( Buy1==1)
             {
              OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
              return(0);
             }
  
      if(OrderType()==OP_BUYSTOP && Sell1==1)
         {
         OrderDelete(OrderTicket());
         return(0);
         }
      if(OrderType()==OP_SELLSTOP && Buy1==1)
         {
         OrderDelete(OrderTicket());
         return(0);
         }
    }
   
   for(int i2=0; i2<OrdersTotal(); i2++)
     {
      if(OrderSelect( i2, SELECT_BY_POS, MODE_TRADES)) 
   
         if(OrderSymbol()==Symbol() && OrderMagicNumber()== MAGIC2)
     if(OrderType()==OP_BUY)
      if ( Sellcl0==1)
       {

       OrderClose(OrderTicket(),OrderLots(),Bid,3,Red);
              return(0);
            }
                 
    if(OrderType()==OP_SELL) 
    if ( Buycl0==1)
    
            {
              OrderClose(OrderTicket(),OrderLots(),Ask,3,Green);
              return(0);
          
        }
     if(OrderType()==OP_BUYSTOP) 
     if ( Sellcl0==1)
         {
         OrderDelete(OrderTicket());
         return(0);
         }
      if(OrderType()==OP_SELLSTOP && Buycl0==1)
        {
         OrderDelete(OrderTicket());
        return(0);
         }
      }   
    
     // MODIFICATION -------
     
     TrailingPositionsBuy( parab);
    TrailingPositionsSell( parab);
   // TrailingPositionsBuystop(parab);
   // TrailingPositionsSellstop(parab);
    return (0);
   }
/*bool ExistPositions() {
   for (int i=0; i<OrdersTotal(); i++) {
      if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
         if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
            return(True);
         }
      } 
   } 
   return(false);
}*/
     
void TrailingPositionsBuy(double parab) { 
   for (int i=0; i<OrdersTotal(); i++) { 
      if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) { 
         if (OrderSymbol()==Symbol() && OrderMagicNumber()== MAGIC1) { 
            if (OrderType()==OP_BUY) { 
             //  if (Bid-OrderOpenPrice()>trailingStop*Point) { 
              //    if (OrderStopLoss()<Bid-trailingStop*Point) 
                     ModifyStopLoss( parab);
                                   
               } 
            } 
         } 
      } 
   } 
//} 
void TrailingPositionsSell(double parab) { 
   for (int i=0; i<OrdersTotal(); i++) { 
      if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) { 
         if (OrderSymbol()==Symbol() && OrderMagicNumber()== MAGIC1) { 
            if (OrderType()==OP_SELL) { 
             //  if (OrderOpenPrice()-Ask>trailingStop*Point) { 
             //     if (OrderStopLoss()>Ask+trailingStop*Point || OrderStopLoss()==0)  
                     ModifyStopLoss( parab);
                  
               } 
            } 
         } 
      } 
   } 

Sell1, buy1, sellcl0, buycl0 sont des descriptions des conditions de clôture.


Une telle double annulation des positions fonctionnerait-elle ? Merci !

 
exolon >>:

Здравствуйте. Помогите пожалуйста реализовать такую вещь. В одном эксперте работают 2 независимых условия, на основе которых открываются отдельные ордера, каждый со своим magic. В каждый момент времени на одном графике может быть только один ордер по каждому из условий, при этом они могут быть одновременно друг с другом. Для проверки возможности открытия ордеров делаю такую конструкцию

Но открываются ордера только со вторым magic.

Далее, закрываются ордера тоже независимо друг от друга. При этом ордер с первым magic использует трал, а второй нет

Применил вот такой вариант, но закрытия либо происходят не по правилам ни от первого, ни от второго условия, либо не происходят вообще

sell1, buy1, sellcl0, buycl0 - описания условий на закрытие.


Будет ли вообще работать такой двойной перебор позиций? Благодарю!


après la fermeture et la suppression des ordres, supprimer le retour et le mettre à la fin de la fonction ou mettre un continuum à la place.

 

Bonjour à tous, je suis en train d'écrire mon premier programme mql et d'apprendre le langage en même temps.

Je suis en train d'apprendre la langue. Pouvez-vous me conseiller ?


J'ai une question : si j'écris mon premier programme mql, j'aimerais savoir ce qui ne va pas. Pouvez-vous me dire ce qui ne va pas ? J'ai passé quatre heures à parcourir le livre de référence, je ne le comprends pas moi-même.


void CheckSell()
{
while(!(NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
{
Sleep(5);
RefreshRates();
}
Sell();
}

 
Jahspear писал(а) >>

Bonjour à tous, je suis en train d'écrire mon premier programme mql et d'apprendre le langage en même temps.

Je suis en train d'apprendre la langue. Pouvez-vous me conseiller ?

J'ai une question : si j'écris mon premier programme mql, j'aimerais savoir ce qui ne va pas. Pouvez-vous me dire ce qui ne va pas ? J'ai fouillé dans le livre de référence pendant environ quatre heures, je n'y comprends rien.

void CheckSell()
{
while(!(NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
{
Sleep(5);
RefreshRates();
}
Sell();
}

Et ce pour quoi j'ai fait la boucle. S'il n'y a pas de condition, nous ne devons pas attendre un nombre inconnu de jours pour que le signal apparaisse.

 

Bon après-midi.

L'indicateur a IndicatorShortName("iC_C_mod, ..... ") ;

J'ai cependant besoin, en plus de cette légende, d'insérer un commentaire avec une variable changeant dynamiquement dans la fenêtre de l'indicateur.

Comme f-i Comment();

J'en ai besoin dans la fenêtre de l'indicateur, mais pas sur le graphique.

Veuillez me conseiller.

 
Jahspear >>:



void CheckSell()
{
if((NormalizeDouble(Price,Digits) < NormalizeDouble(MA10,Digits)))
Sell();
}


Probablement quelque chose comme ça, car les boucles infinies prennent beaucoup de temps sur le matériel moderne.