- 精华
- 0
- 在线时间
- 37 小时
- UID
- 247176
- 积分
- 162
- 帖子
- 72
- 阅读权限
- 0
- 注册时间
- 2017-2-14
- 最后登录
- 2017-5-18
- 精华
- 0
- UID
- 247176
- 积分
- 162
- 帖子
- 72
- 主题
- 68
- 阅读权限
- 0
- 注册时间
- 2017-2-14
- 最后登录
- 2017-5-18
|
入场:
ama突破以ama定义的布林带
出场:
2*atr止损,涨幅达到3*atr后把止损线调为跟踪止损
策略源码:
function AMA(Freq,len1,ShareNum,threshold)
% ------------ Retrace Strategy-------------------%
% Freq 为输入时间频率
%---------------------策略初始化与是否日内平仓---------------%
% traderDailyCloseTime(145000);
targetList = traderGetTargetList();
HandleList = traderGetHandleList();
%---------------------策略提取数据---------------%
global s;
n = length(targetList);
for j = 1:n
[marketposition,~,~]=traderGetAccountPosition(HandleList(1),targetList(j).Market,targetList(j).Code);
len = 40;
[time,open,high,low,close,volume,turnover,openinterest] = traderGetKData(targetList(j).Market,targetList(j).Code,'day',Freq, 0-len, 0,false,'FWard');
if length(close)<len+1
return
end
dlen = 10;
[Dtime,Dopen,Dhigh,Dlow,Dclose,Dvolume,Dturnover,Dopeninterest] = traderGetKData(targetList(j).Market,targetList(j).Code,'day',1, 0-dlen, 0,false,'FWard');
if length(Dclose)<dlen+1
return
end
[atr,~] = traderATR(10,targetList(j).Market,targetList(j).Code,'day',1,0-dlen,0,false,'FWard'); % 日ATR
%---------------------策略计算与基本逻辑---------------%
direction = close(end)-close(end-len1+1);
volatility = sum(abs(diff(close(end-len1:end))));
ER = direction/volatility;
c = (ER*(2/5-2/31)+2/31)^2;
if isempty(s(j).Ama)
s(j).Ama = close(end);
else
s(j).Ama = [s(j).Ama, s(j).Ama(end)+c*(close(end)-s(j).Ama(end))];
end
s(j).condition = 0;
if length(s(j).Ama)>len1
th = threshold*std(s(j).Ama(end-len1+1:end));
if s(j).Ama(end)-min(s(j).Ama(end-len1+1:end))>th
s(j).condition = 1;
elseif s(j).Ama(end)-max(s(j).Ama(end-len1+1:end))<-th
s(j).condition = -1;
end
%----------------------策略主体-------------------------------%
% 入场
if marketposition==0
if s(j).condition == 1
OrderID=traderDirectBuy(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','buy');
if OrderID~=0
s(j).openprice=traderOrderFilledPrice(HandleList(1),OrderID);
s(j).peak=0;
end
elseif s(j).condition == -1
OrderID=traderDirectSell(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','buy');
if OrderID~=0
s(j).openprice=traderOrderFilledPrice(HandleList(1),OrderID);
s(j).peak=0;
end
end
end
% 出场
if marketposition>0
if close(end)<s(j).openprice-2*atr(end)
traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');
end
if s(j).condition==-1
traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,-ShareNum,0,'market','close');
end
if s(j).peak==0 && (close(end)-s(j).openprice)>3*atr(end) % 上移止损线
s(j).peak=high(end);
end
if s(j).peak>0
s(j).peak=max(s(j).peak,high(end));
if close(end)<s(j).peak-1.6*atr(end)
traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');
end
end
end
if marketposition<0
if close(end)>s(j).openprice+2*atr(end)
traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');
end
if s(j).condition==1
traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,ShareNum,0,'market','close');
end
if s(j).peak==0 && (s(j).openprice-close(end))>3*atr(end) % 上移止损线
s(j).peak=low(end);
end
if s(j).peak>0
s(j).peak=min(s(j).peak,low(end));
if close(end)>s(j).peak+1.6*atr(end)
traderPositionTo(HandleList(1),targetList(j).Market,targetList(j).Code,0,0,'market','close');
end
end
end
end
end
更多免费策略源码下载请登录DigQuant社区-策略资源下载~http://www.digquant.com.cn/stra.php
AMA策略源码下载:http://www.digquant.com.cn/stra.php?mod=model&pid=82 |
|