Possible use of uninitialized variable mql4 ошибка

Чтобы было понятней давайте расшифруем всё по-порядку

#property strict

void Trailing(int Magic_to_function, string Symbol_Curent ,int Dist_to_function, int Shag_to_function, bool Isp_shag, bool Bezubitok)
{  
     double dist; 
     double shag;
     
     if      (Digits==3 || Digits==5){dist=Dist_to_function*10*Point;    shag=Shag_to_function*10*Point;}
     else if (Digits==2 || Digits==4){dist=Dist_to_function*Point;       shag=Shag_to_function*Point;}

1. Объявили переменные без явной инициализации

2. Присваивается значение этим переменным только при условии 1 или 2

Соответственно в случае не выполнения этих условий переменные так и останутся не инициализированными… О чём и предупреждает компилятор.

Я-бы написал так, учитывая что это, как мне кажется, для мультивалютника…

#property strict

void Trailing(int Magic_to_function, string Symbol_Curent ,int Dist_to_function, int Shag_to_function, bool Isp_shag, bool Bezubitok)
{
     double sp = MarketInfo(Symbol_Curent, MODE_POINT);
     double dist = Dist_to_function*sp; 
     double shag = Shag_to_function*sp;
     
     if(Digits == 3 || Digits == 5) // или лучше if(Digits % 2 == 1)
      {
       dist = Dist_to_function*10*sp;
       shag = Shag_to_function*10*sp;
      }
// и дальше по тексту
}

  • #8 901

double LOTHIS()
  {
   double hislot;
   for(int y=0; y<=OrdersHistoryTotal()-1; y++)
     {
      if(OrderSelect(y, SELECT_BY_POS,MODE_HISTORY)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
        {
        }
     }
   return(hislot);
  }
//##

Почему выдает эту ошибку:
possible use of uninitialized variable ‘hislot’ Umr3.mq4 162 11

Ведь я проинициализировал в самой функции.

  • #8 902

double LOTHIS()
  {
   double hislot;
   for(int y=0; y<=OrdersHistoryTotal()-1; y++)
     {
      if(OrderSelect(y, SELECT_BY_POS,MODE_HISTORY)==true && OrderMagicNumber()==Magic && OrderSymbol()==_Symbol)//Выбираем ордер
        {
        }
     }
   return(hislot);
  }
//##

Почему выдает эту ошибку:
possible use of uninitialized variable ‘hislot’ Umr3.mq4 162 11

Ведь я проинициализировал в самой функции.

А, если не было в истории ни одного ордера с указанным меджиком и символом — какое значение должна вернуть ф-ция ???

  • #8 903

при такой записи

extern int StopLoss = 250;//Фиксированный уровень стопа
extern int TakeProfit = 500;//Фиксированный уровень профита
int coeff,intBars;
//+------------------------------------------------------------------+
int OnInit(){
   if(MarketInfo(Symbol(),MODE_DIGITS)==5)
      coeff = 10;
   if(MarketInfo(Symbol(),MODE_DIGITS)==3)
      coeff = 10;
   StopLoss  *= coeff;
   TakeProfit*= coeff;
}

если Digits() не равен 3 или 5, допустим он равен 2 или 1, то чему будет равен StopLoss и TakeProfit ?

  • #8 904

void OnTick()
  {
   if(OrdersTotal()==0)
     {
      uo(svecha);
      ue(sltp);
      if(svecha[4][1]<0 && svecha[4][2]<0 && svecha[4][3]<0)
         Print(Bid-sltp[0]*Point);
      ticketss=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,Bid-sltp[0]*Point,0,"S1 buy",Magic,clrNONE);
      if(svecha[4][1]>0 && svecha[4][2]>0 && svecha[4][3]>0)
         ticketss=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Ask+sltp[0]*Point,0,"S1 sell",Magic,clrNONE);
     }
  }
//+------------------------------------------------------------------+
//| User function                                                    |
//+------------------------------------------------------------------+
void ue(double &gh2[3])//Значения стопп и профита sltp[2];
  {
   gh2[0]=NormalizeDouble(StopLoss*Point,Digits);//Фиксирование убытков
   gh2[1]=NormalizeDouble(TakeProfit*Point,Digits);//Фиксирование приболи
   gh2[2]=NormalizeDouble(MarketInfo(Symbol(),MODE_FREEZELEVEL),Digits);//Минимальный стоплос и профит
   gh2[3]=NormalizeDouble(MarketInfo(Symbol(),33),Digits);//Минимальный лот
  };
//###############################################################################
void uo(double &gh[10][31])//Массив свечей svecha[10][31];
  {
   for(int i = 0; i < ArrayRange(gh, 1); i++)
     {
      gh[0][i] = Open[i];//Открытие свечи
      gh[1][i] = Close[i];//Закрытие свечи
      gh[2][i] = High[i];//Макс свечи
      gh[3][i] = Low[i];//Мин свечи
      gh[4][i] = Open[i]-Close[i];//Тело свечи
      gh[5][i] = High[i]-Low[i];//Высота свечи
      gh[6][i] = High[i]-Open[i];//верхняя тень черной свечи
      gh[7][i] = High[i]-Close[i];//Верхняя тень белой свечи
      gh[8][i] = Open[i]-Low[i];//Нижняя тень белой свечи
      gh[9][i] = Close[i]-Low[i];//Нижняя тень черной свечи
     }
  };
//+------------------------------------------------------------------+

Весь код. Не понимаю что не так.

  • #8 905

при такой записи

extern int StopLoss = 250;//Фиксированный уровень стопа
extern int TakeProfit = 500;//Фиксированный уровень профита
int coeff,intBars;
//+------------------------------------------------------------------+
int OnInit(){
   if(MarketInfo(Symbol(),MODE_DIGITS)==5)
      coeff = 10;
   if(MarketInfo(Symbol(),MODE_DIGITS)==3)
      coeff = 10;
   StopLoss  *= coeff;
   TakeProfit*= coeff;
}

если Digits() не равен 3 или 5, допустим он равен 2 или 1, то чему будет равен StopLoss и TakeProfit ?

if(MarketInfo(Symbol(),MODE_DIGITS)==2)
coeff = 10;
if(MarketInfo(Symbol(),MODE_DIGITS)==1)
coeff = 10

  • #8 906

if(MarketInfo(Symbol(),MODE_DIGITS)==2)
coeff = 10;
if(MarketInfo(Symbol(),MODE_DIGITS)==1)
coeff = 10

А если 0 или 6, то тогда что? Распиши уже на все случаи жизни, чтобы ни ку кого не возникало больше вопросов.

  • #8 907

void OnTick()
  {
   if(OrdersTotal()==0)
     {
      uo(svecha);
      ue(sltp);
      if(svecha[4][1]<0 && svecha[4][2]<0 && svecha[4][3]<0)
         Print(Bid-sltp[0]*Point);
      ticketss=OrderSend(Symbol(),OP_BUY,Lot,Ask,Slippage,Bid-sltp[0]*Point,0,"S1 buy",Magic,clrNONE);
      if(svecha[4][1]>0 && svecha[4][2]>0 && svecha[4][3]>0)
         ticketss=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Ask+sltp[0]*Point,0,"S1 sell",Magic,clrNONE);
     }
  }
//+------------------------------------------------------------------+
//| User function                                                    |
//+------------------------------------------------------------------+
void ue(double &gh2[3])//Значения стопп и профита sltp[2];
  {
   gh2[0]=NormalizeDouble(StopLoss*Point,Digits);//Фиксирование убытков
   gh2[1]=NormalizeDouble(TakeProfit*Point,Digits);//Фиксирование приболи
   gh2[2]=NormalizeDouble(MarketInfo(Symbol(),MODE_FREEZELEVEL),Digits);//Минимальный стоплос и профит
   gh2[3]=NormalizeDouble(MarketInfo(Symbol(),33),Digits);//Минимальный лот
  };
//###############################################################################
void uo(double &gh[10][31])//Массив свечей svecha[10][31];
  {
   for(int i = 0; i < ArrayRange(gh, 1); i++)
     {
      gh[0][i] = Open[i];//Открытие свечи
      gh[1][i] = Close[i];//Закрытие свечи
      gh[2][i] = High[i];//Макс свечи
      gh[3][i] = Low[i];//Мин свечи
      gh[4][i] = Open[i]-Close[i];//Тело свечи
      gh[5][i] = High[i]-Low[i];//Высота свечи
      gh[6][i] = High[i]-Open[i];//верхняя тень черной свечи
      gh[7][i] = High[i]-Close[i];//Верхняя тень белой свечи
      gh[8][i] = Open[i]-Low[i];//Нижняя тень белой свечи
      gh[9][i] = Close[i]-Low[i];//Нижняя тень черной свечи
     }
  };
//+------------------------------------------------------------------+

Весь код. Не понимаю что не так.

А в такой записи стопы ставяться что -не так не пойму?

void OnTick()
  {
   if(OrdersTotal()==0)
     {
      ticketss=OrderSend(Symbol(),OP_SELL,Lot,Bid,Slippage,Ask+StopLoss*Point,0,"S1 sell",Magic,clrNONE);
     }
  }

  • #8 908

Добрый день знатокам, помогите написать индикатор. Сам, ну очень далек от программирования. условия очень простые, не займет много времени.
Берем бар, находим середину бара через хай и лоу. если уровень открытия и закрытия находится в нижней половине бара — то это бар на продажу. на покупку открытие и закрытие должно быть в верхней половине. удовлетворяющий условиям бар нужно подкрасить и стрелку добавить.
Помогите кому не трудно, буду очень признателен.

  • #8 909

if(MarketInfo(Symbol(),MODE_DIGITS)==2)
coeff = 10;
if(MarketInfo(Symbol(),MODE_DIGITS)==1)
coeff = 10

если переменная coeff везде равна 10, то почему бы сразу так не записать

или без переменной coeff

StopLoss  *= 10;
TakeProfit*= 10;

или сразу так :)

extern int StopLoss = 2500;//Фиксированный уровень стопа
extern int TakeProfit = 5000;//Фиксированный уровень профита

вот пример

  int coeff = 1; // задай стартовое значение (инициализируй), может меньше условий придётся писать
  long dig = SymbolInfoInteger(symbol,SYMBOL_DIGITS); // для другого графика, для текущего достаточно Digits()
// тут не забудь про фильтры, к какой группе относится символ форекс/не форекс (когда будет актуально разберёшься ))
  if(dig == 3 || dig == 5)coeff = 10;

  • #8 910

А в такой записи стопы ставяться что -не так не пойму?

если не понятно, значит ошибка в таком месте, где даже не ждал, что она там будет.
тот же самый алгоритм действий: принтуй значения стопов от выставления ордера до их объявления.
если всё везде правильно, но стопы не выставляются, то проверь тип счёта может это ECN

Весь код. Не понимаю что не так.

скобки забываешь ставить после условий, может когда добавляешь принты

  • #8 911

Добрый день знатокам, помогите написать индикатор. Сам, ну очень далек от программирования. условия очень простые, не займет много времени.
Берем бар, находим середину бара через хай и лоу. если уровень открытия и закрытия находится в нижней половине бара — то это бар на продажу. на покупку открытие и закрытие должно быть в верхней половине. удовлетворяющий условиям бар нужно подкрасить и стрелку добавить.
Помогите кому не трудно, буду очень признателен.

Подобные просьбы размещают в Бесплатное написание программ или в Предложения по автоматизации торговли.
А здесь задают вопросы по языку программирования те кто сам пишет и чего то не понял.

  • #8 912

Привет. Ребята, что вписать в код индикатора чтобы он ставился на график много раз при смене настроек, а непереставлялся только с новыми ???
И другой вопрос, чтобы убирал за собой линии и т.д.

griz

griz

Активный участник


  • #8 913

чтобы он ставился на график много раз при смене настроек, а непереставлялся только с новыми ???

Т.е. в настройках индикатора меняешь параметры, и на графике каждый раз (при изменении параметров) создаются новые версии этого индикатора, как бы каждая версия со своими параметрами, я правильно понял?

  • #8 914

почему после нормализации все равно выдает:
2022.11.06 20:10:49.998 2004.04.13 00:00:46 Umr3 AUDCAD,H4: ДЛя открытия сделок Бай=SL=0.9844000000000001=TP=1.061=ASK=1.011=BID=1.0094

  • #8 915

Т.е. в настройках индикатора меняешь параметры, и на графике каждый раз (при изменении параметров) создаются новые версии этого индикатора, как бы каждая версия со своими параметрами, я правильно понял?

Да,все так.

griz

griz

Активный участник


  • #8 916

почему после нормализации все равно выдает:
2022.11.06 20:10:49.998 2004.04.13 00:00:46 Umr3 AUDCAD,H4: ДЛя открытия сделок Бай=SL=0.9844000000000001=TP=1.061=ASK=1.011=BID=1.0094

допиши:

string SL_2 = DoubleToString(SL,Digits);
Print("SL_2=",SL_2);

  • #8 917

допиши:

string SL_2 = DoubleToString(SL,Digits);
Print("SL_2=",SL_2);

Мне потом в ордер сенд вставлять нужно.

griz

griz

Активный участник


  • #8 918

Т.е. в настройках индикатора меняешь параметры, и на графике каждый раз (при изменении параметров) создаются новые версии этого индикатора, как бы каждая версия со своими параметрами, я правильно понял?

Вроде так нельзя делать. Тут нужно разрабатывать индюк, чтобы он мог создавать свои дубли с настраиваемыми параметрами.

  • #8 919

И другой вопрос, чтобы убирал за собой линии и т.д.

если совсем простенький вариант, то добавь это

//+------------------------------------------------------------------+

void OnDeinit(const int reason){
  ObjectsDeleteAll(chart_id/*идентификатор графика*/,prefix/*одинаковая не меняющаяся часть названия у объектов*/,sub_window/*номер подокна*/,object_type/*тип объекта*/);
}

если функция OnDeinit в коде уже есть, то в неё просто добавь содержимое из этого примера,
подставь нужные значения (последние два параметра не обязательные)
тут справка -https://docs.mql4.com/ru/objects/objectsdeleteall, возможно оттуда подойдут другие варианты

griz

griz

Активный участник


  • #8 920

Мне потом в ордер сенд вставлять нужно.

в ордер сенд вставляй так:

33 replies

When will be new version Mark? If You are talking about SQ4 then sometimes I even doubt in it’s existency! 😉 we talked last time that SQ4 should be at december 2014. We have July of 2015 😉 can You fix it in existing sq3?

btn_viewmy_160x33.png

It would be great to see another SQ3 release with the code fixed and a handful of other known bugs fixed.

@Mark – If we collected together a list of high priority known bugs, could you produce another SQ3 release with these in to tide us over until SQ4 is ready?

TIA

Mike

Mike, I’ll surely  consider it.

Please compile a list of bugs you think are high priority and should be fixed in the current version 3.

The best is to contact me by private message on forum or by support email then, so I’ll not miss it here on forum. 

Mark
StrategyQuant architect

The best is to contact me by private message on forum 

Really? 🙂

btn_viewmy_160x33.png

sorry, I didn’t know about this.

what issue is there with compiler exactly? it works fine for MT4.

code generator for MT5 will be only in the new version, it is quite a lot of work to do it twice.

Mark
StrategyQuant architect

Hard to say. Mql says only that it isnt done with compile strict. Please follow the website that I mentioned. Maybe it will help to solve the problem.

btn_viewmy_160x33.png

Any update on this, Mark?

btn_viewmy_160x33.png

Mike, I’ll surely  consider it.

Please compile a list of bugs you think are high priority and should be fixed in the current version 3.

The best is to contact me by private message on forum or by support email then, so I’ll not miss it here on forum. 

Hi Mark,

I am going to compile a list of bugs and issues I think would be simple to change for a final SQ3 release.  I wil then post it on the forum and send it to you. 

Many thanks,

Mike

Here’s some issues I think should be fixed and go into final SQ3 release.

I just want to let you know that we just released an autoupdate that fixes this. Your SQ should be updated next time you start it.

So ti is now possible to add #property strict to your EA and it will compile correctly.

Mark
StrategyQuant architect

Ok, I have updated SQ but I see no option to add #property strict.

Where can I find it?

btn_viewmy_160x33.png

there is no setting for it in SQ, what was changed was that SQ now generates code that can be compiled with #property strict.

You can add the line:

#property strict

to the beginning of generated EA file.

Mark
StrategyQuant architect

Will it work even if I load “old” strategies files and export again in mql?

btn_viewmy_160x33.png

yes, you can alway re-export old strategies in SQ and they should work as before.

MQL code was just cleaned up so that there are no errors when compiled with #property strict

Mark
StrategyQuant architect

#property strict in actual version SQ 3.8.1 is not. If I add line #property strict and compile to ex4 returns this errors. I instaled lasted SQ 3.8.1 and patches from august and september.

‘EURUSD_15M_21.320229.mq4    EURUSD_15M_21.320229.mq4    1    1
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    562    83
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    562    111
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    605    70
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    607    71
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    630    38
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    630    61
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    630    83
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    630    99
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    635    35
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    640    26
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    640    55
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    653    39
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    653    57
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    653    77
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    655    24
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    655    57
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    655    94
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    658    40
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    658    54
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    672    39
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    672    61
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    672    94
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    672    131
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    676    39
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    676    77
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    676    91
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    684    55
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    687    46
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    687    60
‘i’ – undeclared identifier    EURUSD_15M_21.320229.mq4    1048    8
‘i’ – undeclared identifier    EURUSD_15M_21.320229.mq4    1064    8
‘i’ – undeclared identifier    EURUSD_15M_21.320229.mq4    1091    8
‘i’ – undeclared identifier    EURUSD_15M_21.320229.mq4    1107    8
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    1223    19
‘i’ – undeclared identifier    EURUSD_15M_21.320229.mq4    1304    8
‘orderTime’ – undeclared identifier    EURUSD_15M_21.320229.mq4    1306    10
implicit conversion from ‘string’ to ‘number    EURUSD_15M_21.320229.mq4    1306    20
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    1308    13
possible use of uninitialized variable ‘lotMM    EURUSD_15M_21.320229.mq4    1380    15
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    1788    19
possible loss of data due to type conversion    EURUSD_15M_21.320229.mq4    1802    30
possible loss of data due to type conversion    EURUSD_15M_21.320229.mq4    1813    22
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    1815    56
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    1851    60
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    1851    87
possible loss of data due to type conversion    EURUSD_15M_21.320229.mq4    2117    11
implicit conversion from ‘number’ to ‘string    EURUSD_15M_21.320229.mq4    2118    17
possible loss of data due to type conversion    EURUSD_15M_21.320229.mq4    2140    65
possible loss of data due to type conversion    EURUSD_15M_21.320229.mq4    2141    70
6 error(s), 43 warning(s)        7    44
 

I’m an enthusiastic content creator with a passion for automated trading strategies (ATS). My love for ATS began in 2011, and I’ve been honing my skills ever since. In 2013, I built my own ATS and later discovered StrategyQuant, a remarkable tool that allows anyone to create ATS without any programming expertise.

I’m also the proud creator of QuantMonitor.net, a unique platform monitoring tool that simplifies your trading experience. My trading dashboard comes with additional tools like the rename tool and EA deployer, making it a breeze to rename and deploy up to 99 strategies in mere clicks.

Join me on this exciting journey as we explore the endless possibilities of automated trading strategies together! 🚀

You must be logged in to reply to this topic.

Sign in

Compare the following snippets:

I like the warning shown in the last example and I’d like to have it in the second example (value type) as well (although the text from the first example would be more appropriate than the one from the third in that case). Is this possible or is this a feature that has been (deliberately) omitted from VB.NET?

1 Answer 1

No, it’s not possible.

Here’s what Microsoft says about it in this closed feature suggestion of 2010:

Receiving warnings when you haven’t used one of your locals is indeed valuable and we’d love to add this warning to Visual Basic. However, we must be careful as we introduce new warnings given the number of people who run with «warning-as-error» enabled. While this warning would often indicate a coding error, there may be instances within existing apps where an unused local is benign — left over from a previous version of the method. In these cases, we need to take great care not to break existing codebases when they are moved from one version of the language to the next.

So it seems they won’t add this feature due to backward compatility reasons.

Дообрый день! Имеется следующий код

При компиляции выскакивают ошибки:

Error C4700 uninitialized local variable ‘a’ used
Error C4700 uninitialized local variable ‘b’ used
Error C4700 uninitialized local variable ‘c’ used
Error C4700 uninitialized local variable ‘d’ used

Прдскажите, пожалуйста, в чем проблема.. не могу понять.. переменные же вроде инициализировала еще в самом начале функции main()

    Opentraders — это независимое сообщество, создаваемое трейдерами и для трейдеров. Присоединяйтесь, нам по пути!

  • Войти
  • Регистрация

AM2
Андрей

Группа «Программирование на MQL»

Обсуждаем здесь вопросы разработки экспертов, делимся опытом, выкладываем уроки.

Внимание! Если Вы хотите заказать советник, то Вам в группу «Заказы на разработку советников»

Лучшее от AM2

100% ордеров в плюс или тысячи процентов годовых 19
2016-12-21 20:18:10

Советник — откусыватель убыточной позиции 23
2017-05-28 14:02:20

На какие «Машки» больше всего смотрят «Нонки» 33
2015-11-07 02:52:18

Запускаем стороннее приложение и выключаем компьютер с помощью средств MQL 3
2017-10-22 13:05:55

Как написать простейший советник, торгующий отложенными ордерами. 48
2013-02-28 20:53:04

  • Программирование на MQL

В программах на MQL4 часто невольно допускаются различные ошибки. В этом топике мы разберем наиболее часто встречающиеся из них.

Первое место в нашем топе ошибок занимает «крик души» терминала: «Потеряли индикатор!»

В таких случаях возмущению пользователей эксперта нет предела: «Советник не работает!» или «Ставлю советник на график и ничего не происходит!» Решение этого вопроса как всегда оказывается простым как все гениальное. Достаточно заглянуть на вкладку «Журнал» терминала и обнаружив там запись вроде:

2016.09.08 09:15:44.957 2016.01.04 00:51 cannot open file ‘C:Users1AppDataRoamingMetaQuotesTerminalMQL4indicatorsKELTNER_F12.ex4’ [2]

привести в соответствие имена индикаторов в советнике и в папке терминала. Если индикатор отсутствует, добавить его в папку с индикаторами.

Второе место по праву могут разделить ошибки Zero divide и Array out of range

Zero divide — Деление на ноль может возникнуть например в таком участке кода:

Устраняется ошибка проверкой делителя на корректное значение:

Ошибка Array out of range возникнет если в советнике скрипте или индикаторе вы обратитесь к несуществующей ячейке массива:

В нашем массиве задано при инициализации 3 элемента:

Нумерация элементов начинается с нуля: 0,1,2. Когда мы обращаемся к ячейке с номером 3 или 4 мы выходим за пределы массива, отсюда и ошибка. Правильным будет такой вариант:

Так компилируется без ошибок и показывает что к указанным элементам массива, можно обращаться:

Третье место в нашем рейтинге занимает ошибка подобная первой, но только она возникает когда мы работая над каким то участком кода, скомпилировали его и тут же бросили на график не дождавшись окончания компиляции или не посмотрев результаты компиляции. Программа вот только что работала и теперь ничего!

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

Нажав CTRL+Z или дождавшись окончания компиляции мы решим и этот вопрос.

И на последок рассмотрим еще одну ошибку которая встретилась мне совсем недавно в одном из топиков в «Столе заказов MQL»: zakaz.opentraders.ru/34761.html

Андрей посмотри не компилируется.Пишет ошибка ‘MathMod’ — illegal switch expression type.

Это ошибка использования оператора switch.
В коде выражение:

возвращало дробное значение. В новых версиях компилятора выражения и константы оператора switch должны быть целыми числами, поэтому такая запись помогла решить ошибку:

Функция возвращает: если true — по тейку, false — еще как-то. Нажмите лайк и функция откроется.[sociallocker]

bool isCloseLastPosByTake(string sy="", int op=-1, int magic=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (OrderMagicNumber() == magic || OrderMagicNumber() == -1) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
}

[/sociallocker]
Входные данные:

Sy- символ;

op — тип ордера OP_BUY или OP_SELL (-1 — любой тип);

magic — если -1 ордер с любым магиком или вообще без магика (ручной ордер).

Вот и все. Приятных вам функций!

Поделись с друзьями:

Понравилась статья? Поделить с друзьями:
  • Positional argument follows keyword argument python ошибка
  • Posiflex pp 6900 ошибка печати
  • Pos ошибка 4119
  • Porte avg ouverte ошибка citroen c4
  • Portal knights сетевая ошибка