以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  公式模型编写问题提交  (http://weistock.com/bbs/list.asp?boardid=4)
----  模拟回测  (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=88586)

--  作者:黄金精算师
--  发布时间:2015/12/18 8:43:07
--  模拟回测
版主帮做一个图表下的模拟回测
如:做一个向历史回测2000根K柱,开平条件为平均线 MA20与MA60,结果放在模拟结果里;

开始
ma1:ma(c,20);
ma2:ma(c,60);
KD:=ma1>ma2;         //开多条件
PD:= ma1<ma2;         //平多条件
KK:= ma1<ma2;         //开空条件
PK:= ma1>ma2;         //平空条件
模拟资金:=  1000000;      //设模拟资金100万元
模拟做空开平仓次数:=0 ;         //记录开平仓次数用
模拟做多开平仓次数:=0 ;         //记录开平仓次数用
向前回测数量;=2000;             //向前回测2000根K柱
手续费:=1;                           //买进卖出各计一个点的手续费
//-----------------------------------------------------------------------
//回测主程



//-----------------------------------------------------------------------
//到当时行情时,强制平仓离开时得出下面模拟结果

模拟做空开平仓次数:=? ;         //记录开平仓次数
模拟做多开平仓次数:=? ;         //记录开平仓次数
模拟资金:=  ?;                      //模拟资金(减少手续费的资金)








--  作者:jinzhe
--  发布时间:2015/12/18 9:02:24
--  

是希望我写回测主程序吗?


--  作者:黄金精算师
--  发布时间:2015/12/18 9:05:56
--  
是的,写回测主程序
[此贴子已经被作者于2015/12/18 9:06:27编辑过]

--  作者:jinzhe
--  发布时间:2015/12/18 9:27:48
--  

开平条件为平均线 MA20与MA60

请就这一句话扩展为正常的交易车略


--  作者:黄金精算师
--  发布时间:2015/12/18 9:38:12
--  
开平仓的条件按这样
KD:=ma1>ma2;         //开多条件
PD:= ma1<ma2;         //平多条件
KK:= ma1<ma2;         //开空条件
PK:= ma1>ma2;         //平空条件

--  作者:jinzhe
--  发布时间:2015/12/18 9:54:20
--  

ma1:ma(c,20);
ma2:ma(c,60);
KD:=ma1>ma2;         //开多条件
PD:= ma1<ma2;         //平多条件
KK:= ma1<ma2;         //开空条件
PK:= ma1>ma2;         //平空条件
variable:模拟资金=1000000;      //设模拟资金100万元
variable:模拟做空开平仓次数=0 ;         //记录开平仓次数用
variable:模拟做多开平仓次数=0 ;         //记录开平仓次数用
向前回测数量:=2000;             //向前回测2000根K柱
           
手续费:=1;                           //买进卖出各计一个点的手续费
//-----------------------------------------------------------------------
//回测主程
if barpos=datacount-向前回测数量 then begin
 模拟资金=1000000;     
 模拟做空开平仓次数=0 ;       
 模拟做多开平仓次数=0 ; 
end
      
if kd and holding=0 then begin
 buy(1,1,market);
 模拟做多开平仓次数:=模拟做多开平仓次数+1;
 模拟资金:=模拟资金-手续费*multiplier;
end

if kk and holding=0 then begin
 buyshort(1,1,market);
 模拟做空开平仓次数:=模拟做空开平仓次数+1;
 模拟资金:=模拟资金-手续费*multiplier;
end

if pd and holding>0 then begin
 sell(1,1,market);
 模拟做多开平仓次数:=模拟做多开平仓次数+1;
 模拟资金:=模拟资金-手续费*multiplier;
end

if pk and holding<0 then begin
 sellshort(1,1,market);
 模拟做空开平仓次数:=模拟做空开平仓次数+1;
 模拟资金:=模拟资金-手续费*multiplier;
end

//-----------------------------------------------------------------------
//到当时行情时,强制平仓离开时得出下面模拟结果


做空开平仓次数:模拟做空开平仓次数 ;         //记录开平仓次数
做多开平仓次数:模拟做多开平仓次数 ;         //记录开平仓次数
剩余资金: 模拟资金;                      //模拟资金(减少手续费的资金)


--  作者:黄金精算师
--  发布时间:2015/12/18 13:49:59
--  
这个用了原程序的开平仓指令,我要的是完全独立的摸拟,不用原开平仓

这个独立用一个写法,让他与图表完全分开,因为我后面,还有一个图表的程序。
buy(1,1,market);


--  作者:jinzhe
--  发布时间:2015/12/18 13:56:07
--  
那做不到
--  作者:黄金精算师
--  发布时间:2015/12/18 17:16:16
--  
几个问题不太明再请教一下

1、当图表K柱增加时测试量会不停的增加,这个程序并没有限制到向前测试的K柱数量


2、这一段做了什么用,修改参数好像完全无影响的,这是为什么呀
//回测主程
if barpos=datacount-向前回测数量 then begin
 模拟资金=1000000;      
 模拟做空开平仓次数=0 ;        
 模拟做多开平仓次数=0 ;  
end
[此贴子已经被作者于2015/12/18 17:17:15编辑过]

--  作者:jinzhe
--  发布时间:2015/12/18 17:20:43
--  

从左往右数第2000根k线开始初始变量,这样就符合你要往前测2000根k线的要求

有没有用你删掉,然后k线图上显示2000多根k线就明白了,会把2000根k线以外的数据算进去