资源加载中... loading...

饭-日内交易_2

Author: bitfan, Date: 2020-07-19 04:36:17
Tags: 日内


(*
# 回测参数:
    平台 - okex期货,
    15分钟,
    余额 - 1,
    执行方式 - 实盘价模型,
    品种代码 - this_week

# 回测结果:
LENGTH:32 ~ 96
本金:1BTC
时间:2020.6.17 - 2020.7.17

        # 	xx小时内的最高价	交易次数 	    平仓盈亏 	胜率 	    最大回撤 	    夏普 	      预估收益 	  利润
        0	8小时     	    221	        -0.0554	    25 %	    13.28 %	    -0.361	    -0.12	    0
        1	9小时     	    198	        -0.05994	21.88 %	    13.07 %	    -0.387	    -0.118	    0
        2	10小时		    187	        -0.0327	    21.88 %	    10.02 %	    -0.315	    -0.087	    0
        3	11小时		    182	        -0.03914	21.88 %	    9.92 %	    -0.335	    -0.092	    0
        4	12小时		    174	        -0.02444	25 %	    8.22 %	    -0.279	    -0.075	    0
 (盈利)5	13小时		    165	        0.00257	    25 %	    5.89 %	    -0.182	    -0.046	    0
        6	14小时		    157	        -0.0047	    21.88 %	    5.89 %	    -0.211	    -0.05	    0
 (盈利)7	15小时		    158	        0.00042	    25 %	    5.26 %	    -0.194	    -0.046	    0
        8	16小时		    155	        -0.0313	    21.88 %	    8.74 %	    -0.291	    -0.077	    0
        9	17小时		    147	        -0.03151	18.75 %	    8.53 %	    -0.305	    -0.074	    0
        10	18小时		    146	        -0.03928	15.63 %	    9.27 %	    -0.332	    -0.082	    0
        11	19小时		    147	        -0.05313	12.5 %	    9.99 %	    -0.387	    -0.096	    0
        12	20小时		    145	        -0.04819	12.5 %	    9.43 %	    -0.365	    -0.09	    0
        13	21小时		    139	        -0.07268	9.38 %	    11.7 %	    -0.454	    -0.113	    0
        14	22小时		    134	        -0.06235	9.38 %	    10.59 %	    -0.406	    -0.101	    0
        15	23小时		    133	        -0.07351	6.25 %	    11.23 %	    -0.459	    -0.112	    0
        16	24小时		    126	        -0.0651	    6.25 %	    10.18 %	    -0.437	    -0.102	    0
        
# 问题:
如果不指定开单数量,直接用 BK、SK 开单,确实是按预期的现价成交。
但指定开单数量,也就是用BK(n手)、SK(n手)时,多单会开在那根k线的最高价,空单会开在那根k线的最低价。
这导致了在很多插针里开单后就要止损,但事实上在插针中是可以盈利的。

如果能按现价成交,数据会比上面的回测结果好一些。

这里的代码中,在开单时添加了前一根线的收盘价没突破的判断,减少插针的交易摩擦。转python时不需要判断收盘价,直接判断现价有没有突破就可以。

直接用「现价」来判断开单的代码在: https://www.fmz.com/m/edit-strategy/219733 

*)

highest:=HHV(REF(H,2), LENGTH); //LENGTH周期内的最高价
lowest:=LLV(REF(L,2), LENGTH); //LENGTH周期内的最低价

up_line^^highest; //上轨
under_line^^lowest; //下轨

//开多单,递减加仓。1个头寸45张,是 1BTC 仓位的 5% 左右
BKVOL = 0 AND REF(C,1) >= highest AND NEW >= highest, BK(90); //前一根k线收盘价没突破,当前k线的现价突破新高,开单两个头寸;
BKVOL >= 90 AND REF(C,1) >= highest AND NEW > BKPRICE AND (NEW-BKPRICE)/BKPRICE >= 0.005, BK(45); //再突破新高,并且比前一次开单涨了0.5%,追加1个头寸


//开空单,递减加仓
SKVOL = 0 AND REF(C,1) <= lowest AND NEW <= lowest, SK(90); 
SKVOL >= 90 AND REF(C,1) <= lowest AND NEW < SKPRICE AND (SKPRICE-NEW)/SKPRICE >= 0.005, SK(45); 

//止盈多单
BKVOL > 90 AND NEW < BKPRICE, SP(BKVOL) ; //现价低于最后一次开仓价,止盈全部多单
//止损多单
BKVOL > 0 AND NEW < BKPRICEAV AND (BKPRICEAV-NEW)/BKPRICEAV >= 0.005, SP(BKVOL); //现价跌破全部仓位平均成本的 0.5% 就全部止损

//止盈空单
SKVOL > 90 AND NEW > SKPRICE, BP(SKVOL) ;
//止损空单
SKVOL > 0 AND NEW > SKPRICEAV AND (NEW-SKPRICEAV)/SKPRICEAV >= 0.005, BP(SKVOL); 

MULTSIG(60,60,5,60);

template: strategy.tpl:40:21: executing "strategy.tpl" at <.api.GetStrategyListByName>: wrong number of args for GetStrategyListByName: want 7 got 6