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

 

Aidez-moi s'il vous plaît - il y a un morceau de code comme celui-ci


   if(Bars<=RSIPeriod) return(0);
   if(TF!=0)
   {
      string name = WindowExpertName();
      for(i=0; i<Bars-counted_bars+1; i++)
      {
         int barIndex = iBarShift(NULL,TF,Time[i],false);
         RSIBuffer[i]=       iCustom(Symbol(),TF,name,Variant,RSIPeriod,Levl_Up,Levl_Down,0,0,barIndex);        
         PosBuffer[i]=       iCustom(Symbol(),TF,name,Variant,RSIPeriod,Levl_Up,Levl_Down,0,1,barIndex);
         NegBuffer[i]=       iCustom(Symbol(),TF,name,Variant,RSIPeriod,Levl_Up,Levl_Down,0,2,barIndex);
         RSI_Up_Buffer[i]=   iCustom(Symbol(),TF,name,Variant,RSIPeriod,Levl_Up,Levl_Down,0,3,barIndex);
         RSI_Down_Buffer[i]= iCustom(Symbol(),TF,name,Variant,RSIPeriod,Levl_Up,Levl_Down,0,4,barIndex);
         
         Worms_Up[i]=        iCustom(Symbol(),TF,name,Variant,RSIPeriod,Levl_Up,Levl_Down,0,5,barIndex);        
         Worms_Down[i]=      iCustom(Symbol(),TF,name,Variant,RSIPeriod,Levl_Up,Levl_Down,0,6,barIndex);
         Delta[i]=           iCustom(Symbol(),TF,name,Variant,RSIPeriod,Levl_Up,Levl_Down,0,7,barIndex);
         Calc[i]=            iCustom(Symbol(),TF,name,Variant,RSIPeriod,Levl_Up,Levl_Down,0,8,barIndex);         
      }
      return(0);
   }


tout fonctionne normalement, mais j'ai obtenu une erreur ici - je ne peux pas la reproduire - l'erreur dans le code commence par les crochets Time[I].

2017.07.25 21:09:57.266 Worms_UpDn_RSI_OSC_Calc AUDCAD,M15 : array out of range in 'Worms_UpDn_RSI_OSC_Calc.mq4' (104,47)

Quelle est la raison de cette erreur et comment la réparer ?
 
Aleksey Vyazmikin:

Aidez-moi s'il vous plaît - il y a un morceau de code comme celui-ci



tout fonctionne normalement, mais j'ai obtenu une erreur ici - je ne peux pas la reproduire - l'erreur dans le code commence par les crochets Time[I].

2017.07.25 21:09:57.266 Worms_UpDn_RSI_OSC_Calc AUDCAD,M15 : array out of range in 'Worms_UpDn_RSI_OSC_Calc.mq4' (104,47)

Quelles sont les causes de cette erreur et comment la réparer ?

Essayez de remplacerBars parBars(Symbol(), TF) ;

Vous obtenez des données d'une autre période, mais le nombre de barres est tiré de la période actuelle.

 
Vitaly Muzichenko:

Essayez de remplacerBars parBars(Symbol(), TF) ;

Vous obtenez des données d'une autre période et prenez le nombre de barres de la période actuelle, mais les données que vous obtenez peuvent être inférieures, d'où l'erreur.


Merci ! Je pense que ça va aider !

 
Andrey Sokolov:

Attention, bonne réponse :

Équipe de soutien2017.07.20 13:37
Les produits qui ne sont pas compilés dans la dernière version du méta-éditeur ne peuvent pas être attachés au graphique.

Mon EA a cessé de fonctionner dans le testeur en mode non visuel après la dernière mise à jour. J'ai dû refaire certaines choses.

 
Andrey Sokolov:

Salutations.

Est-il possible d'effectuer un test sur l'historique avec un écart ?


Elle est définie dans le testeur. Ou avez-vous besoin d'un véritable spread flottant?

 
Alexey Volchanskiy:

Il est donc réglé dans le testeur. Ou voulez-vous un vrai spread flottant?

Real
 
Andrey Sokolov:
Real
Le réel dans le testeur (historique) ne sera disponible que dans MT5.
 

Bonjour, je suis en train d'écrire un EA pour placer des ordres en attente sur des fractales. Mais seuls les ordres d'achat sont passés. Comment dois-je le corriger ? Je joins l'EA et l'indicateur.

Dossiers :
Fractal_1.mq4  13 kb
RFractals.ex4  10 kb
 
scomoroh:

Bonjour, j'écris un EA pour placer des ordres en attente sur des fractales. Mais seuls les ordres d'achat sont ouverts. Comment le corriger ?

Tout est.

 

Bonjour.

Pourriez-vous aider à corriger deux erreurs.

1. 1 ordre devrait s'ouvrir sur une barre (s'ouvre maintenant de manière aléatoire)

2. Pour ouvrir correctement un ordre avec un volume déterminé (maintenant il s'ouvre avec des volumes différents)

L'idée est que cet EA devrait ouvrir une transaction de 10% du dépôt sur une barre (je l'avais espéré), mais cela ne se produit pas.

Je travaille sur ce sujet depuis longtemps maintenant et je suis heureux de voir les résultats.

//+------------------------------------------------------------------+
//|                                                      1237654.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             [url]https://www.mql5.com[/url] |
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
extern int tf_bar = 0; //таймфрейм на котором будет браться значение бара
extern int magic = 123;
extern double stop = 0;
extern double StopLoss = 0;
extern double TakeProfit =0;
extern double Prots= 0.10;

int ticket,Symbol;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int mper[10]={0,1,5,15,30,60,240,1440,10080,43200};//массив таймфрейма
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick()
  {
      double Min_Lot=MarketInfo(Symbol(),MODE_MINLOT);// Мин. стоим. лотов
      double Step   =MarketInfo(Symbol(),MODE_LOTSTEP);//Шаг изменен лотов
      double Free   =AccountBalance();       // Свободн средства
      double One_Lot=MarketInfo(Symbol(),MODE_MARGINREQUIRED);//Стоим.лота
  
   double Lot=MathFloor(Free*Prots/One_Lot/Step)*Step;// Лоты
        
        
        
  
  if ( Close[0]>Close[1])
//if (! NumberOfBarOpenLastPos(NULL,mper[tf_bar],OP_BUY, magic) ==0) 



{//запрет неск. сделок на 1 баре
     stop = Ask - StopLoss * Point;
     ticket=OrderSend(Symbol(),OP_BUY,Lot,Ask,0,0,0,"Buy",magic,0,Lime);
     
     }//закрываем скобку NumberOfBarOpenLastPos
     
 if ( Close[0]<Close[1])   
     
//if (!NumberOfBarOpenLastPos(NULL,mper[tf_bar],OP_SELL, magic)  ==0) 
{//запрет неск. сделок на 1 баре
     ticket=OrderSend(Symbol(),OP_SELL,Lot,Bid,0,0,0,"Sell",magic,0,Red);
     
     }//закрываем скобку NumberOfBarOpenLastPos
     return;
   
  }
//+------------------------------------------------------------------+


//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  [url=http://www.kimiv.ru]Автоматизация торговли на финансовых рынках - Главная[/url]                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Возвращает номер бара открытия последней позиции или -1.       |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ("" или NULL - текущий символ)          |
//|    tf - таймфрейм                  (    0       - текущий таймфрейм)       |
//|    op - операция                   (   -1       - любая позиция)           |
//|    mn - MagicNumber                (   -1       - любой магик)             |
//+----------------------------------------------------------------------------+
 




int NumberOfBarOpenLastPos(string sy="0", int tf=0, int op=-1, int mn=-1) {
  datetime t=0;
  
  int      i, k=OrdersTotal();

  if (sy=="" || sy=="0") sy=Symbol();
  for (i=0; i<k; i++)                                    {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))      {
      if (OrderSymbol()==sy)                             {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op)                   {
            if (mn<0 || OrderMagicNumber()==mn)          {
              if (t<OrderOpenTime()) t=OrderOpenTime();
              }}}}}}
  return(iBarShift(sy, tf, t, True));}