股票量化交易软件:走势延续模型搜索图表和执行统计

编程入门 行业动态 更新时间:2024-10-11 11:13:46

股票量化交易软件:走势延续模型搜索<a href=https://www.elefans.com/category/jswz/34/1770092.html style=图表和执行统计"/>

股票量化交易软件:走势延续模型搜索图表和执行统计

 

1. 概述

本文提供了一种走势延续模型的程序化定义。 主要思路是定义两个波浪 — 主浪和修正浪。 对于极值点,我应用分形以及“潜在”分形 — 尚未形成分形的极值点。 接着,我将尝试收集有关波浪走势的统计数据。 数据将加载到 CSV 文件。

2. 模型描述 - 常规特点

文章中所述的走势延续模型由两个波浪组成:主浪和修正浪。 图例 1 是该模型的示意性描述。 AB 是主浪,BC 是校正浪,而 CD 是走势主趋势的延续。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图例 1. 走势延续模型

在图表上,这看起来如下:

编辑切换为居中

添加图片注释,不超过 140 字(可选)

图例 2. AUDJPY H4 上的走势延续模型

3. 图表上的模型识别原理

模型识别原理如表 1 所示。

表 1. 走势延续模型在趋势背景下的识别原理

#

下跌趋势的模型识别原理

#

上涨趋势的模型识别原理

1

极值柱线是其高/低值高于/低于前两根柱线高/低值的那根柱线

1

极值柱线是其高/低值高于/低于前两根柱线高/低值的那根柱线

2

修正浪应始终按照顶端极值的存在结束(点 С - 参见 图例 1 和 图例 2)

2

修正浪应始终按照底端极值的存在结束(点 С - 参见 图例 1 和 图例 2)

3

修正浪的持续时间不能太长,应限制在几根柱线。

3

修正浪的持续时间不能太长,应限制在几根柱线。

4

修正走势的高点 (点 С - 参见 图例 1 和 图例 2) 应低于主要走势的高点 (点 A - 参见 图例 1 和 图例 2)

4

修正走势的低点 (点 С - 参见 图例 1 和 图例 2) 应高于主要走势的低点 (点 A - 参见 图例 1 和 图例 2)

5

入场点时效性原则 - 只应在入场点形成的确定时刻开仓

5

入场点时效性原则 - 只应在入场点形成的确定时刻开仓

4. 算法构造和编写代码

1. 输入参数,OnInit() 函数和初始变量声明

首先,赫兹股票量化需要包含 CTrade 类,以便简化对交易操作的访问:

 
 

//--- 包含文件 #include <Trade\Trade.mqh> //--- 进行交易操作的对象 CTrade trade;

Next, define input parameters:

 
 

//--- 输入参数 input ENUM_TIMEFRAMES base_tf; //基准周期时间帧 input ENUM_TIMEFRAMES work_tf; //操作周期时间帧 input double SummRisk=100; //每笔成交的总风险 input double sar_step=0.1; //设置抛物线步幅 input double maximum_step=0.11; //设置抛物线最大步幅 input bool TP_mode=true; //允许设置止盈 input int M=2; //利润与风险比率 input bool Breakeven_mode=true; //允许将持仓移动到盈亏平衡点 input double breakeven=1; //利润与止损比率

在基准周期上,EA 定义入场方向,而操作周期用于定义入场点。

程序根据每笔成交的总风险计算手数。

EA 还可以根据指定的利润与风险比率(М 参数)设置止盈,并根据指定的利润与止损比率(breakeven 参数)将持仓移至盈亏平衡点。

在描述输入参数之后,为 base_tf 和 work_tf 时间帧声明指标句柄和数组变量:

 
 

//--- 声明指标句柄的变量 int Fractal_base_tf,Fractal_work_tf; //iFractals 指标句柄 int Sar_base_tf,Sar_work_tf; //iSar 指标句柄 //--- 为 base_tf 声明数组 double High_base_tf[],Low_base_tf[]; //用于存储柱线高/低价格的数组 double Close_base_tf[],Open_base_tf[]; //用于存储柱线收盘/开盘价格的数组 datetime Time_base_tf[]; //用于存储柱线开盘时间的数组 double Sar_array_base_tf[]; //用于存储 iSar (抛物线) 指标价格的数组 double FractalDown_base_tf[],FractalUp_base_tf[];//用于存储 iFractals 指标价格的数组 //--- 为 work_tf 声明数组 double High_work_tf[],Low_work_tf[]; double Close_work_tf[],Open_work_tf[]; datetime Time_work_tf[]; double Sar_array_work_tf[]; double FractalDown_work_tf[],FractalUp_work_tf[];;

EA 应用了两个指标:用于定义极值部分的分形,和用于持仓尾随停止的抛物线。 我还将采用抛物线在 work_tf 操作时间帧内定义一个入场点。

然后在 OnInit() 函数中接收指标句柄,并用初始数据填充数组。

 
 

int OnInit() { //--- 获取 iSar 指标句柄 Sar_base_tf=iSAR(Symbol(),base_tf,sar_step,maximum_step); Sar_work_tf=iSAR(Symbol(),work_tf,sar_step,maximum_step); //--- 获取 iFractals 指标句柄 Fractal_base_tf=iFractals(Symbol(),base_tf); Fractal_work_tf=iFractals(Symbol(),work_tf); //--- 设置 base_tf 数组的顺序为时间序列 ArraySetAsSeries(High_base_tf,true); ArraySetAsSeries(Low_base_tf,true); ArraySetAsSeries(Close_base_tf,true); ArraySetAsSeries(Open_base_tf,true); ArraySetAsSeries(Time_base_tf,true);; ArraySetAsSeries(Sar_array_base_tf,true); ArraySetAsSeries(FractalDown_base_tf,true); ArraySetAsSeries(FractalUp_base_tf,true); //--- 初始并填充 base_tf 数组 CopyHigh(Symbol(),base_tf,0,1000,High_base_tf); CopyLow(Symbol(),base_tf,0,1000,Low_base_tf); CopyClose(Symbol(),base_tf,0,1000,Close_base_tf); CopyOpen(Symbol(),base_tf,0,1000,Open_base_tf); CopyTime(Symbol(),base_tf,0,1000,Time_base_tf); CopyBuffer(Sar_base_tf,0,TimeCurrent(),1000,Sar_array_base_tf); CopyBuffer(Fractal_base_tf,0,TimeCurrent(),1000,FractalUp_base_tf); CopyBuffer(Fractal_base_tf,1,TimeCurrent(),1000,FractalDown_base_tf); //--- 设置 work_tf 数组的顺序为时间序列 ArraySetAsSeries(High_work_tf,true); ArraySetAsSeries(Low_work_tf,true); ArraySetAsSeries(Close_work_tf,true); ArraySetAsSeries(Open_work_tf,true); ArraySetAsSeries(Time_work_tf,true); ArraySetAsSeries(Sar_array_work_tf,true); ArraySetAsSeries(FractalDown_work_tf,true); ArraySetAsSeries(FractalUp_work_tf,true); //--- 初始并填充 work_tf 数组 CopyHigh(Symbol(),work_tf,0,1000,High_work_tf); CopyLow(Symbol(),work_tf,0,1000,Low_work_tf); CopyClose(Symbol(),work_tf,0,1000,Close_work_tf); CopyOpen(Symbol(),work_tf,0,1000,Open_work_tf); CopyTime(Symbol(),work_tf,0,1000,Time_work_tf); CopyBuffer(Sar_work_tf,0,TimeCurrent(),1000,Sar_array_work_tf); CopyBuffer(Fractal_work_tf,0,TimeCurrent(),1000,FractalUp_work_tf); CopyBuffer(Fractal_work_tf,1,TimeCurrent(),1000,FractalDown_work_tf); //--- return(INIT_SUCCEEDED); }

首先,赫兹股票量化收到 指标'句柄,然后在 时间序列 中定义数组的顺序,并用数据填充数组。 我相信 1000 根柱线的数据对于 EA 操作来说已经足够了。

2. 一般参数

在此,我开始运用OnTick() 函数操作。

在“常规参数”部分中,我通常写入市价数据并声明设置仓位的变量。

 
 

//+------------------------------------------------------------------+ //| 1. 常规参数 (开始) | //+------------------------------------------------------------------+ //--- 市价数据market data //品种价格中的小数位数 int Digit=(int)SymbolInfoInteger(_Symbol,SYMBOL_DIGITS); //定义当前品种的价格容量 double f=1; if(Digit==5) {f=100000;} if(Digit==4) {f=10000;} if(Digit==3) {f=1000;} if(Digit==2) {f=100;} if(Digit==1) {f=10;} //--- double spread=SymbolInfoInteger(Symbol(),SYMBOL_SPREAD)/f;//考虑到价格容量,将点差降低到分数值 double bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);//数据依据竞买价 double ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);//数据依据竞卖价 double CostOfPoint=SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_VALUE);//数据依据逐笔报价 //--- 用于设置仓位的手数计算变量 double RiskSize_points;//用于存储当前持仓的止损大小的变量 double CostOfPoint_position;//存储当前持仓的点数价格(参考每笔成交的风险)的变量 double Lot;//用于存储持仓手数的变量 double SLPrice_sell,SLPrice_buy;//存储止损价位的变量 //--- 用于存储柱线编号上数据的变量 int bars_base_tf=Bars(Symbol(),base_tf); int bars_work_tf=Bars(Symbol(),work_tf); //--- 用于存储持仓数据的变量 string P_symbol; //持仓品种 int P_type,P_ticket,P_opentime;//开仓类型, 单号和时间 //+------------------------------------------------------------------+ //| 1. 常规参数 (结束) | //+------------------------------------------------------------------+

更多推荐

股票量化交易软件:走势延续模型搜索图表和执行统计

本文发布于:2024-03-08 23:46:38,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1722896.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:图表   走势   模型   股票   软件

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!