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

 
Roman:

Замени структуру на одну переменную ))

Не передается.

 
fxsaber:

Не передается.

А импортировать функцию в эксперте не забыли?
Пример для структуры обновил, там не много не правильно было.
В общем если работать с структурой, то подумать как лучше объявлять объект структуры, глобально или локально.  
А для одной переменной, все это не нужно, просто возвращаем переменную и всё.

Документация по MQL5: Основы языка / Препроцессор / Импорт функций (#import)
Документация по MQL5: Основы языка / Препроцессор / Импорт функций (#import)
  • www.mql5.com
Импорт функций (#import) - Препроцессор - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Roman:

А импортировать функцию в эксперте не забыли?

Вы можете предоставить исходник индикатора и советника по своей идее или нет?

 
fxsaber:

Вы можете предоставить исходник индикатора и советника по своей идее или нет?

Да, странно. Export для функций в mql4 почему то не хочет работать.
Из библиотеки или из индикатора, результат ноль. Хотя в зависимостях, функции видны.
Пример для библиотеки

#property library
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

double value = 0.0;

//+------------------------------------------------------------------+
//| My function                                                      |
//+------------------------------------------------------------------+
double SetValue(double v) export
{
   value = v;    
   return(value);
}

//+------------------------------------------------------------------+
double GetValue(void) export
{
   return(value);
}
//+------------------------------------------------------------------+

Индикатор устанавливающий значение

#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_separate_window

#import "Lib.ex4"
   double SetValue(double v);
   double GetValue(void);
#import

MqlTick tick;


//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
{

   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
   Comment("");
}
  
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int 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 int &spread[])
{
   
   SymbolInfoTick(NULL, tick);
   SetValue(tick.bid);
   
   //Comment((string)GetValue());   
   
   return(rates_total);
}
//+------------------------------------------------------------------+

Эксперт который должен получить значение через функцию, но этого не происходит

#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#import "Lib.ex4"
   double GetValue(void);
#import

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   EventSetMillisecondTimer(10);
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   Comment("");
   EventKillTimer();
}

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
}

//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
{
   double bid = GetValue();
   
   Comment("\r\nЭксперт получил значение из индикатора = "+(string)bid);
   //ChartRedraw();

}
//+------------------------------------------------------------------+
 
fxsaber:

Тики из индикатора отправляю через это: sparam содержит MqlTick, lparam - номер тика.

Советник в OnChartEvent ловит эти тики. И ему надо понять, сейчас пойманный тик - это самый актуальный или нет? Т.е. есть ли очередь из тиков или она пустая?

Для этого он читает номер (задача и состоит в чтении этого номера) самого последнего отправленного индикатором тика. Если пойманный тик имеет тот же номер - очередь пуста, и можно пачку тиков пускать в работу.


Ну и по ходу работы OnTick после всяких тормозных OrderSend нужно удостовериться, а не отправил ли индикатор еще тиков. Для этого снова нужно прочесть число от индикатора. И вот таких проверок за выполнение одного OnTick может быть за сотню. Поэтому и нужно быстро читать.

Если советник все равно берет тики через CopyTicks, зачем ему знать, что очередь пустая?

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

 
Andrey Khatimlianskii:

Если советник все равно берет тики через CopyTicks, зачем ему знать, что очередь пустая?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2021.02.17 21:26

Прошу поделиться соображениями по задаче (MT4):

Индикатор должен куда-то писать int-число. А советник его считывать.

 
fxsaber:

может что-то в этом роде поможет?

https://www.mql5.com/ru/code/818

File Mapping без DLL
File Mapping без DLL
  • www.mql5.com
Класс MQL5, который работает напрямую с маппингом, без использования самописной DLL.
 
Mikhail Mishanin:

может что-то в этом роде поможет?

https://www.mql5.com/ru/code/818

Шустрый WinAPI-вариант предложили выше.

 
fxsaber:

Шустрый WinAPI-вариант предложили выше.

этот вариант более опасный и сложный в реализации

 
Andrei Trukhanovich:

этот вариант более опасный и сложный в реализации

Ждем этот.

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