STOCKS & COMMODITIES magazine. The Traders' Magazine
Request Information
From Advertisers
Traders.com
Stocks &
Commodities

  • Subscribers' Area
  • Current Issue

  •    - Opening Position
       - Letters to S&C
       - Traders' Tips
       - Futures Liquidity
       - News & Products
       - Books
       - Cover Art

  • Free Articles
  • Article Abstracts
    1996-Present
  • Complete Articles
    1982-Present
  • Novice Traders' Notebook
  • Glossary
  • Subscribe
  • Renew
  • Free Trial
  • Search
  • Working
    Money
    Traders.com
    Advantage
    Traders'
    Resource
    Online Store
    Message Boards
    Article Code
    Free Newsletter
    Products
    Search
    Help
    Subscribe
    Renew
    Contact Us
    Home

    Enter search terms:


    Products
    Small Book Image for Store.Traders.comStore.Traders.com
    Purchase past articles on hundreds of topics, along with software, books, and magazine subscriptions over a secure web connection. Click Here

     
    Search Products:

    @ Online Store!
    S&C Magazine Subscriber Login
    S&C Free Trial Issue
    S&C Volume Books
    S&C Magazine
    S&C on DVD
    Software
    Articles
    FREE ARTICLES! (while they last)
    VectorVest RealTime
    CrimsonMind.com
    The 21st-Century Technician
    Bennett McDowell
    Bill And Justine Williams
    Point & Figure for Forex
    Profitunity Home Study Course
    Support & Resistance ...
    BestChoice Software
    StrataSearch 3.0
    eSignal 10 and Advanced GET ...
    Elwave 9.0
    VisualTrader 4.0
    Forex Volatility Patterns
    Stock Trading Success
    Traders' Resource
    Advisory Services
    Books
    Brokerage
    Consultants
    Courses & Seminars
    Data Services
    Exchanges
    Hardware
    Mutual Funds
    Online Trading Services
    Publications & Newsletters
    Software
    Trading Systems

    Information Directory
    S&C Tour
    S&C Magazine
    Resources
    Products
    Subscribe
    This Month's Issue
    Home | S&C Magazine | Working Money | Traders' Resource | Message-Boards | Store


    March 2002
    TRADERS' TIPS 

    Here is this month's selection of Traders' Tips, contributed by various developers of technical analysis software to help readers more easily implement some of the strategies presented in this and other issues.

    You can copy these formulas and programs for easy use in your spreadsheet or analysis software. Simply "select" the desired text by highlighting as you would in any word processing program, then use your standard key command for copy or choose "copy" from the browser menu. The copied text can then be "pasted" into any open spreadsheet or other software by selecting an insertion point and executing a paste command. By toggling back and forth between an application window and the open Web page, data can be transferred with ease.

    This month's tips include formulas and programs for:

    TradeStation: Trend continuation factor
    Metastock: Trend continuation factor
    Neuroshell Trader: Trend continuation factor
    Neuroshell Trader: System debugging
    Wealth-Lab: Trend continuation factor
    Wealth-Lab: System debugging
    NeoTicker: Trend continuation factor
    NeoTicker: System debugging
    Investor/RT: Trend continuation factor
    BioComp Profit: Trend continuation factor
    SmarTrader: System debugging


    or return to March 2002 Contents


    TRADESTATION: Trend continuation factor

    In "Trend Continuation Factor" in this issue, M.H. Pee includes the code for a spreadsheet implementation of the TCF indicator and trading strategy. Here, we present the TradeStation EasyLanguage code for the TCF trading strategy. The strategy can easily be converted into a TradeStation indicator by replacing the buy/sell statements with plot statements as follows:

    Strategy: Trend Cont Factor

    inputs:
     Length( 35 ) ;
    variables:
     Change( 0 ),
     PlusChange( 0 ),
     MinusChange( 0 ),
     PlusCF( 0 ),
     MinusCF( 0 ),
     PlusTCF( 0 ),
     MinusTCF( 0 ) ;
    Change = Close - Close[1] ;
    PlusChange = iff( Change > 0, Change, 0 ) ;
    MinusChange = iff( Change < 0, -Change, 0 ) ;
    PlusCF =
     iff( PlusChange = 0, 0, PlusChange + PlusCF[1] ) ;
    MinusCF =
     iff( MinusChange = 0, 0, MinusChange + MinusCF[1] ) ;
    PlusTCF =
     Summation( PlusChange - MinusCF, Length ) ;
    MinusTCF =
     Summation( MinusChange - PlusCF, Length ) ;
    if PlusTCF > 0 then
      Buy next bar at market
    else if MinusTCF > 0 then
      Sell next bar at market ;


     This code will be available for download from www.tradestation2000i.com. Select Support -> EasyLanguage -> Strategies and Indicators -> Traders' Tips, and look for the file TrendContFactor.Els.
     

    --Ramesh Dhingra
    Director, EasyLanguage Consulting
    TradeStation Technologies, Inc. (formerly Omega Research, Inc.),
    a wholly owned subsidiary of TradeStation Group, Inc.
    http://www.TradeStation.com


    GO BACK



     

    METASTOCK: Trend continuation factor

    In "Trend Continuation Factor" in this issue, M.H. Pee introduces several new indicators to help identify trend and its direction. These indicators can be easily recreated in MetaStock 6.52 or higher.
     

    In MetaStock, select Indicator Builder from the Tools menu, click New, enter the code for the indicator, and click OK. Repeat for the remaining indicators. The code follows:

    Name: +TCF
    Formula:
    pc:=If(ROC(C,1,$)>0,ROC(C,1,$),0);
    nc:=If(ROC(C,1,$)<0,Neg(ROC(C,1,$)),0);
    ncf:=If(nc=0,0,PREV+nc);
    Sum(pc,35)-Sum(ncf,35)
    Name: -TCF
    Formula:
    pc:=If(ROC(C,1,$)>0,ROC(C,1,$),0);
    nc:=If(ROC(C,1,$)<0,Neg(ROC(C,1,$)),0);
    pcf:=If(pc=0,0,PREV+pc);
    Sum(nc,35)-Sum(pcf,35)
    Name: Position
    Formula:
    pc:=If(ROC(C,1,$)>0,ROC(C,1,$),0);
    nc:=If(ROC(C,1,$)<0,Neg(ROC(C,1,$)),0);
    pcf:=If(pc=0,0,PREV+pc);
    ncf:=If(nc=0,0,PREV+nc);
    ptcf:=Sum(pc,35)-Sum(ncf,35);
    ntcf:=Sum(nc,35)-Sum(pcf,35);
    If(ptcf>0,1, If(ntcf>0,-1, PREV));


     To plot the indicator, locate it in MetaStock's Indicator Quicklist, then click and drag it onto the desired chart.

    --Cheryl C. Abram, Equis International, Inc.
    www.equis.com


    GO BACK


    NEUROSHELL TRADER: Trend continuation factor

    To implement in NeuroShell Trader a trading system using the trend continuation factor as described by M.H. Pee in his article in this issue, you should first create the trend continuation indicators in a chart, then create a NeuroShell Trader Trading Strategy based on those indicators.
     
     


     
    FIGURE 1: NeuroShell Trader, trend continuation factor. Here's a sample chart plotting M.H. Pee's trend continuation factor.


    To create the trend continuation factor indicators, select "New Indicator " from the Insert menu and use the Indicator Wizard to create each of the following:

    +CHANGE:
     CumulativePositiveMomentum(Close,1,1)

    -CHANGE:
     AbsoluteValue(CumulativeNegativeMomentum(Close,1,1)

    +CF:
         ConsecutiveSum ( +CHANGE, A>B(+CHANGE, 0 ))

    -CR:
         ConsecutiveSum (-CHANGE, A>B(-CHANGE, 0 ))

    +TCF:
         Subtract ( Sum ( +CHANGE, 35 ), Sum ( -CF, 35 )

    -TCF:
         Subtract ( Sum ( -CHANGE, 35 ), Sum ( +CF, 35 )
     
     

    Note: The ConsecutiveSum indicator is a custom indicator that users of NeuroShell Trader can download from the Tips & Techniques section of the NeuroShell Trader free technical support website. It is based on the following indicator with the Xs mapped to one parameter and the numeric parameters hidden:

     Sub ( CumulativeSum (X,0), SelectiveMovAvg( CumulativeSum(X,0), Not(CONDITION), 1 )

     To recreate the trend continuation factor trading system, select "New Trading Strategy" from the Insert menu and enter the following long and short entry conditions in the appropriate locations of the Trading Strategy Wizard:

    Generate a buy long MARKET order if ALL of the following are true:
     A>B ( +TCF, 0 )

    Generate a sell short MARKET order if ALL of the following are true:
     A<B ( -TCF, 0 )

     If you have the NeuroShell Trader Professional, you can also choose whether or not the system parameters should be optimized. After backtesting the trading strategy, use the "Detailed Analysis" button to view the backtest and trade-by-trade statistics for the trend continuation factor system.
     Users of NeuroShell Trader can go to the STOCKS & COMMODITIES section of the NeuroShell Trader free technical support website to download the sample chart that includes the ConsecutiveSum indicator, +Tcf indicator, -Tcf indicator, and trend continuation factor trading systems. For more on NeuroShell Trader, visit www.NeuroShell.com.

    --Marge Sherald, Ward Systems Group, Inc.
    301 662-7950, sales@wardsystems.com
    http://www.neuroshell.com


    GO BACK


    NEUROSHELL TRADER: System debugging

    The system described in John Clayburg's article in this issue, "Debugging Your System: If At First You Don't Succeed," can be easily implemented in NeuroShell DayTrader Professional by creating a NeuroShell Trading Strategy with the rules described here. We've done this for you already and have created a chart that you can download from the NeuroShell Trader free technical support website.
     


    FIGURE 2: NeuroShell Trader, debugging systems. Here's how to add the short entry conditions using NeuroShell DayTrader's Trading Strategy Wizard.


    However, we wanted to show you how easy it is to implement this system in NeuroShell DayTrader Professional. To do this, select "New Trading Strategy " (Figure 2) from the Insert menu and follow these steps:

    1. On the Short Entry Tab:
        A. Select "Generate a sell short 'LIMIT' order if 'ALL' of the following are true.
        B. Insert the conditions:
            A>B(Stoch%D(High,Low,Close,45,45),70)
            A>B(Lag(Stoch%D(High,Low,Close,7,7),1),88)
            A<B(Stoch%D(High,Low,Close,7,7), Lag(Stoch%D(High,Low,Close,7,7),1))
            Time<=X(Date,4:05:00 PM)
        C. In the Limit Price, add the indicator:
        Lowest(Low,10)
    2. In the Short Exit Tab:
        A. Insert the condition
            Time>=X(Date,4:10:00 PM)


    Note: Users of NeuroShell DayTrader Professional could use the genetic algorithm optimizer to finetune these conditions for perhaps a more profitable result.

    To debug the system as suggested by Clayburg, first select the items that you are interested in seeing from the "Existing Data / Calculations" selection on the Insert menu. Second, select the "Snapshot View" from the View menu. Finally, select the "Cross Hair Cursor" from the View menu (or just select the cross hair on the toolbar). This will enable you to view any of the values on the chart by simply clicking on the date/time that you wish to see.

    Note that the time of 4:10 pm was chosen for an exit because this is the next-to-last bar of the chart given the market close of 4:15 and a five-minute chart. Similarly, the time of 4:05 pm was chosen to limit the entries because 4:05 is the next prior bar given the 4:15 market close and a five-minute bar. If you apply this system to different markets or use different chart frequencies, you will need to change the times appropriately.

    Users of NeuroShell DayTrader Professional can go to the STOCKS & COMMODITIES section of the NeuroShell Trader free technical support website to download an example chart with the system described in Clayburg's article.

    --Marge Sherald, Ward Systems Group, Inc.
    301 662-7950, sales@wardsystems.com
    http://www.neuroshell.com
    GO BACK


    Wealth-Lab: Trend continuation factor

    The trend continuation factor presented by M.H. Pee in his article in this issue is composed of two indicators, Tcf+ and Tcf-. You can install these indicators into Wealth-Lab Developer 2.0 by using the program's Download facility. Select "File/Download ChartScripts" from the main menu and click the "Begin download" button. This causes any newly published scripts to be downloaded directly from the Wealth-Lab.com website. You can see in the download results that the TcfPlus and TcfMinus indicators were downloaded and installed on your system (Figure 3).
     
     


     

    FIGURE 3: Wealth-Lab, trend continuation factor. Download the TCRPlus and TCR Minus indicators into Wealh-Lab using Wealth-Lab's download facility to download all new scripts. The results window shows what was downloaded.


    You can now use these indicators in your own scripts. To include a custom indicator or study into your script, press F6 to launch the "Include Manager" in Wealth-Lab. Then select the indicators and/or studies you wish to include. Here, we'll include the TcfPlus and TcfMinus indicators, as well as the Profit Pane Study so we can see how much profit our system is wracking up (Figure 4).
     


     
    FIGURE 4: Wealth-Lab, trend continuation factor. Select the custom indicators and/or studies you wish to include in your Wealth-Lab script. The TcfPlus and TcfMinus indicators, as well as the profit pane study, were included here.


    The script we present here duplicates the system rules that were outlined in Pee's article. It is a stop-and-reverse system that goes long when the Tcf+ crosses above zero, and sells short when Tcf- crosses above zero. The system performed well on Ameritrade [AMTD], catching a huge trend in late 1998 and riding it for a huge profit until June 1999. The system equity remained flat thereafter, while AMTD experienced a marked decline (Figure 5).
     
     


     

    FIGURE 5: Wealth-Lab, trend continuation factor. Here are sample results from implementing M.H. Pee's stop-and-reverse system. The system performed well on Ameritrade [AMTD] in 1998-99.
     
    var BAR: integer;
    {$I 'TCFMinus'}
    {$I 'TCFPlus'}
    var TCFPane: integer;
    TCFPane := CreatePane( 100, true, true );
    PlotSeries( TCFPlusSeries( #Close, 35 ), TCFPane, 050, #ThickHist );
    PlotSeries( TCFMinusSeries( #Close, 35 ), TCFPane, 900, #ThickHist );
    DrawLabel( 'TCFPlus/TCFMinus(Close,35)', TCFPane );
    DrawHorzLine( 0, TCFPane, #Black, #Thin );
    for Bar := 36 to BarCount - 1 do
    begin
     if CrossOverValue( Bar, TCFPlusSeries( #Close, 35 ), 0 ) then
     begin
      if LastPositionActive and not PositionLong( LastPosition ) then
       CoverAtMarket( Bar + 1, LastPosition, 'TCF' );
      if not LastPositionActive then
       BuyAtMarket( Bar + 1, 'TCF' );
     end
     else if CrossOverValue( Bar, TCFMinusSeries( #Close, 35 ), 0 ) then
     begin
      if LastPositionActive and PositionLong( LastPosition ) then
       SellAtMarket( Bar + 1, LastPosition, 'TCF' );
      if not LastPositionActive then
       ShortAtMarket( Bar + 1, 'TCF' );
     end;
    end;
    {$I 'Profit Pane (Bottom)'}
     
    --Dion Kurczek, Wealth-Lab.com
    www.wealth-lab.com
    GO BACK


    Wealth-Lab: System debugging

    We'll compare the debugging techniques for EasyLanguage described in John Clayburg's article in this issue, "If At First You Don't Succeed," with the corresponding debugging techniques in Wealth-Lab Developer.

    The first debugging tool mentioned is the print statement. This writes a line of debugging information to the specified output device. Wealth-Lab Developer's scripting language, WealthScript, contains a print statement similar to EasyLanguage's. The primary difference is that you have control of when to print. You can print only when required, so you don't have to sort through excessive print output (Figure 6).
     



     

    FIGURE 6: Wealth-Lab, debugging window. The print statement in Wealth-Lab Developer writes a line of debugging information to the specified output device. Wealth-Lab gives you control over what and when to print.


    The next tool mentioned in the article is the Expert Commentary window. Clayburg used the commentary window to display data values at specific bars. While Wealth-Lab Developer does provide an expert commentary feature, the built-in data window can be used to perform the exact same function with no additional work. The data window automatically displays the values for a single bar on your chart. It includes OHLC and volume, as well as any indicators or custom series that you created in your script. As you move the mouse over the chart, the data window updates to reflect the values at the bar that the mouse is passing over (Figure 7).
     



     

    FIGURE 7: Wealth-Lab, data window. In Wealth-Lab, the data window automatically displays the values for a single bar on your chart, including OHLC and volume, as well as any indicators or custom series that you created in your script.
    The following script implements Clayburg's dual stochastic daytrading system. It includes some sample debugging print statements that output information for the bars in which trades were executed (Figure 8).

     
    Figure 8: WEALTH-LAB, Stochastic System. Here's a sample chart of the stochastic system as implemented in Wealth-Lab.
    { Define variables }
    var StochPane, Bar: integer;
    var bSetup: boolean;
    { Plot indicators }
    StochPane := CreatePane( 100, true, true );
    PlotSeries( StochDSeries( 45, 5 ), StochPane, 202, #Thick );
    DrawLabel( 'StochD( 45, 5 )', StochPane );
    PlotSeries( StochDSeries( 7, 5 ), StochPane, 202, #Thin );
    DrawLabel( 'StochD( 7, 5 )', StochPane );
    { Implement trading rules }
    bSetup := false;
    for Bar := 45 to BarCount - 1 do
    begin
      if not LastPositionActive then
      begin
    { See if we have a Stochastic sell setup }
        if StochD( Bar, 45, 5 ) > 70 then
          if StochD( Bar - 1, 7, 5 ) > 88 then
            if TurnDown( Bar, StochDSeries( 7, 5 ) ) then
              bSetup := true;
    { If a sell setup is in place, sell at lowest 10 bar low stop }
        if bSetup then
        begin
          if LastBar( Bar ) then
            bSetup := false
          else if ShortAtStop( Bar + 1, Lowest( Bar, #Low, 10 ), 'Break of
    Support' ) then
          begin
            Print( 'Date: ' + DateToStr( GetDate( Bar ) ) + ' ' + TimeToStr( GetTime( Bar ) ) );
            Print( ' StochD(45): ' + FormatFloat( '#0.00', StochD( Bar, 45, 5 ) ) );
            Print( ' StochD(7): ' + FormatFloat( '#0.00', StochD( Bar, 7, 5 ) ) );
            Print( '' );
            bSetup := false;
          end;
        end
      end
      else if LastBar( Bar ) then
        SellAtClose( Bar, LastPosition, 'End of Day' );
    end;
    --Dion Kurczek, Wealth-Lab.com
    www.wealth-lab.com
    GO BACK


    NeoTicker: Trend continuation factor

    To implement in NeoTicker the trading system presented by M.H. Pee in "Trend Continuation Factor" in this issue, first create an indicator called Tcf with one integer parameter, Period (Listing 1). Then create a simple backtesting system called backtestTcf with the following attributes: initial capital: $50,000; fill: exact; size: 1; commission: $75; multiple: 1000 (Listing 2). You will need to change the "multiple" parameter when testing the system against different types of securities. For example, use the setting 1,000 for crude oil, 250 for S&P index futures, and 1 for stocks.
     

    LISTING 1
    function TCF()
       dim changeval
       if not Data1.valid (0) then
          itself.success = false
          exit function
       end if
       Period       = params(1).int
       Pchangestart = 0
       Pchangeend   = Period-1
       Nchangestart = Period
       Nchangeend   = Period*2-1
       PCFstart     = Period*2
       PCFend       = Period*3-1
       NCFstart     = Period*3
       NCFend       = Period*4-1
       ChangeIdx    = Period*4
       ' Initializing heap value
       if Heap.size = 0 then
          heap.allocate (Period*4+1)
          heap.fill 0, Period*4, 0
       end if
       itself.makeindicator "mymo", "MO", Array("1"), Array("1")
       changeval = itself.indicator("mymo")
       cidx = heap.value (ChangeIdx) mod Period
       if changeval.value (0) > 0 then
          heap.value (Pchangestart+cidx) = changeval.value (0)
          heap.value (Nchangestart+cidx) = 0
          if cidx = 0 then
             heap.value (PCFstart)       = changeval.value (0) + _
                                           heap.value(PCFend)
          else
             heap.value (PCFstart+cidx)  = changeval.value (0) + _
                                           heap.value (PCFstart+cidx-1)
          end if
          heap.value (NCFstart+cidx)     = 0
       elseif changeval.value (0) < 0 then
          heap.value (Pchangestart+cidx) = 0
          heap.value (Nchangestart+cidx) = tq_abs(changeval.value (0))
          heap.value (PCFstart+cidx)     = 0
          if cidx = 0 then
             heap.value (NCFstart)       = tq_abs(changeval.value (0)) + _
                                           heap.value(NCFend)
          else
             heap.value (NCFstart+cidx)  = tq_abs(changeval.value (0)) + _
                                           heap.value(NCFstart+cidx-1)
          end if
       else
          heap.value (Pchangestart+cidx) = 0
          heap.value (Nchangestart+cidx) = 0
          heap.value (PCFstart+cidx)     = 0
          heap.value (NCFstart+cidx)     = 0
       end if
       Heap.value(ChangeIdx) = Heap.value(ChangeIdx)+1
       if Heap.value(ChangeIdx) < Period then
          itself.success = false
          exit function
       end if
       itself.answer(1) = heap.sum (Pchangestart, Pchangeend) - _
                          heap.sum (NCFstart, NCFend)
       itself.answer(2) = heap.sum (Nchangestart, Nchangeend) - _
                          heap.sum (PCFstart, PCFend)
    end function
    LISTING 2
    function backtestTCF ()
     'if it is first time that the function is used in a chart,
     'then the heap must be of size zero
     if heap.size = 0 then
      'now modify heap so it is no longer of size 0 and this section
      'of code will not be executed in the next round
      heap.allocate (1)
      'system setting initialization
      with trade
       .InitialCapital   = param1.real
       .commissionType   = cmFlatRate  ' cmFlatRate or cmPerUnit
       .commissionBaseAmount = param4.real ' can be a fixed value like $15
       .commissionPerUnit   = 0    ' for some brokers, can be $0.05
       .singleentryPerdirection = true
       .pricemultiple = Params(5).real
       ' if you do not want to use the system real time,
       ' change the following to false
       monitor = true
       if strcomp(param2.str, "Exact") = 0 then
        .FillType = ftExact
       elseif strcomp(param2.str, "Worst") = 0 then
        .FillType = ftWorst
       elseif strcomp(param2.str, "Average") = 0 then
        .FillType = ftAverage
       end if
      end with
     end if
     if not data1.valid (0) then
      itself.success = false
      exit function
     end if
     if not data2.valid (1, 0) or not data2.valid (2, 0) then
      itself.success = false
      exit function
     end if
     ' system rules section
     ' check if necessary to close current open position
     if data2.ValueEx (1, 0) > 0 and trade.OpenPositionSize < 0 then
      trade.exitcurrentposition ("Exit Open Position")
     end if
     if data2.ValueEx (2, 0) > 0 and trade.OpenPositionSize > 0 then
      trade.exitcurrentposition ("Exit Open Position")
     end if
     ' rules to go long
     if data2.ValueEx (1, 0) > 0 then
      trade.BuyAtMarket param3.int, "Long Entry"
     end if
     ' rules to go short
     if data2.ValueEx (2, 0) > 0 then
      trade.SellAtMarket param3.int, "Short Entry"
     end if
     ' system report at last bar -
     ' useful only during development process
     if data1.isLastBar and strcomp(Param6.str,"None") <> 0 then
      with trade
       if strcomp(Param6.str,"Report Window") = 0 then
        Report.Clear ("")
        .ReportAllTrades ("")
        .ReportTradesSummary ("")
      elseif strcomp(Param6.str,"Excel") = 0 then
        .ReportAllTrades2Excel
        .ReportTradesSummary2Excel
       end if
      end with
     end if
     backtestTCF = trade.currentequity
    end function
    The backtestTcf indicator will return an equity curve (Figure 9) and a test result report. A working NeoTicker script version of this indicator and backtest system are available for download from the NeoTicker Yahoo! user group at: http://groups.yahoo.com/group/neoticker/.
     



     

    FIGURE 9: NeoTicker, trend continuation factor. The backtestTcf indicator in NeoTicker will return an equity curve and a test result report.
    --Kenneth Yuen, TickQuest Inc.
    www.tickquest.com


    GO BACK


    NeoTicker: System debugging

    John Clayburg's article in this issue, "If At First You Don't Succeed," discusses successful methods of debugging systems to help traders who wish to create their own systems.

    NeoTicker has a reporting window that allows users to send formatted output (Figure 10). This is an excellent tool for use in debugging and implementing trading systems. In the following NeoTicker code for implementing Clayburg's dual stochastic system, you can use report.addline to send to the report window the bar values of any bar (Figure 11). You can also programmatically control report lines.
     



     

    FIGURE 10: NeoTicker, system results. NeoTicker has a reporting window that allows users to send formatted output. This is a helpful tool for use in debugging and implementing trading systems.


     
    FIGURE 11: NeoTicker, Report window. In NeoTicker, you can send to the report window the bar values of any bar. You can also programmatically control report lines.
    Dual stochastic system
    function dual_fastd()
       dim lfastd, sfastd, lowestl
       dim fastd45, fastd7, fastd71, lowestl10, condition
       if heap.size = 0 then
          heap.allocate 2 ' heap to save the condition of the current bar
          heap.value(0) = 0
          heap.value(1) = data1.day(0)
          with trade
             ' turn this option true for system monitor to track it
             .monitor = true
             ' turn this option true for real-time trading system that close
             ' all open position at end of day
             .closepositioneod = true
             ' there are 3 basic types of fill
             ' ftAverage, ftWorst, ftExact
             .fillType = ftExact
             ' commission structure (per transaction)
             ' cmFlatRate, cmPerUnit
             .commissionType = cmFlatRate
             .commissionBaseAmount = 15
             ' per unit cost setting is not important for flat rate type
             .commissionPerUnit = 0
             ' initicalcapital
             ' it is important for sharpe ratio and other
             ' performance statistics calculations only
             .initialcapital = 50000
             ' the risk free interest rate
             ' works with initial capital for statistics calculation
             .interestrate = 5
             ' pricemultiple is 1 for stock
             ' 50 for sp emini index future, 250 for sp index future
             ' 20 for nd emini index future, 100 for nd index future
             .pricemultiple = 50
             .SingleEntryPerDirection = true
          end with
       end if
       ' signal generation part
       ' construct the necessary indicators
       itself.makeindicator "lfastd", "fastd", Array ("1"), Array (params(1).str, params(2).str)
       itself.makeindicator "sfastd", "fastd", Array ("1"), Array (params(3).str, params(4).str)
       itself.makeindicator "lowestl", "llv", Array ("1.l"), Array (params(5).str)
       ' setup for the condition checking
       lfastd  = itself.indicator ("lfastd")
       sfastd  = itself.indicator ("sfastd")
       lowestl = itself.indicator ("lowestl")
       fastd45   = lfastd.value(0)
       fastd7    = sfastd.value(0)
       fastd71   = sfastd.value(1)
       lowestl10 = lowestl.value(0)
       condition = heap.value(0)
       if data1.day(0) <> heap.value(1) then
          condition     = 0
          heap.value(0) = 0
          heap.value(1) = data1.day(0)
       end if
       if trade.OpenPositionSize <> 0 then
          itself.answer(1)    = trade.currentequity
          itself.successex(2) = false
          exit function
       end if
       trade.cancelallsellorders
       ' generate orders according to the current condition
       if (fastd45 > 70) and (fastd71 >88) and (fastd7 < fastd71) then
          condition     = 1
          heap.value(0) = 1
       end if
       if data1.time(0) > TimeValue(params(7).str) then
          condition     = 0
          heap.value(0) = 0
       end if
       if condition = 1 then
          trade.sellstop lowestl10, params(6).int, otfDay, ""
          itself.answer(2) = lowestl10
          report.addline "", "FastD(45)=" + tq_double2str(fastd45)
          report.addline "", "FastD(7)="  + tq_double2str(fastd7)
          report.addline "", "Lowest(1,10)=" + tq_double2str(lowestl10)
          report.addline "", "Condition=True"
       else
          itself.successex(2) = false
       end if
       itself.answer(1) = trade.currentequity
       ' final reporting of system performance
       ' uncomment those reports that you want to output
       if data1.isLastbar then
          with trade
             '.reportalltrades ""
             .reporttradessummary ""
          end with
       end if
    end function


    This dual_fastd system produces two plots: the first plot is the equity curve of your system; the second plots a dot with the lowest low value. The preceding code will print the FastD(45), FastD(7), Lowest(1,10), and the condition (Figure 11).

    If you are interested in individual trades, you can uncomment the line reportalltrade to see the trade history of your system.

    A downloadable version of this system will be available from the TickQuest website or NeoTicker user group at http://groups.yahoo.com/neoticker.

    --Kenneth Yuen, TickQuest Inc.
    www.tickquest.com
    GO BACK


    Investor/RT: Trend continuation factor

    Investor/RT has added a built-in technical indicator called the trend continuation factor. The preferences for the trend continuation factor indicator can be seen in Figure 12.

     

    FIGURE 12: Investor/RT, preference window. Here are the suggested preference settings for the trend continuation factor.


    As M.H. Pee discusses in his article in this issue, Pee created the trend continuation factor to help identify the trend and its direction.

    Positive values of either the positive trend continuation factor (Tcf+) or the negative trend continuation factor (Tcf-) indicate the presence of a strong trend. Positive values of Tcf+ indicate a strong uptrend, while positive values of Tcf- indicate a strong downtrend. Tcf+ and Tcf- cannot both be positive at the same time, since both an uptrend and a downtrend cannot occur simultaneously. Both can be negative. If both are negative, this signifies consolidation, or the absence of a trend. It recommended entering long positions when the Tcf+ value is positive, and entering short positions when the Tcf- value is negative. A daily chart of Microsoft [MSFT] is shown below, with the trend continuation factor added to the lower windowpane (Figure 13). Tcf+ is shown in blue, while Tcf- is show in red.
     



     

    FIGURE 13: Investor/RT, trend continuation factor. This Investor/RT chart illustrates the trend continuation factor on Microsoft. The TCF+ is shown in blue, with the TCF- shown in red.


    The Tcf can be created in its own windowpane, or can overlay the price data. Tcf can be dragged back and forth between panes, or dragged into its own pane. The indicator can be drawn showing both the Tcf+ and Tcf- lines, or showing only one of the two. A reference line is automatically drawn at zero. The period of the Tcf can be adjusted quickly using the keyboard. Simply select either Tcf line (by simply clicking on it, or tabbing to it), then hit the up or down arrows on your keyboard. The up arrow increases the period by 1, while the down arrow decreases the period by 1. The resulting lines will be seen instantly reflecting the change. This is a good method for performing visual optimization while trying to determine the best period to use for a particular market and timeframe. The trend continuation factor is accessible to custom indicators, scans, and trading signals using the RTL token "Tcf."

    --Chad Payne, Linn Software
    800 546-6842, info@linnsoft.com
    www.linnsoft.com


    GO BACK


    BIOCOMP PROFIT: Trend continuation factor

    This month, M.H. Pee offers us a trend continuation factor (TCF) indicator. We recreated this indicator using BioComp Profit's Indicator Add-In API and tested its performance.

    To do this, we created five-, 10-, 15-, and 20-period Tcf indicators of the close of the S&P 500 continuous futures contract and used BioComp Profit's input selection, ranking, and adaptive modeling the two-day ahead change in price from August 1999 to February 2000. We then evaluated hypothetical trading from February 2000 until January 2002. Our test criterion is the ability to create hypothetically profitable trading systems on this out-of-sample data.

    We found that we could create hypothetically profitable systems out-of-sample. In our test system, we realized gains of approximately $149,000 during a period where the markets declined nearly 250 points. Since these gains are achieved in a virtual model voted from a system of real models, we inspected each real model and found significant equity performance variance, indicating that a productive trading system should use additional information to increase robustness. BioComp Profit's input ranking technologies tell us that the shorter five- and 10-period Tcf offers the most useful information.

    The TCF indicator add-in is freely available to all BioComp Profit users at http://www.biocompsystems.com.

    --Carl Cook, President and Chief Technical Officer
    BioComp Systems, Inc.
    425 869-6770, cookcarl@biocompsystems.com
    www.biocompsystems.com
    GO BACK


    SMARTrader: System debugging

    Elsewhere in this issue, John Clayburg presents "Debugging Your System: If At First You Don't Succeed."

    Debugging in SmarTrader RT is simple. After constructing your system (here we use the system given in John Clayburg'sarticle), simply minimize the chart windows and tile the spreadsheet and specification sheet windows side by side. The rows will align and you can see the results of the calculations, conditional statements, and so on, for every row.
     


     
    FIGURE 14: SmarTrader specsheet. Here is the SmarTrader specsheet showing how to implement the stochastics system described by John Clayburg. Tiling the specsheet and the spreadsheet side-by-side helps you debug your system.


    Row 9, D%45, is the 45-bar stochastic D% calculation. Row 10, D%7, is the seven-bar stochastic D% calculation. Note that we omit the stochastic K, as it is not needed to calculate D%.
     Row 11, Lowest, is the 10-bar lowest low.
     Row 12, Condition 1, is a user row where we define the various conditions that must occur concurrently for Condition 1 to be true.
     Row 13, exitTime, is a user row where we set the exit time to clear trades at the end of the day. Time is expressed as military time and can be set as appropriate.

     
    --Jim Ritter, Stratagem Software
    504 885-7353, Stratagem1@aol.com


    GO BACK


    All rights reserved. © Copyright 2002, Technical Analysis, Inc.


    Return to March 2002 Contents
    Technical Analysis, Inc.

    [Home | Working Money Magazine | S&C Magazine | Traders.com Advantage | Online Store]
    [Traders' Resource | Add a Product to Traders' Resource | Message Boards]
    [Subscribe/Renew | Free Trial Issue | Article Code | Search | Help Files]
    Departments: [Advertising | Editorial | Circulation | Employment | Contact Us]

    Copyright © 1996-2009 Technical Analysis, Inc. All rights reserved. Read our privacy statement.

    Technical Analysis, Inc.
    Subscribe! Free E-mail Newsletter.
    First: Last:
    E-mail: