设为首页收藏本站

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

看我写的“交易指令”,为什么测试结果无内容: [复制链接]

Rank: 5Rank: 5

精华
0
UID
314
积分
1160
帖子
247
主题
105
阅读权限
60
注册时间
2007-9-9
最后登录
2008-3-3
跳转到指定楼层
1#
发表于 2007-12-8 22:23:06 |只看该作者 |倒序浏览
Rsi用户函数:
//------------------------------------------------------------------------
// 简称: M_Fun_Rsi
// 名称: Rsi函数
// 类别: 用户函数
// 类型: 用户函数
// 输出: 数值型
//------------------------------------------------------------------------
Params
        Numeric Length(14) ;
        Numeric OverSold(30) ;
        Numeric OverBought(70) ;
Vars
        NumericSeries NetChgAvg( 0 );
        NumericSeries TotChgAvg( 0 );
        Numeric Change( 0 );
        Numeric SF( 0 );
        Numeric ChgRatio( 0 ) ;
        Numeric RSIValue;
Begin
        SF = 1/Length;
        If(CurrentBar < Length)
        {
                RSIValue = InvalidNumeric;
        }Else
        {
                If(CurrentBar == Length)
                {
                        NetChgAvg = ( Close - Close[Length] ) / Length ;
                        TotChgAvg = AverageFC( Abs( Close - Close[1] ), Length ) ;
                }
               
                If(CurrentBar>length)
                {
                        Change = Close - Close[1] ;
                        NetChgAvg = NetChgAvg[1] + SF * ( Change - NetChgAvg[1] ) ;
                        TotChgAvg = TotChgAvg[1] + SF * ( Abs( Change ) - TotChgAvg[1] ) ;
                }
               
                If( TotChgAvg <> 0 )
                {
                        ChgRatio = NetChgAvg / TotChgAvg ;
                }else
                {
                        ChgRatio = 0 ;
                }
               
                RSIValue = 50 * ( ChgRatio + 1 ) ;
        }
       
        Return RSIValue;
        //PlotNumeric("超买",OverBought);
        //PlotNumeric("超卖",OverSold);
End
//------------------------------------------------------------------------
// 编译版本        GS2004.06.12
// 用户版本        2007/12/08 22:13
// 版权所有        wg3k99
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------


//------------------------------------------------------------------------
// 简称: M_ZL_RSI
// 名称:
// 类别: 交易指令
// 类型: 其他
// 输出:
//------------------------------------------------------------------------

Params
Vars
Numeric RsiValue(0);
Numeric Dqcc(0);
Begin
SetStopLoss(0,6000,True);
RsiValue=M_Fun_Rsi(14,30,70);
if(RsiValue<20)//如果RSI指标的值小于20
{
IF(A_TotalPosition()<0) buy(10,0);//如果当前持有空单,则平掉所有空单,并且开10手多单
Else IF(A_TotalPosition()>=0)
{
  Dqcc=10-A_TotalPosition();
  buy(Dqcc,0);
}
}
End

//------------------------------------------------------------------------
// 编译版本        GS2004.06.12
// 用户版本        2007/11/29 22:07
// 版权所有        wg3k99
// 更改声明        TradeBlazer Software保留对TradeBlazer平台
//                        每一版本的TrabeBlazer公式修改和重写的权利
//------------------------------------------------------------------------
欢迎加入交易开拓者QQ群:38529330,让我们一起交流,一起提高,一起赚钱吧。。。

Rank: 10Rank: 10Rank: 10

精华
11
UID
1
积分
25127
帖子
6291
主题
149
阅读权限
255
注册时间
2007-7-20
最后登录
2024-4-22
2#
发表于 2007-12-9 10:05:43 |只看该作者
A_XXXX函数用错了,这些函数值只能在BarStatus==2时使用,即图上最后一个K线上才能用,其他K线上无效。
您的交易指令代码可以修改为:
  1. //------------------------------------------------------------------------
  2. // 简称: M_ZL_RSI
  3. // 名称:
  4. // 类别: 交易指令
  5. // 类型: 其他
  6. // 输出:
  7. //------------------------------------------------------------------------

  8. Vars
  9.         Numeric RsiValue(0);
  10.     Numeric Dqcc(0);
  11. Begin
  12.     SetStopLoss(0,6000,True);
  13.         
  14.     RsiValue=M_Fun_Rsi(14,30,70);
  15.     if(RsiValue<20)//如果RSI指标的值小于20
  16.     {
  17.                 If(Barstatus==2)
  18.                 {
  19.                         IF(A_SellPosition()<0)
  20.                         {
  21.                                 A_SendOrder(Enum_Buy,Enum_Exit,A_SellPosition,Close);
  22.                    }
  23.                    
  24.                        If(A_BuyPosition < 10)      
  25.                    {
  26.                     Dqcc=10-A_BuyPosition();
  27.                           buy(Dqcc,Close);
  28.                 }
  29.         }else
  30.         {
  31.                 Buy(10,Close);
  32.         }
  33.     }   
  34. End

  35. //------------------------------------------------------------------------
  36. // 编译版本        GS2004.06.12
  37. // 用户版本        2007/11/29 22:07
  38. // 版权所有        wg3k99
  39. // 更改声明        TradeBlazer Software保留对TradeBlazer平台
  40. //                        每一版本的TrabeBlazer公式修改和重写的权利
  41. //------------------------------------------------------------------------
复制代码
交易开拓者 - 期货程序化与量化系统自动交易领航者

网站已支持在线开通模拟账户功能

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
314
积分
1160
帖子
247
主题
105
阅读权限
60
注册时间
2007-9-9
最后登录
2008-3-3
3#
发表于 2007-12-9 12:51:26 |只看该作者
为什么用:A_SendOrder(Enum_Buy,Enum_Exit,A_SellPosition,Close);
而不用:buy(10,0);
能说说两者的区别吗?
欢迎加入交易开拓者QQ群:38529330,让我们一起交流,一起提高,一起赚钱吧。。。

使用道具 举报

Rank: 10Rank: 10Rank: 10

精华
11
UID
1
积分
25127
帖子
6291
主题
149
阅读权限
255
注册时间
2007-7-20
最后登录
2024-4-22
4#
发表于 2007-12-9 13:57:33 |只看该作者
因为用Buy会判断是否有仓位,您在测试的状态下根本没有仓位,所以是不能平仓的。用A_SendOrder发单才能平仓
交易开拓者 - 期货程序化与量化系统自动交易领航者

网站已支持在线开通模拟账户功能

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
314
积分
1160
帖子
247
主题
105
阅读权限
60
注册时间
2007-9-9
最后登录
2008-3-3
5#
发表于 2007-12-9 14:51:16 |只看该作者
恩,通过解释,我对TB的处理机制和流程有了更深刻的理解
欢迎加入交易开拓者QQ群:38529330,让我们一起交流,一起提高,一起赚钱吧。。。

使用道具 举报

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

bottom

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

GMT+8, 2024-5-2 10:32

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部