金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 3257|回复: 4

帮忙写一个简单回测

[复制链接]

1

主题

3

帖子

3

积分

Rank: 1

等级: 新手上路

注册:
2022-11-2
曾用名:
发表于 2022-11-18 11:48 | 显示全部楼层 |阅读模式
做多:
以当前K的最低价为准,当价格涨N点时开多1手,再涨N点时开多1手,一直开满5手;  

初始止损为-N点;

价格涨到2N点后, 离最高点-1.5N点止盈,全部平仓。平仓后并反手开空1手,规则同开多类似。


做空:
同做多相反。









回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-11-18 14:05 | 显示全部楼层
[PEL] 复制代码
variable:up:=0,down:=0,l1:=0,h1:=0;//up是开多基准价
input:n(5,1,100,1);


//首次开仓以历史上第一根k为基准
if holding=0 and barpos=1 then 
begin 
up:=l+n*mindiff;
l1:=l;        
down:=h-n*mindiff;
h1:=h;
end


//常规止损以收盘价和持仓均价差值为基准判断
if avgenterprice-c>=n*mindiff and holding>0 then 
begin 
多止损:sell(1,holding,marketr);
//平后立刻重置全局变量
up:=l+n*mindiff;
l1:=l;        
down:=h-n*mindiff;
h1:=h;
end 
        
if c-avgenterprice>=n*mindiff and holding<0 then 
begin 
空止损:sellshort(1,holding,marketr);
//平后立刻重置全局变量
up:=l+n*mindiff;
l1:=l;        
down:=h-n*mindiff;
h1:=h;
end 

if up>l1+2*n*mindiff and c<hhv(c,enterbars+1)-1.5*n*mindiff and holding>0  then 
begin 
sell(1,holding,marketr);        
buyshort(holding=0,1,marketr);
//开仓后立刻重置全局变量
down:=h-n*mindiff;
h1:=h;
end

if down<h1-2*n*mindiff and c>llv(c,enterbars+1)+1.5*n*mindiff and holding<0 then 
begin 
sellshort(1,holding,marketr);        
buy(holding=0,1,marketr);
up:=l+n*mindiff;
l1:=l;
end

//突破是以收盘价为基准
if cross(c,up) and holding<5 and holding>=0 then 
begin 
up:=up+n*mindiff;        
buy(1,1,marketr);
end

//突破是以收盘价为基准
if cross(down,c) and holding>-5 and holding<=0 then 
begin 
down:=down-n*mindiff;        
buyshort(1,1,marketr);
end





//这2个就是多空加仓的基准线
upx:up;
downx:down;


1.所有判断均是以收盘价为基准,比如最高价超过基准价格2*N,但是收盘价没突破,不开仓。
这个你可以自行修改下。但是考虑到图表回测都是采用K线结束时候的价格,我这里就用最终的收盘价作为突破,止损,移动止盈的判断依据了。
2.你逻辑里是没有初始开仓条件的。所以这里就只能用第一个K的H和L来计算最初的2个基准线了。
所有开仓,平仓位置 都会重新计算基准线,下次开多或者开空 都是以最近一次信号位置的基准线为准

建议有一定编写基础后理解了思路再尝试进一步微调修改你的代码。上面代码只是提供思路范例。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

1

主题

3

帖子

3

积分

Rank: 1

等级: 新手上路

注册:
2022-11-2
曾用名:
 楼主| 发表于 2022-11-18 15:43 | 显示全部楼层
技术009 发表于 2022-11-18 14:05
[mw_shl_code=pel,true]
variable:up:=0,down:=0,l1:=0,h1:=0;//up是开多基准价
input:n(5,1,100,1);

谢谢,我先看看。

有个问题:如果日K线振幅很大,这样可能就不能准确测试,除了把周期缩小是不是就没有其它办法?
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-11-18 15:45 | 显示全部楼层
建议还是小周期比较好。因为源代码里本身就是用c作为判断突破up或者down基准的。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

1

主题

3

帖子

3

积分

Rank: 1

等级: 新手上路

注册:
2022-11-2
曾用名:
 楼主| 发表于 2022-11-18 16:52 | 显示全部楼层
技术009 发表于 2022-11-18 15:45
建议还是小周期比较好。因为源代码里本身就是用c作为判断突破up或者down基准的。

好的,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-6-9 00:40 , Processed in 0.227141 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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