Одновременный запуск более одного эксперта - страница 2

 

Во-первых, убедитесь, что вы инициализировали все переменные с некоторыми значимыми значениями по умолчанию. Например, вы используете BuyTicket до его инициализации, поэтому при первом запуске он может иметь любое значение.

Выдержка из справочного файла MQL4 (MQL4 Reference / Language Basics / Variables / Initialization of Variables):

If a variable is not initialized explicitly, the value stored in this variable can be any. Implicit initialization is not used.

Итак, в следующей части добавьте к переменным значения по умолчанию:

//Global Variables
int BuyTicket;
int SellTicket;
double InternalStopLoss;
double CalcDigits;
double CalcPoint;
bool MABuyFanning;
bool MASellFanning;
int SelectedOrder;
bool Closed;
int ErrorCode;
string ErrLog;
double BuyStopLoss;
double SellStopLoss;
bool NewBar;
double ThisBarOpen;
double SmallMA;
double MediumMA;
double LargeMA; 
 

И да, в MQL4 есть ошибки и причуды, но большинства ошибок можно избежать, просто прочитав основы в справочном руководстве.

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

 
drazen64:

Во-первых, убедитесь, что вы инициализировали все переменные с некоторыми значимыми значениями по умолчанию. Например, вы используете BuyTicket до его инициализации, поэтому при первом запуске он может иметь любое значение.

Выдержка из справочного файла MQL4 (MQL4 Reference / Language Basics / Variables / Initialization of Variables):

Итак, в следующей части добавьте к переменным значения по умолчанию:



Это правда, однако, это зависит от использования. Иногда вы просто хотите объявить его, потому что знаете, откуда будет взято значение, а иногда вам нужно инициализировать его чем-то, поскольку он может работать некорректно, если не инициализирован определенными значениями по умолчанию.
 
deysmacro:

Это правда, однако, это зависит от использования. Иногда вы просто хотите объявить ее, потому что знаете, откуда будет взято значение, а иногда вам нужно инициализировать ее чем-то, поскольку она может работать некорректно, если не инициализировать ее определенными значениями по умолчанию.


Ему не нужно инициализировать переменные в месте определения, но он определенно должен инициализировать переменные до некоторого значения перед их использованием.

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

Современные компиляторы выдают ошибки, если вы пытаетесь использовать неинициализированные переменные. MQL4, к сожалению, этого не делает, поэтому кодер должен быть уверен, что все правильно инициализировано.

 
Вы можете указать ему на то, что он использует var без надлежащей инициализации.
 
deysmacro:
Вы могли бы указать ему на одну вещь, что он использует var без надлежащей инициализации.


Прочитайте второе предложение в первой строке https://www.mql5.com/en/forum/151167/page2#954612.

Вы могли бы прочитать ответ, прежде чем критиковать его.

BTW, как вы здесь помогаете? "Умные" замечания не очень-то помогают.

 
for(Counter = 0; Counter <=OrdersTotal()-1; Counter++)
               {
               SelectedOrder = OrderSelect(Counter,SELECT_BY_POS);
               if(OrderMagicNumber() == MagicNumber && OrderSymbol() == Symbol() && OrderType() == OP_BUY)
                  {
                 // while(IsTradeContextBusy()) Sleep(10);
                  Closed = OrderClose(OrderTicket(),OrderLots(),MarketInfo(Symbol(),MODE_BID),Slippage,Red);
                  if(Closed == true) BuyTicket = 0;
                  else Alert("Symbol: ",Symbol()," Ticket: ",BuyTicket," unable to close buy order(s): buy ma convergence close routine");                  
                  }
            Counter--;               
                }
 

Я прочитал, прежде чем опубликовать свой. Я имею в виду, покажите ему одну вещь, которая связана с var, и эта var не инициализируется должным образом.


Хе-хе. GumRai победил его. XD

 

Если я правильно вас понял, вы хотите сказать, что тот факт, что он использует неинициализированные переменные, не является поводом для беспокойства только потому, что я не указал, что именно может произойти из-за того, что BuyTicket и некоторые другие переменные содержат неизвестные значения при запуске программы?

Что ж, пусть будет так. Пусть он использует неинициализированные переменные. Что может пойти не так?

 
Я инициализировал все переменные, как было предложено, а также удалил "==true" из булевых значений. Также я удалил все банковские пробелы внутри строк кода. Я протестировал советник с помощью отладчика на двух разных символах - одном на ноутбуке и одном на ПК в течение примерно 2 часов, и оба работали нормально, продавая, покупая и закрываясь в правильное время без каких-либо ошибок. Однако затем я добавил советника на другие 3 символа на ПК и ноутбуке, так что все 4 символа работали на обоих терминалах, и с этого момента все они начали пропускать входы и выходы. В конце теста на одном терминале я удалил советников до закрытия открытых позиций, а на другом - после закрытия открытых позиций. На терминале, где все еще были открытые позиции, удаление советников заняло очень много времени, а на терминале без открытых позиций все 4 советника удалились сразу. Измененный код размещен отдельно ниже.
Причина обращения: