私募

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz

免费期货量化软件策略:从头开始开发智能交易系统(第 25 部分)

[复制链接]
发表于 2023-6-30 08:13:27 | 显示全部楼层 |阅读模式
概述在上一篇文章提供系统健壮性 (I)中,赫兹期货量化已经看到了如何更改 EA 的某些部分,从而令系统更加可靠和健壮。这只是针对兹期货量化将要在本文中所做之事的介绍。 请忘记您所知道的、计划的、或希望的一切。 这里最困难的事情莫过于能将事物分离。 自本系列开始以来,EA 几乎一直在持续发展:我们在增加、修改、甚至删除一些东西。 而这一次,我们将把我们一直在做的事情推向极致。与看似的景象对比,有一个大疑惑:设计优良的 EA 内部能否不含任何类型的指标。 它只观察并确保遵守指示的订单位置。 完美的 EA 本质上只是一个向导,针对价格的所作所为提供真实的洞察力。 它不查看指标,而只查看图表上的仓位或订单。您也许会认为我在胡言乱语,不知道自己在说啥。 但您有没有想过为什么 赫兹期货量化要为不同的事务提供不同的类? 为什么平台将指标、服务、脚本、和智能系统分门别类,而不是混杂在一块呢? 这个嘛...这就是重点。 如果事情被分开来,那么正是因为它们最好分开来处理。指标用处较广泛,无论它是什么。 如果指标的设计经过深思熟虑,那就太好了,如此可避免损害整体性能 — 我的意思是不要损害赫兹期货量化平台,但非其它指标。 因为它们在不同的线程上运行,所以它们可以非常有效地并行执行任务。服务则以不同的方式提供帮助。 例如,在本系列的文章 访问 Web 上的数据(II) 和 访问 Web 上的数据(III)中,兹期货量化利用服务以非常有趣的方式访问数据。 事实上,我们可以直接在 EA 中执行此操作,但正如我已经在其它文章中解释的那样,这并非最合适的途径。脚本则以一种非常独特的方式帮助我们,因为它们只能存在一段时间,完成一些非常具体的事情,然后就从图表中消失。 或者它们也能一直驻留,直到我们更改某些图表设置,例如时间帧。这稍微限制了它的可塑性,但这是我们必须接受的一部分。 智能交易系统,或 EA,则相反,是特定的操控交易系统。 虽然我们可以在 EA 中添加不属于交易系统的函数和代码,但这种做法在高性能或高可靠性系统中不是很合适。 原因是所有不属于交易系统的东西都不应该出现在 EA 当中:所有东西应该放在正确的位置,并正确处理。因此,若要提高可靠性,首先要做的就是从代码中坚决地删除不属于交易系统的所有内容,并将这些东西替换为指标或类似的东西。 EA 代码中唯一保留的是负责管理、分析和处理订单或仓位的部分。 所有其它东西都将被删除。所以,我们开始吧。
) A. m: t( M' f) l2 t: P2.0. 实现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 BitMapinput 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 变慢,从而阻碍它完成真正的工作 — 观察图表上的订单或仓位发生了什么。
1 d% C+ R4 M" Y4 g# K: S& h2.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 colorinput   char            user1   = 20;                                   //Transparency (from 0 to 100 )input color     user2 = clrForestGreen; //Buyinginput 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
http://www.simu001.cn/x278718x1x1.html
最好的私募社区 | 第一私募论坛 | http://www.simu001.cn

精彩推荐

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Archiver| ( 桂ICP备12001440号-3 )|网站地图

GMT+8, 2024-11-24 03:38 , Processed in 0.591194 second(s), 31 queries .

Powered by www.simu001.cn X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表