欢迎光临散文网 会员登陆 & 注册

股票量化交易软件:从头开始开发智能交易系统25--提供系统健壮性

2023-07-17 16:59 作者:大牛啊呢  | 我要投稿

2.0.1. 删除 EA 背景

虽然这不会损害 EA,或导致任何问题,但有些人有时希望他们的屏幕是空白的,屏幕上只显示某些项目。 因此,我们将从 EA 中删除这部分,并将其转换为指标。 它非常容易实现。 我们不会触及任何类,但要创建以下代码:

#property copyright "Daniel Jose" #property indicator_chart_window #property indicator_plots 0 //+------------------------------------------------------------------+ #include <NanoEA-SIMD\Auxiliar\C_Wallpaper.mqh> //+------------------------------------------------------------------+ input string                    user10 = "Wallpaper_01";        //Used BitMap input char                      user11 = 60;                    //Transparency (from 0 to 100) input C_WallPaper::eTypeImage   user12 = C_WallPaper::IMAGEM;   //Background image type //+------------------------------------------------------------------+ C_Terminal      Terminal; C_WallPaper WallPaper; //+------------------------------------------------------------------+ int OnInit() {        IndicatorSetString(INDICATOR_SHORTNAME, "WallPaper");        Terminal.Init();        WallPaper.Init(user10, user12, user11);        return INIT_SUCCEEDED; } //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) {        return rates_total; } //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) {        switch (id)        {                case CHARTEVENT_CHART_CHANGE:                        Terminal.Resize();                        WallPaper.Resize();        break;        }        ChartRedraw(); } //+------------------------------------------------------------------+

如您所见,一切都非常自然,且易于理解。 我们只是简单地从 EA 中删除了代码,并将其转换为可以添加到图表中的指标。 而任何变化,无论是背景、透明度,甚至是从图表中删除它,都不会对 EA 操作产生影响。赫兹股票交易软件

现在我们将开始删除真正导致 EA 性能下降的内容。 这些就是不时,或每次价格变动都会运作的事情,因此有时会导致 EA 变慢,从而阻碍它完成真正的工作 — 观察图表上的订单或仓位发生了什么。赫兹股票交易软件


2.0.2. 把价格对应的成交量转换为一个指标

尽管看起来不似这样,但价格对应的交易量系统需要时间,这对 EA 来说通常至关重要。 我指的高波动时刻是,价格剧烈波动,但却没有太多的方向性情况下。 正是在这些时候,EA 需要每个可用的机器周期来完成其任务。 错过一个好时机会令人沮丧,因为一些指标决定接管该项工作。 因此,我们将其从 EA 中删除,并通过创建以下代码将其转换为真实的指标:赫兹股票交易软件

#property copyright "Daniel Jose" #property indicator_chart_window #property indicator_plots 0 //+------------------------------------------------------------------+ #include <NanoEA-SIMD\Tape Reading\C_VolumeAtPrice.mqh> //+------------------------------------------------------------------+ input color             user0   = clrBlack;                     //Bar color input   char            user1   = 20;                                   //Transparency (from 0 to 100 ) input color     user2 = clrForestGreen; //Buying input color     user3 = clrFireBrick;   //Selling //+------------------------------------------------------------------+ C_Terminal                      Terminal; C_VolumeAtPrice VolumeAtPrice; //+------------------------------------------------------------------+ int OnInit() {        Terminal.Init();        VolumeAtPrice.Init(user2, user3, user0, user1);        EventSetTimer(1);                return INIT_SUCCEEDED; } //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) {        return rates_total; } //+------------------------------------------------------------------+ void OnTimer() {        VolumeAtPrice.Update(); } //+------------------------------------------------------------------+ void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) {        VolumeAtPrice.DispatchMessage(id, sparam);        ChartRedraw(); } //+------------------------------------------------------------------+ void OnDeinit(const int reason) {        EventKillTimer(); } //+------------------------------------------------------------------+

这是最简单的部分。 我们从 EA 中删除了代码,并将其放入指标之中。 如果您想将代码放回 EA 当中,您只需复制指标代码,并将其放回 EA 中即可。赫兹股票交易软件

所以,我们先从简单的事情开始。 但现在事情会变得更加复杂 — 我们将从 EA 中删除 Times & Trade。


2.0.3. 把 Times & Trade 转换到一个指标

如果我们的目标是创建可以在 EA 和指标中都能用的代码,这并不那么简单。 作为在子窗口中操作的指标,将其转换为指标似乎很容易。 而正因为它是在子窗口中操作,其实这并不容易。 主要问题是,如果我们像前面的情况一样完成所有事情,那么我们将在指标窗口中得到以下结果:赫兹股票交易软件


编辑


不建议将此类内容放在指标窗口中,因为如果用户想从屏幕中删除指标,这会让用户感到困惑。 因此,应该以不同的方式完成这件事情。 在这条路径的末端,也许看起来很困惑,但实际上是一组简单的指令和一些剪辑,我们将在指标窗口中得到以下结果。赫兹股票交易软件


编辑


这正是用户所期望的 — 而不是上图中看到的混乱。

以下是 Times & Trade 指标的完整代码:

#property copyright "Daniel Jose" #property version   "1.00" #property indicator_separate_window #property indicator_plots 0 //+------------------------------------------------------------------+ #include <NanoEA-SIMD\Tape Reading\C_TimesAndTrade.mqh> //+------------------------------------------------------------------+ C_Terminal        Terminal; C_TimesAndTrade   TimesAndTrade; //+------------------------------------------------------------------+ input int     user1 = 2;      //Scale //+------------------------------------------------------------------+ bool isConnecting = false; int SubWin; //+------------------------------------------------------------------+

该代码似乎与 EA 中所用的代码相似,除了高亮显示的行在 EA 代码中不存在。 那有什么收获呢? 还是一无所获? 实际上,有一些收获:代码不完全相同,其中存在差异,它并不在指标或 EA 代码里,而是在类代码之中。 但在研究差别之前,我们先思考以下几点:我们如何告诉编译器要编译什么,以及不要编译什么? 也许,在编程时,您根本不担心这一点 — 也许,您只管简单地创建代码,如果您不喜欢任何东西,直接删掉就好了。赫兹股票交易软件

经验丰富的程序员有一条规则:只在肯定不起作用时才会删除某些内容,否则即使它们实际上没有被编译,也要保留片段。 但是,当我们希望编写的函数始终工作时,如何在线性代码中做到这一点呢? 此处的问题是:您知道如何告诉编译器要编译什么,和不要编译什么吗? 如果答案是“否”,那就无妨。 当我开始时,我个人也不知道该怎么做。 但它有很大帮助。 故此,我们来找出如何做到这一点。赫兹股票交易软件

某些语言具有编译指令,根据作者的不同,这些指令也可能称为预处理器。 但思路是一致的:告诉编译器要编译什么,以及如何进行编译。 有一种非常特殊类型的指令可用来有意隔离代码,以便我们可以测试特定的东西。 这些就是条件编译指令。 如果使用得当,它们允许我们在编译相同的代码时走不同的途径。 这恰恰是 Times & Trade 示例中所做到的。 我们可选择谁来负责生成条件编译:EA 或指标。 定义该参数后,创建 #define 指令,然后使用条件指令 #ifdef #else #endif 通知编译器如何去编译代码。赫兹股票交易软件


股票量化交易软件:从头开始开发智能交易系统25--提供系统健壮性的评论 (共 条)

分享到微博请遵守国家法律