我完全迷失了方向

 

我想创建一个你所说的 "EA"。虽然你一直用这个缩写很有趣,但就我而言,它代表的是 "进化算法",而这正是我的方法实际是什么。如果它有效的话。它确实如此,如果价差足够低的话。这是在栅栏上。

无论如何,我有编程经验。从我所看到的情况来看,MQL4看起来和C++差不多。但我缺少一些关键的细节。我已经知道变量和常量以及许多不同的东西,但我需要一些基本的模板来工作,而且我在一些概念性的东西上略有欠缺。谁能发一个简单但有我需要的所有元素的交易机器人程序的例子,并解释它的每一部分的作用,然后我可以说 "啊哈,这就是我需要做的事情"。

基本上,我希望我的程序能够将以下内容下载到我的电脑内存中(通过货币交易平台将数据下载到我的电脑)。

买入和卖出价格的高点、低点、开盘、收盘数据(因为点差的价值可能不同),在我在程序中指定的某个时间增量(如果可以的话),包括最近的一次,一旦完成(所以每分钟,或每5分钟,或每10分钟,等等。无论时间间隔是多少),或者可能在每一个tick--每次价格变化时--无论哪种方式,我都希望能够有一个变量,代表距离上一次完成的时间(所以如果是每10分钟,就会有一个变量,每一个tick都会更新,从0开始算到10分钟,当它到了10分钟,会有另一次数据更新)。我还想下载清算时的账户总价值,下载头寸 总数和头寸大小以及头寸类型(例如,美元/日元是价值10000或100000美元的日元,但欧元/美元是价值10000或100000欧元的美元,但我的账户价值将是美元,所以需要能够确定头寸的可变手数)。当然,程序可以从当前的买入和卖出价格中简单地减去一个,得到当前的价差值。

然后,我希望该程序能够执行以下操作(通过货币交易平台从我的电脑上传数据)

通过市场订单或限价订单买入或卖出。另外,请告诉我,如果我下了一个限价单,但是当它通过时的价格,我是否可以期望它给我下的限价,或者可以更好?例如,假设欧元/美元的买入价格是1.3500,而我的限价单是在1.3501买入,我将支付1.3501还是1.3500?我应该期待经纪人在那里欺骗我吗?还是说它在功能上与下市价单相同,只是在订单进入系统时,如果价格是1.3502或更多,就不会发生?

最后,我希望示例程序能涉及到对另一个函数的调用。只是一些简单的东西,用传入的数据进行某种简单的计算,并返回一些值--如果按值传递和按引用传递在MQL4中都是可能的,那么请在示例程序中包括每个例子(注释显示你正在做什么)。

另外,请告诉我,它是否通常涉及一个以上的实际文件(以mql4为扩展名),就像在C++中那样,或者它通常只是一个单一的mql4文件,它是由交易平台编译的,还是我需要一些编译器,然后交易平台使用机器代码或由编译器生成的任何东西?

如果有人能做到这一点,只是做一个包含所有这些元素的假程序,它不仅对我非常有用,而且我想象它对其他人也很有用。提前感谢做这件事的人。

 
哦哦,更好的是,对于从0开始数到10分钟(或你使用的任何时间)的变量--它应该被规范化--除以时间单位--以便它是一个在0和1之间变化的双数。我这么说只是为了防止有一些比例系数的问题。这样的话,也许它可以应用于5分钟的图表,或10分钟的图表,或1分钟的图表,但无论时间单位如何,这个变量总是在0和1之间。
 
没有任何这样的程序可以让你在一个实例中了解关于mql4的一切。我建议通过代码库来 学习,因为你已经有了一些编程经验。如果你不喜欢通过看代码来学习,而是喜欢看语言解释,那么可以看看mql4_book。另外,还有一些文档,便于参考。
 
我在问是否有人会写一个。如果你知道语言的基本格式,应该需要5分钟左右,应该和阅读我的帖子的时间差不多。只要写出程序,打出每项内容的例子,然后把它放上去。我看了mql4的书,它直接从解释什么是变量到对我的函数知识进行预设,我想找到它从比我需要的东西简单得多到超过我准备理解的过渡点,就感到很困。你知道,我并不要求有人为我写一个 "经济顾问",只是要求一些愚蠢的东西,里面有我可能想要使用的每一条指令。一些东西可以将我可能想要使用的任何信息和我可能想要输入的每一条指令下载到我的电脑上的变量中--现在我想了想,我希望不仅是买入和卖出限价 和市场订单,而且还能取消任何存在的订单,毕竟,我不想让任何散兵游勇的限价订单在没有得到执行的情况下闲置,我不想让程序忘记它们。
 
zortharg: 我在问是否有人会写一个。如果你知道语言的基本格式,应该需要5分钟左右,应该和阅读我的帖子的时间差不多。只要写出程序,打出每一项的例子,然后把它放上去。我看了mql4的书,它直接从解释什么是变量到对我的函数知识进行预设,我想找到它从比我需要的东西简单得多到超过我准备理解的过渡点,就感到很困。你知道,我并不要求有人为我写一个 "经济顾问",只是要求一些愚蠢的东西,其中有我可能想要使用的所有指令。一些东西可以将我可能想要使用的任何信息和我可能想要输入的每一条指令下载到我的电脑上的变量中--现在我想了想,我希望不仅是买入和卖出限价和市场订单,而且还能取消任何存在的订单,毕竟,我不想让任何散兵游勇的限价订单在没有得到执行的情况下闲置,我不想让程序忘记它们。

我想你来错地方了。

我们不为这个论坛上的其他人写代码。

我们希望你能写出自己的代码。

如果你遇到困难,我们会给你指出正确的方向。

如果你想让别人为你写代码,那就去这里

他们做mql4和mql5。

 
zortharg:

[...]

好吧,这让我们改变了讨论MT4重大更新的方式,而这一更新将在几天后进行。


我想创建一个你称之为 "EA "的东西。虽然你一直用这个词作为缩写很有趣

这要看你的背景。无论好坏,MT4和MQL4目前几乎垄断了全球零售外汇市场,"EA "一词对至少几十万人有意义。


从我看到的情况来看,MQL4看起来和C++差不多。

MQL4语言实际上有两个版本。在过去的9年中,存在的那个版本没有类或对象,因此更像C而不是C++。另一方面,它没有指针或显式内存分配。

新版本的MT4和MQL4--将于下周一正式发布--增加了类,但同样没有真正明确的内存分配和管理。值得商榷的是,这是否更像C++,还是更像Javascript,但没有鸭子类型和lambda函数 等。


基本上,我希望我的程序能够下载到我的计算机的RAM中,如下[...] 。

简而言之,平台会自动为你做这些,你没有简单的方法来覆盖其标准行为。下载任何外部价格数据,然后在MQL4中操作它--特别是传统的MQL4,而不是新的扩展版本--是不漂亮的。

你可以得到当前的价格,你可以很容易地操纵该平台所支持的所有时间框架的历史价格。M1、M5、M15等,但不是M3、H2等。


买入和卖出价格的高点、低点、开盘、收盘数据(因为价差的价值可能不同)

点差确实可以变化,但MT4平台的一个迷人的特质是,它只提供历史买入价。(当前价格和当前点差显然是可用的)。


我还想下载清算时账户的总价值[......]头寸总数和规模[......],但我的账户价值将以美元计算。

实际上,平台不断流转这些数据。没有明确的 "下载 "它。例如,MQL4代码可以通过AccountEquity()函数不断访问账户的当前资产。未结头寸会自动以您的存款货币报告。


例如,假设欧元/美元的买入价格是1.3500,而我有一个限价单要在1.3501买入,我将支付1.3501还是1.3500?

这取决于经纪商,但总的来说,平台/经纪商根本不会接受在当前BBO或超过BBO的限价单。我无法立即想到这一点的例外情况。


如果它一般涉及一个以上的实际文件(扩展名为mql4?),就像在C++中一样,或者如果它一般只是一个单一的mql4文件

广义上讲,一个项目只能由一个.mq4文件组成,但可以有多个#include.mqh文件。因此,你可以有共同的代码库,并在项目之间重新使用它们。你不能做的是有多个.mq4文件,这些文件是平行存在的,即作为同一项目的一部分被编译在一起。尽管MQL4起源于C语言,但一个典型的大型项目的结构是不同的:一个.mq4文件,加上一个或多个不同类型的库(预编译或#included)。


然后,交易平台使用机器代码或由编译器生成的任何东西

编译器生成的是一种字节码/p码/不管你想怎么称呼它,而不是机器码。你可以明确地编译.mq4文件,或者你可以把它们放在软件的必要文件夹中,它们会被自动编译,并在下次启动时可供使用。


如果有人这样做,只是做一个包含所有这些元素的假程序,它不仅对我非常有用,而且对其他人也很有用,我猜想

不是一个好时机。这个论坛上的每个人都忙于争论9年来对MQL4的第一次真正的重大更新。

 
zortharg: 我在问是否有人会写一个。
你只有三个选择。搜索 它,学习 编码,或付钱给 别人。我们不打算为你编码。当你发布你 尝试(使用SRC)和 问题的性质时,我们愿意帮助你。
 

我并没有要求任何人为我生产具有商业价值的东西。我没有要求别人 "为我编码我的方法",WHRoeder。我只是需要一个起点。我也许能从你放在 "搜索 "下的链接中找到一些东西,尽管我真的想得到一个赤裸裸的 "这是需要的"。我不知道这个程序实际上应该是什么样子。我不知道什么是严格意义上需要的。如果我试图在没有任何参考点的情况下自己做,我只会得到编译器错误,因为我甚至不知道它缺少什么。而如果我做的东西应该是有效的,我就会把它初始化错了,我甚至不知道我做对了。好吧,这样吧。一个简单的例子。如果你在现实生活中这样做,你的钱就会损失:一个专家顾问,保持一个头寸,它是daringness*(你的账户价值)*(现在的价格和1个时间单位前的价格之间的差异)/X,X开始是1,但每一个时间单位,X被更新为X=.9*X+.1*(现在的价格-1个时间单位前的价格)^2,daringness是一个用户指定参数。为了确定买入或卖出的数量,它还必须确定它已经拥有多少头寸。所以,这只是一个愚蠢的程序,但它几乎包含了我需要作为起点的所有元素。

gchrmt4 谢谢。你回答了我的很多问题。但是,当你说 "你可以很容易地操纵平台支持的所有时间段的历史价格",我怎么做呢?是否有一个类似于AccountEquity()的函数,它返回给定时间的价格,你给它以前的时间单位,以及你是否想要开盘价、收盘价和它使用的时间单位的类型?时间单位的类型是否由你所应用的图表类型决定?也就是说,如果你把它应用在1分钟的图表上,1个时间单位前是指1分钟前,但如果你把它应用在5分钟的图表上,1个时间单位前是指5分钟前,还是时间步长是硬编码在程序本身,而不是应用在图表上?还有,当前的价差,我怎样才能获得?你说这些东西是 "流式 "的,很容易访问,但它们是如何访问的?

谢谢你给予的任何帮助。

 
zortharg:
是否有一个类似于AccountEquity()的函数,它在给定的时间内返回一个价格,你给它的时间单位是以前的,你是否想要开盘低点高点收盘,它使用什么类型的时间单位?时间单位的类型是否由你所应用的图表类型决定?也就是说,如果你把它应用在1分钟的图表上,1个时间单位前是指1分钟前,但如果你把它应用在5分钟的图表上,1个时间单位前是指5分钟前,还是时间步长是硬编码在程序本身,而不是应用在图表上?还有,当前的价差,我怎样才能获得?你说这些东西是 "流式 "的,很容易访问,但它们是如何访问的?

谢谢你选择给予的任何帮助。

有一整个系列的时间序列函数。例如,iHigh("USDJPY", PERIOD_H1, 2)将给你提供USDJPY H1小节的高点,即2个小节后(当前进行中的小节是#0)。有一些函数可以将时间转换为柱状指数。

当前价差有多种方式。最简单的是卖出价-买入价(这给你提供了你的代码在其图表上运行的符号的点差)。与当前图表不同的符号的价差可以通过不同的途径获得,并以不同的术语表示,如MarketInfo("symbol", MODE_ASK)-MarketInfo("symbol", MODE_BID),或MarketInfo("symbol", MODE_SPREAD)

 

@zortharg

这里有一个叫做文档的东西(部分已废弃):docs.mql4.com/

和这里(即将到来,部分不适用):mql5.com/en/docs


在那里你可以找到你想知道的一切;在终端本身也有例子。脚本、专家顾问和指标的例子。你还可以导入 DLLs,以完成MQL以外的事情。

如果你能从那里得到它,你就准备好了,如果没有,那么...


 

我理解您的要求,一个工作实例是非常有用的。

https://www.mql5.com/en/code

也可以在谷歌上找到免费的专家顾问资源来学习。

寻找执行简单任务的代码,将它们归入函数,并尽量保持代码的简单和可读性。

start() {

   SearchOrders();
   DetectEnvironment();      
   UpdateIndicators();
   RiskAssessment();
   CalcVolume();
   if( EnterSignal() ) OpenOrder();
   if ( ExitSignal() ) CloseOrder();
   TrailingStop();
   DisplayInfos();

}
原因: