设为首页收藏本站

 找回密码
 注册
楼主: 米小兔
打印 上一主题 下一主题

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

Rank: 3Rank: 3

精华
0
UID
116726
积分
166
帖子
57
主题
8
阅读权限
40
注册时间
2013-4-2
最后登录
2014-7-16
11#
发表于 2013-6-28 10:49:24 |只看该作者
修改:加仓判断条件改为以最高价或最低价循环判断满足加仓条件,实现一根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
116726
积分
166
帖子
57
主题
8
阅读权限
40
注册时间
2013-4-2
最后登录
2014-7-16
12#
发表于 2013-6-28 14:58:20 |只看该作者
又改进了一个版本,为了实盘更方便设置.
        版本:ITF_TurtleRules_V105
        修改(基于V104)
修改目的: 方便实盘时候的资产和仓位设置,实现了不受开始时间点左侧的交易信号的影响;
1)        增加日期参数DateStart(20080101),此日的开盘将资金初始化为Capital;
2)        增加初始本金参数Capital(1000000),不使用全局变量里面的本金设置;

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
116726
积分
166
帖子
57
主题
8
阅读权限
40
注册时间
2013-4-2
最后登录
2014-7-16
13#
发表于 2013-6-28 14:58:58 |只看该作者
  1. //------------------------------------------------------------------------
  2. // 简称: ITF_TurtleRules_V105
  3. // 名称: TurtleRules_V105
  4. // 类别: 公式应用
  5. // 类型: 用户应用
  6. // 输出:
  7. //------------------------------------------------------------------------

  8. Params
  9.         Numeric Capital(1000000);               // 初始资金;
  10.         Numeric DateStart(20120101);            // 此日的开盘将资金初始化为Capital;
  11.         Numeric Direction(0);                   // 多空信号过滤条件,值为0不过滤,值为1只做多,值为1只做空;
  12.     Numeric RiskRatio(1);                   // % Risk Per N ( 0 - 100)
  13.     Numeric LengthAtr(20);                  // 平均波动周期 ATR Length
  14.     Numeric LengthFast(20);                 // 短周期 BreakOut Length
  15.     Numeric LengthSlow(55);                 // 长周期 FailSafe Length
  16.     Numeric LengthExit(10);                 // 离市周期 Trailing Exit Length
  17.     Bool LastProfitableTradeFilter(True);   // 使用入市过滤条件
  18. Vars
  19.         Numeric MinPoint;                       // 最小变动单位
  20.     NumericSeries N;                        // N 值
  21.     NumericSeries TotalEquity;              // 按最新收盘价计算出的总资产
  22.     NumericSeries TurtleUnits;              // 交易单位
  23.     NumericSeries DonchianFastUpper;        // 短周期唐奇安通道上轨,长度LengthFast;
  24.     NumericSeries DonchianFastLower;        // 短周期唐奇安通道下轨,长度LengthFast;
  25.     NumericSeries DonchianSlowUpper;        // 长周期唐奇安通道上轨,长度LengthSlow;
  26.     NumericSeries DonchianSlowLower;        // 长周期唐奇安通道下轨,长度LengthSlow;
  27.     NumericSeries DonchianExitUpper;        // 离市时判断需要的N周期最高价,长度LengthExit;
  28.     NumericSeries DonchianExitLower;        // 离市时判断需要的N周期最低价,长度LengthExit;
  29.     NumericSeries MyPrice;
  30.     NumericSeries MyExitPrice;              // 平仓价格
  31.         NumericSeries preEntryPrice(0);               // 前一次开仓的价格
  32.         BoolSeries PreBreakoutFailure(false);        // 前一次突破是否失败
  33.         Bool SendOrderThisBar(False);                  // 当前Bar有过交易
  34.         NumericSeries AtrAve;                   // 记录日线级别长度为lengthAtr的平均真实波幅;
  35.         NumericSeries DayHigh;                  // 一天中的最高价;
  36.         NumericSeries DayLow;                   // 一天中的最低价;
  37.         Numeric i;                              // 循环计算所需指针;
  38.         NumericSeries Atr(0);                   // 当天的ATR
  39.         Numeric AtrIndex(0);                    // 存储真实波幅的全局变量的环的索引值;
  40.         NumericSeries DayCount(0);              // 交易日数;
  41.         NumericSeries CloseD_1;                 // 上一个交易日收盘价,过度CloseD(1);
  42.         NumericSeries MyBarsSinceToday;         // 过度BarsSinceToday;
  43.         NumericSeries CapitalCurrent;           // 调整资产规模后的最新资产;
  44.         NumericSeries CapitalPeak;              // 调整资产规模后的最新资产峰值;
  45.         NumericSeries ProfitClosing;            // 平仓盈亏;
  46.         NumericSeries LotsTotal(0);             // 持仓手数;
  47.         NumericSeries MyAvgEntryPrice;          // 持仓均价;
  48.         NumericSeries TimesOverWeight(0);       // 加仓次数记录;
  49. Begin
  50.         MinPoint = MinMove*PriceScale;
  51.         MyBarsSinceToday = BarsSinceToday;
  52.         CloseD_1 = CloseD(1);
  53.        
  54.         if(BarsSinceToday==0)
  55.         {
  56.                 DayCount = DayCount + 1;  //记录交易日数;
  57.                 DayHigh = High;
  58.                 DayLow = Low;
  59.                
  60.                 //从第二个交易日开始记录;
  61.                 if(DayCount>=2)  
  62.                 {                       
  63.                         // 前一日真实波幅;
  64.                         Atr = max(max(Abs(DayHigh[1]-CloseD_1),Abs(DayLow[1]-CloseD_1)),DayHigh[1]-DayLow[1]);  
  65.                        
  66.                         // 存储前一天的Atr到全局变量环0-19;
  67.                         AtrIndex =  (DayCount-2)%LengthAtr;
  68.                         SetGlobalVar(AtrIndex,Atr[1]);
  69.                 }
  70.                  
  71.                 // 从第LengthAtr+1个交易日开始计算;
  72.                 if(DayCount>=LengthAtr+1)  
  73.                 {
  74.                         // 计算日线级别长度为LengthAtr的平均真实波幅;
  75.                         AtrAve = 0 ;
  76.                         for i=0 to LengthAtr-1
  77.                         {
  78.                                 AtrAve = AtrAve +  getGlobalVar(i);
  79.                         }
  80.                         AtrAve = AtrAve/LengthAtr;
  81.                         N = IntPart(AtrAve);
  82.                        
  83.                         DonchianFastUpper = Highest(DayHigh[1],(LengthAtr-0.1)*(MyBarsSinceToday[1]+1));
  84.                         DonchianFastLower = Lowest(DayLow[1],(LengthAtr-0.1)*(MyBarsSinceToday[1]+1));
  85.                        
  86.                         DonchianSlowUpper = Highest(DayHigh[1],(LengthSlow-0.1)*(MyBarsSinceToday[1]+1));
  87.                         DonchianSlowLower = Lowest(DayLow[1],(LengthSlow-0.1)*(MyBarsSinceToday[1]+1));
  88.                        
  89.                         DonchianExitUpper = Highest(DayHigh[1],(LengthExit-0.1)*(MyBarsSinceToday[1]));
  90.                         DonchianExitLower = Lowest(DayLow[1],(LengthExit-0.1)*(MyBarsSinceToday[1]));
  91.                 }
  92.                
  93.                 // 资产规模调整;
  94.                 // 如果有设置初始本金的开始时间;
  95.                 if(Date==DateStart and DateStart!=0 and Date!=Date[1])
  96.                 {
  97.                         CapitalCurrent = Capital;  // 调整资产规模后的最新资产;
  98.                         Commentary("标识:第99行");
  99.                 }
  100.                 // 如果没有设置初始本金的开始时间;
  101.                 else if(DateStart==0 or (BarStatus==0 and Date>DateStart) )
  102.                 {
  103.                         CapitalCurrent = Capital;
  104.                         Commentary("标识:第105行");
  105.                 }
  106.                
  107.                 CapitalPeak = Max(Max(Capital,CapitalCurrent[1]),CapitalCurrent+ProfitClosing);  // 调整资产规模后的最新资产峰值;
  108.                
  109.                 //标准单位头寸 = (最新资产*风险比例)/价值波动率
  110.                 TurtleUnits = (CapitalCurrent*RiskRatio/100) /(N * ContractUnit()*BigPointValue());
  111.                 TurtleUnits = IntPart(TurtleUnits); // 对小数取整
  112.                 // PlotString("Units","Units="+Text(TurtleUnits),High+(High-Low),white);
  113.                 // PlotString("N","N="+Text(N),Low-(High-Low)/2,white);
  114.         }
  115.         Else
  116.         {
  117.                 DayHigh = Max(DayHigh,High);
  118.                 DayLow = Min(DayLow,Low);
  119.         }

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

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
116726
积分
166
帖子
57
主题
8
阅读权限
40
注册时间
2013-4-2
最后登录
2014-7-16
14#
发表于 2013-6-28 14:59:15 |只看该作者
本帖最后由 米小兔 于 2013-6-28 15:01 编辑
  1.         // 当持有多单;
  2.         if(MarketPosition==1 and TimesOverWeight>0)
  3.         {
  4.                 //离市:价格反向穿越离市的唐奇安通道;
  5.                 if(CrossUnder(Low,DonchianExitLower))
  6.                 {
  7.                         MyPrice = Min(Open,DonchianExitLower)-MinPoint;
  8.                         Sell(0,MyPrice);
  9.                         PreBreakoutFailure = False;  //假突破值为假;
  10.                         // PlotBool("突破",PreBreakoutFailure,High,white);
  11.                         ProfitClosing = (MyPrice - MyAvgEntryPrice)*LotsTotal*ContractUnit()*BigPointValue();
  12.                         CapitalCurrent = CapitalCurrent + ProfitClosing;
  13.                         TimesOverWeight = 0;
  14.                         LotsTotal = 0;
  15.                 }
  16.                 Else
  17.                 {
  18.                         // 加仓:如果开盘价就大于最近一次开仓价+0.5*N,则以开盘价发单;
  19.                         if(Open>LastEntryPrice+0.5*N and TurtleUnits>=1 and TimesOverWeight<4)
  20.                         {
  21.                                 MyPrice = Open;
  22.                                 preEntryPrice = MyPrice;
  23.                                 Buy(TurtleUnits,MyPrice);
  24.                                 SendOrderThisBar = true;
  25.                                 MyAvgEntryPrice = AvgEntryPrice;
  26.                                 LotsTotal = LotsTotal + TurtleUnits;
  27.                                 TimesOverWeight = TimesOverWeight + 1;
  28.                         }
  29.                         // 以最高价为标准,判断能进行几次增仓
  30.                         while(High >= preEntryPrice + 0.5*N and TimesOverWeight<4)
  31.                         {
  32.                                 MyPrice = preEntryPrice + 0.5 * N;
  33.                                 preEntryPrice = MyPrice;
  34.                                 Buy(TurtleUnits,MyPrice);
  35.                                 SendOrderThisBar = True;
  36.                                 MyAvgEntryPrice = AvgEntryPrice;
  37.                                 LotsTotal = LotsTotal + TurtleUnits;
  38.                                 TimesOverWeight = TimesOverWeight + 1;
  39.                         }
  40.                        
  41.                         // 止损:价格反向穿越最近一次开仓价格-2N;
  42.                         if(Low<LastEntryPrice-2*N)
  43.                         {
  44.                                 MyPrice = Min(Open,LastEntryPrice-2*N)-MinPoint;
  45.                                 Sell(0,MyPrice);
  46.                                 PreBreakoutFailure = True;  //假突破值为真;
  47.                                 // PlotBool("突破",PreBreakoutFailure,High,white);
  48.                                 ProfitClosing = (MyPrice - MyAvgEntryPrice)*LotsTotal*ContractUnit()*BigPointValue();
  49.                                 CapitalCurrent = CapitalCurrent + ProfitClosing;
  50.                                 TimesOverWeight = 0;
  51.                                 LotsTotal = 0;
  52.                         }
  53.                 }
  54.         }
  55.         // 当持有空单;
  56.         else if(MarketPosition==-1 and TimesOverWeight>0)
  57.         {
  58.                 // 离市:价格反向穿越离市的唐奇安通道;
  59.                 if(CrossOver(High,DonchianExitUpper))
  60.                 {
  61.                         MyPrice = Max(Open,DonchianExitUpper)+MinPoint;
  62.                         BuyToCover(0,MyPrice);
  63.                         PreBreakoutFailure = False;  //假突破值为假;
  64.                         // PlotBool("突破",PreBreakoutFailure,High,white);
  65.                         ProfitClosing = (MyAvgEntryPrice - MyPrice)*LotsTotal*ContractUnit()*BigPointValue();
  66.                         CapitalCurrent = CapitalCurrent + ProfitClosing;
  67.                         TimesOverWeight = 0;
  68.                         LotsTotal = 0;
  69.                 }
  70.                 Else
  71.                 {
  72.                         // 加仓:与最近一次开仓价格间隔0.5*N开仓;
  73.                         if(Open<LastEntryPrice-0.5*N and TurtleUnits>=1 and TimesOverWeight<4)
  74.                         {
  75.                                 MyPrice = Open;
  76.                                 preEntryPrice = MyPrice;
  77.                                 SellShort(TurtleUnits,MyPrice);
  78.                                 SendOrderThisBar = true;
  79.                                 MyAvgEntryPrice = AvgEntryPrice;
  80.                                 LotsTotal = LotsTotal + TurtleUnits;
  81.                                 TimesOverWeight = 0;
  82.                         }
  83.                         // 以最低价为标准,判断能进行几次增仓
  84.                         while(Low <= preEntryPrice - 0.5*N and TimesOverWeight<4)
  85.                         {
  86.                                 MyPrice = preEntryPrice - 0.5 * N;
  87.                                 preEntryPrice = MyPrice;
  88.                                 SellShort(TurtleUnits,MyPrice);
  89.                                 SendOrderThisBar = True;
  90.                                 MyAvgEntryPrice = AvgEntryPrice;
  91.                                 LotsTotal = LotsTotal + TurtleUnits;
  92.                                 TimesOverWeight = TimesOverWeight + 1;
  93.                         }
  94.                         // 止损:价格反向穿越最近一次开仓价格+2N;
  95.                         if(High>LastEntryPrice+2*N)
  96.                         {
  97.                                 MyPrice = Max(Open,LastEntryPrice+2*N)+MinPoint;
  98.                                 BuyToCover(0,MyPrice);
  99.                                 PreBreakoutFailure = True;  //假突破值为真;
  100.                                 // PlotBool("突破",PreBreakoutFailure,High,white);
  101.                                 ProfitClosing = (MyAvgEntryPrice - MyPrice)*LotsTotal*ContractUnit()*BigPointValue();
  102.                                 CapitalCurrent = CapitalCurrent + ProfitClosing;
  103.                                 TimesOverWeight = 0;
  104.                                 LotsTotal = 0;
  105.                         }
  106.                 }
  107.         }
  108.          
  109.         PlotNumeric("DonchianFastUpper",DonchianFastUpper);
  110.         PlotNumeric("DonchianFastLower",DonchianFastLower);
  111.         PlotNumeric("DonchianSlowUpper",DonchianSlowUpper);
  112.         PlotNumeric("DonchianSlowLower",DonchianSlowLower);
  113.         PlotNumeric("DonchianExitUpper",DonchianExitUpper);
  114.         PlotNumeric("DonchianExitLower",DonchianExitLower);       
  115.        
  116.         Commentary("点值="+Text(ContractUnit()*BigPointValue()));
  117.         Commentary("TotalEquity="+Text(TotalEquity));
  118.         Commentary("N="+Text(N));
  119.         Commentary("Units="+Text(TurtleUnits));
  120.         // Commentary("Atr="+Text(Atr));
  121.         // Commentary("AtrAve="+Text(AtrAve));
  122.         // PlotNumeric("AtrAve",AtrAve);
  123.         Commentary("DayCount="+Text(DayCount));
  124.         Commentary("MyBarsSinceToday="+Text(MyBarsSinceToday[1]+1));
  125.         Commentary("CapitalCurrent="+Text(CapitalCurrent));
  126.         Commentary("LotsTotal="+Text(LotsTotal));
  127.         Commentary("MyAvgEntryPrice="+Text(MyAvgEntryPrice));
  128.         Commentary("MyPrice="+Text(MyPrice));
  129.         Commentary("ProfitClosing="+Text(ProfitClosing));
  130.         Commentary("CurrentBar="+Text(CurrentBar));
  131. End
复制代码

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
116726
积分
166
帖子
57
主题
8
阅读权限
40
注册时间
2013-4-2
最后登录
2014-7-16
15#
发表于 2013-6-28 15:02:56 |只看该作者
一个帖子的允许的大小太小了,一个策略的源码还要分成两段发,建议tb论坛扩容.

使用道具 举报

Rank: 1

精华
0
UID
116401
积分
34
帖子
18
主题
5
阅读权限
10
注册时间
2013-4-3
最后登录
2016-8-11
16#
发表于 2013-6-29 08:17:21 |只看该作者
学习了,感谢分享。

使用道具 举报

Rank: 1

精华
0
UID
119860
积分
17
帖子
5
主题
0
阅读权限
10
注册时间
2013-5-31
最后登录
2018-5-5
17#
发表于 2013-6-29 10:36:48 |只看该作者
多谢楼主

使用道具 举报

Rank: 2

精华
0
UID
114140
积分
94
帖子
53
主题
24
阅读权限
30
注册时间
2012-12-16
最后登录
2015-4-9
18#
发表于 2013-6-30 16:27:12 |只看该作者
支持发的源码学习,其它不说什么,楼主在很热心帮大家。

使用道具 举报

Rank: 3Rank: 3

精华
0
UID
116726
积分
166
帖子
57
主题
8
阅读权限
40
注册时间
2013-4-2
最后登录
2014-7-16
19#
发表于 2013-7-1 08:44:34 |只看该作者
谢谢大家支持.
原版本海龟的海龟交易系统,代码基本实现,而且还根据实盘细节处理的需要做了一些小修改.
下一步我准备对海龟交易法则的策略思路部分加以修改,如果大家有些建议意见也可以提出来,讨论,一起改进.

使用道具 举报

Rank: 5Rank: 5

精华
0
UID
73474
积分
1249
帖子
695
主题
30
阅读权限
60
注册时间
2011-10-22
最后登录
2015-11-6
20#
发表于 2013-7-1 19:51:59 |只看该作者
强烈支持,顶一个

使用道具 举报

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

bottom

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

GMT+8, 2024-4-25 23:33

Powered by Discuz! X2 LicensedChrome插件扩展

© 2011-2012 交易开拓者 Inc.

回顶部