设为首页收藏本站

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

(原创)原版海龟交易系统 [复制链接]

Rank: 3Rank: 3

精华
0
UID
116726
积分
166
帖子
57
主题
8
阅读权限
40
注册时间
2013-4-2
最后登录
2014-7-16
跳转到指定楼层
1#
发表于 2013-6-3 17:10:57 |只看该作者 |倒序浏览
本帖最后由 米小兔 于 2013-6-3 17:15 编辑


tb自带的海龟交易系统有些问题,还比较严重,和海龟交易系统原版意思差得有点远.试着在tb自带的源码中修改,改来改去未达到效果,索性重写了一个.
在仔细阅读海龟交易系统的中文说明的时候,发现有些问题没有说清楚,例如首次开仓和后面三次加仓的仓位分别是多少.针对这一点,我理解为每次加仓都按照当时最新账户权益计算出标准头寸,也就意味着首次开仓和后面三次加仓的仓位都可能不一样,规律是后面开仓的手数可能会大于前面的,因为满足加仓的时候肯定是有盈利的.
附件的压缩包有两个版本的系统文件,V103在前一个版本基础上增加了手工判定多空趋势的参数,这也是应广大客户需求所加入进去,这样就可以加入人为的趋势判断进去了.Numeric Direction(0);     // 多空信号过滤条件,值为0不过滤,值为1只做多,值为1只做空;
如果有朋友需要源码,可以联系我.
版本:ITF_TurtleRules_V102
        关键变量的计算
        1) N值的计算
        每天开盘第一根k线计算前LengthAtr长度的平均真实波幅;
        2) 价值波动 = N*每点的价值(ContractUnit()*BigPointValue())
        3) 标准头寸计算
        根据每天开盘时计算的N和价值波动率计算最新标准头寸.
        标准单位头寸(TurtleUnits) = (k线开盘价计算的动态权益*风险比例)/价值波动率;
        首次入市条件
        1) LengthFast(20)长度的唐奇安通道突破;
        2) LengthSlow(55)长度的唐奇安通道突破;
        备注:前一次平仓是因为止损,随后的开仓需满足条件一入市.如果前一次平仓是一般离市,则随后的开仓需满足条件二入市;
        加仓
        1) 与最近一次开仓价格间隔1/2倍N增加仓位;
        止损
        1) 最近一次开仓价格反向2N;
        离市
        1) LengthExit(10)长度的唐奇安通道被方向突破;
        2) LengthAtr(20)长度的唐奇安通道被方向突破;
        参数说明
    Numeric RiskRatio(1);               // % Risk Per N ( 0 - 100)
    Numeric LengthAtr(20);              // 平均波动周期 ATR Length
    Numeric LengthFast(20);             // 短周期 BreakOut Length
    Numeric LengthSlow(55);            // 长周期 FailSafe Length
    Numeric LengthExit(10);             // 离市周期 Trailing Exit Length
Bool LastProfitableTradeFilter(True);   // 使用入市过滤条件

        适用环境
        软体:TB V4.3.6
        K线图表:15分\30分
        品种:所有
        测试
        品种选择:RU\TA\RB\J
        本金:200万,每个品种按照100万初始资金计算仓位;
        时间:2009年1月1日-2013年6月3日
        净值曲线图:

        最大回撤比例:23.66%        回撤值:47.36万        发生时间:2011年9月22日
        最大回撤值:47.36万        回撤比例:23.66%        发生时间:2011年9月22日
        累计净利润:597万
        净值:3.99
版本:ITF_TurtleRules_V103
        改进
        1) 增加多空趋势判别参数Direction, 值为0不过滤,值为1只做多,值为1只做空;

        参数
        Numeric Direction(0);                   // 多空信号过滤条件,值为0不过滤,值为1只做多,值为1只做空;
        Numeric RiskRatio(1);                   // % Risk Per N ( 0 - 100)
        Numeric LengthAtr(20);                  // 平均波动周期 ATR Length
        Numeric LengthFast(20);                 // 短周期 BreakOut Length
        Numeric LengthSlow(55);                 // 长周期 FailSafe Length
        Numeric LengthExit(10);                 // 离市周期 Trailing Exit Length
        Bool LastProfitableTradeFilter(True);   // 使用入市过滤条件

        适用环境
        软体:TB V4.3.6
        K线图表:15分钟图
        品种:所有

        联系我们
        国贸期货上海营业部量化组
        电话:021-51969281
        邮箱:yuwy@itf.com.cn
        地址:上海张杨路620号东楼902室
        客服热线:4008888958
        网址:www.itf.com.cn

附件: 你需要登录才可以下载或查看附件。没有帐号?注册

Rank: 5Rank: 5

精华
0
UID
73474
积分
1249
帖子
695
主题
30
阅读权限
60
注册时间
2011-10-22
最后登录
2015-11-6
2#
发表于 2013-6-4 17:18:30 |只看该作者
我已经领取模型源码,绩效稳健,顶~~~~~~~~~~~~~~~

使用道具 举报

Rank: 1

精华
0
UID
117571
积分
20
帖子
7
主题
0
阅读权限
10
注册时间
2013-4-13
最后登录
2013-9-8
3#
发表于 2013-6-15 15:40:22 |只看该作者
已经领取模型源码,绩效稳健,顶

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
116726
积分
166
帖子
57
主题
8
阅读权限
40
注册时间
2013-4-2
最后登录
2014-7-16
4#
发表于 2013-6-18 14:31:19 |只看该作者
有不少要源码的朋友,我就不一一发了,把源码贴上供大家交流指正.
  1. //------------------------------------------------------------------------
  2. // 简称: ITF_TurtleRules_V102
  3. // 名称: TurtleRules_V102
  4. // 类别: 公式应用
  5. // 类型: 用户应用
  6. // 输出:
  7. //------------------------------------------------------------------------

  8. Params
  9.     Numeric RiskRatio(1);                   // % Risk Per N ( 0 - 100)
  10.     Numeric LengthAtr(20);                  // 平均波动周期 ATR Length
  11.     Numeric LengthFast(20);                 // 短周期 BreakOut Length
  12.     Numeric LengthSlow(55);                 // 长周期 FailSafe Length
  13.     Numeric LengthExit(10);                 // 离市周期 Trailing Exit Length
  14.     Bool LastProfitableTradeFilter(True);   // 使用入市过滤条件
  15. Vars
  16.         Numeric MinPoint;                       // 最小变动单位
  17.     NumericSeries N;                        // N 值
  18.     NumericSeries TotalEquity;              // 按最新收盘价计算出的总资产
  19.     NumericSeries TurtleUnits;              // 交易单位
  20.     NumericSeries DonchianFastUpper;        // 短周期唐奇安通道上轨,长度LengthFast;
  21.     NumericSeries DonchianFastLower;        // 短周期唐奇安通道下轨,长度LengthFast;
  22.     NumericSeries DonchianSlowUpper;        // 长周期唐奇安通道上轨,长度LengthSlow;
  23.     NumericSeries DonchianSlowLower;        // 长周期唐奇安通道下轨,长度LengthSlow;
  24.     NumericSeries DonchianExitUpper;        // 离市时判断需要的N周期最高价,长度LengthExit;
  25.     NumericSeries DonchianExitLower;        // 离市时判断需要的N周期最低价,长度LengthExit;
  26.     NumericSeries MyPrice;             // 开仓价格
  27.     NumericSeries MyExitPrice;              // 平仓价格
  28.         BoolSeries PreBreakoutFailure(false);        // 前一次突破是否失败
  29.         Bool SendOrderThisBar(False);                  // 当前Bar有过交易
  30.         NumericSeries AtrAve;                   // 记录日线级别长度为lengthAtr的平均真实波幅;
  31.         NumericSeries DayHigh;                  // 一天中的最高价;
  32.         NumericSeries DayLow;                   // 一天中的最低价;
  33.         Numeric i;                              // 循环计算所需指针;
  34.         NumericSeries Atr(0);                   // 当天的ATR
  35.         Numeric AtrIndex(0);                    // 存储真实波幅的全局变量的环的索引值;
  36.         NumericSeries DayCount(0);              // 交易日数;
  37.         NumericSeries CloseD_1;                 // 上一个交易日收盘价,过度CloseD(1);
  38.         NumericSeries MyBarsSinceToday;         // 过度BarsSinceToday;
  39. Begin
  40.         MinPoint = MinMove*PriceScale;
  41.         MyBarsSinceToday = BarsSinceToday;
  42.         CloseD_1 = CloseD(1);
  43.        
  44.         if(BarsSinceToday==0)
  45.         {
  46.                 DayCount = DayCount + 1;  //记录交易日数;
  47.                 DayHigh = High;
  48.                 DayLow = Low;
  49.                
  50.                 //从第二个交易日开始记录;
  51.                 if(DayCount>=2)  
  52.                 {                       
  53.                         // 前一日真实波幅;
  54.                         Atr = max(max(Abs(DayHigh[1]-CloseD_1),Abs(DayLow[1]-CloseD_1)),DayHigh[1]-DayLow[1]);  
  55.                        
  56.                         // 存储前一天的Atr到全局变量环0-19;
  57.                         AtrIndex =  (DayCount-2)%LengthAtr;
  58.                         SetGlobalVar(AtrIndex,Atr[1]);
  59.                 }
  60.                
  61.                 // 从第LengthAtr+1个交易日开始计算;
  62.                 if(DayCount>=LengthAtr+1)  
  63.                 {
  64.                         // 计算日线级别长度为LengthAtr的平均真实波幅;
  65.                         AtrAve = 0 ;
  66.                         for i=0 to LengthAtr-1
  67.                         {
  68.                                 AtrAve = AtrAve +  getGlobalVar(i);
  69.                         }
  70.                         AtrAve = AtrAve/LengthAtr;
  71.                         N = IntPart(AtrAve);
  72.                        
  73.                         DonchianFastUpper = Highest(DayHigh[1],(LengthAtr-0.1)*(MyBarsSinceToday[1]+1));
  74.                         DonchianFastLower = Lowest(DayLow[1],(LengthAtr-0.1)*(MyBarsSinceToday[1]+1));
  75.                        
  76.                         DonchianSlowUpper = Highest(DayHigh[1],(LengthSlow-0.1)*(MyBarsSinceToday[1]+1));
  77.                         DonchianSlowLower = Lowest(DayLow[1],(LengthSlow-0.1)*(MyBarsSinceToday[1]+1));
  78.                        
  79.                         DonchianExitUpper = Highest(DayHigh[1],(LengthExit-0.1)*(MyBarsSinceToday[1]));
  80.                         DonchianExitLower = Lowest(DayLow[1],(LengthExit-0.1)*(MyBarsSinceToday[1]));
  81.                 }
  82.                
  83.                 //账户最新资产 = 按当前Bar开盘价计算的可用资金 + 持仓保证金 ;
  84.                 TotalEquity = Portfolio_CurrentCapital() + Portfolio_UsedMargin();
  85.                 //标准单位头寸 = (本金*风险比例)/价值波动率
  86.                 TurtleUnits = (TotalEquity*RiskRatio/100) /(N * ContractUnit()*BigPointValue());
  87.                 TurtleUnits = IntPart(TurtleUnits); // 对小数取整
  88.                 // PlotString("Units","Units="+Text(TurtleUnits),High+(High-Low),white);
  89.                 // PlotString("N","N="+Text(N),Low-(High-Low)/2,white);
  90.         }
  91.         Else
  92.         {
  93.                 DayHigh = Max(DayHigh,High);
  94.                 DayLow = Min(DayLow,Low);
  95.         }

  96.         If(MarketPosition==0 and TurtleUnits>=1)
  97.         {
  98.                 // 首次入市1:带过滤条件的,如果过滤条件为真,则需要前一笔交易是否是突破失败;
  99.                 if(LastProfitableTradeFilter==false Or PreBreakoutFailure )
  100.                 {
  101.                         //开多1:突破短周期唐奇安通道上轨;
  102.                         If(High>DonchianFastUpper)
  103.                         {
  104.                                 MyPrice = Max(Open,DonchianFastUpper)+MinPoint;
  105.                                 Buy(TurtleUnits,MyPrice);
  106.                                 MyExitPrice = MyPrice - 2*N;
  107.                                 SendOrderThisBar = true;
  108.                         }
  109.                        
  110.                         //开空1:突破短周期唐奇安通道下轨;
  111.                         if(Low<DonchianFastLower)
  112.                         {
  113.                                 MyPrice = Min(Open,DonchianFastLower)-MinPoint;
  114.                                 SellShort(TurtleUnits,MyPrice);
  115.                                 MyExitPrice = MyPrice + 2*N;
  116.                                 SendOrderThisBar = true;
  117.                         }
  118.                 }
  119.                
  120.                 // 首次入市2:过滤条件之外的,长周期唐奇安通道突破开仓;
  121.                 //开多2:突破长周期唐奇安通道上轨;
  122.                 else
  123.                 {
  124.                         if(CrossOver(High,DonchianSlowUpper))
  125.                         {
  126.                                 MyPrice = Max(Open,DonchianSlowUpper)+MinPoint;
  127.                                 Buy(TurtleUnits,MyPrice);
  128.                                 MyExitPrice = MyPrice - 2*N;
  129.                                 SendOrderThisBar = true;
  130.                         }
  131.                         //开空2:突破长周期唐奇安通道下轨;
  132.                         if(CrossUnder(Low,DonchianSlowLower))
  133.                         {
  134.                                 MyPrice = Min(Open,DonchianSlowLower)+MinPoint;
  135.                                 SellShort(TurtleUnits,MyPrice);
  136.                                 MyExitPrice = MyPrice + 2*N;
  137.                                 SendOrderThisBar = true;
  138.                         }
  139.                 }
  140.         }
  141.        
  142.         // 当持有多单;
  143.         if(MarketPosition==1)
  144.         {
  145.                 //离市:价格反向穿越离市的唐奇安通道;
  146.                 if(CrossUnder(Low,DonchianExitLower))
  147.                 {
  148.                         MyPrice = Min(Open,DonchianExitLower)-MinPoint;
  149.                         Sell(0,MyPrice);
  150.                         PreBreakoutFailure = False;  //假突破值为假;
  151.                         // PlotBool("突破",PreBreakoutFailure,High,white);
  152.                 }
  153.                 Else
  154.                 {
  155.                         //加仓:与最近一次开仓价间隔0.5*N开仓;
  156.                         if(High>LastEntryPrice+0.5*N and TurtleUnits>=1)
  157.                         {
  158.                                 MyPrice = Max(Open,LastEntryPrice+0.5*N)-MinPoint;
  159.                                 Buy(TurtleUnits,MyPrice);
  160.                                 SendOrderThisBar = true;
  161.                         }
  162.                        
  163.                         //止损:价格反向穿越最近一次开仓价格-2N;
  164.                         if(Low<LastEntryPrice-2*N)
  165.                         {
  166.                                 MyPrice = Min(Open,LastEntryPrice-2*N)-MinPoint;
  167.                                 Sell(0,MyPrice);
  168.                                 PreBreakoutFailure = True;  //假突破值为真;
  169.                                 // PlotBool("突破",PreBreakoutFailure,High,white);
  170.                         }
  171.                 }
  172.         }
  173.         // 当持有空单;
  174.         else if(MarketPosition==-1)
  175.         {
  176.                 // 离市:价格反向穿越离市的唐奇安通道;
  177.                 if(CrossOver(High,DonchianExitUpper))
  178.                 {
  179.                         MyPrice = Max(Open,DonchianExitUpper)+MinPoint;
  180.                         BuyToCover(0,MyPrice);
  181.                         PreBreakoutFailure = False;  //假突破值为假;
  182.                         // PlotBool("突破",PreBreakoutFailure,High,white);
  183.                 }
  184.                 Else
  185.                 {
  186.                         // 加仓:与最近一次开仓价格间隔0.5*N开仓;
  187.                         if(Low<LastEntryPrice-0.5*N and TurtleUnits>=1)
  188.                         {
  189.                                 MyPrice = Min(Open,LastEntryPrice-0.5*N)-MinPoint;
  190.                                 SellShort(TurtleUnits,MyPrice);
  191.                                 SendOrderThisBar = true;
  192.                         }
  193.                        
  194.                         // 止损:价格反向穿越最近一次开仓价格+2N;
  195.                         if(High>LastEntryPrice+2*N)
  196.                         {
  197.                                 MyPrice = Max(Open,LastEntryPrice+2*N)+MinPoint;
  198.                                 BuyToCover(0,MyPrice);
  199.                                 PreBreakoutFailure = True;  //假突破值为真;
  200.                                 // PlotBool("突破",PreBreakoutFailure,High,white);
  201.                         }
  202.                 }
  203.         }
  204.        
  205.         PlotNumeric("DonchianFastUpper",DonchianFastUpper);
  206.         PlotNumeric("DonchianFastLower",DonchianFastLower);
  207.         PlotNumeric("DonchianSlowUpper",DonchianSlowUpper);
  208.         PlotNumeric("DonchianSlowLower",DonchianSlowLower);
  209.         PlotNumeric("DonchianExitUpper",DonchianExitUpper);
  210.         PlotNumeric("DonchianExitLower",DonchianExitLower);       
  211.        
  212.         // Commentary("点值="+Text(ContractUnit()*BigPointValue()));
  213.         Commentary("TotalEquity="+Text(TotalEquity));
  214.         Commentary("N="+Text(N));
  215.         Commentary("Units="+Text(TurtleUnits));
  216.         // Commentary("Atr="+Text(Atr));
  217.         // Commentary("AtrAve="+Text(AtrAve));
  218.         // PlotNumeric("AtrAve",AtrAve);
  219.         Commentary("DayCount="+Text(DayCount));
  220.         Commentary("MyBarsSinceToday="+Text(MyBarsSinceToday[1]+1));
  221.        
  222.         if(PreBreakoutFailure == True)
  223.         {
  224.                 Commentary("PreBreakoutFailure = True");
  225.         }Else
  226.         {
  227.                 Commentary("PreBreakoutFailure = false");
  228.         }
  229.        
  230.         if(LastProfitableTradeFilter==true)
  231.         {
  232.                 Commentary("LastProfitableTradeFilter = True");
  233.         }Else
  234.         {
  235.                 Commentary("LastProfitableTradeFilter = False");
  236.         }
  237.        
  238. End
  239. //------------------------------------------------------------------------
  240. // 编译版本        GS2010.12.08
  241. // 用户版本        2013/05/08 22:28
  242. // 版权所有        arowana
  243. // 更改声明        TradeBlazer Software保留对TradeBlazer平台
  244. //                        每一版本的TrabeBlazer公式修改和重写的权利
  245. //------------------------------------------------------------------------
复制代码

使用道具 举报

Rank: 1

精华
0
UID
117100
积分
12
帖子
2
主题
0
阅读权限
10
注册时间
2013-3-28
最后登录
2013-6-27
5#
发表于 2013-6-27 14:50:21 |只看该作者
不错

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
116726
积分
166
帖子
57
主题
8
阅读权限
40
注册时间
2013-4-2
最后登录
2014-7-16
6#
发表于 2013-6-28 11:04:15 |只看该作者
修改:加仓判断条件改为以最高价或最低价循环判断满足加仓条件,实现一根k线满足多次加仓条件;
  1. Params
  2.         Numeric Direction(0);                   // 多空信号过滤条件,值为0不过滤,值为1只做多,值为1只做空;
  3.     Numeric RiskRatio(1);                   // % Risk Per N ( 0 - 100)
  4.     Numeric LengthAtr(20);                  // 平均波动周期 ATR Length
  5.     Numeric LengthFast(20);                 // 短周期 BreakOut Length
  6.     Numeric LengthSlow(55);                 // 长周期 FailSafe Length
  7.     Numeric LengthExit(10);                 // 离市周期 Trailing Exit Length
  8.     Bool LastProfitableTradeFilter(True);   // 使用入市过滤条件
  9. Vars
  10.         Numeric MinPoint;                       // 最小变动单位
  11.     NumericSeries N;                        // N 值
  12.     NumericSeries TotalEquity;              // 按最新收盘价计算出的总资产
  13.     NumericSeries TurtleUnits;              // 交易单位
  14.     NumericSeries DonchianFastUpper;        // 短周期唐奇安通道上轨,长度LengthFast;
  15.     NumericSeries DonchianFastLower;        // 短周期唐奇安通道下轨,长度LengthFast;
  16.     NumericSeries DonchianSlowUpper;        // 长周期唐奇安通道上轨,长度LengthSlow;
  17.     NumericSeries DonchianSlowLower;        // 长周期唐奇安通道下轨,长度LengthSlow;
  18.     NumericSeries DonchianExitUpper;        // 离市时判断需要的N周期最高价,长度LengthExit;
  19.     NumericSeries DonchianExitLower;        // 离市时判断需要的N周期最低价,长度LengthExit;
  20.     NumericSeries MyPrice;
  21.     NumericSeries MyExitPrice;              // 平仓价格
  22.         NumericSeries preEntryPrice(0);               // 前一次开仓的价格
  23.         BoolSeries PreBreakoutFailure(false);        // 前一次突破是否失败
  24.         Bool SendOrderThisBar(False);                  // 当前Bar有过交易
  25.         NumericSeries AtrAve;                   // 记录日线级别长度为lengthAtr的平均真实波幅;
  26.         NumericSeries DayHigh;                  // 一天中的最高价;
  27.         NumericSeries DayLow;                   // 一天中的最低价;
  28.         Numeric i;                              // 循环计算所需指针;
  29.         NumericSeries Atr(0);                   // 当天的ATR
  30.         Numeric AtrIndex(0);                    // 存储真实波幅的全局变量的环的索引值;
  31.         NumericSeries DayCount(0);              // 交易日数;
  32.         NumericSeries CloseD_1;                 // 上一个交易日收盘价,过度CloseD(1);
  33.         NumericSeries MyBarsSinceToday;         // 过度BarsSinceToday;
  34. Begin
  35.         MinPoint = MinMove*PriceScale;
  36.         MyBarsSinceToday = BarsSinceToday;
  37.         CloseD_1 = CloseD(1);
  38.        
  39.         if(BarsSinceToday==0)
  40.         {
  41.                 DayCount = DayCount + 1;  //记录交易日数;
  42.                 DayHigh = High;
  43.                 DayLow = Low;
  44.                
  45.                 //从第二个交易日开始记录;
  46.                 if(DayCount>=2)  
  47.                 {                       
  48.                         // 前一日真实波幅;
  49.                         Atr = max(max(Abs(DayHigh[1]-CloseD_1),Abs(DayLow[1]-CloseD_1)),DayHigh[1]-DayLow[1]);  
  50.                        
  51.                         // 存储前一天的Atr到全局变量环0-19;
  52.                         AtrIndex =  (DayCount-2)%LengthAtr;
  53.                         SetGlobalVar(AtrIndex,Atr[1]);
  54.                 }
  55.                
  56.                 // 从第LengthAtr+1个交易日开始计算;
  57.                 if(DayCount>=LengthAtr+1)  
  58.                 {
  59.                         // 计算日线级别长度为LengthAtr的平均真实波幅;
  60.                         AtrAve = 0 ;
  61.                         for i=0 to LengthAtr-1
  62.                         {
  63.                                 AtrAve = AtrAve +  getGlobalVar(i);
  64.                         }
  65.                         AtrAve = AtrAve/LengthAtr;
  66.                         N = IntPart(AtrAve);
  67.                        
  68.                         DonchianFastUpper = Highest(DayHigh[1],(LengthAtr-0.1)*(MyBarsSinceToday[1]+1));
  69.                         DonchianFastLower = Lowest(DayLow[1],(LengthAtr-0.1)*(MyBarsSinceToday[1]+1));
  70.                        
  71.                         DonchianSlowUpper = Highest(DayHigh[1],(LengthSlow-0.1)*(MyBarsSinceToday[1]+1));
  72.                         DonchianSlowLower = Lowest(DayLow[1],(LengthSlow-0.1)*(MyBarsSinceToday[1]+1));
  73.                        
  74.                         DonchianExitUpper = Highest(DayHigh[1],(LengthExit-0.1)*(MyBarsSinceToday[1]));
  75.                         DonchianExitLower = Lowest(DayLow[1],(LengthExit-0.1)*(MyBarsSinceToday[1]));
  76.                 }
  77.                
  78.                 //账户最新资产 = 按当前Bar开盘价计算的可用资金 + 持仓保证金 ;
  79.                 TotalEquity = Portfolio_CurrentCapital() + Portfolio_UsedMargin();
  80.                 //标准单位头寸 = (本金*风险比例)/价值波动率
  81.                 TurtleUnits = (TotalEquity*RiskRatio/100) /(N * ContractUnit()*BigPointValue());
  82.                 TurtleUnits = IntPart(TurtleUnits); // 对小数取整
  83.                 // PlotString("Units","Units="+Text(TurtleUnits),High+(High-Low),white);
  84.                 // PlotString("N","N="+Text(N),Low-(High-Low)/2,white);
  85.         }
  86.         Else
  87.         {
  88.                 DayHigh = Max(DayHigh,High);
  89.                 DayLow = Min(DayLow,Low);
  90.         }

  91.         If(MarketPosition==0 and TurtleUnits>=1)
  92.         {
  93.                 // 首次入市1:带过滤条件的,如果过滤条件为真,则需要前一笔交易是否是突破失败;
  94.                 if(LastProfitableTradeFilter==false Or PreBreakoutFailure )
  95.                 {
  96.                         //开多1:突破短周期唐奇安通道上轨;
  97.                         If(High>DonchianFastUpper and Direction!=-1)
  98.                         {
  99.                                 MyPrice = Max(Open,DonchianFastUpper)+MinPoint;
  100.                                 preEntryPrice = MyPrice;
  101.                                 Buy(TurtleUnits,MyPrice);
  102.                                 MyExitPrice = MyPrice - 2*N;
  103.                                 SendOrderThisBar = true;
  104.                         }
  105.                        
  106.                         //开空1:突破短周期唐奇安通道下轨;
  107.                         if(Low<DonchianFastLower and Direction!=1)
  108.                         {
  109.                                 MyPrice = Min(Open,DonchianFastLower)-MinPoint;
  110.                                 preEntryPrice = MyPrice;
  111.                                 SellShort(TurtleUnits,MyPrice);
  112.                                 MyExitPrice = MyPrice + 2*N;
  113.                                 SendOrderThisBar = true;
  114.                         }
  115.                 }
  116.                
  117.                 // 首次入市2:过滤条件之外的,长周期唐奇安通道突破开仓;
  118.                 //开多2:突破长周期唐奇安通道上轨;
  119.                 else
  120.                 {
  121.                         if(CrossOver(High,DonchianSlowUpper) and Direction!=-1)
  122.                         {
  123.                                 MyPrice = Max(Open,DonchianSlowUpper)+MinPoint;
  124.                                 preEntryPrice = MyPrice;
  125.                                 Buy(TurtleUnits,MyPrice);
  126.                                 MyExitPrice = MyPrice - 2*N;
  127.                                 SendOrderThisBar = true;
  128.                         }
  129.                         //开空2:突破长周期唐奇安通道下轨;
  130.                         if(CrossUnder(Low,DonchianSlowLower) and Direction!=1)
  131.                         {
  132.                                 MyPrice = Min(Open,DonchianSlowLower)+MinPoint;
  133.                                 preEntryPrice = MyPrice;
  134.                                 SellShort(TurtleUnits,MyPrice);
  135.                                 MyExitPrice = MyPrice + 2*N;
  136.                                 SendOrderThisBar = true;
  137.                         }
  138.                 }
  139.         }
  140.        
  141.         // 当持有多单;
  142.         if(MarketPosition==1)
  143.         {
  144.                 //离市:价格反向穿越离市的唐奇安通道;
  145.                 if(CrossUnder(Low,DonchianExitLower))
  146.                 {
  147.                         MyPrice = Min(Open,DonchianExitLower)-MinPoint;
  148.                         Sell(0,MyPrice);
  149.                         PreBreakoutFailure = False;  //假突破值为假;
  150.                         // PlotBool("突破",PreBreakoutFailure,High,white);
  151.                 }
  152.                 Else
  153.                 {
  154.                         //加仓:如果开盘价就大于最近一次开仓价+0.5*N,则以开盘价发单;
  155.                         if(Open>LastEntryPrice+0.5*N and TurtleUnits>=1)
  156.                         {
  157.                                 MyPrice = Open;
  158.                                 preEntryPrice = MyPrice;
  159.                                 Buy(TurtleUnits,MyPrice);
  160.                                 SendOrderThisBar = true;
  161.                         }
  162.                         // 以最高价为标准,判断能进行几次增仓
  163.                         while(High >= preEntryPrice + 0.5*N)
  164.                         {
  165.                                 MyPrice = preEntryPrice + 0.5 * N;
  166.                                 preEntryPrice = MyPrice;
  167.                                 Buy(TurtleUnits,MyPrice);
  168.                                 SendOrderThisBar = True;                                       
  169.                         }
  170.                         //止损:价格反向穿越最近一次开仓价格-2N;
  171.                         if(Low<LastEntryPrice-2*N)
  172.                         {
  173.                                 MyPrice = Min(Open,LastEntryPrice-2*N)-MinPoint;
  174.                                 Sell(0,MyPrice);
  175.                                 PreBreakoutFailure = True;  //假突破值为真;
  176.                                 // PlotBool("突破",PreBreakoutFailure,High,white);
  177.                         }
  178.                 }
  179.         }
  180.         // 当持有空单;
  181.         else if(MarketPosition==-1)
  182.         {
  183.                 // 离市:价格反向穿越离市的唐奇安通道;
  184.                 if(CrossOver(High,DonchianExitUpper))
  185.                 {
  186.                         MyPrice = Max(Open,DonchianExitUpper)+MinPoint;
  187.                         BuyToCover(0,MyPrice);
  188.                         PreBreakoutFailure = False;  //假突破值为假;
  189.                         // PlotBool("突破",PreBreakoutFailure,High,white);
  190.                 }
  191.                 Else
  192.                 {
  193.                         // 加仓:与最近一次开仓价格间隔0.5*N开仓;
  194.                         if(Open<LastEntryPrice-0.5*N and TurtleUnits>=1)
  195.                         {
  196.                                 MyPrice = Open;
  197.                                 preEntryPrice = MyPrice;
  198.                                 SellShort(TurtleUnits,MyPrice);
  199.                                 SendOrderThisBar = true;
  200.                         }
  201.                         // 以最低价为标准,判断能进行几次增仓
  202.                         while(Low <= preEntryPrice - 0.5*N)
  203.                         {
  204.                                 MyPrice = preEntryPrice - 0.5 * N;
  205.                                 preEntryPrice = MyPrice;
  206.                                 SellShort(TurtleUnits,MyPrice);
  207.                                 SendOrderThisBar = True;
  208.                         }
  209.                         // 止损:价格反向穿越最近一次开仓价格+2N;
  210.                         if(High>LastEntryPrice+2*N)
  211.                         {
  212.                                 MyPrice = Max(Open,LastEntryPrice+2*N)+MinPoint;
  213.                                 BuyToCover(0,MyPrice);
  214.                                 PreBreakoutFailure = True;  //假突破值为真;
  215.                                 // PlotBool("突破",PreBreakoutFailure,High,white);
  216.                         }
  217.                 }
  218.         }
  219.        
  220.         PlotNumeric("DonchianFastUpper",DonchianFastUpper);
  221.         PlotNumeric("DonchianFastLower",DonchianFastLower);
  222.         PlotNumeric("DonchianSlowUpper",DonchianSlowUpper);
  223.         PlotNumeric("DonchianSlowLower",DonchianSlowLower);
  224.         PlotNumeric("DonchianExitUpper",DonchianExitUpper);
  225.         PlotNumeric("DonchianExitLower",DonchianExitLower);       
  226.        
  227.         // Commentary("点值="+Text(ContractUnit()*BigPointValue()));
  228.         Commentary("TotalEquity="+Text(TotalEquity));
  229.         Commentary("N="+Text(N));
  230.         Commentary("Units="+Text(TurtleUnits));
  231.         // Commentary("Atr="+Text(Atr));
  232.         // Commentary("AtrAve="+Text(AtrAve));
  233.         // PlotNumeric("AtrAve",AtrAve);
  234.         Commentary("DayCount="+Text(DayCount));
  235.         Commentary("MyBarsSinceToday="+Text(MyBarsSinceToday[1]+1));
  236.        

  237.        
  238. End
复制代码

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
5718
积分
141
帖子
38
主题
4
阅读权限
40
注册时间
2009-10-21
最后登录
2013-10-10
7#
发表于 2013-9-27 11:30:23 |只看该作者
改的不错,max min简化了程序,
还是有一个错误133 MyPrice = Min(Open,DonchianSlowLower)+MinPoint;

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
5718
积分
141
帖子
38
主题
4
阅读权限
40
注册时间
2009-10-21
最后登录
2013-10-10
8#
发表于 2013-9-27 11:54:44 |只看该作者
98   If(High>DonchianFastUpper and Direction!=-1) //小周期开多仓条件
108  if(Low<DonchianFastLower and Direction!=1)  //小周期开空仓条件
122  if(CrossOver(High,DonchianSlowUpper) and Direction!=-1) //大周期开多仓条件
131   if(CrossUnder(Low,DonchianSlowLower) and Direction!=1) //大周期开空仓条件
146  if(CrossUnder(Low,DonchianExitLower)) //多头离市条件
156 if(Open>LastEntryPrice+0.5*N and TurtleUnits>=1) //多头加仓条件
164 while(High >= preEntryPrice + 0.5*N) //多头加仓条件
172 if(Low<LastEntryPrice-2*N) //多头止损条件
在这里面小周期开仓条件用的是比较式,大周期开仓用的是穿越,多头离市采用的是穿越,设计时是如何考虑的。
加仓和止损采用的都是比较式。
同官方程序相比,大周期开仓和离市改为穿越,主要考虑点是什么?
好像在躲避极端情况下的交易风险,但好像还有漏洞。


使用道具 举报

Rank: 3Rank: 3

精华
0
UID
116726
积分
166
帖子
57
主题
8
阅读权限
40
注册时间
2013-4-2
最后登录
2014-7-16
9#
发表于 2013-11-4 11:32:23 |只看该作者
"bbenben"提到的'比较式'其实就是一种状态,'穿越式'是一种动作,状态可以维持一段时间,而动作只能是瞬间的.正是利用这两种概念来实现信号的稳定性正确性.如果所有的开\平信号都用'比较式'来判断,可能存在平仓的瞬间同时也满足另外的同向开仓条件,显示的效果为平多单之后的下一根k线马上又开多.欢迎交流

使用道具 举报

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

bottom

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

GMT+8, 2024-5-5 12:19

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部