基于高低点与突破的系统

1 名词解释

高低点:高低点是价格走势中的峰值和谷底,它们是确定市场趋势的重要信号。高点通常是价格走势中的峰值,也就是价格上升到一定程度后出现的最高点。低点则是价格走势中的谷底,也就是价格下跌到一定程度后出现的最低点。通过识别价格走势中的高低点,交易者可以确定市场处于上涨或下跌趋势中。

分析意义:

  1. 确定市场的走势方向:高低点可以帮助交易者确定市场的走势方向,例如上涨、下跌或震荡。当价格出现高点时,通常意味着市场处于上升趋势中;而当价格出现低点时,通常意味着市场处于下降趋势中。

  2. 识别关键的支撑和阻力水平:高低点还可以帮助交易者识别关键的支撑和阻力水平,这些水平可以用于制定交易策略。例如,在价格下跌到关键的支撑水平时,交易者可以采取买入策略,因为这通常意味着市场已经过度卖出;而在价格上涨到关键的阻力水平时,交易者可以采取卖出策略,因为这通常意味着市场已经过度买入。

计算过程:(理论过程)

  1. 选择合适的时间周期:首先需要选择合适的时间周期,例如日线、周线或月线等。不同的时间周期可以反映出不同的市场走势和趋势,因此需要根据自己的交易策略和风险偏好来选择合适的时间周期。

  2. 寻找价格的极值点:在选定的时间周期内,需要寻找价格的极值点,包括高点和低点。一般来说,高点可以通过价格的峰值来确定,而低点可以通过价格的谷底来确定。

  3. 确定关键的高低点:在找到价格的极值点之后,需要进一步确定哪些高低点是关键的,即哪些高低点能够反映出市场的趋势和动向。这通常需要使用一些指标或方法来确定,例如,可以使用趋势线、移动平均线、布林带等来确定关键的高低点。

  4. 更新高低点:在市场价格不断变化的过程中,需要不断地更新高低点,以反映出市场的最新趋势和动向。交易者可以使用自己选择的时间周期来更新高低点,例如,在日线上更新高低点可以每天进行一次,而在周线上更新高低点可以每周进行一次。

2 参数设定

 
Params
    Numeric AvgLen(20); //高低点均线计算周期
    Numeric AbsDisp(5); //高低点均线前移周期
    Numeric ExitBar(5); //止损周期参数,该周期以前中轨止损,以后外轨止损
Vars
    NumericSeries UpperAvg; //通道上轨
    NumericSeries LowerAvg; //通道下轨
    NumericSeries ExitAvg; //通道中轨
    NumericSeries RangeLeadB;
    NumericSeries RangeLeadS;
    NumericSeries MedianPrice; //K线中点
    NumericSeries Range1; //K线振幅

Numeric AvgLen(20):高低点均线计算周期。这个参数表示计算高低点均线所使用的时间周期,本系统中为20个周期。

Numeric AbsDisp(5):高低点均线前移周期。这个参数表示高低点均线向前移动的周期数,本系统中为5个周期。

Numeric ExitBar(5):止损周期参数,该周期以前中轨止损,以后外轨止损。这个参数表示止损所使用的时间周期,本系统中为5个周期。在该周期之前,交易者可以使用中轨进行止损,之后则可以使用外轨进行止损。

NumericSeries UpperAvg:通道上轨。这是一个变量,表示计算得出的高低点均线加上一定幅度的通道上轨线。

NumericSeries LowerAvg:通道下轨。这是一个变量,表示计算得出的高低点均线减去一定幅度的通道下轨线。

NumericSeries ExitAvg:通道中轨。这是一个变量,表示计算得出的高低点均线的中轨线。

NumericSeries RangeLeadB:领先周期买入区间。这是一个变量,表示在突破买入时,判断突破是否有效的领先周期买入区间。

NumericSeries RangeLeadS:领先周期卖出区间。这是一个变量,表示在突破卖出时,判断突破是否有效的领先周期卖出区间。

NumericSeries MedianPrice:K线中点。这是一个变量,表示计算得出的K线中点的价格。

NumericSeries Range1:K线振幅。这是一个变量,表示计算得出的K线的价格波动范围。

3 信号发出

//K线振幅。该行代码计算了K线的价格波动范围,即K线的最高价和最低价之差。
Range1 = High - Low; 
 //计算AvgLen周期内,AbsDisp周期前高点的均值。该行代码计算了高点均线的值,即取AbsDisp周期前的最高价,并计算其在过去AvgLen个周期内的均值。
 UpperAvg = Ma(High[AbsDisp],AvgLen);
 //计算AvgLen周期内,AbsDisp周期前低点的均值。该行代码计算了低点均线的值,即取AbsDisp周期前的最低价,并计算其在过去AvgLen个周期内的均值。
 LowerAvg = Ma(Low[AbsDisp],AvgLen); 
 //计算K线中点。该行代码计算了K线的中点价格,即取最高价和最低价的平均值。
 MedianPrice = (High + Low) * 0.5; 
 //计算AvgLen周期内,AbsDisp周期前K线中点的均值。该行代码计算了K线中点的均线,即取AbsDisp周期前的K线中点价格,并计算其在过去AvgLen个周期内的均值。
 ExitAvg = Ma(MedianPrice[AbsDisp],AvgLen); 
  //当根K线满足中点大于前一根K线高点且振幅大于上一根振幅。该行代码计算了突破买入的判断条件,即当K线中点价格大于前一根K线的最高价且当前K线的价格波动范围大于上一根K线的价格波动范围时,满足突破买入的条件。
  RangeLeadB = MedianPrice > High[1] && Range1 > Range1[1];
  //当根K线满足中点小于前一根K线低点且振幅大于上一根振幅。该行代码计算了突破卖出的判断条件,即当K线中点价格小于前一根K线的最低价且当前K线的价格波动范围大于上一根K线的价格波动范围时,满足突破卖出的条件。
  RangeLeadS = MedianPrice < Low[1] && Range1 > Range1[1]; 
  //输出通道上轨。该行代码将计算得到的通道上轨以"Lineu"的标签输出。
  PlotNumeric("Lineu",UpperAvg); 
  //输出通道中轨。该行代码将计算得到的通道中轨以"LineM"的标签输出。
  PlotNumeric("LineM",ExitAvg);
  PlotNumeric("Lingd",LowerAvg); //输出通道下轨

这段代码实现了基于高低点和突破的交易系统的主要逻辑,包括计算K线振幅和通道上、下轨和中轨的均值,以及判断是否存在突破信号。

  • 首先计算K线振幅(Range1),通道上、下轨(UpperAvg和LowerAvg)以及中轨(ExitAvg)的均值;

  • 然后通过计算K线的中点(MedianPrice),判断是否存在突破信号(RangeLeadB和RangeLeadS);

  • 最后输出通道上、下轨和中轨的均值。

 
        //系统入场
        If(MarketPosition == 0) //无持仓
        {
            If(RangeLeadB[1] == 1 && Close[1] > UpperAvg[1]) //上根K线满足RangeLeadB条件,且上一根收盘价大于上一根通道上轨
            {
                BK(DefaultVol); //开多仓
            }
            If(RangeLeadS[1] == 1 && Close[1] < LowerAvg[1]) //上根K线满足RangeLeadS条件,且上一根收盘价小于上一根通道下轨
            {
                SK(DefaultVol); //开空仓
            }
        }

系统入场部分,首先判断当前是否有持仓,如果没有持仓,则根据一定的条件判断开仓方向。具体来说,如果上一根K线满足RangeLeadB条件且上一根收盘价大于上一根通道上轨,则开多仓;如果上一根K线满足RangeLeadS条件且上一根收盘价小于上一根通道下轨,则开空仓。

 
        //系统出场
        If(MarketPosition == 1 && BarsSinceEntry > 0) //持有多仓且开仓后一根K线以后
        {
            If(BarsSinceEntry <= ExitBar) //开仓后ExitBar根K线内
            {
                If(Low <= ExitAvg) //最低价小于等于中轨
                {
                    SP(DefaultVol); //平多仓
                }
            }
            Else If(BarsSinceEntry > ExitBar) //否则开仓后ExitBar根K线以后
            {
                If(Low <= UpperAvg - MinPrice) //最低价小于等于上轨减最小变动价位 
                {
                    SP(DefaultVol); //平多仓
                }
            }
        }
        If(MarketPosition == -1 && BarsSinceEntry > 0) //持有空仓且开仓后一根K线以后
        {
            If(BarsSinceEntry <= ExitBar) //开仓后ExitBar根K线内
            {
                If(High >= ExitAvg) //最高价大于等于中轨
                {
                    BP(DefaultVol); //平空仓
                }
            }
            Else If(BarsSinceEntry > ExitBar) //否则开仓后ExitBar根K线以后
            {
                If(High >= LowerAvg + MinPrice) //最高价大于等于下轨加最小变动价位
                {
                    BP(DefaultVol); //平空仓
                }
            }
        }

系统出场部分,首先判断当前是否持有多仓或空仓,并且已经经过了开仓后一根K线以后的时期。如果当前持有多仓,则在开仓后ExitBar根K线内,如果最低价小于等于中轨,则平多仓;如果已经超过ExitBar根K线,则如果最低价小于等于上轨减最小变动价位,则平多仓。如果当前持有空仓,则同样在开仓后一根K线以后,如果在ExitBar根K线内,最高价大于等于中轨,则平空仓;如果已经超过ExitBar根K线,则如果最高价大于等于下轨加最小变动价位,则平空仓。

4 策略总结

这个策略的基本思想是,在价格在通道内波动时,根据移动平均线和通道的信号来开仓和平仓,从而获取短期的利润。但需要注意的是,这种策略的胜率可能并不高,因为在行情趋势明显时,通道和移动平均线的信号可能会出现滞后,导致错过了持续的行情走势。

规则要素:

基于K线振幅、均线通道、价格位置等因素的交易策略。具体来说,该策略将交易信号定义为根据当前K线的振幅和中点位置与前一根K线的价格位置和振幅之间的关系来判断,是否开仓或平仓。

交易信号:若根K线满足以下条件之一,则产生交易信号:

  • 中点大于前一根K线的高点且振幅大于上一根振幅(RangeLeadB=1);

  • 中点小于前一根K线的低点且振幅大于上一根振幅(RangeLeadS=1)。

入场条件:

开仓:若当前无持仓,且上一根K线收盘价满足以下条件之一,则开仓:

  • 上根K线满足RangeLeadB条件,且上一根收盘价大于上一根通道上轨(Close[1]>UpperAvg[1]);开多仓

  • 上根K线满足RangeLeadS条件,且上一根收盘价小于上一根通道下轨(Close[1]<LowerAvg[1]);开空仓。

出场条件:

平仓:

若当前持有多仓且开仓后BarsSinceEntry根K线以内,且最低价小于等于中轨,则平多仓(SP);

若当前持有多仓且开仓后BarsSinceEntry根K线以外,且最低价小于等于上轨减最小变动价位,则平多仓。

若当前持有空仓且开仓后BarsSinceEntry根K线以内,且最高价大于等于中轨,则平空仓(BP);

若当前持有空仓且开仓后BarsSinceEntry根K线以外,且最高价大于等于下轨加最小变动价位,则平空仓。

5 Q&A

  1. 为什么能形成突破信号

RangeLeadB = MedianPrice > High[1] && Range1 > Range1[1];

RangeLeadS = MedianPrice < Low[1] && Range1 > Range1[1];

突破买入:

当 MedianPrice 大于 High[1] 时,说明当前 K 线的中点高于前一根 K 线的最高价,即出现了向上突破的情况。而 Range1 > Range1[1] 则是判断当前 K 线的振幅是否大于前一根 K 线的振幅,也就是说当前的波动幅度比之前更大,更有可能形成向上突破的行情。

当这两个条件同时满足时,就可以认为当前出现了突破买入信号,因为当前的行情很可能会继续向上发展,如果之前没有持仓,则可以开多仓来参与行情。

突破卖出:

计算了当前K线的中点价格MedianPrice和前一根K线的最低价Low[1],并将它们进行比较。如果当前K线的中点价格小于前一根K线的最低价,那么说明当前K线已经跌破了前一根K线的最低点,形成了向下的趋势。然后,它再计算当前K线的振幅Range1和前一根K线的振幅Range1[1],并判断当前K线的振幅是否大于前一根K线的振幅,如果是,那么说明当前K线的波动幅度更大,可能意味着市场的下跌力度更强,进一步加强了向下的趋势。如果这两个条件都满足,那么就会触发突破卖出信号,即RangeLeadS变量被设置为1,表示当前处于向下的趋势中,可以考虑开空仓卖出。

  1. 开多仓

在MarketPosition == 0的情况下,代表当前没有持仓。当上一根K线满足RangeLeadB条件,且上一根收盘价大于上一根通道上轨时,就符合了开多仓的条件。

RangeLeadB条件是指当前K线的中间价(MedianPrice)大于上一根K线的最高价(High[1]),且当前K线的波动幅度(Range1)大于上一根K线的波动幅度(Range1[1])。这个条件的意义是当前K线的价格已经超过了前一根K线的最高价,而且波动幅度也更大,暗示了市场处于上涨趋势中。

UpperAvg代表了通道的上轨,当上一根K线的收盘价(Close[1])大于通道上轨时,说明市场价格已经突破了通道上轨的压力位,暗示着可能会有进一步上涨的趋势。

综合以上条件,如果满足了开多仓的条件,就意味着市场价格处于上升趋势,并且突破了通道上轨的压力位,为开多仓提供了买入信号。因此,在这种情况下,可以开多仓来参与市场的上涨行情。

  1. 开空仓

当满足 RangeLeadS 条件时,意味着市场处于下跌趋势,此时我们希望能够跟随市场下跌,以获得利润。而且,此时我们确信价格已经跌破了通道的下轨,市场的走势较为明显,因此可以开空仓以期望获得更大的利润。

  1. 平多仓

当MarketPosition == 1且BarsSinceEntry > 0时,表示当前持有多仓,且已经经过了开仓后一根K线。在这种情况下,需要进行平仓操作。

首先判断BarsSinceEntry是否小于等于ExitBar,如果是,说明在开仓后的ExitBar根K线内,需要根据最低价是否小于等于中轨来判断是否需要平仓。如果最低价小于等于中轨,就可以进行平多仓操作,即SP(DefaultVol)。

如果BarsSinceEntry大于ExitBar,则说明在开仓后的ExitBar根K线以后,需要根据最低价是否小于等于上轨减去最小变动价位来判断是否需要平仓。如果最低价小于等于上轨减去最小变动价位,就可以进行平多仓操作。

  1. 为什么对ExitBar的条件判断不同?

这是因为在不同的时间段内,平多仓的条件是不同的,需要根据市场行情和交易策略进行调整。在开仓后的前ExitBar根K线内,价格波动较小,因此只需要确保最低价不低于中轨,就可以平多仓,从而保留一定的利润。而在开仓后的后ExitBar根K线内,价格波动较大,需要考虑价格回调的风险。因此,需要确保最低价不低于上轨减最小变动价位,才能平多仓,以避免亏损。

如果经过的K线数小于等于ExitBar,说明持仓时间还没有超过止盈时间,应该根据当前的最低价和中轨进行平仓判断,如果最低价小于等于中轨,就会平仓;如果经过的K线数大于ExitBar,说明持仓时间已经超过了止盈时间,应该根据当前的最低价和上轨减去最小变动价位进行平仓判断,如果最低价小于等于上轨减去最小变动价位,就会平仓。

对于平多仓来说,就是判断当前是否需要平掉持有的多仓。如果当前最低价小于等于中轨或者上轨减去最小变动价位,就说明市场价格已经开始下跌,应该平掉多仓来避免亏损。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值