[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 797

 

Camarades ! C'est ma tentative #2 de créer un outil miracle qui lit le ROC AUDUSD et GBPUSD pour trader sur le GBPAUD). C'est un peu primitif, mais je voulais vraiment essayer ! !! Lorsque je l'exécute dans le testeur sans l'optimiser, il se fige, mais continue à se charger avec succès... et à la fin - pas un seul échange. Il est clair que j'ai merdé, mais où, s'il vous plaît, dites-le moi, gens bien informés !!! :)) Il s'agit d'un code EA qui prend les données d'un ROC normal personnalisé.

//+------------------------------------------------------------------+
//|                                                    Robot_Rocky_Rich |
//|                                                          JonsonAlla |
//|                                                    deep_ampik@bk.ru |
//+------------------------------------------------------------------+

extern double TakeProfit = 700;
extern double Sl = 200;
extern double Lots = 0.01;
             
//+------------------------------------------------------------------+
int start()
 {
  int cnt, ticket;
  double x1= iCustom("AUDUSD",PERIOD_H1,"ROC",12,1,0);
  double x2= iCustom("GBPUSD",PERIOD_H1,"ROC",12,1,0); 
  
  
     
  /**total=OrdersTotal();
  if(total<1)//проверка количества ордеров 
   {
   if(AccountFreeMargin()<(1000*Lots))
    {
     Print("Недостаточно средств = ", AccountFreeMargin());
     return(0);  
    }**/
  if (x1<x2)
   {
    ticket=OrderSend("GBPAUD",OP_BUY,Lots,Ask,30,Bid-Sl*Point,Ask+TakeProfit*Point,"-",0,0,Green);
    if(ticket>0)
     {
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("открыта позиция BUY : ",OrderOpenPrice());
     }
    else Print("Ошибка при открытии BUY позиции : ",GetLastError());          
    return(0);
   }
  if (x1>x2) 
   {
    ticket=OrderSend("GBPAUD",OP_SELL,Lots,Bid,30,Ask+Sl*Point,Bid-TakeProfit*Point,"-",0,0,Red);
    if(ticket>0)
     {
      if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("открыта позиция SELL : ",OrderOpenPrice());
     }
    else Print("Ошибка при открытии SELL позиции : ",GetLastError());
    return(0); 
   }
   return(0);
  }
  
 
Vinin:

IndicatorCounted() ne fonctionne pas dans les EAs. Il est uniquement destiné aux indicateurs. Peut-être devrions-nous élargir le problème un peu plus. Il existe différentes façons de le résoudre. Le plus simple est d'optimiser l'indicateur (mais ce n'est pas toujours possible), vous pouvez transférer les calculs vers le conseiller expert, mais là encore, ce n'est pas toujours possible. Vous devez en fait regarder l'indicateur

Je veux transférer le code de calcul à un EA, dans un indicateur le code de calcul commence par une boucle...comment puis-je le remplacer par un code plus correct7

int CountedBars=IndicatorCounted();
if(CountedBars< 0) CountedBars= 0;
if(CountedBars> 0) CountedBars--;
cnt = Bars - CountedBars;

for(int i = 0; i < cnt ;i++)
 
obla4ko:

Camarades ! C'est ma tentative #2 de créer un outil miracle qui lit le ROC AUDUSD et GBPUSD pour trader sur le GBPAUD). C'est un peu primitif, mais je voulais vraiment essayer ! !! Lorsque je l'exécute dans le testeur sans l'optimiser, il se fige, mais continue à se charger avec succès... et à la fin - pas un seul échange. Il est clair que j'ai merdé, mais où, s'il vous plaît, dites-le moi, gens bien informés !!! :)) C'est le code du soi-disant conseiller expert, il prend les données du ROC personnalisé habituel.


Essayez avec le contrôle de chargement de l'histoire primitive

Dossiers :
 
Vinin:


Essayer avec le contrôle primitif du chargement de l'histoire

Peut-être qu'il n'est pas correct de simplement comparer x1 et x2, mais qu'il devrait être attaché à quelque chose, disons à la dernière barre ? Selon la logique de l'indicateur, EA devrait ouvrir au moins une position et ne pas la fermer, car la fermeture n'est pas implémentée dans le programme :)), et le ROC d'une devise est toujours plus grand que le ROC de l'autre ...

 

Peut-être que l'appel de l'indicateur n'est pas tout à fait juste. Je vais devoir le chercher moi-même. Il semble juste que le tampon devrait être zéro, et non le premier.

 

Je ne dispose pas d'un tel indicateur

 
T-G:

Je veux transférer le code de calcul à l'Expert Advisor, le code de calcul commence par une boucle...comment puis-je le remplacer par un code plus correct7

1. Pourquoi ?????????????????????

Mais, si vous en avez vraiment besoin, alors

2. Pourquoi diable je ne réponds à rien ? Je vous l'ai dit - il y a un article de Kositsyn à ce sujet dans les articles (c'est juste ici, lien ci-dessus). Combien de fois dois-je te le répéter ? Vous avez peut-être autre chose à faire ?

 
Vinin:

Je ne dispose pas d'un tel indicateur

Voici le code de l'indicateur ROC

//+------------------------------------------------------------------+
//|                                                          ROC.mq4 |
//|                                    Copyright © 2006, Robert Hill |
//+------------------------------------------------------------------+

#property  copyright "Copyright © 2006, Robert Hill"
//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 1
#property  indicator_color1  Red
//---- indicator parameters
extern int RPeriod = 12;
extern bool UsePercent = true;
//---- indicator buffers
double RateOfChange[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- drawing settings
   SetIndexStyle(0, DRAW_LINE);
   SetIndexDrawBegin(0, RPeriod);
   IndicatorDigits(Digits + 1);
//---- indicator buffers mapping
   if(!SetIndexBuffer(0, RateOfChange))
       Print("cannot set indicator buffers!");
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("ROC(" + RPeriod + ")");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Moving Averages Convergence/Divergence                           |
//+------------------------------------------------------------------+
int start()
  {
   int limit;
   double ROC, CurrentClose, PrevClose;
   int counted_bars = IndicatorCounted();
//---- check for possible errors
   if(counted_bars < 0) 
       return(-1);
//---- last counted bar will be recounted
   if(counted_bars > 0) 
       counted_bars--;
   limit = Bars - counted_bars - RPeriod;
//---- ROC calculation
   for(int i = 0; i < limit; i++)
     {
       CurrentClose = iClose(NULL, 0, i);
       PrevClose = iClose(NULL, 0, i + RPeriod);
       ROC = CurrentClose - PrevClose;
       //----
       if(UsePercent)
         {
           if(PrevClose != 0)
               RateOfChange[i] = 100 * ROC / PrevClose;
         }
       else
           RateOfChange[i] = ROC;
     }   
//---- done
   return(0);
  }
//+------------------------------------------------------------------+
 

"Personne n'a besoin de passer la serpillière ? Je viendrai les laver ! " (с)

Voici le transfert du code de l'indicateur vers le code de l'Expert.

 
obla4ko:

Voici le code de l'indicateur ROC


Il y a une erreur dans le code de l'indicateur.
Raison: