欢迎您光临博庭社区!

 找回密码
 立即注册
查看: 4076|回复: 8

TB转过来的海龟交易系统求解释 [复制链接]

Rank: 3Rank: 3

发表于 2013-8-18 21:02:59 |显示全部楼层
用论坛提供的最新公式转换器转换了TB的海龟交易系统。
不见开平仓信号,TB本身好像也没有信号的。
求高手解释
转换后的代码
  1. //海龟交易系统
  2. // 简称: TurtleTrader
  3. // 名称: 海龟交易系统
  4. // 类别: 公式应用
  5. // 类型: 内建应用
  6. //------------------------------------------------------------------------

  7. INPUT:
  8.      RiskRatio(1),                   // % Risk Per N ( 0 - 100)
  9.      ATRLength(20),                  // 平均波动周期 ATR Length
  10.      boLength(20),                   // 短周期 BreakOut Length
  11.      fsLength(55),                   // 长周期 FailSafe Length
  12.      teLength(10),                   // 离市周期 Trailing Exit Length
  13.      LastProfitableTradeFilter(True);   // 使用入市过滤条件
  14. VARIABLE:
  15.          MinPoint,                       // 最小变动单位
  16.          AvgTR,                                        // ATR
  17.      N,                              // N 值
  18.      TotalEquity,                    // 按最新收盘价计算出的总资产
  19.      TurtleUnits,                    // 交易单位
  20.      DonchianHi,                      // 唐奇安通道上轨,延后1个Bar
  21.      DonchianLo,                      // 唐奇安通道下轨,延后1个Bar
  22.      fsDonchianHi,                    // 唐奇安通道上轨,延后1个Bar,长周期
  23.      fsDonchianLo,                    // 唐奇安通道下轨,延后1个Bar,长周期
  24.      ExitHighestPrice,               // 离市时判断需要的N周期最高价
  25.      ExitLowestPrice,                // 离市时判断需要的N周期最低价
  26.      myEntryPrice,                   // 开仓价格
  27.      myExitPrice,                    // 平仓价格
  28.      SendOrderThisBar(False),                  // 当前Bar有过交易
  29.          preEntryPrice(0),               // 前一次开仓的价格
  30.          PreBreakoutFailure(false);        // 前一次突破是否失败
  31. Begin
  32.     If(BarStatus == 0) then
  33.      begin
  34.                 preEntryPrice := Invalid;
  35.                 PreBreakoutFailure := false;
  36.          end         
  37.         
  38.         MinPoint := MinMove*PriceScale;
  39.     AvgTR := EMA(TrueRange,ATRLength);
  40.         N := AvgTR[1];        
  41.     TotalEquity := Portfolio_CurrentCapital() + MarginRatio;
  42.     TurtleUnits := (TotalEquity*RiskRatio/100) /(N * ContractUnit()*BigPointValue());
  43.     TurtleUnits := IntPart(TurtleUnits); // 对小数取整

  44.     DonchianHi := HHV(High[1],boLength);
  45.     DonchianLo := LLV(Low[1],boLength);

  46.         fsDonchianHi := HHV(High[1],fsLength);
  47.     fsDonchianLo := LLV(Low[1],fsLength);
  48.         
  49.         ExitLowestPrice := LLV(Low[1],teLength);
  50.         ExitHighestPrice := HHV(High[1],teLength);

  51.         Comment('N='+NumToStr(N,0));
  52.         Comment('preEntryPrice='+NumToStr(preEntryPrice,0));
  53.         Comment('PreBreakoutFailure='+if(PreBreakoutFailure,'True','False'));
  54.         
  55.     // 当不使用过滤条件,或者使用过滤条件并且条件为PreBreakoutFailure为True进行后续操作
  56.     If(MarketPosition == 0 && ((!LastProfitableTradeFilter) Or (PreBreakoutFailure))) then
  57.      begin
  58.         // 突破开仓
  59.         If(High > DonchianHi && TurtleUnits >= 1) then
  60.          begin
  61.             // 开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交
  62.             myEntryPrice := Min(High,DonchianHi + MinPoint);
  63.             myEntryPrice := If(myEntryPrice < Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
  64.                         preEntryPrice := myEntryPrice;
  65.             Buy('',TurtleUnits,myEntryPrice,0,OT_Market, OB_ThisBar);
  66.                         SendOrderThisBar := True;
  67.                         PreBreakoutFailure := False;
  68.          end

  69.         If(Low < DonchianLo && TurtleUnits >= 1) then
  70.          begin
  71.             // 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交
  72.             myEntryPrice := Max(Low,DonchianLo - MinPoint);
  73.             myEntryPrice := If(myEntryPrice > Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
  74.             preEntryPrice := myEntryPrice;
  75.             SendOrderThisBar := True;
  76.             SellShort('',TurtleUnits,myEntryPrice,0,OT_Market, OB_ThisBar);
  77.                         SendOrderThisBar := True;
  78.                         PreBreakoutFailure := False;
  79.          end
  80.      end

  81.     // 长周期突破开仓 Failsafe Breakout point
  82.     If(MarketPosition == 0) then
  83.      begin
  84.                 Comment('fsDonchianHi='+NumToStr(fsDonchianHi,0));
  85.         If(High > fsDonchianHi && TurtleUnits >= 1) then
  86.          begin
  87.             // 开仓价格取突破上轨+一个价位和最高价之间的较小值,这样能更接近真实情况,并能尽量保证成交
  88.             myEntryPrice := Min(High,fsDonchianHi + MinPoint);
  89.             myEntryPrice := If(myEntryPrice < Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
  90.                         preEntryPrice := myEntryPrice;
  91.             Buy('',TurtleUnits,myEntryPrice,0,OT_Market, OB_ThisBar);
  92.                         SendOrderThisBar := True;
  93.                         PreBreakoutFailure := False;
  94.          end

  95.                 Comment('fsDonchianLo='+NumToStr(fsDonchianLo,0));
  96.         If(Low < fsDonchianLo && TurtleUnits >= 1) then
  97.          begin
  98.             // 开仓价格取突破下轨-一个价位和最低价之间的较大值,这样能更接近真实情况,并能尽量保证成交
  99.             myEntryPrice := Max(Low,fsDonchianLo - MinPoint);
  100.             myEntryPrice := If(myEntryPrice > Open, Open,myEntryPrice); // 大跳空的时候用开盘价代替
  101.             preEntryPrice := myEntryPrice;
  102.             SellShort('',TurtleUnits,myEntryPrice,0,OT_Market, OB_ThisBar);
  103.                         SendOrderThisBar := True;
  104.                         PreBreakoutFailure := False;
  105.          end
  106.      end

  107.     If(MarketPosition == 1) then  // 有多仓的情况
  108.      begin        
  109.                 Comment('ExitLowestPrice='+NumToStr(ExitLowestPrice,0));
  110.         If(Low < ExitLowestPrice) then
  111.          begin
  112.             myExitPrice := Max(Low,ExitLowestPrice - MinPoint);
  113.                         myExitPrice := If(myExitPrice > Open, Open,myExitPrice); // 大跳空的时候用开盘价代替
  114.             Sell('',0,myExitPrice,0,OT_Market, OB_ThisBar);    // 数量用0的情况下将全部平仓
  115.          end Else
  116.          begin
  117.             If(preEntryPrice!=Invalid && TurtleUnits >= 1) then
  118.              begin
  119.                 If(Open >= preEntryPrice + 0.5*N) then  // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。
  120.                  begin
  121.                     myEntryPrice := Open;
  122.                                         preEntryPrice := myEntryPrice;
  123.                     Buy('',TurtleUnits,myEntryPrice,0,OT_Market, OB_ThisBar);
  124.                                         SendOrderThisBar := True;
  125.                  end

  126.                 while(High >= preEntryPrice + 0.5*N) do  // 以最高价为标准,判断能进行几次增仓
  127.                  begin
  128.                     myEntryPrice := preEntryPrice + 0.5 * N;
  129.                     preEntryPrice := myEntryPrice;
  130.                     Buy('',TurtleUnits,myEntryPrice,0,OT_Market, OB_ThisBar);
  131.                                         SendOrderThisBar := True;                                       
  132.                  end
  133.              end
  134.                         
  135.             // 止损指令
  136.                         If(Low <= preEntryPrice - 2 * N && SendOrderThisBar == false) then  // 加仓Bar不止损
  137.                          begin
  138.                                 myExitPrice := preEntryPrice - 2 * N;
  139.                                 Sell('',0,myExitPrice,0,OT_Market, OB_ThisBar); // 数量用0的情况下将全部平仓
  140.                                 PreBreakoutFailure := True;
  141.                          end
  142.          end
  143.      end Else If  (MarketPosition ==-1) then // 有空仓的情况
  144.      begin
  145.         // 求出持空仓时离市的条件比较值        
  146.                 Comment('ExitHighestPrice='+NumToStr(ExitHighestPrice,0));
  147.         If(High > ExitHighestPrice) then
  148.          begin
  149.             myExitPrice := Min(High,ExitHighestPrice + MinPoint);
  150.                         myExitPrice := If(myExitPrice < Open, Open,myExitPrice); // 大跳空的时候用开盘价代替
  151.             BuyToCover('',0,myExitPrice,0,OT_Market, OB_ThisBar);    // 数量用0的情况下将全部平仓
  152.          end Else
  153.          begin
  154.             If(preEntryPrice!=Invalid && TurtleUnits >= 1) then
  155.              begin
  156.                 If(Open <= preEntryPrice - 0.5*N) then  // 如果开盘就超过设定的1/2N,则直接用开盘价增仓。
  157.                  begin
  158.                     myEntryPrice := Open;
  159.                                         preEntryPrice := myEntryPrice;
  160.                     SellShort('',TurtleUnits,myEntryPrice,0,OT_Market, OB_ThisBar);
  161.                                         SendOrderThisBar := True;
  162.                  end

  163.                 while(Low <= preEntryPrice - 0.5*N) do  // 以最低价为标准,判断能进行几次增仓
  164.                  begin
  165.                     myEntryPrice := preEntryPrice - 0.5 * N;
  166.                     preEntryPrice := myEntryPrice;
  167.                     SellShort('',TurtleUnits,myEntryPrice,0,OT_Market, OB_ThisBar);
  168.                                         SendOrderThisBar := True;
  169.                  end
  170.              end

  171.             // 止损指令
  172.                         If(High >= preEntryPrice + 2 * N &&SendOrderThisBar==false) then  // 加仓Bar不止损
  173.                          begin
  174.                                 myExitPrice := preEntryPrice + 2 * N;
  175.                                 BuyToCover('',0,myExitPrice,0,OT_Market, OB_ThisBar); // 数量用0的情况下将全部平仓
  176.                                 PreBreakoutFailure := True;
  177.                          end
  178.          end
  179.      end
  180. End

  181. //------------------------------------------------------------------------
  182. // 编译版本        GS2010.12.08
  183. // 版权所有        TradeBlazer Software 2003-2010
  184. // 更改声明        TradeBlazer Software保留对TradeBlazer平
  185. //                        台每一版本的TradeBlazer公式修改和重写的权利
  186. //------------------------------------------------------------------------
复制代码


使用道具 举报

Rank: 9Rank: 9Rank: 9

发表于 2013-8-20 07:28:57 |显示全部楼层
这里有一个貌似海龟实现,原来是TradeStation Easy language实现,转换成金魔方,有信号显示
http://hs633.com/forum.php?mod=viewthread&tid=10301&extra=page%3D1

使用道具 举报

Rank: 4

发表于 2013-8-23 14:13:56 |显示全部楼层
谢谢提供分享

使用道具 举报

Rank: 6Rank: 6

发表于 2013-8-28 12:40:21 |显示全部楼层
收藏,学习!

使用道具 举报

Rank: 2

发表于 2013-9-9 23:35:09 |显示全部楼层
收藏,学习,研究

使用道具 举报

Rank: 6Rank: 6

发表于 2013-11-16 15:46:25 |显示全部楼层
学习,研究!

使用道具 举报

Rank: 4

发表于 2014-6-16 08:46:57 |显示全部楼层
收藏学习了。感谢提供分享

使用道具 举报

Rank: 2

发表于 2014-9-24 22:10:02 |显示全部楼层
习学习!

使用道具 举报

Rank: 2

发表于 2014-10-6 11:38:10 |显示全部楼层
收藏学习了。感谢提供分享

使用道具 举报

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

bottom

Archiver|http://www.patiosoft.com

GMT+8, 2017-12-11 12:33 , Processed in 0.174149 second(s), 9 queries .

花生网 Copyrigh©2012

和讯信息科技有限公司 ALL Rights Reserved 版权所有 复制必究

回顶部