Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 1157

 

Прошу помощи - есть такой кусок кода


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


 

 всё работает обычно нормально, но тут получил ошибку - воспроизвести не могу - ошибка в коде начинается со скобок 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)

Какие причины появления ошибки и как её устранить?
 
Aleksey Vyazmikin:

Прошу помощи - есть такой кусок кода



 

 всё работает обычно нормально, но тут получил ошибку - воспроизвести не могу - ошибка в коде начинается со скобок 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)

Какие причины появления ошибки и как её устранить?

Попробуйте заменить Bars на Bars(Symbol(), TF);

Вы получаете данные с другого таймфрейма, а количество баров берёте с текущего, но в получаемом их может быть меньше, поэтому и ошибка

 
Vitaly Muzichenko:

Попробуйте заменить Bars на Bars(Symbol(), TF);

Вы получаете данные с другого таймфрейма, а количество баров берёте с текущего, но в получаемом их может быть меньше, поэтому и ошибка


Спасибо! Думаю, что это поможет!

 
Andrey Sokolov:

Внимание, правильный ответ:

Support Team 2017.07.20 13:37
Продукты не скомпилированные в последнем билде метаэдитора могут не прикрепляться на чарт.

Мой советник перестал работать в тестере в невизуальном режиме после последнего обновления. Пришлось кое-что переделать.

 
Andrey Sokolov:

Приветствую. 

Возможно ли тестирование на истории со спредом ?


Так он же задается в тестере. Или нужен реальный плавающий спред?

 
Alexey Volchanskiy:

Так он же задается в тестере. Или нужен реальный плавающий спред?

Реальный
 
Andrey Sokolov:
Реальный
Реальный в тестере (исторический) будет вам только в МТ5
 

Добрый день! Пишу советник по выставлению отложенных ордеров на фракталах. Но выставляются только ордера на бай. Как исправить? Советник и индикатор прилагаю.

Файлы:
Fractal_1.mq4  13 kb
RFractals.ex4  10 kb
 
scomoroh:

Добрый день! Пишу советник по выставлению отложенных ордеров на фракталах. Но открываются только ордера на бай. Как исправить?

Здесь всё есть.

 

Здравствуйте.

Могли бы помочь исправить две ошибки.

1. 1 ордер должен открываться на одном баре (сейчас открывается рандомно)

2. Корректно открывать 1 ордер с установленным объемом (сейчас открывается с разными объемами)

По идее как сейчас выставлено в советнике (я так надеялся) должна на одном баре открываться сделка 10% от депо, но это не происходит.

Спасибо.

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