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

INDICATOR_CALCULATIONS

не выводит буферы

добавьте проверку сколько скопировано CopyBuffer, и сразу увидите ошибку

if(CopyBuffer(Handle,0,1,1,Buffer1) <=0 )
     {
      Print("Не удалось скопировать значения c Handle");
      return(RESET);
     }


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

lynxntech #:

не выводит буферы

добавьте проверку сколько скопировано CopyBuffer, и сразу увидите ошибку
 Всегда считал что это скрытый буфер для промежуточных расчетов, почему он доступен извне???

INDICATOR_CALCULATIONS
INDICATOR_DATA
Это тоже значения не имеет.
Я пробовал разные значения.
Он не скрытый просто не отображается на графике.


Скопирован 1 элемент. Иначе был бы выход за пределы массива.
Где ошибка?

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


#property  indicator_plots 0
#property indicator_chart_window
#resource "\\Indicators\\TEST.ex5"

int handle_m1 = iCustom(NULL,0,"::Indicators\\TEST.ex5");
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{ 
   EventSetTimer(3);
   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{    
   EventKillTimer();
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int32_t rates_total,
                const int32_t prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int32_t &spread[])
{   
   double temp[];
   
   int rest1 = CopyBuffer(handle_m1,0,0,1,temp);
   double tick = temp[0];

   int rest2 = CopyBuffer(handle_m1,1,0,1,temp);
   double timer = temp[0];
      
   int rest3 = CopyBuffer(handle_m1,2,0,1,temp);
   double event = temp[0];

   Print(" ВЫЗВАННЫЕ ДАННЫЕ В КАЛЬКУЛЯТОРЕ: тик=",tick," эл_скоп=",rest1," таймер=",timer," эл_скоп=",rest2," события=",event," эл_скоп=",rest3);
      
   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
{        
   double temp[];
   
   int rest1 = CopyBuffer(handle_m1,0,0,1,temp);
   double tick = temp[0];

   int rest2 = CopyBuffer(handle_m1,1,0,1,temp);
   double timer = temp[0];
      
   int rest3 = CopyBuffer(handle_m1,2,0,1,temp);
   double event = temp[0];

   Print(" ВЫЗВАННЫЕ ДАННЫЕ В ТАЙМЕРЕ: тик=",tick," эл_скоп=",rest1," таймер=",timer," эл_скоп=",rest2," события=",event," эл_скоп=",rest3);
}  
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   double temp[];
   
   int rest1 = CopyBuffer(handle_m1,0,0,1,temp);
   double tick = temp[0];

   int rest2 = CopyBuffer(handle_m1,1,0,1,temp);
   double timer = temp[0];
      
   int rest3 = CopyBuffer(handle_m1,2,0,1,temp);
   double event = temp[0];

   Print(" ВЫЗВАННЫЕ ДАННЫЕ - СОБЫТИЕ: тик=",tick," эл_скоп=",rest1," таймер=",timer," эл_скоп=",rest2," события=",event," эл_скоп=",rest3);
}
//+------------------------------------------------------------------+


#property indicator_chart_window
#property indicator_buffers 3
#property indicator_plots 0
double Buffer1[];
double Buffer2[];
double Buffer3[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{ 
   ArraySetAsSeries(Buffer1,true);  
   ArraySetAsSeries(Buffer2,true);  
   ArraySetAsSeries(Buffer3,true);  
   SetIndexBuffer(0,Buffer1,INDICATOR_CALCULATIONS);
   SetIndexBuffer(1,Buffer2,INDICATOR_CALCULATIONS);
   SetIndexBuffer(2,Buffer3,INDICATOR_CALCULATIONS);
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,-999.9);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,-999.9);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,-999.9);  
      
   EventSetTimer(1);

   return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{    
   EventKillTimer();
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int32_t rates_total,
                const int32_t prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int32_t &spread[])
{   
   Buffer1[0]=11.1;
   Print("тик запись");
   return(rates_total);
}
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
{        
   Print("таймер при записи");
   Buffer2[0]=22.2;
}  
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   Print("событие при записи");
   Buffer3[0]=33.3;
}
//+------------------------------------------------------------------+
Aleh Sasonka #:

Добрый день.
На втором мониторе не видна стрелка перемотки списка функций в эдиторе. Да и на первом попасть в маленькую стрелку сложно(

Можно сделать перемотку колёсиком мыши?


ГЛАВНОЕ ЧТОБЫ ЕЁ МОЖНО БЫЛО ОТКЛЮЧАТЬ! Жутко мешает и бесит в ME прокрутка кода ctrl+колесо мыши. Я бы её  отключил, но никто не догадался сделать её отключение...((((

На всех терминалах советник работал без ошибок. И на обычном хостинге не было проблем.

Только на MT VPS начались проблемы - все сделки проходят с одинаковой ошибкой - m_trade.ResultDeal() возвращает 0 (ноль).


Pavel Verveyko # :
Сборка 5830, проблема существует.
Тестер , белые горизонтальные линии это clrNONE, а должны быть невидимыми.
Исправлено. Будет включено в следующую публичную бета-версию.
Alain Verleyen #:
Исправлено. Будет включено в следующую публичную бета-версию.
По этим (1 , 2 , 3) вопросам правки планируются?
Ошибка в расчете маржи из-за неправильного конвертирования валют
Ошибка в расчете маржи из-за неправильного конвертирования валют
  • 2026.06.06
  • www.mql5.com
Пользователь описывает проблемы с индикаторами и функцией OrderCalcMargin(), где маржа в евро не совпадает с ожидаемым значением, а также ошибки в коде, связанные с записью и чтением данных в буферах. Также упоминаются проблемы с интерфейсом и функционалом, например, отсутствие перемотки списка функций и ошибки в работе таймера и событий.
Aleksey Vyazmikin # :
По этим ( 1 ,  2 , 3 ) вопросам правки планируются?

1. Я проверю позже.

2. Обмен не является сделкой. Он всегда связан с DEAL_BUY или DEAL_SELL.

3. Я не понимаю, о чём вы говорите.

Aleksey Vyazmikin #:

Демо счёт MQ, валюта депозита USD, плечо 100, лот 1 тип ордера - покупка - на инструменте функция OrderCalcMargin() выдаёт значение 1000, в то время как в спецификации значение 1152,42.
Почему маржу выдаёт в евро? А если счёт в рублях, то пытается конвертировать в рубли, но по EURUSD есть ошибка.
Вот таблица:



Вот наброски кода

It's unclear what is the problem ?

2026.06.10 12:15:00.859    1111#37471 (EURUSD,H1)    Коэффициенты маржи для Buy, начальная маржа=1.0 поддерживающая маржа=0.0
2026.06.10 12:15:00.859    1111#37471 (EURUSD,H1)    arr_Sym_Tick_P Ask=1.1556899999999999 Bid=1.15565
2026.06.10 12:15:00.859    1111#37471 (EURUSD,H1)    arr_Sym_Tick_O Ask=1.1556899999999999 Bid=1.15565
2026.06.10 12:15:00.859    1111#37471 (EURUSD,H1)    arr_Dep_Tick Ask=1.0 Bid=1.0
2026.06.10 12:15:00.859    1111#37471 (EURUSD,H1)    0 Margin=1155.69
2026.06.10 12:15:00.859    1111#37471 (EURUSD,H1)    115569.00000 115569.00000
2026.06.10 12:15:00.859    1111#37471 (EURUSD,H1)    0 Расчётное значение маржи=1155.69
2026.06.10 12:15:00.859    1111#37471 (EURUSD,H1)    0 Разница между фактическим и расчётным значением маржи=0.00
2026.06.10 12:15:00.859    1111#37471 (EURUSD,H1)    Коэффициенты маржи для Sell, начальная маржа=1.0 поддерживающая маржа=0.0
2026.06.10 12:15:00.859    1111#37471 (EURUSD,H1)    arr_Sym_Tick_P Ask=1.1556899999999999 Bid=1.15565
2026.06.10 12:15:00.859    1111#37471 (EURUSD,H1)    arr_Sym_Tick_O Ask=1.1556899999999999 Bid=1.15565
2026.06.10 12:15:00.859    1111#37471 (EURUSD,H1)    arr_Dep_Tick Ask=1.0 Bid=1.0
2026.06.10 12:15:00.859    1111#37471 (EURUSD,H1)    1 Margin=1155.65
2026.06.10 12:15:00.859    1111#37471 (EURUSD,H1)    115565.00000 115565.00000
2026.06.10 12:15:00.859    1111#37471 (EURUSD,H1)    1 Расчётное значение маржи=1155.65
2026.06.10 12:15:00.859    1111#37471 (EURUSD,H1)    1 Разница между фактическим и расчётным значением маржи=0.00

Alain Verleyen #:

2. Обмен не является сделкой. Он всегда связан с DEAL_BUY или DEAL_SELL.

Сейчас - да, но по факту - нет.

Это такая же комиссия, как и за другие действия. Или Вы видите фундаментальную разницу?

Alain Verleyen #:

3. Я не понимаю, о чём вы говорите.

Вижу, что поняли.

Да, сейчас расчёт верный на моём реальном счёте, а на MQ демо - нет:

2026.06.10 21:31:53.328 Test_OrderCalcMargin (GBPUSD,H1)        Коэффициенты маржи для Buy, начальная маржа=1.0 поддерживающая маржа=0.0
2026.06.10 21:31:53.328 Test_OrderCalcMargin (GBPUSD,H1)        Коэффициенты маржи для Sell, начальная маржа=1.0 поддерживающая маржа=0.0
2026.06.10 21:31:53.328 Test_OrderCalcMargin (GBPUSD,H1)        arr_Sym_Tick_P Ask=1.3385099999999999 Bid=1.33845
2026.06.10 21:31:53.328 Test_OrderCalcMargin (GBPUSD,H1)        arr_Sym_Tick_O Ask=1.3385099999999999 Bid=1.33845
2026.06.10 21:31:53.328 Test_OrderCalcMargin (GBPUSD,H1)        arr_Dep_Tick Ask=1.0 Bid=1.0
2026.06.10 21:31:53.328 Test_OrderCalcMargin (GBPUSD,H1)        0 Margin=1000.0
2026.06.10 21:31:53.328 Test_OrderCalcMargin (GBPUSD,H1)        133851.00000 133851.00000
2026.06.10 21:31:53.328 Test_OrderCalcMargin (GBPUSD,H1)        0 Расчётное значение маржи=1338.51
2026.06.10 21:31:53.328 Test_OrderCalcMargin (GBPUSD,H1)        0 Разница между фактическим и расчётным значением маржи=-338.51
2026.06.10 21:31:53.328 Test_OrderCalcMargin (GBPUSD,H1)        arr_Sym_Tick_P Ask=1.3385099999999999 Bid=1.33845
2026.06.10 21:31:53.328 Test_OrderCalcMargin (GBPUSD,H1)        arr_Sym_Tick_O Ask=1.3385099999999999 Bid=1.33845
2026.06.10 21:31:53.328 Test_OrderCalcMargin (GBPUSD,H1)        arr_Dep_Tick Ask=1.0 Bid=1.0
2026.06.10 21:31:53.328 Test_OrderCalcMargin (GBPUSD,H1)        1 Margin=1000.0
2026.06.10 21:31:53.328 Test_OrderCalcMargin (GBPUSD,H1)        133845.00000 133845.00000
2026.06.10 21:31:53.328 Test_OrderCalcMargin (GBPUSD,H1)        1 Расчётное значение маржи=1338.45
2026.06.10 21:31:53.328 Test_OrderCalcMargin (GBPUSD,H1)        1 Разница между фактическим и расчётным значением маржи=-338.45

2026.06.10 21:32:01.603 Test_OrderCalcMargin (EURUSD,H1)        Коэффициенты маржи для Buy, начальная маржа=1.0 поддерживающая маржа=0.0
2026.06.10 21:32:01.603 Test_OrderCalcMargin (EURUSD,H1)        Коэффициенты маржи для Sell, начальная маржа=1.0 поддерживающая маржа=0.0
2026.06.10 21:32:01.603 Test_OrderCalcMargin (EURUSD,H1)        arr_Sym_Tick_P Ask=1.1550799999999999 Bid=1.15506
2026.06.10 21:32:01.603 Test_OrderCalcMargin (EURUSD,H1)        arr_Sym_Tick_O Ask=1.1550799999999999 Bid=1.15506
2026.06.10 21:32:01.603 Test_OrderCalcMargin (EURUSD,H1)        arr_Dep_Tick Ask=1.0 Bid=1.0
2026.06.10 21:32:01.603 Test_OrderCalcMargin (EURUSD,H1)        0 Margin=1000.0
2026.06.10 21:32:01.603 Test_OrderCalcMargin (EURUSD,H1)        115508.00000 115508.00000
2026.06.10 21:32:01.603 Test_OrderCalcMargin (EURUSD,H1)        0 Расчётное значение маржи=1155.08
2026.06.10 21:32:01.603 Test_OrderCalcMargin (EURUSD,H1)        0 Разница между фактическим и расчётным значением маржи=-155.08
2026.06.10 21:32:01.603 Test_OrderCalcMargin (EURUSD,H1)        arr_Sym_Tick_P Ask=1.1550799999999999 Bid=1.15506
2026.06.10 21:32:01.603 Test_OrderCalcMargin (EURUSD,H1)        arr_Sym_Tick_O Ask=1.1550799999999999 Bid=1.15506
2026.06.10 21:32:01.603 Test_OrderCalcMargin (EURUSD,H1)        arr_Dep_Tick Ask=1.0 Bid=1.0
2026.06.10 21:32:01.603 Test_OrderCalcMargin (EURUSD,H1)        1 Margin=1000.0
2026.06.10 21:32:01.603 Test_OrderCalcMargin (EURUSD,H1)        115506.00000 115506.00000
2026.06.10 21:32:01.603 Test_OrderCalcMargin (EURUSD,H1)        1 Расчётное значение маржи=1155.06
2026.06.10 21:32:01.603 Test_OrderCalcMargin (EURUSD,H1)        1 Разница между фактическим и расчётным значением маржи=-155.06

Конфигурация и счёт

2026.06.10 21:35:20.383 Terminal        MetaTrader 5 x64 build 5836 started for MetaQuotes Ltd.
2026.06.10 21:35:20.383 Terminal        Windows 10 build 19045, 16 x Intel Xeon  E5-2630 v3 @ 2.40GHz, AVX2, 8 / 15 Gb memory, 34 / 476 Gb disk, RDP, admin, GMT+3
2026.06.10 21:35:20.383 Terminal        D:\FX\MT5_Test
2026.06.10 21:35:22.297 Network '5051393161': authorized on MetaQuotes-Demo through Access Point EU 4 (ping: 60.55 ms, build 5836)
2026.06.10 21:35:22.297 Network '5051393161': previous successful authorization performed from 99 on 2026.06.10 21:31:34
2026.06.10 21:35:23.157 Network '5051393161': terminal synchronized with MetaQuotes Ltd.: 0 positions, 0 orders, 11856 symbols, 0 spreads
2026.06.10 21:35:23.157 Network '5051393161': trading has been enabled - hedging mode
Aleksey Vyazmikin #:

Сейчас - да, но по факту - нет.

Это такая же комиссия, как и за другие действия. Или Вы видите фундаментальную разницу?

Вижу, что поняли.

Да, сейчас расчёт верный на моём реальном счёте, а на MQ демо - нет:

Конфигурация и счёт

2026.06.10 15:46:32.652    1111#37471 (GBPUSD,H1)    Коэффициенты маржи для Buy, начальная маржа=1.0 поддерживающая маржа=0.0
2026.06.10 15:46:32.652    1111#37471 (GBPUSD,H1)    MetaQuotes-Demo account in USD, Build 5836
2026.06.10 15:46:32.652    1111#37471 (GBPUSD,H1)    arr_Sym_Tick_P Ask=1.33785 Bid=1.33779
2026.06.10 15:46:32.652    1111#37471 (GBPUSD,H1)    arr_Sym_Tick_O Ask=1.33785 Bid=1.33779
2026.06.10 15:46:32.652    1111#37471 (GBPUSD,H1)    arr_Dep_Tick Ask=1.0 Bid=1.0
2026.06.10 15:46:32.652    1111#37471 (GBPUSD,H1)    0 Margin=1337.85
2026.06.10 15:46:32.652    1111#37471 (GBPUSD,H1)    133785.00000 133785.00000
2026.06.10 15:46:32.652    1111#37471 (GBPUSD,H1)    0 Расчётное значение маржи=1337.85
2026.06.10 15:46:32.652    1111#37471 (GBPUSD,H1)    0 Разница между фактическим и расчётным значением маржи=0.00
2026.06.10 15:46:32.652    1111#37471 (GBPUSD,H1)    Коэффициенты маржи для Sell, начальная маржа=1.0 поддерживающая маржа=0.0
2026.06.10 15:46:32.652    1111#37471 (GBPUSD,H1)    MetaQuotes-Demo account in USD, Build 5836
2026.06.10 15:46:32.652    1111#37471 (GBPUSD,H1)    arr_Sym_Tick_P Ask=1.33785 Bid=1.33779
2026.06.10 15:46:32.652    1111#37471 (GBPUSD,H1)    arr_Sym_Tick_O Ask=1.33785 Bid=1.33779
2026.06.10 15:46:32.652    1111#37471 (GBPUSD,H1)    arr_Dep_Tick Ask=1.0 Bid=1.0
2026.06.10 15:46:32.652    1111#37471 (GBPUSD,H1)    1 Margin=1337.79
2026.06.10 15:46:32.652    1111#37471 (GBPUSD,H1)    133779.00000 133779.00000
2026.06.10 15:46:32.652    1111#37471 (GBPUSD,H1)    1 Расчётное значение маржи=1337.79
2026.06.10 15:46:32.652    1111#37471 (GBPUSD,H1)    1 Разница между фактическим и расчётным значением маржи=0.00

2026.06.10 15:45:34.492    1111#37471 (EURUSD,H1)    Коэффициенты маржи для Buy, начальная маржа=1.0 поддерживающая маржа=0.0
2026.06.10 15:45:34.492    1111#37471 (EURUSD,H1)    MetaQuotes-Demo account in USD, Build 5836
2026.06.10 15:45:34.492    1111#37471 (EURUSD,H1)    arr_Sym_Tick_P Ask=1.15463 Bid=1.15461
2026.06.10 15:45:34.492    1111#37471 (EURUSD,H1)    arr_Sym_Tick_O Ask=1.15463 Bid=1.15461
2026.06.10 15:45:34.492    1111#37471 (EURUSD,H1)    arr_Dep_Tick Ask=1.0 Bid=1.0
2026.06.10 15:45:34.492    1111#37471 (EURUSD,H1)    0 Margin=1154.63
2026.06.10 15:45:34.492    1111#37471 (EURUSD,H1)    115463.00000 115463.00000
2026.06.10 15:45:34.492    1111#37471 (EURUSD,H1)    0 Расчётное значение маржи=1154.63
2026.06.10 15:45:34.492    1111#37471 (EURUSD,H1)    0 Разница между фактическим и расчётным значением маржи=0.00
2026.06.10 15:45:34.492    1111#37471 (EURUSD,H1)    Коэффициенты маржи для Sell, начальная маржа=1.0 поддерживающая маржа=0.0
2026.06.10 15:45:34.492    1111#37471 (EURUSD,H1)    MetaQuotes-Demo account in USD, Build 5836
2026.06.10 15:45:34.492    1111#37471 (EURUSD,H1)    arr_Sym_Tick_P Ask=1.15463 Bid=1.15461
2026.06.10 15:45:34.492    1111#37471 (EURUSD,H1)    arr_Sym_Tick_O Ask=1.15463 Bid=1.15461
2026.06.10 15:45:34.492    1111#37471 (EURUSD,H1)    arr_Dep_Tick Ask=1.0 Bid=1.0
2026.06.10 15:45:34.492    1111#37471 (EURUSD,H1)    1 Margin=1154.61
2026.06.10 15:45:34.492    1111#37471 (EURUSD,H1)    115461.00000 115461.00000
2026.06.10 15:45:34.492    1111#37471 (EURUSD,H1)    1 Расчётное значение маржи=1154.61
2026.06.10 15:45:34.492    1111#37471 (EURUSD,H1)    1 Разница между фактическим и расчётным значением маржи=0.00

         printf("%s account in %s, Build %i",AccountInfoString(ACCOUNT_SERVER),AccountInfoString(ACCOUNT_CURRENCY),TerminalInfoInteger(TERMINAL_BUILD));