您现在的位置:程序化交易>> 期货公式>> 交易开拓者(TB)>> 开拓者知识>>正文内容

【系统案例】一种有名的趋势交易系统 [开拓者 TB]

  • 咨询内容: 译自Building Winning Trading System with TradeStation

    是否读过一些好的交易系统策略的文章而且在之后开始设计自己的交易系统。在过去20年,我们有数以千计的主义、计划、系统。不幸的是,大部分结束于无价值的费铁罐。有时候,然而,我们应该擦亮我们的眼睛说,Hmm。下一个策略是我们的介绍基于策略可以获得一次一次的成功。我们介绍这些系统作为一个工作的程序。你会很快发现,交易系统设计是没有尽头的。 无论如何你的努力地工作在交易系统的工作上。你也不会获得100%的满意结果。我所介绍的系统不会另你满意。我们希望这些真正属于你们自己。用程序模型在完全不同的趋势下。

        我们介绍的交易系统的方式将引导你进入必要的交易系统理念容入计算机软件中。我们首先以交易系统的一般规则和我们的设计的目标开始学习。工具是习惯于建设我们交易系统的方法论是认为定义。代码(一半英文一半计算机语言)是用于桥梁缺口在系统系统设计和实际代码。最终得以严格的系统程序语言。之后测试几个不同的市场在较长时间周期是一项繁重的交易过程,我们介绍个别的系统性能统计给你。当然,你也可以把这些系统作为你自己的交易通过建设自己的工作室和应

    用系统。

        我们试图把所有系统程序必要的工具一体化通过创造适合的交易模型。复杂标准的系统成长作为没一个系统介绍。我们希望解释的是包括真实的代码帮助你扫清混淆。

        古语说:很多方式可以给猫皮毛。更多的例子是,很多方式程序解决方案可以解决问题。他是一个综合的、精确的计算的交易系统。你可以很容易理解和更多有效的程序比我们在这里介绍的。我希望你可以做到。设计程序是一个艺术的过程,象其他艺术一样,他仅仅艺术家创造的有限的东西。

        凯特王交易系统

        以移动平均线计算为主要指标用在凯特王交易系统中。移动平均线通过计算X周期日期求和并且区分累计求和通过X值。一些时间这些计算用在固定数字的日期指向上。你有了很多数据指示后,新数据指示很少影响在最终的平均价值。长期移动均线指标试图解决长期趋势运动。相反,短期移动平均线试图察觉短期市场波动。切斯特、凯特介绍这个移动均线系统是在1960年。凯特系统展示了依据最高、最低、和收盘价建设的移动平均线系统和在移动均线最高和最低价双边市场形成的波段和通道中。买入信号发生在当市场价格穿越上轨,卖出信号发生在当市场价格穿越下轨。我们可以应用基本的凯特方法,但需要增加一些铃声和汽笛。我们希望,切斯特,当市场发生突发的移动均线从一个方向移动,他是趋势发生变化的信号。在凯特王系统中,上下波段的穿透被视为为趋势改变的信号。我们将跟随趋势在强势中买入在弱市中卖出。我们将随着赢利或亏损当市场折回移动均线的时候平仓离场。

        主要问题是通道突破系统是一个假突破。主要时间里,通道展示出市场力量耗尽时候趋势转换。经常地市场耗尽他本身力量移动到上轨或下轨并且立即回来朝相反的方向运动。这个是我们最担心出现的。然而,自从我们认识到这个类型系统的弱点,我们设计程序止损在移动均线。当交易开始的时候许多交易方法将失败并且一些形式的保护止损应该被执行。如果许多交易方法失败,之后为什么确定交易在第一个位置。成功的交易是消减短小的损失并且让利润持续。这个基本的交易原则




    在资金管理领域。你的交易系统让你参与到交易中并且资金管理系统管理你的头寸最终合理离场。在凯特王系统中, 移动均线的指示和轨道的穿透是我们入场交易的手法,和我们头寸离场在移动均线系统是我们资金管理系统。我们的资金管理止损将及可能是保护性止损也可能是盈利性止损。如果我们抓长期趋势,移动均线应该朝一个方向移动随着我们入场信号并且幸运地获得好的移动收入。永远记住出场技巧入场技巧的成功与否。凯特王系统是一个长期趋势系统,短期盈利不是我们的目的。我们将获利如果他们按照我们的计划,但是这个类型的系统他们最终可能达不到预想的目的。这个系统很少超过50%的成功率,我们抓到少数大的趋势将弥补多数小的亏损。

    大多数均线系统都是非常简单的程序并且这个也不例外,我们仅仅需要两个工具(1)最高、最低、收盘价的移动平均线。(2)移动平均线真实排列。你可能不熟悉真实排列这个术语。每日的日线排列就是通过计算每日最高价最低价的加减。这些排列的平均将是对期货价格排列的一个评估。所以真实排列计算延伸出来的日线排列就是前日的收盘价(真实排列=MAX(昨日收盘,当日最高价)-MIN(昨日收盘,当日最低)因此,扩展了日线的范围从而包括一些昨日收盘造成的缺口。我们认为真实排列给出了一些更精确的测定市场波动的方法。因此我们努力获取长期移动趋势,我们将用40日参数为我们平均参考计算。

     

  • TB技术人员: King Keltner Pseudocode

    movAvg = Average(((High + Low + Close)/3),40)

    upBand = movAvg + Average(TrueRange,40)

    dnBand = movAvg – Average(TrueRange,40)

    liquidPoint = Average(((High + Low + Close)/3),40)

    A long position will be initiated when today's movAvg is greater than

    yesterday's and market action >= upBand

    A short position will be initiated when today's movAvg is less than

    yesterday's and market action <= dnBand

    A long position will be liquidated when today's market action

    <= liquidPoint

    A short position will be liquidated when today's market action

    >= liquidPoint



    King Keltner Program

    {King Keltner by George Pruitt—based on trading system presented by Chester

    Keltner}

    Inputs: avgLength(40), atrLength(40);

    Vars: upBand(0),dnBand(0),liquidPoint(0),movAvgVal(0);

    movAvgVal = Average((High + Low + Close),avgLength);

    upBand = movAvgVal + AvgTrueRange(atrLength);

    dnBand = movAvgVal – AvgTrueRange(atrLength);

    if(movAvgVal > movAvgVal[1]) then Buy ("KKBuy") tomorrow at upBand stop;

    if(movAvgVal < movAvgVal[1]) then Sell Short("KKSell") tomorrow at dnBand

    stop;

    liquidPoint = movAvgVal;

    112 Building Winning Trading Systems with TradeStation

    If(MarketPosition = 1) then Sell tomorrow at liquidPoint stop;

    If(MarketPosition = –1) then Buy To Cover tomorrow at liquidPoint stop;



    凯特王系统程序测试

          调用均线和平均真实排列函数

          买/卖在下一个K线在停损水平

          清算头寸在下一个K线停损水平

          结合输入系统平台并且优化将来

    凯特王交易系统测试结果如表格,形象示例战士这个系统如何入场出场交易





    Table 6.1

    King Keltner Performance

    System Name: King Keltner Commission/Slippage = $75

    Tested 1982 – 3/19/2002

    Total Net Max. # of Max. Cons.

    Markets Profit DrawDown Trades % Wins Losers

    British Pound $ 48,056.25 $ (51,962.50) 239 30.13% 25

    Crude Oil $ 36,152.50 $ (17,682.50) 184 32.07% 16

    Corn $ (612.50) $ (10,681.25) 251 22.71% 14

    Copper $ 5,180.00 $ (12,182.50) 149 33.56% 10

    Cotton $ 30,387.50 $ (26,997.50) 241 24.48% 15

    Deutsch Mark $ 57,962.50 $ (11,575.00) 208 33.17% 10

    Euro Currency $ 2,612.50 $ (9,425.00) 36 38.89% 5

    Euro Dollar $ 37,392.50 $ (6,130.00) 204 30.88% 21

    Heating Oil $ 10,673.68 $ (25,697.71) 240 27.50% 12

    Japanese Yen $ 114,175.00 $ (30,162.50) 215 31.16% 12

    Live Cattle $ (3,036.50) $ (21,925.50) 243 24.28% 24

    Natural Gas $ 100,577.50 $ (14,157.50) 119 37.82% 7

    Soybeans $ (15,193.75) $ (34,818.75) 251 27.49% 15

    Swiss Franc $ 56,962.50 $ (14,837.50) 220 32.27% 8

    Treasury Note $ 61,850.00 $ (11,053.13) 209 33.01% 10

    U.S. Bonds $ 66,275.00 $ (15,543.75) 215 28.84% 9

    Wheat $ (16,112.50) $ (19,906.25) 254 22.83% 14

    Total $ 593,302.18 3478

     

  • TB客服: 凯特王系统摘要

    全部的交易测试显示非常有效,系统对大部分测试市场都达到非常好的盈利效果,这个交易系统在多次检验中都运转的很好,能构带来稳建的利润,回想这里仅有两个参量,效果同样有效对所有市场,这个系统可以通过修改优化参数来改良系统性能从而适应个别市场。我们倾向于同样的参数设置,但其他行业的人在这一点上与我争论。他们的争论基于相信市场是一个不同的市场(例如日圆和活牛期货)有不同的潜在原理,因此能用同样的方法测试不同的市场。变化参数来反映不同的市场不仅仅是 可接受的也是必要的。我们不完全同意这个观点,但我们可以讨论不同的参数用在不同的市场。所有流通的市场都有一个自己的参数设置,并且所有肉类也有一个自己的参数等等。我们强烈的反对用不同的参数来对日圆和瑞士法郎。这两个市场有相似的基本原理和市场运动模式。凯特王系统基于全部投资组合与交易平台。所有这些都需要有效的资金管理。

     

  • 网友回复: 很好的一个系统,呼唤高手把它转换成TB代码

     

  • 网友回复: 试着写了一下,没有用穿越模式,可能效果有些不同
    有不对之处请高手指出!
    Params
    Numeric avgLength(40);
    Numeric atrLength(40);
    Numeric LongLots(1);                // 开多仓的手数
    Numeric ShortLots(1);                // 开空仓的手数


    Vars
    Numeric MinPoint;                        // 最小变动单位
    NumericSeries upBand(0);
    NumericSeries dnBand(0);
    NumericSeries liquidPoint(0);
    NumericSeries movAvgVal(0);
    Numeric MyPrice;                                // 临时价格



    Begin
      MinPoint = MinMove*PriceScale;
      movAvgVal = Average((High + Low + Close)/3,avgLength);

      upBand = movAvgVal+AvgTrueRange(atrLength);

      dnBand = movAvgVal-AvgTrueRange(atrLength);
      
      liquidPoint = Average(((High + Low + Close)/3),40);

      If(MarketPosition!=1 && movAvgVal>movAvgVal[1]&&High>=upBand+minpoint)
         {  MyPrice = upBand+minpoint;
                    If(Open > MyPrice) MyPrice = Open;

                    Buy(LongLots,MyPrice);
             }
      else If(MarketPosition!=-1 && movAvgVal<movAvgVal[1]&&Low<=dnBand-minpoint)
         {  MyPrice = dnBand-minpoint;
                    If(Open < MyPrice) MyPrice = Open;

                    SellShort(ShortLots,MyPrice);
             }
           
       //持仓处理
       If(MarketPosition == 1 )
        {If(Low <= liquidPoint) // 跟踪止损退出
                    {
                            MyPrice =liquidPoint;
                            If(Open < MyPrice) MyPrice = Open;
                            Sell(LongLots,MyPrice);
                            Return;
                    }   
         } Else If(MarketPosition == -1)
             {
                    If( High >= liquidPoint) // 跟踪止损退出
                    {
                            MyPrice = liquidPoint;
                            If(Open > MyPrice) MyPrice = Open;
                            BuyToCover(ShortLots,MyPrice);
                            Return;
                    }
            }
           
    End

【字体: 】【打印文章】【查看评论

相关文章

    没有相关内容