错误、漏洞、问题 - 页 2964

 
Roman:

用单个变量替换结构))。

不可转让。

 
fxsaber:

它没有被转移。

你是否记得在专家顾问中导入该功能
我更新了结构的例子,那里没有什么问题。
一般来说,如果你用一个结构工作,要考虑如何声明一个结构对象,全局或局部。
,而对于一个变量,所有这些都不需要,只要返回变量就可以了。

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

你是否记得将该函数导入 EA?

你是否能提供指标和EA的源代码来说明你的想法?

 
fxsaber:

你是否能提供指标和EA的源代码来说明你的想法?

是的,这很奇怪。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:

我通过这样的方式从指标中发送ticks:sparam包含MqlTick,lparam - tick号码。

专家顾问在OnChartEvent 中捕捉到了这些ticks。它需要了解当前的刻度是否是最实际的刻度?即,是否有一个蜱虫队列,或者它是空的?

为此,它读取指标所发送的最新刻度线的数字(任务是读取这个数字)。如果刻度线有相同的数字--队列是空的,就有可能开始处理刻度线。


而在OnTick的操作中,在OrderSend之后,有必要检查指标是否已经发送了更多的ticks。为此,我们需要再次从指标中读取数字。在一个OnTick期间,可能会有超过100个这样的检查。这就是为什么我们需要快速阅读。

如果专家顾问是通过CopyTicks来获取ticks,为什么它需要知道队列是空的?

让它在每个事件上工作,并跳过那些时间少于已处理的事件。

 
Andrey Khatimlianskii:

如果我的专家顾问仍然通过CopyTicks 获取点数,为什么它需要知道队列是空的?

关于交易、自动交易系统和交易策略测试的论坛

虫子,虫子,问题

fxsaber, 2021.02.17 21:26

请分享我对这个问题的看法(MT4)。

指示器必须在某处写上int-number。而EA必须阅读它。

 
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:

这个方案更危险,更难实施

等待这一次