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

 

Здравствуйте. Я заметил что в тестере перестала работать функция OrderCalcMargin(). В терминале работает. Прилагаю тестовый советник с функцией из библиотеки AccauntInfo. Не подключал а скопировал для наглядности.

//+------------------------------------------------------------------+
//|                                                  Test_Margin.mq5 |
//|                                                        Good_Beer |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Good_Beer"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property description "тестирование функции расчёта маржи. Результат пишет в журнал"
#property description "каждую свечу рсчитывается значение маржи"
enum inputTyp
  {
   buy,sell
  };
input  inputTyp typs = buy; //Направление
input double lots = 0.1; //Объём
input int lsPoints = 100; //Размер sl в пунктах
double prs;
double slSize;
double slValue;
double endMargin;
double posVol;
ENUM_ORDER_TYPE ordTyp;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   prs = 0;
   slSize = lsPoints * _Point;
   slValue = 0;
   endMargin = 0;
   ordTyp = ORDER_TYPE_BUY;
   double lotstep = SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_STEP);
   posVol = MathRound(lots / lotstep) * lotstep;
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   static datetime tk_1;
   datetime actime_1[1];
   CopyTime(_Symbol,PERIOD_CURRENT,0,1,actime_1);
   if(actime_1[0] > tk_1)
     {
      tk_1 = actime_1[0];
      if(typs == buy)
        {
         prs = SymbolInfoDouble(_Symbol,SYMBOL_ASK);
         slValue = prs - slSize;
        }//typs == buy
      else
        {
         prs = SymbolInfoDouble(_Symbol,SYMBOL_BID);
         slValue = prs + slSize;
         ordTyp = ORDER_TYPE_SELL;
        }//typs != buy

      endMargin = MarginCheck(_Symbol,ordTyp,posVol,prs);
      string data = " margin=" + DoubleToString(endMargin,3) + "; order:" + EnumToString(ordTyp) + "; volume=" + DoubleToString(posVol,3) + "; price=" + DoubleToString(prs,_Digits);
      Print(__FILE__,data);
     }//actime_1[0] > tk_1
  }//OnTick()
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Access functions OrderCalcMargin(...).                           |
//| INPUT:  name            - symbol name,                           |
//|         trade_operation - trade operation,                       |
//|         volume          - volume of the opening position,        |
//|         price           - price of the opening position.         |
//+------------------------------------------------------------------+
double MarginCheck(const string symbol,const ENUM_ORDER_TYPE trade_operation,
                   const double volume,const double price)
  {
   double margin = EMPTY_VALUE;
//---
   if(!OrderCalcMargin(trade_operation,symbol,volume,price,margin))
      return(EMPTY_VALUE);
//---
   return(margin);
  }
 
vodoleyvl3 #:

PUSH Пожалуйста, помогите - замучился работать на МТ4 без PUSH-уведомлений на телефон о событиях на торговом счёте. С апреля 2022 года начали приходить  со всё большей задержкой, а в августе перестали приходить вообще. Когда посылаю тестовое сообщение, журнал говорит, что оно отправлено на мой ID, но на телефон оно не приходит.   Такое уже бывало в прошлые годы (я на МТ4 уже больше 10 лет, мне 81 год), я обращался к вам за помощью, и вы восстанавливали нормальную работу . Надеюсь, выручите и на этот раз. Писал на support Forex Club, но они там мышей не ловят, сами ничего делать не хотят, только присылают целые простыни умных советов. Я следую этим советам но результат - нулевой. Нужно, очевидно, вмешательство со стороны системы.

У вас изменился формат, и я не уверен, что найду ваш ответ на этом форуме. Самым лучшим ответом будет, конечно, возобновление PUSHей - уж это я увижу! Но хотелось бы, конечно, получить совет по профилактике, чтобы ситтуация не повторялась. Спасибо, что прочитали.

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

 

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

Нашёл в документации опечатку

https://www.mql5.com/ru/docs/trading/historyorderselect

Вероятно, здесь должны быть "ордера". Аналогичная опечатка в справке MetaEditor.

Документация по MQL5: Торговые функции / HistoryOrderSelect
Документация по MQL5: Торговые функции / HistoryOrderSelect
  • www.mql5.com
HistoryOrderSelect - Торговые функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Good Beer #:

Здравствуйте. Я заметил что в тестере перестала работать функция OrderCalcMargin(). В терминале работает. Прилагаю тестовый советник с функцией из библиотеки AccauntInfo. Не подключал а скопировал для наглядности.

К сожалению, воспроизвести проблему не удалось. Пожалуйста:

1. Удостоверьтесь что вы не используете режим тестирования "profit in pips for faster calculations"

2. Уточните по какому торговому инструменту и с какой валютой депозита вы выполняете тестирование

 
MQ Alexander #:

К сожалению, воспроизвести проблему не удалось. Пожалуйста:

1. Удостоверьтесь что вы не используете режим тестирования "profit in pips for faster calculations"

2. Уточните по какому торговому инструменту и с какой валютой депозита вы выполняете тестирование

Простите, действительно режим пипсов! Однако на рынке forex тестер считает маржу и в пипсах. А у меня проблема была на крипте со способом расчёта маржи "forex". Функция
bool OrderCalcMargin()
даёт true, но маржа получается 0. на графике маржа есть в тестере маржи нетБез пипсов всё работет. Интересно, почему так?
 

Привет! Как прервать выполнение программы в тестере для облегчения вылавливания багов?

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

//+------------------------------------------------------------------+
//| Экстренное прерывание работы программы                           |
//+------------------------------------------------------------------+

void AbortProgram()
  {
   Print("Прерываю делением на ноль");
   int a=1;
   int b=0;
   a=a/b;
  }
 
Sunriser #:

Привет! Как прервать выполнение программы в тестере для облегчения вылавливания багов?

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


А так:
Alert(1/(int)MathAbs(0));
?
 
Sunriser #:

Привет! Как прервать выполнение программы в тестере для облегчения вылавливания багов?

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


Тут, скорее всего, дело в том, что результат деление нигде не используется, поэтому кусок кода удаляется во время оптимизации.
 
Sergey Gridnev #:

А так:
Alert(1/(int)MathAbs(0));
?

Так советник в тестере прекращает принтить в лог, но его индикаторы продолжают работать.

Как-то раньше было проще, странно что нет встроенной функции.

Можно конечно попробовать заодно деинициализировать индикаторы, или через глобальную переменную передать им сигнал на деление на ноль =)).

 
Sunriser #:

Так советник в тестере прекращает принтить в лог, но его индикаторы продолжают работать.

Как-то раньше было проще, странно что нет встроенной функции.

Можно конечно попробовать заодно деинициализировать индикаторы, или через глобальную переменную передать им сигнал на деление на ноль =)).


TesterStop() ещё есть.
Причина обращения: