Any rookie question, so as not to clutter up the forum. Professionals, don't pass by. Nowhere without you - 6. - page 1157

 
Aleksey Vyazmikin:

Please help - there is a piece of code like this



everything works fine normally, but got an error here - can't reproduce - the error in the code starts with Time[I] brackets

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)

What are the causes of the error and how to fix it?

Try to replaceBars withBars(Symbol(), TF);

You are getting data from another timeframe, but the number of bars is taken from the current one.

 
Vitaly Muzichenko:

Try to replaceBars withBars(Symbol(), TF);

You get data from another timeframe and take the number of bars from the current one, but the data you get may be less, hence the error


Thank you! I think it will help!

 
Andrey Sokolov:

Attention, correct answer:

Support Team2017.07.20 13:37
Products not compiled in the latest build of the meta-editor may not attach to the chart.

My EA stopped working in tester in non-visual mode after last update. I had to redo some things.

 
Andrey Sokolov:

Greetings.

Is it possible to test on history with a spread?


It is set in the tester. Or do you need a real floating spread?

 
Alexey Volchanskiy:

So it is set in the tester. Or do you want a real floating spread?

Real
 
Andrey Sokolov:
Real
Real in the tester (historical) will only be available to you in MT5
 

Hello! I am writing an EA for placing pending orders on fractals. But only buy orders are placed. How should I correct it? I am attaching the EA and the indicator.

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

Hello! I am writing an EA to place pending orders on fractals. But only buy orders are opened. How to correct it?

It is allhere.

 

Hello.

Could you help correct two errors.

1. 1 order should open on one bar (now opens randomly)

2. To correctly open 1 order with a set volume (now it is opening with different volumes)

The idea is that this EA should open a deal of 10% of the deposit on one bar (I had hoped so), but it is not happening.

I have been working on this for a long time now and I am happy to see the results.

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

Please advise where the error lies.

Code:

//+------------------------------------------------------------------+
//|                                                     InitMQL4.mqh |
//|                                                 Copyright DC2008 |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "keiji"
#property copyright "DC2008"
#property link      "https://www.mql5.com"
//--- Объявление констант
#include <MT4Orders.mqh>
#include <MQL4_to_MQL5.mqh>
//---
//#define extern input
#define OBJPROP_TIME1 300 //datetime Получает/устанавливает первую координату времени 
#define OBJPROP_PRICE1 301 //double Получает/устанавливает первую координату цены 
#define OBJPROP_TIME2 302 //datetime Получает/устанавливает вторую координату времени 
#define OBJPROP_PRICE2 303 //double Получает/устанавливает вторую координату цены 
#define OBJPROP_TIME3 304 //datetime Получает/устанавливает третью координату времени 
#define OBJPROP_PRICE3 305 //double Получает/устанавливает третью координату цены 
//---
//OBJPROP_COLOR 6 color Получает/устанавливает цвет объекта 
//OBJPROP_STYLE 7 int Получает/устанавливает стиль линии объекта 
//OBJPROP_WIDTH 8 int Получает/устанавливает ширину линии объекта 
//OBJPROP_BACK 9 bool Получает/устанавливает флаг фонового отображения объекта 
//---
#define OBJPROP_RAY 310 //bool Получает/устанавливает флаг свойства луч для объектов типа OBJ_TREND и ему подобных 
//---
//OBJPROP_ELLIPSE 11 bool Получает/устанавливает флаг отображения полного эллипса для объекта OBJ_FIBOARC 
//OBJPROP_SCALE 12 double Получает/устанавливает значение масштаба объекта 
//OBJPROP_ANGLE 13 double Получает/устанавливает значение угла в градусах объекта OBJ_TRENDBYANGLE 
//OBJPROP_ARROWCODE 14 int Получает/устанавливает код стрелки объекта OBJ_ARROW. Может быть одним из символов wingdings или один из предопределенных кодов стрелок 
//OBJPROP_TIMEFRAMES 15 int Получает/устанавливает свойство отображения объекта на различных периодах. Может быть одним или комбинацией нескольких из констант видимости объекта. 
//OBJPROP_DEVIATION 16 double Получает/устанавливает размер отклонения для объекта OBJ_STDDEVCHANNEL 
//OBJPROP_FONTSIZE 100 int Получает/устанавливает размер шрифта для объектов OBJ_TEXT и OBJ_LABEL 
//OBJPROP_CORNER 101 int Получает/устанавливает номер угла привязки для объекта OBJ_LABEL. Принимает значения 0-3 
//OBJPROP_XDISTANCE 102 int Получает/устанавливает расстояние X-координаты в пикселях относительно угла привязки для объекта OBJ_LABEL 
//OBJPROP_YDISTANCE 103 int Получает/устанавливает расстояние Y-координаты в пикселях относительно угла привязки для объекта OBJ_LABEL 
//---
#define OBJPROP_FIBOLEVELS 200 //int Получает/устанавливает число уровней объекта Fibonacci. Может быть от 1 до 32 
//---
//OBJPROP_LEVELCOLOR 201 color Получает/устанавливает цвет линии уровня объекта 
//OBJPROP_LEVELSTYLE 202 int Получает/устанавливает стиль линии уровня объекта 
//OBJPROP_LEVELWIDTH 203 int Получает/устанавливает ширину линии уровня объекта 
#define  OBJPROP_FIRSTLEVEL1 211 //int Получает/устанавливает значения уровня объекта Fibonacci с индексом n. Индекс n может быть от 0 до (количество уровней -1), но не более 31 
#define  OBJPROP_FIRSTLEVEL2 212
#define  OBJPROP_FIRSTLEVEL3 213
#define  OBJPROP_FIRSTLEVEL4 214
#define  OBJPROP_FIRSTLEVEL5 215
#define  OBJPROP_FIRSTLEVEL6 216
#define  OBJPROP_FIRSTLEVEL7 217
#define  OBJPROP_FIRSTLEVEL8 218
#define  OBJPROP_FIRSTLEVEL9 219
#define  OBJPROP_FIRSTLEVEL10 220
#define  OBJPROP_FIRSTLEVEL11 221
#define  OBJPROP_FIRSTLEVEL12 222
#define  OBJPROP_FIRSTLEVEL13 223
#define  OBJPROP_FIRSTLEVEL14 224
#define  OBJPROP_FIRSTLEVEL15 225
#define  OBJPROP_FIRSTLEVEL16 226
#define  OBJPROP_FIRSTLEVEL17 227
#define  OBJPROP_FIRSTLEVEL18 228
#define  OBJPROP_FIRSTLEVEL19 229
#define  OBJPROP_FIRSTLEVEL20 230
#define  OBJPROP_FIRSTLEVEL21 231
#define  OBJPROP_FIRSTLEVEL22 232
#define  OBJPROP_FIRSTLEVEL23 233
#define  OBJPROP_FIRSTLEVEL24 234
#define  OBJPROP_FIRSTLEVEL25 235
#define  OBJPROP_FIRSTLEVEL26 236
#define  OBJPROP_FIRSTLEVEL27 237
#define  OBJPROP_FIRSTLEVEL28 238
#define  OBJPROP_FIRSTLEVEL29 239
#define  OBJPROP_FIRSTLEVEL30 240
#define  OBJPROP_FIRSTLEVEL31 241
//---
#define MODE_OPEN 0
#define MODE_CLOSE 3
#define MODE_VOLUME 4 
#define  MODE_REAL_VOLUME 5
//---
#define DOUBLE_VALUE 0
#define FLOAT_VALUE 1
#define LONG_VALUE INT_VALUE
//---
#define  CHART_BAR 0
#define  CHART_CANDLE 1
//---
#define MODE_ASCEND 0
#define MODE_DESCEND 1
//---
#define MODE_LOW 1
#define MODE_HIGH 2
#define MODE_TIME 5
#define MODE_POINT 11
#define MODE_TICKVALUE 16
#define MODE_TICKSIZE 17
#define MODE_SWAPLONG 18
#define MODE_SWAPSHORT 19
#define MODE_STARTING 20
#define MODE_EXPIRATION 21
#define MODE_TRADEALLOWED 22
#define MODE_MINLOT 23
#define MODE_LOTSTEP 24
#define MODE_MAXLOT 25
#define MODE_SWAPTYPE 26
#define MODE_PROFITCALCMODE 27
#define MODE_MARGINCALCMODE 28
#define MODE_MARGININIT 29
#define MODE_MARGINMAINTENANCE 30
#define MODE_MARGINHEDGED 31
#define MODE_MARGINREQUIRED 32
#define MODE_FREEZELEVEL 33
//---
#define EMPTY -1
//---
#define CharToStr CharToString
#define StrToDouble StringToDouble
#define StrToInteger (int)StringToInteger
#define StrToTime StringToTime
#define StringSetChar StringSetCharacter
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
ENUM_TIMEFRAMES TFMigrate(int tf)
  {
   switch(tf)
     {
      case 0: return(PERIOD_CURRENT);
      case 1: return(PERIOD_M1);
      case 5: return(PERIOD_M5);
      case 15: return(PERIOD_M15);
      case 30: return(PERIOD_M30);
      case 60: return(PERIOD_H1);
      case 240: return(PERIOD_H4);
      case 1440: return(PERIOD_D1);
      case 10080: return(PERIOD_W1);
      case 43200: return(PERIOD_MN1);

      case 2: return(PERIOD_M2);
      case 3: return(PERIOD_M3);
      case 4: return(PERIOD_M4);
      case 6: return(PERIOD_M6);
      case 10: return(PERIOD_M10);
      case 12: return(PERIOD_M12);
      case 16385: return(PERIOD_H1);
      case 16386: return(PERIOD_H2);
      case 16387: return(PERIOD_H3);
      case 16388: return(PERIOD_H4);
      case 16390: return(PERIOD_H6);
      case 16392: return(PERIOD_H8);
      case 16396: return(PERIOD_H12);
      case 16408: return(PERIOD_D1);
      case 32769: return(PERIOD_W1);
      case 49153: return(PERIOD_MN1);
      default: return(PERIOD_CURRENT);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
ENUM_MA_METHOD MethodMigrate(int method)
  {
   switch(method)
     {
      case 0: return(MODE_SMA);
      case 1: return(MODE_EMA);
      case 2: return(MODE_SMMA);
      case 3: return(MODE_LWMA);
      default: return(MODE_SMA);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
ENUM_APPLIED_PRICE PriceMigrate(int price)
  {
   switch(price)
     {
      case 1: return(PRICE_CLOSE);
      case 2: return(PRICE_OPEN);
      case 3: return(PRICE_HIGH);
      case 4: return(PRICE_LOW);
      case 5: return(PRICE_MEDIAN);
      case 6: return(PRICE_TYPICAL);
      case 7: return(PRICE_WEIGHTED);
      default: return(PRICE_CLOSE);
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
ENUM_STO_PRICE StoFieldMigrate(int field)
  {
   switch(field)
     {
      case 0: return(STO_LOWHIGH);
      case 1: return(STO_CLOSECLOSE);
      default: return(STO_LOWHIGH);
     }
  }

//+------------------------------------------------------------------+
enum ALLIGATOR_MODE  { MODE_GATORJAW=1,   MODE_GATORTEETH, MODE_GATORLIPS };
enum ADX_MODE        { MODE_MAIN,         MODE_PLUSDI, MODE_MINUSDI };
enum UP_LOW_MODE     { MODE_BASE,         MODE_UPPER,      MODE_LOWER };
enum ICHIMOKU_MODE   { MODE_TENKANSEN=1,  MODE_KIJUNSEN, MODE_SENKOUSPANA, MODE_SENKOUSPANB, MODE_CHINKOUSPAN };
//enum MAIN_SIGNAL_MODE{ MODE_MAIN,         MODE_SIGNAL };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double CopyBufferMQL4(int handle,int index,int shift)
  {
   double buf[];
   switch(index)
     {
      case 0: if(CopyBuffer(handle,0,shift,1,buf)>0)
         return(buf[0]); break;
      case 1: if(CopyBuffer(handle,1,shift,1,buf)>0)
         return(buf[0]); break;
      case 2: if(CopyBuffer(handle,2,shift,1,buf)>0)
         return(buf[0]); break;
      case 3: if(CopyBuffer(handle,3,shift,1,buf)>0)
         return(buf[0]); break;
      case 4: if(CopyBuffer(handle,4,shift,1,buf)>0)
         return(buf[0]); break;
      default: break;
     }
   return(EMPTY_VALUE);
  }
//+------------------------------------------------------------------+
int DayOfWeek()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.day_of_week);
  }
//+------------------------------------------------------------------+
int iBarShift(datetime barTime)
  {
   datetime lastbar[];
   datetime curr=(datetime)SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);
   int res=CopyTime(NULL,NULL,curr,barTime,lastbar);
   if(res<=0)
     {
      Print("Getting High data is failed! Error",GetLastError());
      return(0);
     }
   return(res-1);
  }
//+------------------------------------------------------------------+  
double iFractalsMQL4(string symbol,
                     int tf,
                     int mode,
                     int shift)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   int handle=iFractals(symbol,timeframe);
   if(handle<0)
     {
      Print("Объект iFractals не создан: Ошибка ",GetLastError());
      return(-1);
     }
   else
      return(CopyBufferMQL4(handle,mode-1,shift));
  }
//+------------------------------------------------------------------+ 
int Hour()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.hour);
  }
//+------------------------------------------------------------------+  
int Minute()
  {
   MqlDateTime tm;
   TimeCurrent(tm);
   return(tm.min);
  }
//+------------------------------------------------------------------+
int iBars(string symbol,int tf)
  {
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   int BARS=Bars(symbol,timeframe); 
   return(BARS);
  }

Function is being evaluated

int iBars(string symbol,int tf)

iBars ',' - unexpected token 
'_Symbol' - some operator expected

Не могу понять в чем проблема. Если в отдельном файле компилирую то все в порядке. Здесь выскакивает ошибка.

Автоматический трейдинг и тестирование торговых стратегий
Автоматический трейдинг и тестирование торговых стратегий
  • www.mql5.com
MQL5: язык торговых стратегий для MetaTrader 5, позволяет писать собственные торговые роботы, технические индикаторы, скрипты и библиотеки функций
Reason: