楼主: 挖矿专家
2288 4

[源码分享] 【每日一策】Matlab量化交易策略之 AMA [推广有奖]

  • 0关注
  • 74粉丝

讲师

22%

还不是VIP/贵宾

-

威望
0
论坛币
2016 个
通用积分
5.2622
学术水平
21 点
热心指数
21 点
信用等级
21 点
经验
6055 点
帖子
403
精华
0
在线时间
151 小时
注册时间
2017-2-8
最后登录
2017-6-27

楼主
挖矿专家 发表于 2017-3-23 19:28:06 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
策略思路:
入场:
ama突破以ama定义的布林带
出场:
2*atr止损,涨幅达到3*atr后把止损线调为跟踪止损

回测曲线(由Auto-trader提供回测报告)

AMA.png

策略源码:

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    endend



更多免费策略下载请登录DigQuant社区-策略资源获取~





二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


沙发
ydc129 发表于 2017-3-29 20:49:10
谢谢分享

藤椅
ghjktdf 发表于 2017-4-1 10:42:37
感谢分享

板凳
lkdsgrjra 发表于 2017-4-11 09:47:31
感谢分享

报纸
挖矿专家 发表于 2017-4-11 18:37:35
感谢支持

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群
GMT+8, 2026-1-28 13:38