matlab pivot,Matlab量化交易策略分享之 PivotPoint策略(含源码)

本帖最后由 sdfg123 于 2017-2-15 17:19 编辑

策略名称:PivotPoint

策略说明:

系统不断跟踪实时交易价格,根据前一交易日计算得到的六个价位作为触发条

件,当当前价位达到触发价格时,产生交易信号,系统自行执行交易策略。因

此我们的具体交易策略如下:

1) 趋势跟踪策略:

在空仓情况下,若盘中价格超过买入突破价,则认为出现上升趋势,开仓做多;

在空仓情况下,若盘中价格跌破卖出突破价,则认为出现下降趋势,开仓做空;

2) 反转趋势策略:

当日内最高价超过上观察价后,盘中价格出现回落,且进一步跌破卖出反转价

构成的支撑线时,即在该点位(反手、开仓)做空;

当日内最低价跌破下观察价后,盘中价格出现反弹,且进一步超过反转买入价

构成的阻力线时,即在该点位(反手、开仓)做多;

回测曲线:

508c706f229c53134c053b1c62a15b31.png

1.png (81.89 KB, 下载次数: 1)

2017-2-15 17:18 上传

策略代码:

function  PivotPoint(freq2,shareNum)      %上面五个为输入参数

%  Freq  为输入时间频率

%---------------------策略初始化与是否日内平仓---------------%

%  traderDailyCloseTime(145000);          %  每天14:50分平仓        如果没有日内平仓,去掉这句话就可以了。

targetList  =  traderGetTargetList();  %获取交易标的句柄

HandleList  =  traderGetHandleList();  %获取账户句柄

global  s;

lags=3;

%---------------------策略提取数据---------------%

for  i=1:length(targetList)

[time,open,high,low,close,volume,turnover,openinterest]  =  traderGetKData(targetList(i).Market,targetList(i).Code,'day',freq2,  0-lags,  0,false,'FWard');  %提取数据,从当前开始往前取lags个数据

BarNumber=traderGetCurrentBar(targetList(i).Market,targetList(i).Code);

if  length(close)

continue;

end

mp=traderGetAccountPosition(HandleList(1),targetList(i).Market,targetList(i).Code);

t=datevec(time(end));

if  t(4)==9&&t(5)<35;

s(i).switch1=1;

s(i).switch2=1;

s(i).switch3=0;

s(i).switch4=1;

s(i).switch5=1;

s(i).switch6=0;

s(i).OrderID1=0;

s(i).OrderID2=0;

s(i).OrderID3=0;

s(i).OrderID4=0;

continue;

end

if  t(4)==14&&t(5)>50  &&  mp~=0

traderPositionTo(HandleList(1),targetList(i).Market,targetList(i).Code,0,0,'market','反转做空')

continue;

end

%%  计算轨迹

HH=high(end-1);%  上一个交易日的最高价

LL=low(end-1);  %  上一个交易日的最低价

CC=close(end-1);  %  上一个交易日的收盘价

pp=(HH+LL+2*CC)/4;

R3=pp+(HH-LL)+(pp-LL);

R2=pp+(HH-LL);

R1=pp+(HH-pp);

S1=pp-(HH-pp);

S2=pp-(HH-LL);

S3=pp-(HH-LL)-(HH-pp);

%%  判断状态下单

if  close(end)>R3  &&  s(i).switch1==1;

s(i).OrderID1=traderDirectBuy(HandleList(1),targetList(i).Market,targetList(i).Code,shareNum,0,'market','突破做多');

s(i).switch1=0;

end

if  close(end)>R2  &&  s(i).switch2==1

s(i).switch2=0;

s(i).switch3=1;

end

if    s(i).switch3==1  &&  close(end)

s(i).OrderID2=traderDirectSell(HandleList(1),targetList(i).Market,targetList(i).Code,shareNum,0,'market','反转做空');

s(i).switch3=0;

end

if  close(end)

s(i).OrderID3=traderDirectSell(HandleList(1),targetList(i).Market,targetList(i).Code,shareNum,0,'market','突破做多');

s(i).switch4=0;

end

if  close(end)

s(i).switch5=0;

s(i).switch6=1;

end

if    s(i).switch6==1  &&  close(end)>S1

s(i).OrderID4=traderDirectBuy(HandleList(1),targetList(i).Market,targetList(i).Code,shareNum,0,'market','反转做多');

s(i).switch6=0;

end

if  s(i).OrderID1~=0  &&  close(end)

traderPositionTo(HandleList(1),targetList(i).Market,targetList(i).Code,0,0,'market','close');

s(i).OrderID1=0;

end

if  s(i).OrderID2~=0  &&  close(end)>R2

traderPositionTo(HandleList(1),targetList(i).Market,targetList(i).Code,0,0,'market','close');

s(i).OrderID2=0;

end

if  s(i).OrderID3~=0  &&  close(end)>S2

traderPositionTo(HandleList(1),targetList(i).Market,targetList(i).Code,0,0,'market','close');

s(i).OrderID3=0;

end

if  s(i).OrderID4~=0  &&  close(end)

traderPositionTo(HandleList(1),targetList(i).Market,targetList(i).Code,0,0,'market','close');

s(i).OrderID4=0;

end

end

更多免费策略下载请登录 ww w.atrader.com.cn/stra.php

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值