Ошибки, баги, вопросы - страница 100

 
Urain:

Есть ли принудительное прекращение функции OnTester()

или почему история сделок до пользовательской функции существует а после выдаёт ноль :

double OnTester()
  {
   int HTD=-1;
   Custom_func();
   if(HistorySelect(0,TimeCurrent()))HTD=HistoryDealsTotal();   
   return(HTD);
  }

какие функции не работают в тестере ??

как из тестрера(при оптимизации) подать сигнал наружу что чтото не так (принты алерты ничего же не работает) ??

Видимо сегодня уже все спят.
 
Urain:
Видимо сегодня уже все спят.

А логи агентов не смотрели, может там все есть?

На сколько знаю, принты не выводятся в основной лог тестера только при оптимизации (в обычном режиме все ОК).

Из OnTester() как я понимаю принудительно выйти не возможно. Да и зачем, там ведь просто рассчитывается определенный результат тестирования (да еще по сути используемый только для оптимизации)?

OnTester:
Функция OnTester() является обработчиком события Tester, которое автоматически генерируется по окончании исторического тестирования эксперта на заданном интервале дат. Функция должна быть определена с типом double, параметров не имеет:

double OnTester();

Функция вызывается непосредственно перед вызовом функции OnDeinit() и имеет тип возвращаемого значения double. Функция OnTester() может быть использована только в экспертах при тестировании и предназначена в первую очередь для расчета некоторого значения, используемого в качестве критерия Custom max при генетической оптимизации входных параметров.


PS

> или почему история сделок до пользовательской функции существует а после выдаёт ноль...

Тут наверно к разработчикам.

Насколько я понял, OnTester должен вернуть количество сделок (если они есть), а под пользовательской функцией понимается Custom_func()?

 
Urain:

Разработчикам посвящяется ...

Ребята вы бы хоть предупреждали если даёте возможности которые раньше в принципе были не возможны.

Сутки угробил чтоб выловиль вот такой баг

только не нужно меня учить что так и нужно ну конечно же, я всё это знаю но реально убил сутки только потому что привык что при таком

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

Ну и как правильно в конце концов? Так "==" или так "="?
 
Urain:

Есть ли принудительное прекращение функции OnTester()

или почему история сделок до пользовательской функции существует а после выдаёт ноль :

какие функции не работают в тестере ??

как из тестрера(при оптимизации) подать сигнал наружу что чтото не так (принты алерты ничего же не работает) ??

Спасибо за сообщение. Ваша заявка получена - разбираемся.

 

Как вычислить максимальный допустимый лот по марже для открытия новой позиции? В MQL4 это делалось так:

 

MaxLot=AccountFreeMargin()/MarketInfo(Symbol(),MODE_MARGINREQUIRED);
 
EvgeTrofi:

Как вычислить максимальный допустимый лот по марже для открытия новой позиции? В MQL4 это делалось так:

Примерно так:

double CalculateMaxVolume(string symbol)
  {
   double price=0.0;
   double margin=0.0;
//--- select lot size
   if(!SymbolInfoDouble(symbol,SYMBOL_ASK,price))                return(0.0);
   if(!OrderCalcMargin(ORDER_TYPE_BUY,symbol,1.0,price,margin)) return(0.0);
   if(margin<=0.0)                                            return(0.0);

   double lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)/margin,2);
//--- normalize and check limits
   double stepvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);
   lot=stepvol*NormalizeDouble(lot/stepvol,0);

   double minvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
   if(lot<minvol) lot=minvol;

   double maxvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);
   if(lot>maxvol) lot=maxvol;
//--- return trading volume
   return(lot);
  }
Этот код не только вычисляет максимальный объем, но и точно вписывает его в ограничения настроек символа.
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Информация об инструменте - Документация по MQL5
 
Renat:

Примерно так:

Этот код не только вычисляет максимальный объем, но и точно вписывает его в ограничения настроек символа.
Спасибо! У меня в справке функции OrderCalcMargin() нет :)
 
EvgeTrofi:
Спасибо! У меня в справке функции OrderCalcMargin() нет :)
Эта функция давно уже добавлена - поищите в документации, пожалуйста.
 
EvgeTrofi:
Ну и как правильно в конце концов? Так "==" или так "="?

И так и так.

if(a==0){выражение} значит если а равно 0 то  истино, значит исполняем {выражение}.

if(a=0){выражение} равносильно такой записи if(a){a=0;выражение} , те если а истино то { а присвоить 0, выражение}.

 
Interesting:

А логи агентов не смотрели, может там все есть?

На сколько знаю, принты не выводятся в основной лог тестера только при оптимизации (в обычном режиме все ОК).

Из OnTester() как я понимаю принудительно выйти не возможно. Да и зачем, там ведь просто рассчитывается определенный результат тестирования (да еще по сути используемый только для оптимизации)?

PS

> или почему история сделок до пользовательской функции существует а после выдаёт ноль...

Тут наверно к разработчикам.

Насколько я понял, OnTester должен вернуть количество сделок (если они есть), а под пользовательской функцией понимается Custom_func()?

Вот проблема как раз в том что в при самой оптимизации программа работает не так как  в других ситуациях (поэтому и нужно подать весточку из под OnTester).

Для этих целей придумал аналог принта(функцию которая создаёт файл ради того чтоб напечатать один стринг передаваемый в функцию как параметр).

int prints=0;// счётчик вызовов, должен быть обьявлен глобально
//+------------------------------------------------------------------+
//| вывод информации из под тестера                                  |
//+------------------------------------------------------------------+
void WriteFilePrint(string text,string folder="Print")
  {
   string subfolder="Print";
   int han=FileOpen(subfolder+"\\"+folder+(string)prints+".csv",FILE_WRITE|FILE_CSV,";");
   if(han!=INVALID_HANDLE)
     {
      FileWrite(han,text);
      FileClose(han);
     }
   else Print("File open failed"+subfolder+"\\"+folder+".txt, error",GetLastError());
   prints++;
  }

Таким образом получилось отловить некоректное исполнение некоторых функций в OnTester.

Причина обращения: