新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1302

 

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

新手对MQL4和MQL5的任何问题,对算法和代码的提示和讨论

Dmitry Custurov, 2020.08.27 13:10

问候。

我在MT4里有以下东西。

#import "user32.dll"
   int SendMessageA(int hWnd, int Msg, int wParam, char &lParam[]);
   int RegisterWindowMessageA(uchar &lParam[]);
#import

string IndiName="TestBot";

void OnStart()
  {
   char buf[];
   StringToCharArray("MetaTrader4_Internal_Message", buf);
   int MT4InternalMsg=RegisterWindowMessageA(buf);
   StringToCharArray(IndiName, buf);
   long handle=ChartGetInteger(0, CHART_WINDOW_HANDLE);
   Print(MT4InternalMsg);
   bool res=SendMessageA((int)handle, MT4InternalMsg, 14, buf);
   Print("Функция SendMessageA завершила работу с результатом: ",res);
  }

这段代码向终端窗口发送了一条命令,以启动一个特定的EA。

MT5有类似的功能吗?

我是这样试的。

#import "user32.dll"
   int SendMessageA(long hWnd, long Msg, uint wParam, uchar &lParam[]);
   int RegisterWindowMessageA(uchar &lParam[]);
#import

string IndiName="TestBot";

void OnStart()
  {
   uchar buf[];
   StringToCharArray("MetaTrader5_Internal_Message", buf);
   long MT5InternalMsg=RegisterWindowMessageA(buf);
   StringToCharArray(IndiName, buf);
   long handle=ChartGetInteger(0, CHART_WINDOW_HANDLE);
   Print("Window handle: ", handle);
   Print("Message: ",MT5InternalMsg);
   for(int i = 0; i<100; i++){
      bool res=SendMessageA(handle, MT5InternalMsg, i , buf);
      printf("Функция SendMessageA завершила работу с результатом: %d, номер: %d ",res, i);
   }
  }

不起作用。

我试着扫描spy++,但在MT5中没有消息,不像在MT4中。

我需要准确地打开专家顾问的设置窗口。


我需要能够通过WinAPI来运行脚本。是否有5的解决方案?

 
嘿,伙计们,帮帮我吧!我想不出有什么功能。专家顾问每天开一个头寸(00:00至23:59之间),即一天一个订单。任务是找到一系列的连续损失,并将其显示在日志中(使用Print()命令,打印一次)。系列中的元素数量由键盘输入(例如,如果你从键盘上输入5,而系列中有4个失利的日子,那么我们就忽略它-->等待5个或更多日子的出现)。如果亏损日是连续的,或者订单在一天内被关闭,则认为是一个系列(它们每天打开一次,而市场订单可以 "挂 "超过一天)。例如,在日志中应该有以下损失系列:01.05, 02.05, 03.05, 04.05, 05.05。重要条件:识别系列(并因此输出到日志),它大于或等于从键盘(extern)输入的值。
//
我个人有以下想法:
1.Fiya用他们的收盘值来填补亏损订单的数组 ( Mass[i] = OrderCloseTime();)。也就是说,数组只存储了亏损订单的收盘日期和时间
2.我们开始比较位置i和位置i-1(2个相邻的)的元素
2.1 我们通过将单元格数据转换为一年中的一天来进行比较 ( TimeDayOfYear(Mass[i]) 和 TimeDayOfYear(Mass[i-1])
2.(假设第一个失败日=178,而前一个=176-->没有系列,因为它们不是连续的,分别是如果第一个=178,而第二个177-->我们有一个系列)
2.3 通过for循环,我们查看数组的所有单元格并比较其相邻的单元格。如果在 数组相邻元素上有一系列的亏损-->让我们开始压缩,直到1.我们没有达到最低要求的亏损天数来考虑它是一个系列2.(如果第1点得到满足)在系列停止之前。
2.4 系列停止-->记住它结束的数组元素的索引,并记住系列中的元素数量(系列可以==或大于从键盘输入的值)
3.---- 这里开始实现的问题---
3.1 我们应该以某种方式 "回溯 "一系列失去的日子,知道每个元素的日期,将日期从数据时间转化为--->字符串,
3.11 填充字符串(我不知道,也许通过StringAdd()?),并输出到LOG-文件(不是一百万次,只是一次)

顾问的算法并不重要,重要的是用户函数本身

看在上帝份上,帮助! )
Документация по MQL5: Основы языка / Переменные
Документация по MQL5: Основы языка / Переменные
  • www.mql5.com
Переменные должны быть объявлены перед их использованием. Для идентификации переменных используются уникальные имена. Описания переменных используются для их определения и объявления типов. Описание не является оператором. Индексом массива может быть только целое число. Допускаются не более чем четырехмерные массивы. Нумерация элементов массива...
附加的文件:
 

你好。
需要提供关于算法的建议。
我试图在处理订单开仓块之前形成以下要求。

如果已经有买入/卖出订单,并且最后一个订单的开盘价比当前价格少X个点,那么就忽略阻断/未开的订单。

请告知--代码中的实施方案有哪些?

 

有没有人测量过mt5从发送订单开仓到 实际出现,能花多长时间?

我更感兴趣的是,如果发送一个订单并建议进行交易,从发送订单到交易出现,需要多长时间?

 
Сергей Таболин:

k = {1,2,4,8,16,......}

cn = k[c]

有趣的解决方案))))

 
Vladimir Baskakov:
MQ是否计划在移动平台上增加自定义指标

从新的移动终端上的反应来看,近期内不会。只有钢笔。

 
Valeriy Yastremskiy:

花式解决方案))))

那么,如果事先知道系数,为什么还要计算呢?)))

 
Сергей Таболин:

那么,如果事先知道系数,为什么还要计算呢?)))

如果你计算一下,那就更普遍了。

 

同事们,大家好--直觉上我明白了解决方案,我想听听你们的意见。

什么是最好的方式,为他们的后续关闭分配部分批次(总批次的部分关闭--分部分--5个单位的部分)。

在我的理解中,比如说2.58号地块。我除以5,结果是0.51手,关闭4部分,第五部分是0.54手。

在代码中表示这一点的最佳方式是什么?什么数学函数将除法的余数 取为0.54来关闭?

 
Roman Shiredchenko:

同事们,大家好--直觉上我明白了解决方案,我想听听你们的意见。

什么是最好的方式,为他们的后续关闭分配部分地段(总地段的部分关闭-分部分-5个单位的部分)。

在我的理解中,比如说2.58号地块。我除以5,结果是0.51手,关闭4部分,第五部分是0.54手。

在代码中表示这一点的最佳方式是什么?什么函数把除法的余数 取为0.54来关闭?

我可以阅读文件吗?