- 显示:
- 4542
- 等级:
- 已发布:
- 2021.06.23 05:12
-
需要基于此代码的EA交易或指标吗?请在自由职业者服务中订购 进入自由职业者服务
价格是行情分析的重要参照因素,尤其是以支撑阻力位为核心的交易系统中,寻找合适的进场和出场价格位置是首要任务。那么按价格标记出这些参照位置就对分析、统计有实际意义。
画线对象
这里用画横线的方式来进行标记,需要用到画对象函数ObjectCreate(),指定对象类型为OBJ_HLINE,创建画线对象便可以设置颜色、宽度、风格等相关属性。
//画横线对象 string line_name = DoubleToString(1.20330); if(!ObjectCreate(0,line_name,OBJ_HLINE,0,0,1.20330)) { printf(": failed to create a line! Error code = ",GetLastError()); } ObjectSetInteger(0,line_name,OBJPROP_COLOR,clrRed); //设置颜色 ObjectSetInteger(0,line_name,OBJPROP_STYLE,STYLE_SOLID); //设置风格 ObjectSetInteger(0,line_name,OBJPROP_WIDTH,1); //设置宽度
价格位置
在这个例子中,拟定一个应用场景,需要实现找出所有以00、50价格结尾的整点价位,并进行画线标记出来。在历史报价数据中,价位是有波动范围的,给定一个最大值2.00000和最小值1.00000,在这个价格区间找出需要的价位。
//整点价格位置 double price_max = 2.00000; double price_min = 1.00000; double price_integer[]; ArrayResize(price_integer,300); double price_tmp = price_min; int m = 0; for(m = 0; price_tmp <= price_max; m++) { price_integer[m] = price_tmp; price_tmp = price_tmp + 0.00500; } ArrayRemove(price_integer,m); for(int i = 0; i < ArraySize(price_integer); i++) { //画横线对象 }
需要注意的是,用到了ArrayResize()函数分配一个动态数组空间,这里直接定义一个静态数组,是因为动态数组可以灵活进行插入、删除操作,在无法准确得到数组元素个数时,先动态分配,再用ArrayRemove()函数清理多余的数据,将空间利用到最优。
同样可以将线的颜色、样式、宽度等作为输入参数,实现更加灵活的控制。
input color line_color = clrRed; input ENUM_LINE_STYLE line_style = STYLE_SOLID; input int line_width = 2;
实现源码
#property copyright "公众号 Luyuanmw 微信 wentxiong" #property link "http://www.popoding.club/" #property version "1.00" #property script_show_inputs input color line_color = clrRed; input ENUM_LINE_STYLE line_style = STYLE_SOLID; input int line_width = 2; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- //整点价格位置 double price_max = 2.00000; double price_min = 1.00000; double price_integer[]; ArrayResize(price_integer,300); double price_tmp = price_min; int m = 0; for(m = 0; price_tmp <= price_max; m++) { price_integer[m] = price_tmp; price_tmp = price_tmp + 0.00500; } ArrayRemove(price_integer,m); for(int i = 0; i < ArraySize(price_integer); i++) { //画横线对象 string line_name = DoubleToString(price_integer[i]); if(!ObjectCreate(0,line_name,OBJ_HLINE,0,0,price_integer[i])) { printf(": failed to create a line! Error code = ",GetLastError()); } ObjectSetInteger(0,line_name,OBJPROP_COLOR,line_color); //设置颜色 ObjectSetInteger(0,line_name,OBJPROP_STYLE,line_style); //设置风格 ObjectSetInteger(0,line_name,OBJPROP_WIDTH,line_width); //设置宽度 } }

MT5挂单类型有六种,能够很好地适应回调和突破场景,在一些突破策略交易系统中应用较多,当挂单条件不再有效的时候,就会涉及到挂单的取消操作。六种挂单应用说明如下: Buy Limit(回踩买入):在当前价格下方,等待行情下跌到挂单位置触发买入单。 Sell Limit(回踩卖出):在当前价格上方,等待行情上涨到挂单位置触发卖出单。 Buy Stop(突破买入):在当前价格上方,等待行情上涨到挂单位置触发买入单。 Buy Stop(突破卖出):在当前价格下方,等待行情下跌到挂单位置触发卖出单。 Buy Stop Limit(突破回踩买入):在当前价格上方,等待行情上涨到突破位置后,再下跌到回踩位置,触发买入单。 Sell Stop Limit(突破回踩卖出):在当前位置下方,等待行情下跌到突破位置后, 再上涨到回踩位置,触发卖出单。

MT5已经自带了很多指标,给交易带来了极大便利,作为辅助工具,很多时候我们需要对其进行进一步改造,或重新自定义指标,本例通过实现双线一柱变色MACD指标来进行说明。

无论是进行策略分析,还是进行交易系统设计,时间是一个非常重要的参照因素,特别是在进行历史数据回溯验证的时候,如果想快速定位到某个时间点,就需要找到一个办法在行情图表上进行明显的标记,比如在什么时间点出现了亏损、什么时间点出现了盈利,使用按时间标记功能,就可以快速标记所有位置,便于统计、分析。在这个例子中,我们运用的是画竖线的方式,并区分不同颜色的线,来实现需求。

这是mt4 转 mt5的 剩余时间的指标,分享大家