Index Futures Trading System - Please comment :)

Discussion in 'Strategy Building' started by steve.k.tang, Apr 29, 2009.

  1. Hi Everyone,

    Here's an idea I've been using for a few months and has been doing ok. I'll go through the details but not going to post any results.

    OK, here we go :)

    Suppose that the average intraday range (say 20 days) on a stock index futures contract is 3.00%. The sytem will assume that the range of 3.00% will be traded each day. We dynamically assign long and short triggers and profit targets as follows:

    Long Trigger = Day Low + (0.5 x Average Intraday Range)
    Short Trigger= Day High - (0.5 x Average Intraday Range)

    Long Target = Day Low + Average Intraday Range
    Short Target = Day High - Average Intraday Range

    Stop Loss = Entry +/- (0.25 x Average Intraday Range )

    The logic is to wait for the market to move in the right direction by at least half way and use a 1 or 3 minute chart to trade the breakout of the first peak/trough that follows to avoid false breaks. If the market reverses, take the stop and then trade the opposing trigger if breached. Only trade each direction once to avoid stacking up losses.

    To be more conservative watch the major constituents of the index u are trading. You want these to be moving in the same direction as confirmation. And look to close the trade at 75% of the projected target (ie. (Target - Entry) x 0.75) in case the range today is less than the average.

    Comments welcome :)
     
  2. Sounds well-conceived and if the entries and exits are generated properly you should have good success.
     
  3. hayman

    hayman

    Steve,

    The "Daily Low" is the prior day's Low, I assume ?

    So, looking at the Long side, if we gap up in the morning by more than half the Average Range, then there is a good chance that we will be filled at the Open ? Is that what you are saying here ?
     
  4.  
  5. Hayman,

    The Day Low is the current day's low. So if the market keeps falling then the Long Trigger will be adjusted lower. And trading is abandoned once the average daily range is filled. Also note that as the market keeps falling, it may trigger the Short Trigger. What do u think?

    Other readers welcome to comment too :)
     
  6. Big AAPL

    Big AAPL

    So, is the current days low effectively period '21' and calculated real time so that the entry (and / or exit) triggers become dynamic?

    Also, how did you arrive at 20 days?

    Thanks.
     
  7. Correct. 20 is roughly 1 mth. You can experiment with other numbers.
     
  8. Yesssss....
     
  9. Prevail

    Prevail Guest

    anyone code it and have an equity curve? I often use .4 as the multiplier.
     
  10. Here is an initial attempt at coding. Entry breakout version is commented out. Alternate version of ATR is commented out

    Code follows
    ------------------------------------------
    {Start Easylanguage Here}
    {Data1: Intraday Bars Data2:Daily bars}
    input:lookback(20),Rangepct(.5),StopPct(.25);

    Var:mp(0),Atr(0),upcross(0),downcross(0);
    mp=marketposition;
    {Atr=average(range,lookback) data2;}
    Atr=avgtruerange(lookback) data2;
    commentary("LowD(0) = ",Lowd(0));
    commentary("Range = ",Atr);
    Commentary("Long entry = ",Lowd(0)+(rangepct*ATR));
    {if c >= Lowd(0)+(rangepct*ATR) then buy next bar at (highest(c,3)+(minmove/100))stop;
    if c <=Highd(0)-(rangepct*ATR) then sell short next bar at (lowest(c,3)-(minmove/100))stop;}

    if c crosses above Lowd(0)+(rangepct*ATR) then begin
    if upcross=0 then buy this bar;
    upcross=1;
    end;

    if c crosses below Highd(0)-(rangepct*ATR) then begin
    if downcross=0 then sell short this bar;
    downcross=1;
    end;


    if mp=1 then begin
    sell("LX Target") next bar at lowd(0)+(.75*atr) limit;
    sell ("Lx Stop")next bar at entryprice(0)-(Atr*StopPct)stop;
    end;

    if mp=-1 then begin
    buy to cover("Sx Target") Next bar at Highd(0)-(.75*Atr )limit;
    buy to cover("Sx Stop") next bar at entryprice(0)+(Atr*StopPct) stop;
    end;

    setexitonclose;
    if time=sess1endtime then begin
    upcross=0;
    downcross=0;
    end;
     
    #10     Aug 2, 2009