Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 1157

 

Por favor, ayuda - hay un trozo de código como este


   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);
   }


todo funciona bien normalmente, pero tiene un error aquí - no se puede reproducir - el error en el código comienza con Time[I] paréntesis

2017.07.25 21:09:57.266 Worms_UpDn_RSI_OSC_Calc AUDCAD,M15: array fuera de rango en 'Worms_UpDn_RSI_OSC_Calc.mq4' (104,47)

¿A qué se debe el error y cómo solucionarlo?
 
Aleksey Vyazmikin:

Por favor, ayuda - hay un trozo de código como este



todo funciona bien normalmente, pero tiene un error aquí - no se puede reproducir - el error en el código comienza con Time[I] paréntesis

2017.07.25 21:09:57.266 Worms_UpDn_RSI_OSC_Calc AUDCAD,M15: array fuera de rango en 'Worms_UpDn_RSI_OSC_Calc.mq4' (104,47)

¿Cuáles son las causas del error y cómo solucionarlo?

Intente sustituirBares porBars(Symbol(), TF);

Está obteniendo datos de otro marco temporal, pero el número de barras se toma del actual.

 
Vitaly Muzichenko:

Intente sustituirBares porBars(Symbol(), TF);

Se obtienen datos de otro marco temporal y se toma el número de barras del actual, pero los datos que se obtienen pueden ser menores, de ahí el error


Gracias. ¡Creo que ayudará!

 
Andrey Sokolov:

Atención, respuesta correcta:

Equipo de apoyo2017.07.20 13:37
Los productos no compilados en la última compilación del meta-editor no pueden adjuntarse al gráfico.

Mi EA dejó de funcionar en tester en modo no visual después de la última actualización. Tuve que rehacer algunas cosas.

 
Andrey Sokolov:

Saludos.

¿Es posible hacer una prueba sobre la historia con una extensión?


Se ajusta en el probador. ¿O necesitas una extensión flotante real?

 
Alexey Volchanskiy:

Por lo tanto, se establece en el probador. ¿O quieres una extensión flotante de verdad?

Real
 
Andrey Sokolov:
Real
Real en el probador (histórico) sólo estará disponible para usted en MT5
 

Hola, estoy escribiendo un EA para colocar órdenes pendientes en fractales. Pero sólo se dan órdenes de compra. ¿Cómo debo corregirlo? Adjunto el EA y el indicador.

Archivos adjuntos:
Fractal_1.mq4  13 kb
RFractals.ex4  10 kb
 
scomoroh:

Hola, estoy escribiendo un EA para colocar órdenes pendientes en fractales. Pero sólo se abren órdenes de compra. ¿Cómo corregirlo?

Todo estáaquí.

 

Hola.

¿Podría ayudar a corregir dos errores?

1. 1 orden debería abrirse en una barra (ahora se abre aleatoriamente)

2. Para abrir correctamente 1 orden con un volumen determinado (ahora se abre con volúmenes diferentes)

La idea es que este EA debería abrir una operación del 10% del depósito en una barra (eso esperaba), pero no está sucediendo.

Llevo mucho tiempo trabajando en esto y estoy contento de ver los resultados.

//+------------------------------------------------------------------+
//|                                                      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));}
Razón de la queja: