Extremely simple strategies with > 100% annual return

Discussion in 'Strategy Building' started by jcl, Feb 1, 2012.

  1. ssrrkk

    ssrrkk

    I think there is a confusion here with the word "forward test". I believe what you are doing is training your system on a rolling window of data, then running your model "forward" without retraining to check the performance on "future" data that hasn't been trained on. The "future" data of course is still past data for you, it's just that it is future data for the system.

    I believe most people on this board don't call that forward testing. Forward testing to most checks two things:

    1. performance of the model on a test set, i.e., data that the model hasn't been trained on

    AND

    2. performance of the system in real time with real slippage, real execution, and real commission.

    I believe you are testing only the former not the latter. Often to test 2, people will still use a simulated account but running in real time -- for example the IB simulated account. Depending on the provider, these simulated accounts can be fairly realistic in terms of slippage. But the iron test is to run it with a live account with real money (small position sizes of course) to finally check everything.
     
    #61     Feb 2, 2012
  2. jcl

    jcl

    Yes, with "forward test" I meant method 1. Testing a system by trading it with real money has the obvious disadvantage that it takes a long time, and when you finally collected enough data, the system might be already expired.

    We're testing the mentioned 300% system with real money, and so far it has increased the account from EUR 5000 to EUR 10500 in the past 4 months, but this is no real test. It's just a too short time. I more trust the walk forward test than the real trading test.
     
    #62     Feb 2, 2012
  3. jcl

    jcl

    Some people asked me by PM for the source code of the mentioned lowpass filter, so here it is:

    Code:
    inline var smoothF(int period) { return 2./(period+1); }
    
    var LowPass(var *Data,int Period)
    {
    	var* LP = series(*Data,3);
    	var a = smoothF(Period);
    	var a2 = a*a;
    	return LP[0] = (a-a2/4)*Data[0]
    		+ 0.5*a2*Data[1]
    		- (a-0.75*a2)*Data[2]
    		+ 2*(1.-a)*LP[1]
    		- (1.-a)*(1.-a)*LP[2];
    }
    
     
    #63     Feb 2, 2012
  4. None of the above. I meant the obvious thing to any experienced trading system developer that forward testing on historical data only does not eliminate the problem of curve-fitting, as you wrongly argued. It does not also eliminate the problem of selection bias and optimization.

    It is obvious to any trading system developer with average IQ that out of millions of possible systems some will pass the forward test but still fail in actual trading.

    A forward test is a method of reducing data mining bias, not a method of selecting a good system. If you do not understand the difference you are in for big surprises that may cost you a lot.

    Reducing data mining bias may mean that we reject those systems that perform bad in forward testing. This tells nothing about the future performance of the systems we do not reject.

    Try to understand this and be appreciative instead of argumentative.

    The system you presented can be replicated easily with some fast MAs. I do not have the time to run tests on things I tried 20 years ago.
     
    #64     Feb 2, 2012
  5. kut2k2

    kut2k2

    Thanks for posting the LPF formula, jcl. :)

    It is incredibly low-lag, even for a cutoff period of 1000 bars. You can safely ignore intradaybill. He doesn't know what he's talking about when he says a faster EMA system will produce the same results. No way, no how.
     
    #65     Feb 2, 2012
  6. Hello imbecile. You started again without no provocation from my part. You should know imbecile that an MA is a low pass filter. If your objective is to minimize the lag, choose a faster MA or a weighted moving average better. Then use the typical crossover to get a golden cross. You can always find a moving average or set of MAs to replicate closely the low pass filter of the OP.
     
    #66     Feb 2, 2012
  7. I think about this problem sometimes.

    Best solution I've yet seen (aside from fading the signals of an overoptimized system) is to

    1. Switch between systems based on equity curves at the present time (still based on the past few trades, however)

    2. Detect market conditions that coincide with good performance for a given system (recommended by Van Tharp) I.e. volatile periods for short MA trend systems, quiet bull periods for buy and hold

    3. Run a portfolio of different systems keeping total risk below some arbitrary threshold, on uncorellated assets (I.e. various trend systems on all the currency pairs)

    4. Become a market maker

    :D
     
    #67     Feb 2, 2012
  8. kut2k2

    kut2k2

    Actually, dumbass, everything I posted was factual. I wasn't trying to provoke you because I thought you still had me on ignore. Oh well.

    Explaining this with as few big words as I can: if you put the LPF formula into a spreadsheet and run it against a set of linear data, you will see for yourself that it has zero lag. It does not lag behind in a pure trend. By contrast, any conventional moving average, even a WMA, will lag in proportion to its period minus one, trend or no trend.

    SMAs, EMAs and WMAs are lowpass filters ... of low quality. Some traders recognize that the quality of their trading tools matter. Any faster MA you use to match the average lag of the LPF over normal price data will do a much poorer job of smoothing than the LPF does.
     
    #68     Feb 2, 2012
  9. jcl

    jcl

    Yes, this would be the next logical steps when you have some simple strategies that are profitable, but still not robust enough for trading. We're working on this at the moment. I think the key is (2) and (3) - you need a portfolio of strategies and uncorrelated assets, and trade this with a Kelly matrix that is updated from rather recent market conditions. Well, (4) is then inevitable :).
     
    #69     Feb 3, 2012
  10. jcl

    jcl

    By the way, here's another such simple strategy with a filter function. It's a highpass filter this time, with a filter frequency that automatically adapts to the dominant market cycle. It uses a Fisher transformed oscillator for trading against the trend:

    Code:
    var *Price = series(price());
    var DomPeriod = DominantPeriod(Price,100);
    var *HP = series(HighPass(Price,DomPeriod));
    var *Signal = series(Fisher(HP,500));
    var Threshold = 1.5;
    Stop = ATR(40);
    
    if(crossUnder(Signal,-Threshold)) {
        sellShort();
        buyLong(); 
    } else if(crossOver(Signal,Threshold)) {
        sellLong();
        buyShort();
    }
    
    On 4-hour bars it returns about 70% with EUR/USD. It's also not tradable in this form because the Sharpe ratio is too low, but can be made more robust with walk forward optimizing. With optimized parameters, the annual return can be pushed up to 200%. It's another candidate for a compound portfolio strategy.
     
    #70     Feb 3, 2012