交易危机

 找回密码
 快捷注册(禁q号)

QQ登录

只需一步,快速开始

搜索
广告位
查看: 10409|回复: 5
打印 上一主题 下一主题

[其他] 量化交易模型 源码公开-商品期货相关

[复制链接]

483

主题

6378

积分

3

精华

高级操盘手

金钱
6378 美元
权重
72
跳转到指定楼层
楼主
发表于 2015-6-12 18:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
N:=BARSLAST(DATE<>REF(DATE,1))+1;//读取当天第一根k线到当前k线的周期数
HH:=HHV(H,N);//计算当天最高价
LL:=LLV(L,N);//计算当天最低价
H-LL>=30*MINPRICE,BK;//最高价与当天最低价差值超过30最小变动价位时,买开
HH-L>=30*MINPRICE,SK;//当天最高价与最低价差值超过30最小变动价位时,卖开
TIME<1458&&HH-L>=30*MINPRICE &&(H-L<30*MINPRICE ||(H-L>=30*MINPRICE &&C<O)),SP;//卖平仓
TIME<1458&&H-LL>=30*MINPRICE &&(H-L<30*MINPRICE ||(H-L>=30*MINPRICE &&C>O)),BP;//买平仓
TIME>=1458,CLOSEOUT;//盘尾14点58分全平
AUTOFILTER;


//后的绿色字体为注释,不参与模型计算
    //14点58分之前当天最高价与最低价差值超过30最小变动价位且当根k线幅度小于30最小变动价位或者当根k线幅度超过30最小变动价位同时k线收阴时,卖平
//14点58分之前最高价与当天最低价差值超过30最小变动价位且当根k线幅度小于30最小变动价位或者当根k线幅度超过30最小变动价位同时k线收阳时,买平   

===================================================================
TR := MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));//定义TR
ATR := MA(TR,14);//计算14周期TR的均值
HH:=LOOP2(BARPOS=1,C,MAX(REF(HH,1),C)); //如果是历史第一根k线取收盘价,否则取前一周期HH与收盘价的最大值。
LL:=LOOP2(BARPOS=1,C,MIN(REF(LL,1),C));//如果是历史第一根k线取收盘价,否则取前一周期LL与收盘价的最小值
AV:=ATR*3;//计算3倍ATR值
SARL:=LL+AV;//定义LL+AV为上轨
SARS:=HH-AV;//定义HH+AV为下轨
C>SARL,BPK;  //最新价大于上轨,买平开
C<SARS,SPK;//最新价小于下轨,卖平开
AUTOFILTER;
      

//后的绿色字体为注释,不参与模型计算
==================================================================
todayvolatility:=STD(CLOSE,30);//计算30周期收盘价的标准差
yesterdayvolatility:=STD(REF(CLOSE,1),30);//计算30周期前一根k线收盘价的标准差
deltavolatility:=(todayvolatility-yesterdayvolatility)/todayvolatility;//计算2个标准差的振幅
lookbackdays:=POW(20*(1+deltavolatility),BARPOS);//计算20*(1+deltavolatility) 的幂级数
lookbackdays1:=IFELSE(lookbackdays>60,60,IFELSE(lookbackdays<20,20,lookbackdays));//当幂级数大于60取60小于20取20在这2者之间取当前值
mid:=MA(CLOSE,lookbackdays1);//取幂级数周期收盘价均值。
upband:=mid+2*STD(CLOSE,lookbackdays1);//确定上轨
dnband:=mid-2*STD(CLOSE,lookbackdays1);//确定下轨
buypoint:=HV(HIGH,lookbackdays1);//计算前一周期lookbackdays1周期内最高价的最大值。
sellpoint:=LV(LOW,lookbackdays1);//计算前一周期lookbackdays1周期内最低价的最小值。
longliqpoint:=MA(CLOSE,lookbackdays1);//lookbackdays1周期收盘价均值
shortliqpoint:=MA(CLOSE,lookbackdays1);//lookbackdays1周期收盘价均值
CLOSE<dnband,SPK;//当最新价小于下轨,卖平开
LOW<=longliqpoint,SP;//当最低价不大于longliqpoint,卖平
CLOSE>upband,BPK;//当最新价大于上轨,买平开
HIGH>=shortliqpoint,BP;//当最高价不小于shortliqpoint,买平
AUTOFILTER;
======================================================================
N:=BARSLAST(DATE<>REF(DATE,1))+1;//分钟周期日内k线根数
OO:=VALUEWHEN(DATE<>REF(DATE,1),O); //取当天开盘价
HH1:=REF(HHV(H,N*M),N);//取M天内高点
LL1:=REF(LLV(L,N*M),N);//取M天内低点
HC1:=REF(HHV(C,N*M),N);//取M天内收盘价最大值
LC1:=REF(LLV(C,N*M),N);//取M天内收盘价最小值
HH2:=REF(HHV(H,N*M1),N);//取M1天内最高价最大值
LL2:=REF(LLV(L,N*M1),N);//取M1天内最低价最小值
HC2:=REF(HHV(C,N*M1),N);//取M1天内收盘价最大值
LC2:=REF(LLV(C,N*M1),N);//取M1天内收盘价最小值
SELLR:=IFELSE((HH1-LC1)>=(HC1-LL1),HH1-LC1,HC1-LL1);//如果(HH1-LC1)>=(HC1-LL1)取HH1-LC1的值,否则取HC1-LL1
BUYR:=IFELSE((HH2-LC2)>=(HC2-LL2),HH2-LC2,HC2-LL2);//如果(HH2-LC2)>=(HC2-LL2)取HH2-LC2的值,否则取HC2-LL2
BT:=K1*BUYR;//计算买波动幅度K1*BUYR
ST:=K2*SELLR;//计算卖波动幅度K2*SELLR
BUYP:=OO+BT;//计算上轨
SELLP:=OO-ST;//计算下轨
NOT(ISLASTKLINE)&&H>=BUYP&&C>=MAX(O,BUYP),BPK;//如果不是收盘最后一根k线且最高价不小于上轨且收盘价不小于上轨和开盘价最大值,买平开
NOT(ISLASTKLINE)&&L<=SELLP&&C<=MIN(O,SELLP),SPK;//如果不是收盘最后一根k线且最低价不大于下轨且收盘价不大于下轨和开盘价最小值,卖平开
ISLASTKLINE=1,SP;//收盘最后一根k线,卖平
ISLASTKLINE=1,BP;//收盘最后一根k线,买平
AUTOFILTER;
========================================================================
HH:HHV(H,20);//取20周期内最高价最大值
LLLV(L,10);//取10周期内最低价最小值
TR : =MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));//定义tr
ATR : IFELSE(BARPOS>=20&&MOD(BARPOS,10)=0,(19*MA(TR,26)+TR)/20,MA(TR,20));//赋值atr
H=HHV(H,HN),BK(0.1*MONEY/ATR);//创20周期新高,第一次买入一定头寸多单
H=HHV(H,HN),BK(0.1*MONEY/ATR);//创20周期新高,第二次买入一定头寸多单
H=HHV(H,HN),BK(0.1*MONEY/ATR);//创20周期新高,第三次买入一定头寸多单
H=HHV(H,HN),BK(0.1*MONEY/ATR);//创20周期新高,第四次买入一定头寸多单
C<=BKPRICE-2*ATR,SP(BKVOL);//最新价低于开仓价之下2*ATR,清多仓
L=LLV(L,LN1),SK(0.1*MONEY/ATR);//创10周期新低,第一次卖出一定头寸空单
L=LLV(L,LN1),SK(0.1*MONEY/ATR);//创10周期新低,第一次卖出一定头寸空单
L=LLV(L,LN1),SK(0.1*MONEY/ATR);//创10周期新低,第一次卖出一定头寸空单
L=LLV(L,LN1),SK(0.1*MONEY/ATR); //创10周期新低,第一次卖出一定头寸空单
C>=SKPRICE+2*ATR,BP(SKVOL);//最新价高于开仓价之上2*ATR,清空仓
  =====================================================================

参数RiskRatio为1,ATRLength为20,boLength为20,fsLength为55,teLength为10,DW为300,在参数栏中设置即可。

TR:= MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));//定义tr
ATR:= MA(TR,ATRLength);// 计算20周期TR的均值
N:=REF(ATR,1);// 取前一根k线的TR值
TU:=FLOOR(MONEYTOT*RiskRatio/100)/(N*DW);// 按可用资金1%计算头寸
DonchianHi:= HHV(REF(H,1),boLength);//取前一周期20根k线最高价最大值
DonchianLo:= LLV(REF(L,1),boLength);//取前一周期20根k线最低价最小值
fsDonchianHi:= HHV(REF(H,1),fsLength);//取前一周期55根k线最高价最大值
fsDonchianLo:= LLV(REF(L,1),fsLength);//取前一周期55根k线最低价最小值
ExitLowestPrice:= LLV(REF(L,1),teLength);//取前一周期10根k线最高价最大值
ExitHighestPrice:= HHV(REF(H,1),teLength);//取前一周期10根k线最低价最小值
H>DonchianHi&&BKVOL=0&&NOT(ISLASTBK||ISLASTSK)&&TU>=1,BK(TU);//最高价创20周期新高并且是首次开仓,则买开一定头寸多单
L<DonchianLo&&SKVOL=0&&NOT(ISLASTBK||ISLASTSK)&&TU>=1,SK(TU);//最低价创20周期新低并且是首次开仓,则卖开一定头寸空单
H>fsDonchianHi&&BKVOL=0&&NOT(ISLASTBK||ISLASTSK)&&TU>=1,BK(TU);//最高价创55周期新高并且是首次开仓,则买开一定头寸多单
L<fsDonchianLo&&SKVOL=0&&NOT(ISLASTBK||ISLASTSK)&&TU>=1,SK(TU);//最低价创55周期新低并且是首次开仓,则卖开一定头寸空单
L<ExitLowestPrice&&BKVOL>0,SP(BKVOL);//最低价跌破10周期k线新低并且持有多单,则平掉所有多仓。
L>=ExitLowestPrice&&H>=BKPRICE+N&&BKVOL<3*TU,BK(TU);//最低价大于10周期k线新低且最高价超过开仓价+N个价位且多单持仓小于3倍初始头寸则买开一定头寸多单
L<=BKPRICE-2*N&&BKVOL>0,SP(BKVOL);//最低价小于开仓价格之下2*N价位并且持有多单,则平掉所有多仓
H>ExitHighestPrice&&SKVOL>0,BP(SKVOL);//最高价上穿10周期k线新高并且持有空单,则平掉所有空仓。
H>ExitHighestPrice&&L<=SKPRICE-N&&SKVOL<3*TU,SK(TU);//最高价大于10周期k线新高且最低价跌破开仓价-N个价位且空单持仓小于3倍初始头寸,则卖开一定头寸空单
H>=SKPRICE+2*N&&SKVOL>0,BP(SKVOL);//最高价大于开仓价格之上2*N价位并且持有空单,则平掉所有空仓
MONO_SIGNAL;
===========================================================================
TR:MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));//定义TR
ATR:MA(TR,26);//ATR定义
TC:INTPART((MONEYTOT*0.01/(UNIT*ATR)));//头寸计算
MTC:=4*TC; //最大头寸
CROSSUP(C,HV(H,20))&&ISLASTBK=0&&ISLASTSK=0,BK(TC);//价格突破前20周期高点,买开仓
CROSSDOWN(C,LV(L,20))&&ISLASTBK=0&&ISLASTSK=0,SK(TC);//价格突破前20周期点点,卖开仓
C>=BKPRICE+0.5*ATR&&BKVOL<MTC&&ISLASTBK,BK(TC);//价格上涨0.5倍atr加仓
C<=SKPRICE-0.5*ATR&&SKVOL<MTC&&ISLASTSK,SK(TC);//价格下跌0.5倍atr加仓
C<=(BKPRICE-2*ATR)&&BKVOL>0,SP(BKVOL);//价格下跌2倍atr止损
C>=(SKPRICE+2*ATR)&&SKVOL>0,BP(SKVOL);//价格上涨2倍atr止损
CROSSUP(H,HV(H,10))&&SKVOL>0,BP(SKVOL);//价格突破前10周期高点,空单出场
CROSSDOWN(L,LV(L,10))&&BKVOL>0,SP(BKVOL);//价格突破前10周期低点,多单出场
MONO_SIGNAL;
=======================================================================

//空头止损策略,模型中只对空头趋势做了编写,此模型中按照空头趋势的止损策略添加了多头趋势的编写,大家可以参考。
MA1:MA(C,M1);//定义M1周期均线
MA2:MA(C,M2);//定义M2周期均线
TMP1:=CROSS(MA1,MA2);//两条均线金叉
TMP2:=CROSS(MA2,MA1);//两条均线死叉
L1:IFELSE(BARSSK>0,MIN(SKPRICE,REF(LLV(L,BARSSK),1)),SKPRICE);//如果是卖开仓后的K线那么L1取卖开信号价和卖开后的最低价的最小者卖开当根直接取卖开价
H1:IFELSE(BARSBK>0,MAX(BKPRICE,REF(HHV(H,BARSBK),1)),BKPRICE);//如果是买开仓后K线那么H1取买开信号价和买开后的最高价的最小者买开当根直接取买开价
SKP1:VALUEWHEN(CROSS(SKVOL,0.5),REF(SKPRICE,1)),COLORYELLOW;//当首次卖开仓时,SKP1取一个周期前的卖开信号价,黄色显示
BKP1:VALUEWHEN(CROSS(BKVOL,0.5),REF(BKPRICE,1)),COLORYELLOW;//当首次买开仓时,BKP1取一个周期前的买开信号价,黄色显示
S1:SKP1*(1+N1/1000);
S2:SKP1*(1-N2/1000);
S31*(1+N3/1000);
SS1:BKP1*(1-N1/1000);
SS2:BKP1*(1+N2/1000);
SS3:H1*(1-N3/1000);//以上6句只是加减乘除运算
SS:IFELSE(L1<=S2&&S3>SKP1,SKP1,IFELSE(SKP1>=S3,S3,S1));//如果L1小于等于S2并且S3大于等于SKP1那么就取SKP1如果SKP1大于等于S3那么就取S3,否则取S1
SSS:IFELSE(H1>=SS2&&SS3<BKP1,BKP1,IFELSE(BKP1<=SS3,SS3,SS1));//原理同上,只是用最高点H1做判断的
REF(TMP1,1)&&BKVOL=0,BK(LOT);//一个周期前满足TMP1条件并且当前多头模组持仓为0,那么买开LOT手多单
REF(MA2<MA1,1)&&BKVOL>0&&H>H1,BK(LOT);//一个周期前满足MA2小于MA1并且多头持仓大于0并且H大于H1,买开LOT手多单
REF(TMP2,1)&&SKVOL=0,SK(LOT);//一个周期前满足TMP2条件并且当前空头模组持仓为0,那么卖开LOT手多单
REF(MA2>MA1,1)&&SKVOL>0&&L<L1,SK(LOT);//一个周期前满足MA2大于MA1并且空头持仓大于0并且L小于L1,卖开LOT手空单
BARSSK>0&&H>=SS&&SKVOL>0,BP(SKVOL);//卖开后满足H大于等于SS并且有空头持仓情况下,全平
BARSBK>0&&L<=SSS&&BKVOL>0,SP(BKVOL);//卖开后满足L小于等于SSS并且有多头持仓情况下,全平
========================================================================

MV:EMA(O,14)-EMA(O,26) ;//14周期开盘价的指数平滑均线减去26周期的开盘价指数平滑均线
AMACD:EMA(MV,BARPOS);//全部历史数据的MV的指数平滑均线
MACDD:=MV-AMACD;//求差值
KMACDD:=REFX(MACDD,1)-MACDD;//一个周期后的MACDD减去当前的MACDD
A:=MACDD>=0;
DRAWSL(A,MACDD,KMACDD,1,0,COLORRED);
DRAWSL(NOT(A),MACDD,KMACDD,1,0,COLORGREEN);//这两句是画变色线
AA:0;
MACDD>0&&MV>0,BPK;//MACDD大于0并且MV大于0,买平开
MACDD<0&&MV<0,SPK;//MACDD小于0并且MV小于0,卖平开
AUTOFILTER;
===========================================================================
TR:=MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW));//定义tr
ATR1:=MA(TR,N);//求N周期TR的简单移动平均
ATR2:=MA(TR,M);//求M周期TR的简单移动平均
AATR:ATR1/ATR2,COLORRED;//求ATR1和ATR2的比值,红色显示
0.87,COLORBLUE;//画0.87水平线,绿色显示
//根据MT4编写,N、M取值分别为7和49
===========================================================================

MA1:MA(O,18);//求18周期的开盘价均值
TMP:=(REF(C,1)-REF(C,10))/REF(C,1);//一个周期前的收盘价减去10个周期前收盘价的差值,比上1个周期前收盘价
REF(L,1)>REF(MA1,1)&&H>REF(H,1)&&MA1>REF(MA1,1)&&TMP>0.008,BPK;//1个周期前的最低价大于MA1并且当前最高价大于1个周期前最高价等,买平开
REF(H,1)<REF(MA1,1)&&L<REF(L,1)&&MA1<REF(MA1,1)&&TMP<-0.008,SPK;//1个周期前的最高价小于MA1并且当前最低价小于1个周期前最低价等,卖平开
AUTOFILTER;
===========================================================================


N:=BARSLAST(DATE<>REF(DATE,1))+1;//当天开盘一共走了多少根K线
LL:=REF(LLV(L,N),N);//求昨天最低价
HH:=REF(HHV(H,N),N);//求昨天最高价
CC:=VALUEWHEN(DATE<>REF(DATE,1),REF(C,1));//求昨天收盘价
SV:MAX(CC-LL,HH-CC);//求CC-LL和HH-CC中的较大值
TMP1:H>O+0.7*SV;//最高价大于开盘价加上0.7倍的SV
TMP2<O-0.7*SV;//最低价小于开盘价减去0.7倍的SV
COUNT(TMP1,N)=1&&TMP1,BPK;//当前开盘后首次满足TMP1,买平开,当天只交易一次
COUNT(TMP2,N)=1&&TMP2,SPK;//当前开盘后首次满足TMP2,卖平开,当天只交易一次
AUTOFILTER;

=========================================================================


MYOPI:=MA(OPI,5); //采用持仓量均值作为运动物体的质量
MYV:=(C-REF(C,5))/5; //计算运动物体的速度
MYPOWER:=0.5*MYOPI*MYV*MYV; //计算运动物体的动能
MYSTANDARD:=MYPOWER/MA(REF(MYPOWER,20*5),5); //动能近似标准化处理
MYSHORTPOWER:MA(MYSTANDARD,5);
MYLONGPOWER:MA(MYSTANDARD,20);//求简单移动均值

=========================================================================


MA35:=MA(C,35);//35周期均线
UB:=MA35+2*STD(C,35);
DB:=MA35-2*STD(C,35);//均线上下2倍标准差
C>UB,BK;//最新价大于UB,买开
C<DB,SK;//最新价小于DB,卖开
C<MA35,SP;//最新价小于35周期均线,平多
C>MA35,BP;//最新价大于35周期均线,平空
AUTOFILTER;



声明:为开源代码,仅供交流测试之用,不构成权威,不对任何人的盈亏负责。。。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 支持支持 保留保留

913

主题

1万

积分

3

精华

操盘专家

金钱
10168 美元
权重
78
沙发
发表于 2015-6-22 20:42 | 只看该作者
这是通达信的源码?

483

主题

6378

积分

3

精华

高级操盘手

金钱
6378 美元
权重
72
板凳
 楼主| 发表于 2015-6-22 22:00 | 只看该作者
psword 发表于 2015-6-22 20:42
这是通达信的源码?

不是啊,这个是文华

913

主题

1万

积分

3

精华

操盘专家

金钱
10168 美元
权重
78
地板
发表于 2015-6-24 09:13 | 只看该作者
Loya路亚 发表于 2015-6-22 22:00
不是啊,这个是文华

语法错误啊,
每个小节独立成一个指标,
还是全部打包在一起编译?

3

主题

441

积分

0

精华

见习操盘手

金钱
441 美元
权重
2
5
发表于 2015-6-25 20:34 | 只看该作者
谢谢分享

18

主题

595

积分

0

精华

初级操盘手

金钱
595 美元
权重
2
6
发表于 2015-6-26 00:11 | 只看该作者
好厉害,不过公开了容易被针对啊。
您需要登录后才可以回帖 登录 | 快捷注册(禁q号)

本版积分规则

QQ|黄金吧|黄金论坛|手机版|指标下载|非农|目录|交易危机

版权所有: ©2014-2021 fx3q.com Powered by Discuz! X3
浙ICP备: ICP14039028

浙公网安备 33011802001420号

风险提示:杠杆风险高,交易要谨慎 声明:坛友发言和回复均为个人观点,不代表论坛立场。
若有侵权请联系fx3q@qq.com删除

快速回复 返回顶部 返回列表