金字塔决策交易系统

用户名  找回密码
 

微信登录

微信扫一扫,快速登录

帖子
查看: 3593|回复: 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] 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
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-7-16 19:55 , Processed in 0.201646 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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