设为首页收藏本站

 找回密码
 注册
查看: 1884|回复: 7
打印 上一主题 下一主题

求助一个关于海龟策略问题,请大神帮忙 [复制链接]

Rank: 2

精华
0
UID
251844
积分
115
帖子
39
主题
19
阅读权限
30
注册时间
2017-5-31
最后登录
2018-2-7
跳转到指定楼层
1#
发表于 2017-8-29 16:02:01 |只看该作者 |倒序浏览
想表达最高价>=50日高点就开多
最低价<=50日最低点就开空
平多:最低价<=20日最低点
平空:最高价>=20日最高点
这是我从MC语言翻译过来的,回测记录不对,谁能帮我看看是哪写错了,拜托
Params
        Numeric Lots(1);
Vars
    NumericSeries MA1;
        NumericSeries MA2;
        NumericSeries MA3;
        NumericSeries MA4;
Begin
    //集合竞价和小节休息过滤
    If (!CallAuctionFilter())Return;
        MA1=Highest(High,50);
        MA2=Lowest(Low,50);
        MA3=Highest(High,20);
        MA4=Lowest(Low,20);
        PlotNumeric("MA1",MA1);
        PlotNumeric("MA2",MA2);
        PlotNumeric("MA3",MA3);
        PlotNumeric("MA4",MA4);
        //进场条件
        if (MarketPosition!=1 And High[1]>=MA1[2])//多
        {
        Buy(Lots,Max(open,MA1[1]));
        }
        if (MarketPosition!=-1 And Low[1]<=MA2[2])//空
        {
        SellShort(Lots,Min(open,MA2[1]));
    }
        //出场条件
        if (marketposition==1 And Low[1]<=MA4[2])//平多
        {
        BuyToCover(0,Min(open,MA4[1]));
    }
        if (marketposition==-1 And High[1]>=MA3[2])//平空
        {
        Sell(0,Max(open,MA3[1]));
        }
End

Rank: 1

精华
0
UID
253618
积分
47
帖子
23
主题
3
阅读权限
10
注册时间
2017-7-8
最后登录
2017-9-23
2#
发表于 2017-8-30 08:22:20 |只看该作者
不清楚你所讲的不对,是指哪个地方不对。
只是看到你的回溯数据看是否可以修改:
high/low是拿最新k线的high,还是上一根k线的high?
均线,是从前一个周期的bar开始算,还是从前两根bar开始算?

使用道具 举报

Rank: 2

精华
0
UID
251844
积分
115
帖子
39
主题
19
阅读权限
30
注册时间
2017-5-31
最后登录
2018-2-7
3#
发表于 2017-8-30 10:14:44 |只看该作者
spring_abc 发表于 2017-8-30 08:22
不清楚你所讲的不对,是指哪个地方不对。
只是看到你的回溯数据看是否可以修改:
high/low是拿最新k线的hig ...

拿开多举例:如果最高价>=50日最高点,第二天就开多,那么所提到的最高价就是前一天的最高价吧,而最高价又不能和当天的MA1比较,应该和前五十跟Bar的最高点比较较,所以是 High[1]>=MA1[2],再open,对吗?我是这样理解,这样写的。
if (MarketPosition!=1 And High[1]>=MA1[2])//多
        {
        Buy(Lots,Max(open,MA1[1]));
        }

使用道具 举报

Rank: 1

精华
0
UID
253618
积分
47
帖子
23
主题
3
阅读权限
10
注册时间
2017-7-8
最后登录
2017-9-23
4#
发表于 2017-8-30 12:34:22 |只看该作者
marialeng 发表于 2017-8-30 10:14
拿开多举例:如果最高价>=50日最高点,第二天就开多,那么所提到的最高价就是前一天的最高价吧,而最高价 ...

1. 最高价>=50日最高点,是否可这样去解?
        上一周期的高点high,就是近50个周期的最高点--->可以做成high[1] == MA1[1]
2. 对于多头,当出现最高价时,去下多单会有多大的风险,这个要看情况。空头反之亦然.
    如果是突破行情或行情中继,应该可以。在底部有点像就是蛟龙出海(收盘价突然拉高并配合量,一下子高出前面几根均线)
    但如果到行情结束,则应该需要注意。
   总的来讲,大部分情况下,高于近期最高点后,后面可能会回抽。

使用道具 举报

Rank: 2

精华
0
UID
251844
积分
115
帖子
39
主题
19
阅读权限
30
注册时间
2017-5-31
最后登录
2018-2-7
5#
发表于 2017-8-30 13:39:42 |只看该作者
spring_abc 发表于 2017-8-30 12:34
1. 最高价>=50日最高点,是否可这样去解?
        上一周期的高点high,就是近50个周期的最高点---> ...

就算改成这样:high[1] == MA1[1],结果还是一样。
其实不想问策略本身的问题,因为我是负责翻译的,只想问我代码哪里写的不对。

使用道具 举报

Rank: 2

精华
0
UID
251844
积分
115
帖子
39
主题
19
阅读权限
30
注册时间
2017-5-31
最后登录
2018-2-7
6#
发表于 2017-8-30 13:40:54 |只看该作者
测试结果是这样的,肯定不对呀,一单出去了,另一单就进来了
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

Rank: 1

精华
0
UID
253618
积分
47
帖子
23
主题
3
阅读权限
10
注册时间
2017-7-8
最后登录
2017-9-23
7#
发表于 2017-8-30 22:38:33 |只看该作者
if (marketposition==1 And Low[1]<=MA4[2])//平多
        {
        BuyToCover(0,Min(open,MA4[1]));
    }
        if (marketposition==-1 And High[1]>=MA3[2])//平空
        {
        Sell(0,Max(open,MA3[1]));
        }

你这里应该是写反了。
平多:最低价<=20日最低点
平空:最高价>=20日最高点.
修改为下面就ok了。
if (marketposition==1 And Low[1]<=MA4[2])//平多
{
               Sell(0,Max(open,MA3[1]));
    }
        if (marketposition==-1 And High[1]>=MA3[2])//平空
        {
               BuyToCover(0,Min(open,MA4[1]));
        }

使用道具 举报

Rank: 1

精华
0
UID
253618
积分
47
帖子
23
主题
3
阅读权限
10
注册时间
2017-7-8
最后登录
2017-9-23
8#
发表于 2017-8-30 22:42:34 |只看该作者
你这个海龟如果用于实盘交易的话,还需要做大量的完善,目前回测效果不好。
如果是用于明显的趋势行情应该还可以。

使用道具 举报

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

bottom

静态版|手机版|联系我们|交易开拓者 ( 粤ICP备07044698   

GMT+8, 2024-5-23 01:14

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部