Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 78

 
Veuillez répondre par ordre de priorité. J'ai un indicateur affiché par un graphique à barres. Au moment de l'adhésion ou après la reconnexion, il affiche une valeur d'un op-penny. J'ai défini la condition au premier démarrage pour réinitialiser la 0ème cellule du tableau. Et je l'ai mis en inite - cela n'a pas aidé. Je l'ai réinitialisé au démarrage - ok. (J'ai mis une condition au début : if(GetLastError()==6)zas[0]=0.0 ; - n'aide pas.
 
dikson1976-1:
Veuillez répondre par ordre de priorité. J'ai un indicateur affiché par un graphique à barres. Au moment de l'adhésion ou après la reconnexion, il affiche une valeur d'un op-penny. J'ai défini la condition au premier démarrage pour réinitialiser la 0ème cellule du tableau. Et je l'ai mis en inite - cela n'a pas aidé. Je l'ai réinitialisé au démarrage - ok. (J'ai mis une condition au début : if(GetLastError()==6)zas[0]=0.0 ; - n'aide pas.

Je ne peux pas me passer du code.
 

Dozol:



Essayez de passer les commandes dans l'ordre inverse.

 for(i=OrdersTotal()-1;i>=0;i--)
      {
      OrderSelect(i,SELECT_BY_POS,MODE_TRADES);
         {
     // и тд
         }
       }
 
Je m'en suis occupé moi-même. Allez-y doucement. Merci à tous.
 
Dozol:

Mes amis, aidez-moi. J'ai besoin de fermer tous les ordres sur une paire de devises sélectionnée. Voici ce que j'ai écrit (une partie du code EA) :

int Zakrit_vse() ...

Utilisez SRC pour coller le code sur le forum

Je vais le coller ici, peut-être trouverez-vous quelque chose d'intéressant pour vous :

int Zakrit_vse()
{  
if (OrdersTotal()>0)
{  for (int i=OrdersTotal()-1; i>=0; i--)
   {  if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {  if (OrderSymbol()!=Symbol()) continue;
      
         //--- Close pending orders
         if (OrderType()==OP_BUYLIMIT  ||
             OrderType()==OP_BUYSTOP   ||
             OrderType()==OP_SELLLIMIT ||
             OrderType()==OP_SELLSTOP)         
         {  
            OrderDelete(OrderTicket(),CLR_NONE)
            Prov_oshibok();
            return(0);
         }
         
         //--- Close opened position BUY
         if (OrderType()==OP_BUY)
         {
            RefreshRates();
            OrderClose(OrderTicket(),OrderLots(),Bid,100,CLR_NONE);
            Prov_oshibok();
            return(0);
         }
         //--- Close opened position SELL
         if (OrderType()==OP_SELL)
         {
            RefreshRates();
            OrderClose(OrderTicket(),OrderLots(),Ask,100,CLR_NONE);
            Prov_oshibok();
            return(0);
         }
}  }  }
}
 
Dozol:

Mes amis, aidez-moi. J'ai besoin de fermer tous les ordres sur une paire de devises sélectionnée. Voici ce que j'ai écrit (une partie du code de l'EA) :


Pourquoi réinventer la roue quand tout a déjà été inventé avant vous. Par exemple. N 'oubliez pas ceci.
 

Au secours ! J'ai un code pour un indicateur de canal externe (lorsque la limite supérieure du canal est atteinte, le trade s'ouvre pour vendre - se ferme lorsque la limite inférieure est atteinte, pour acheter dans l'ordre inverse). Pour des raisons inconnues, il n'ouvre pas les transactions, je ne trouve pas l'erreur. Fonctionne parfaitement avec un autre indicateur de canal. Je voudrais préciser tout de suite que tous les tampons sont réglés.

Le code est joint.

extern double Lots = 0.1 ;
chaîne externe Commentaire = "TMA Canal2" ;
extern int TakeProfit = 20 ;
extern int StopLoss = 20 ;
extern int Slippage = 2 ; // slippage
extern int Magic = 124 ;

extern string Indi = "Données de l'indicateur" ;
extern string TimeFrame = " cadretemporel actuel;
extern int TMAPeriod = 56 ;
extern int Price = PRICE_CLOSE ;
extern double ATRMultiplier = 2.0 ;
extern intTRPeriod = 100 ;
extern double TrendThreshold = 0.5 ;
extern bool ShowCenterLine = false ;

double PriceHigh, PriceLow, SL, TP ;
int ticket ;

//+------------------------------------------------------------------+
//| fonction d'initialisation de l'expert |
//+------------------------------------------------------------------+
int init()
{
if (Digits ==3 || Digits ==3) // pour un courtier à cinq chiffres
{
TakeProfit *= 10 ;
StopLoss *= 10 ;
Dérapage *= 10 ;
}
retour(0) ;
}

//+------------------------------------------------------------------+
//| Calculer les positions ouvertes |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
{
int buys=0,sells=0 ;
//----
for(int i=0;i<OrdersTotal();i++)
{
si(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break ;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==124)
{
si(OrderType()==OP_BUY) achète++ ;
si(OrderType()==OP_SELL) vend++ ;
}
}
//---- volume des commandes de retour
if(buys>0) return(buys) ;
sinon retour(-vendues) ;
}

//+------------------------------------------------------------------+
//| Vérifier les conditions d'un ordre ouvert |
//+------------------------------------------------------------------+
void CheckForOpen()
{
double PriceHigh, PriceLow ;
int ticket ;
//---- ne trader que pour les premiers tics de la nouvelle barre.
si(Volume[0]>1) retour ;

PriceHigh = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 1, 0) ;
PriceLow = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 2, 0) ;


if(Open[1]>PriceHigh || Close[1]>PriceHigh || High[1]>PriceHigh && Ask<=PriceHigh)

{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,0, "TMA Canal2",124,0,Red) ;
retour ;
}
//---- conditions d'achat
if(Open[1]<PriceLow || Close[1]<PriceLow || Low[1]<PriceLow && Bid>=PriceLow)

{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,0, "TMA Canal2",124,0,Blue) ;
retour ;
}
//----
}
//+------------------------------------------------------------------+
//| Vérifier les conditions d'ordre de fermeture |
//+------------------------------------------------------------------+
void CheckForClose()
{
double PriceHigh, PriceLow ;
//---- ne négocient que pour les premiers tiks du nouveau bar.
si(Volume[0]>1) retour ;

PriceHigh = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 1, 0) ;
PriceLow = iCustom (Symbol(), 0, "TMALine", TimeFrame, TMAPeriod, Price, ATRMultiplier, ATRPeriod, TrendThreshold, ShowCenterLine, 2, 0) ;

for(int i=0;i<OrdersTotal();i++)
{
si(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break ;
if(OrderMagicNumber()!=124 || OrderSymbol()!=Symbol()) continuer ;
//---- type d'ordre de contrôle
si(OrderType()==OP_BUY)
{
if(Open[1]>PriceHigh || Close[1]>PriceHigh || High[1]>PriceHigh) OrderClose(OrderTicket(),OrderLots(),Bid,3,White) ;
pause ;
}
si(OrderType()==OP_SELL)
{
if(Open[1]<PriceLow || Close[1]<PriceLow || Low[1]<PriceLow) OrderClose(OrderTicket(),OrderLots(),Ask,3,White) ;
pause ;
}
}
//----
}

//+------------------------------------------------------------------+
//| Démarrer la fonction |
//+------------------------------------------------------------------+
void start()
{
//---- vérifier l'historique et le commerce
si(Bars<100 || IsTradeAllowed()==false) return ;
//---- calculer les ordres ouverts par le symbole actuel
si(CalculateCurrentOrders(Symbol())==0) CheckForOpen() ;
sinon CheckForClose() ;
//----
}
//+------------------------------------------------------------------+

 
ZahvatkiN:

Je suis nouveau sur mql4, je sais comment travailler avec SL et TP, mais j'ai un problème quand j'ai besoin de fermer des ordres par le signal du compteur de l'indicateur. Je ne comprends pas vraiment comment la fonction OrderSelect() fonctionne. Je sais que pour rechercher un ordre nous utilisons un cycle, il est dans le code, mais dans le processus de négociation, il s'avère que l'ordre vient d'ouvrir et immédiatement fermé, parce que les conditions d'ouverture d'un achat coïncide avec les conditions de fermeture d'une vente et comment l'expliquer que cela ne devrait pas faire je ne comprends pas.

Le bouton SRC est utilisé pour coller le code!

Au fur et à mesure que vous l'avez rédigé, apportez également des compléments en utilisant la documentation!

Si vous avez copié, veuillez contacter l'auteur pour des révisions ou pour travailler!

 


Je vais ajouter une dernière fois. Combien de fois vous ai-je dit que pour insérer du code, il faut utiliser le bouton sur la ligne du haut.

Et il est souhaitable de s'en tenir aux styles d'écriture du code..... Souhaitable, mais pas indispensable. Mais la plupart des gens sont plus enclins à répondre avec un code facile à comprendre.

 

Je suis nouveau sur mql4, je sais comment travailler avec SL et TP, mais j'ai un problème lorsque j'ai besoin de fermer des ordres par un signal d'indicateur inverse. Je n'ai aucune idée de comment fonctionne la fonction OrderSelect(). Je sais que la boucle est utilisée pour rechercher les ordres, c'est dans le code, mais dans le processus de négociation, il s'avère que l'ordre vient d'ouvrir et immédiatement fermé, parce que les conditions d'ouverture d'un achat coïncident avec les conditions de fermeture de la vente et comment l'expliquer que cela ne devrait pas faire je ne comprends pas, s'il vous plaît expliquer.

borilunad merci pour le conseil, refait, alors vous pouvez aussi supprimer ce message avec la citation pour ne pas l'encombrer.

if(buy1sOpen())
         {
         OrderSend(Symbol(), OP_BUY, lots, Ask, Slippage, 0, 0, "", magic, 0, Blue);
         }
      if(sell1sOpen()) 
         {
         OrderSend(Symbol(), OP_SELL, lots, Bid, Slippage, 0, 0, "", magic, 0, Red);
         }
         
      for(int i=0; i<OrdersTotal(); i++)
         {
         OrderSelect(i,SELECT_BY_POS);
         if(buy1sClose()) 
           {
           OrderClose(i, lots, Ask, Slippage, Blue);
           }
         if(sell1sClose()) 
           {
           OrderClose(i, lots, Bid, Slippage, Red);
           }
         }
         
      }
   }
bool buy1sOpen()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1>Ss1 && Sm2<Ss2 && Sm1<30)
      return(true);
      return(false);
   }
bool sell1sOpen()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1<Ss1 && Sm2>Ss2 && Sm1>70)
      return(true);
      return(false);
   }
bool buy1sClose()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1<Ss1 && Sm2>Ss2 && Sm1>70)
      return(true);
      return(false);
   }
bool sell1sClose()
   {
   Sm1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,1);
   Ss1=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,1);
   Sm2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_MAIN,2);
   Ss2=iStochastic(NULL,0,13,5,5,MODE_SMA,0,MODE_SIGNAL,2);
   if(Sm1>Ss1 && Sm2<Ss2 && Sm1<30)
      return(true);
      return(false);
   }
Raison: