iBankCoin
Joined Nov 11, 2007
1,458 Blog Posts

Can’t Recreate Results from Fidelity Select System

Here are the posts on the Fidelity Select System.

Try as I might, I cannot replicate the results posted in Part 4. When I run the test now, I get a compound annual rate of ~11% with a final equity of ~$1.2 million. The new equity curve is very similar to the one in Part 4, but with a difference  from previous tests in final equity of over $2 million, there is definitely something strange happening.

Keep in mind, as I have tried to replicate the results, I have consulted the code and settings for all of the previous tests. Every test I run saves the code and the settings for future reference. I am 100% positive that I am using the same code and the same settings.

The only thing that has changed is that I overwrote the original data from yahoo with the same data from yahoo. There was no particular reason for doing this except that I was just playing around with the AmiQuote data downloader. Theoretically, the data should not be different, just overwritten.

At this point, my primary suspicion is that a change was made to the yahoo data, but it is entirely possible that I have changed something and have not discovered it yet.

If anyone else out there has been playing around with this system and using yahoo data, I would be interested in hearing if you have noticed anything similar.

If you enjoy the content at iBankCoin, please follow us on Twitter

14 comments

  1. eman

    Looking back at may email correspondence with you, I was only ever able to get to 11.83% CAGR. I’m still working with that system and have not seen anything like you are describing. However, I have not done a full reload of the quotes from Yahoo and my results were always lower to begin with.

    • 0
    • 0
    • 0 Deem this to be "Fake News"
    • Woodshedder

      Its really odd. I ran literally dozens of tests, I have them all saved, with the code and the settings, and there were numerous tests that yielded >%14 CAGR.

      Anyway, I’m still working with the system, and I really like it. I’ve been running numerous optimizations on it and it seems like it has wide latitude for the ROC lookback and the moving average filter…a large sweet spot, so to speak.

      I have it running around 13-14% CAGR with drawdowns less than 30%. Pretty soon I’m going to run some walkforwards, letting it shift the ROC lookback and MA Filter variables…I’m fairly certain it will hold up.

      • 0
      • 0
      • 0 Deem this to be "Fake News"
  2. Jeff P

    Are you using any exponential or long-period smoothing algorithms in your code? If so, changing the data time-series window can have a major effect on RS models because… Just one thought. Best, JP

    • 0
    • 0
    • 0 Deem this to be "Fake News"
  3. Bill

    Here is the code i am using which you gave me long long back

    SetBacktestMode(backtestRotational);
    SetTradeDelays(1,1,1,1); // everything delayed 1 day
    SetOption(“UsePrevBarEquityForPosSizing”, True);
    SetOption(“MinShares”, 10);
    SetOption(“AllowPositionShrinking”,True);
    SetOption(“AccountMargin”,100);
    SetOption(“HoldMinDays”, 30 ); //set for calendar days

    Totalpositions = 1;
    SetOption(“WorstRankHeld”, Totalpositions + 1);
    SetOption(“MaxOpenPositions”, Totalpositions );

    //Variables
    DailyChg=ROC(C,1);
    num2=Optimize(“num2”,252,30,255,5);
    VolSTD = StDev(DailyChg, num2 ); //calcs the STD of the daily ROC over the last 252 bars
    num=Optimize(“num”, 90, 5, 125, 5); //ROC period
    num1=Optimize(“num1”,50,20,250,5); //MA period
    ROCX = ROC(C,num);
    Score=(ROCX/VolSTD); //Penalizes volatility
    MAFilter = Foreign(“SPY”,”C”) > MA(Foreign(“SPY”,”C”),num1);

    PositionSize = -100/Totalpositions;
    PositionScore = Score * MAFilter;
    PositionScore = IIf(PositionScore < 0, 0, PositionScore); // Long only

    //Monthly Rotation
    /*
    m = Month();
    newMonth = m != Ref( m, -1);
    PositionScore = IIf(newMonth, PositionScore, scoreNoRotate);
    */

    //Exploration
    Filter = 1;
    AddColumn(ROCX,”ROCX”,1.4);
    AddColumn(Score,”Score”,1.4);
    AddColumn(VolSTD,”VolSTD”,1.4);
    AddColumn(DailyChg,”ROC”,1.4);
    AddColumn(MAFilter,”MAFilter”,1.4);

    • 0
    • 0
    • 0 Deem this to be "Fake News"
  4. Bill

    wood –
    i made some change, can you run on FSF funds and see the result
    take out the MA filter and add some inverse funds i tried with spy,eem,shy,fxe,dbc,sh
    got cagr – 27 % from 2006 to 2010

    here is the code
    /*Fidelity Select Funds Rotational System V1.3
    as published: http://fundztrader.com/blog/2009/02/09/sector-fund-system/
    Adaptations by [email protected]
    */

    SetBacktestMode(backtestRotational);
    SetTradeDelays(1,1,1,1); // everything delayed 1 day
    SetOption(“UsePrevBarEquityForPosSizing”, True);
    SetOption(“MinShares”, 10);
    SetOption(“AllowPositionShrinking”,True);
    SetOption(“AccountMargin”,100);
    SetOption(“HoldMinDays”, 30 ); //set for calendar days

    Totalpositions = 1;
    SetOption(“WorstRankHeld”, Totalpositions + 1);
    SetOption(“MaxOpenPositions”, Totalpositions );

    //Variables
    DailyChg=ROC(C,1);
    num2=Optimize(“num2”,252,30,255,5);
    VolSTD = StDev(DailyChg, num2 ); //calcs the STD of the daily ROC over the last 252 bars
    num=Optimize(“num”, 90, 5, 125, 5); //ROC period
    num1=Optimize(“num1”,50,20,250,5); //MA period
    ROCX = ROC(C,num);
    //Score=(ROCX/VolSTD); //Penalizes volatility
    Score=(C/MA(C,180)); //Penalizes volatility

    MAFilter = Foreign(“SPY”,”C”) > MA(Foreign(“SPY”,”C”),num1);
    MAFilter = 1;

    PositionSize = -100/Totalpositions;
    PositionScore = Score * MAFilter;
    PositionScore = IIf(PositionScore < 0, 0, PositionScore); // Long only

    //Monthly Rotation
    /*
    m = Month();
    newMonth = m != Ref( m, -1);
    PositionScore = IIf(newMonth, PositionScore, scoreNoRotate);
    */

    //Exploration
    Filter = 1;
    AddColumn(ROCX,”ROCX”,1.4);
    AddColumn(Score,”Score”,1.4);
    AddColumn(VolSTD,”VolSTD”,1.4);
    AddColumn(DailyChg,”ROC”,1.4);
    AddColumn(MAFilter,”MAFilter”,1.4);
    AddColumn(PositionScore,”PositionScore”,1.4);
    AddColumn(Score,”Score”,1.4);

    Bill

    • 0
    • 0
    • 0 Deem this to be "Fake News"
  5. Bill

    only changes i had is
    Score=(C/MA(C,180)); //Penalizes volatility

    MAFilter = 1;

    • 0
    • 0
    • 0 Deem this to be "Fake News"
  6. JohnnyB

    I will have some time tomorrow to run your code and report back. I am using IQ feed as a data provider. I’ll let you know.

    • 0
    • 0
    • 0 Deem this to be "Fake News"
  7. Tilo

    Wood,

    I ran your code (Ami & Y!), I’m getting CAGR ~11%. I’ll try to play with it later today and will get back to you if I find anything of interest.

    • 0
    • 0
    • 0 Deem this to be "Fake News"
  8. prazor

    please, can someone provide the list of etf used in these runs?

    I have a few ideas to improve the results but would like to verify
    them on the etf being used here.

    regards prazor

    • 0
    • 0
    • 0 Deem this to be "Fake News"
    • Woodshedder

      Prazor, it doesn’t use ETFs. It uses the Fidelity Select Funds. If you google them, you’ll find the list. If not, let me know and I’ll email it to you.

      • 0
      • 0
      • 0 Deem this to be "Fake News"