[ARCHIVE] Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 3. - page 282

 
Pouvez-vous me dire lequel ? Je n'en ai que deux. MACD et Moyennes mobiles.
 

Veuillez aider un débutant. Comment écrire cette section de code :

Vérifier les ordres du marché et s'il n'y a pas d'ordres du marché pour notre instrument financier, nous l'achetons ?

Et nous avons également besoin d'une ligne de code qui réarrange le Trailing Stop à 500 pips du prix réel.

Au secours ! !!

Et quelle est la distance (d'où et vers où exactement) ?

//+------------------------------------------------------------------+
//|                                                  MACD Sample.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+

extern double TakeProfit = 50;
extern double Lots = 0.1;
extern double TrailingStop = 30;
extern double MACDOpenLevel=3;
extern double MACDCloseLevel=2;
extern double MATrendPeriod=26;

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
   double MacdCurrent, MacdPrevious, SignalCurrent;
   double SignalPrevious, MaCurrent, MaPrevious;
   int cnt, ticket, total;
// initial data checks
// it is important to make sure that the expert works with a normal
// chart and the user did not make any mistakes setting external 
// variables (Lots, StopLoss, TakeProfit, 
// TrailingStop) in our case, we check TakeProfit
// on a chart of less than 100 bars
   if(Bars<100)
     {
      Print("bars less than 100");
      return(0);  
     }
   if(TakeProfit<10)
     {
      Print("TakeProfit less than 10");
      return(0);  // check TakeProfit
     }
// to simplify the coding and speed up access
// data are put into internal variables
   MacdCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0);
   MacdPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,1);
   SignalCurrent=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,0);
   SignalPrevious=iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_SIGNAL,1);
   MaCurrent=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,0);
   MaPrevious=iMA(NULL,0,MATrendPeriod,0,MODE_EMA,PRICE_CLOSE,1);

   total=OrdersTotal();
   if(total<1) 
     {
      // no opened orders identified
      if(AccountFreeMargin()<(1000*Lots))
        {
         Print("We have no money. Free Margin = ", AccountFreeMargin());
         return(0);  
        }
      // check for long position (BUY) possibility
      if(MacdCurrent<0 && MacdCurrent>SignalCurrent && MacdPrevious<SignalPrevious &&
         MathAbs(MacdCurrent)>(MACDOpenLevel*Point) && MaCurrent>MaPrevious)
        {
         ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,"macd sample",16384,0,Green);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice());
           }
         else Print("Error opening BUY order : ",GetLastError()); 
         return(0); 
        }
      // check for short position (SELL) possibility
      if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious && 
         MacdCurrent>(MACDOpenLevel*Point) && MaCurrent<MaPrevious)
        {
         ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,"macd sample",16384,0,Red);
         if(ticket>0)
           {
            if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("SELL order opened : ",OrderOpenPrice());
           }
         else Print("Error opening SELL order : ",GetLastError()); 
         return(0); 
        }
      return(0);
     }
   // it is important to enter the market correctly, 
   // but it is more important to exit it correctly...   
   for(cnt=0;cnt<total;cnt++)
     {
      OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
      if(OrderType()<=OP_SELL &&   // check for opened position 
         OrderSymbol()==Symbol())  // check for symbol
        {
         if(OrderType()==OP_BUY)   // long position is opened
           {
            // should it be closed?
            if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
               MacdCurrent>(MACDCloseLevel*Point))
                {
                 OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet); // close position
                 return(0); // exit
                }
            // check for trailing stop
            if(TrailingStop>0)  
              {                 
               if(Bid-OrderOpenPrice()>Point*TrailingStop)
                 {
                  if(OrderStopLoss()<Bid-Point*TrailingStop)
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);
                     return(0);
                    }
                 }
              }
           }
         else // go to short position
           {
            // should it be closed?
            if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
               MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point))
              {
               OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet); // close position
               return(0); // exit
              }
            // check for trailing stop
            if(TrailingStop>0)  
              {                 
               if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
                 {
                  if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
                    {
                     OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);
                     return(0);
                    }
                 }
              }
           }
        }
     }
   return(0);
  }
// the end.

Eh bien, c'est tout simplement absurde ! S'il existe un ordre : en attente ou au marché, et ce sur n'importe quel instrument financier, aucun ordre ne sera ouvert dans ce code :

   total=OrdersTotal();
   if(total<1)

Nous pouvons voir que s'il y a moins d'un ordre, il sera exécuté. Ou ai-je tort ?

 

A partir de la moyenne mobile, prenez CalculateCurrentOrders(Symbol()), il retourne les valeurs = nombre d'ordres ouverts, filtrés par symbole et magie, avec le signe = sens de la transaction : par exemple -1 signifie 1 ordre en vente. Si nécessaire, utilisez MathAbs() pour ignorer le signe.

A partir du code ci-dessus, prenez le trailing stop :

// vérifier le trailing stop - ici, il y a même des commentaires.

if(TrailingStop>0) { ... }, il se trouve à 2 endroits - pour l'achat et la vente. Tout est simple. Ou bien, vous pouvez utiliser les fonctions prêtes à l'emploi d'Igor Kim. Elles sont plus universelles et correctes pour le trading réel, mais aussi un peu plus difficiles à comprendre pour un débutant. Si vous faites confiance à la nouvelle version, vous obtiendrez un meilleur robot de trading.

p.s. Pour le débogage, utilisez Print(), cela aide beaucoup.

 
rusa: Je voudrais vous demander d'insérer vous-même cette fonction dans Expert Advisor. Sur l'image, vous pouvez voir que 3 ordres ont été ouverts sur une barre. Je ne sais pas comment commander mes robots forex et je ne sais pas comment les corriger.

J'ai commencé à comprendre votre code. Je suis surpris. Ce que vous avez joint ne peut pas fonctionner. Je peux voir qu'il est assemblé à partir des pièces, mais au moins les crochets devraient être correctement placés, les variables devraient être définies. Et le signal - il n'est pas clair, ce qui signifie, par exemple, "rsi>30" - indicateur valeur RSI, ou quelque chose d'autre ? La fonction Trade_BUY() est attachée à l'intérieur de la fonction start... etc.

Soit vous me donnez le code complet qui a fonctionné (ordres ouverts), soit vous remplissez le TOR pour les signaux, le trailing, etc. Il me sera plus facile d'écrire à partir de zéro.

 
nuan:

Avez-vous des instructions détaillées sur la façon de télécharger les cotations du MICEX pour 2 ans, par exemple pour Lukoil.

comment les convertir correctement et les ouvrir dans mt4, s'il y a des liens, donnez les liens pour le faire.

P.S. Merci d'avance.


Voici un mamba pendant quelques années.
http://zalil.ru/31909547
 
kolyango:

Veuillez aider un débutant. Comment écrire cette section de code :

Vérifier les ordres du marché et s'il n'y a pas d'ordres du marché pour notre instrument financier, nous l'achetons ?

Et nous avons également besoin d'une ligne de code qui réarrange le Trailing Stop à 500 pips du prix réel.

Au secours ! !!

Et quelle est la distance (d'où et vers où exactement) ?

Eh bien, c'est tout simplement absurde ! S'il existe un ordre : en attente ou au marché, et ce pour n'importe quel instrument financier, aucun ordre ne sera ouvert dans ce code :

Nous pouvons voir que s'il y a moins d'un ordre, il sera exécuté. Ou ai-je tort ?


Ou peut-être avez-vous tort ?

for (int i = 0 ; i < OrdersTotal() ; i++)
{
OrderSelect(i,SELECT_BY_POS, MODE_TRADES) ;
if (OrderSymbol() == . paire)
{
if(OrderType() == OP_BUY || OrderType() == OP_SELL)
{
OrderSend(Symbol(),OP_BUY, .......

}
}
}

 

J'ai besoin d'aide :

un indicateur de moyenne mobile régulier, lorsque la ligne se brise, le signal d'achat (hausse) ou de vente (baisse) apparaît,

Est-ce que quelqu'un a un code fini de l'objet graphique, pouvez-vous le poster !

Merci.

 
Ceux-ci sont dans la base de données
 
ZZZEROXXX:
Ils sont dans la base de données.
Un lien serait apprécié.
 

Bonjour ! Pouvez-vous me dire comment "boucler" la vérification de la barre supérieure et inférieure ? Autrement dit, comment puis-je décrire cette condition "plus courte" ?

Close[0]>Open[0]&& Close[1]>Open[1]&& Close[2]>Open[2]&& Close[3]>Open[3]&&&& Close[4]>Open[4]&& Close[5]>Open[5]&& Close[6]>Open[6]&& Close[7]>Open[7]

Merci d'avance.