Difference between revisions of "Pair Trading Models"

From Pair Trading Lab WIKI
Jump to: navigation, search
(Created page with "Pair Trading Lab offers pair trading algorithms based on various mathematical models. These are models currently supported in PTL: == Ratio Model == This is one of the standar...")
 
Line 2: Line 2:
 
== Ratio Model ==
 
== Ratio Model ==
 
This is one of the standard pair trading models described in literature. It is based in ratio of instrument prices, [http://en.wikipedia.org/wiki/Moving_average moving average] and [http://en.wikipedia.org/wiki/Standard_deviation standard deviation]. In other words, it is based on [http://en.wikipedia.org/wiki/Bollinger_Bands Bollinger Bands] indicator.
 
This is one of the standard pair trading models described in literature. It is based in ratio of instrument prices, [http://en.wikipedia.org/wiki/Moving_average moving average] and [http://en.wikipedia.org/wiki/Standard_deviation standard deviation]. In other words, it is based on [http://en.wikipedia.org/wiki/Bollinger_Bands Bollinger Bands] indicator.
 +
 +
Model support:
 +
* in PTL backtester: '''yes''' (max Z-score not supported)
 +
* in PTL portfolio backtester: '''yes'''
 +
* in PTL Trader: '''yes'''
  
 
Model parameters:
 
Model parameters:
 
* entry threshold E<sub>n</sub> for Z-score, typical value range is <1.5, 2.5>, 2.0 is used most often
 
* entry threshold E<sub>n</sub> for Z-score, typical value range is <1.5, 2.5>, 2.0 is used most often
* exit threshold E<sub>x</sub> for Z-score, typical value is <-0.5, 0.5>, 0 is used most often
+
* exit threshold E<sub>x</sub> for Z-score, typical value is <-0.5, 0.5>, 0 is used most often...we allow positive values only for now
 
* max Z-score E<sub>max</sub> (optional, to filter out extremes, typical value is >4 if used)
 
* max Z-score E<sub>max</sub> (optional, to filter out extremes, typical value is >4 if used)
 
* moving average period  P<sub>m</sub> (typical range <10, 100>), default = 15
 
* moving average period  P<sub>m</sub> (typical range <10, 100>), default = 15
Line 11: Line 16:
 
* standard deviation period P<sub>s</sub> (typical range <10, 100>), default = 15
 
* standard deviation period P<sub>s</sub> (typical range <10, 100>), default = 15
 
* entry mode (simple, uptick, downtick)
 
* entry mode (simple, uptick, downtick)
 
Model support:
 
* in PTL backtester: '''yes'''
 
* in PTL portfolio backtester: '''yes'''
 
* in PTL Trader: '''yes'''
 
  
 
Description:
 
Description:
Line 29: Line 29:
 
** lower exit band ''L<sub>x</sub>(t)'' = ''M(t)'' - ''S(t)'' * E<sub>x</sub>
 
** lower exit band ''L<sub>x</sub>(t)'' = ''M(t)'' - ''S(t)'' * E<sub>x</sub>
 
** these bands are actually the same bands as in [http://en.wikipedia.org/wiki/Bollinger_Bands Bollinger Bands] indicator and we can use crossing of ''R(t)'' and bands as trade signals
 
** these bands are actually the same bands as in [http://en.wikipedia.org/wiki/Bollinger_Bands Bollinger Bands] indicator and we can use crossing of ''R(t)'' and bands as trade signals
 +
 +
Entry signals depends on '''entry mode''':
 +
* for the entry mode = '''simple''':
 +
** to open short pair position, it is simple enough if the Z-score ''Z(t)'' >= E<sub>n</sub> (equivalent to ''R(t)'' >= ''U<sub>n</sub>(t)'')
 +
** to open long pair position, it is simple enough if the Z-score ''Z(t)'' <= -E<sub>n</sub> (equivalent to ''R(t)'' <= ''L<sub>n</sub>(t)'')
 +
* for the entry mode = '''uptick''': same as simple, but in addition, previous Z-score must be below the entry band (so we cross the band from inside to outside):
 +
** to open short pair position, we require ''Z(t)'' >= E<sub>n</sub> (equivalent to ''R(t)'' >= ''U<sub>n</sub>(t)'') '''and''' ''Z(t-1)'' < E<sub>n</sub> (same as ''R(t-1)'' < ''U<sub>n</sub>(t-1)'')
 +
** to open long pair position, we require ''Z(t)'' <= -E<sub>n</sub> (equivalent to ''R(t)'' <= ''L<sub>n</sub>(t)'') '''and''' ''Z(t-1)'' > -E<sub>n</sub> (same as ''R(t-1)'' > ''L<sub>n</sub>(t-1)'')
 +
* for the entry mode = '''downtick''': we wait for the Z-score crossing back the band from outside to inside:
 +
** to open short pair position, we require ''Z(t)'' < E<sub>n</sub> '''and''' ''Z(t-1)'' >= E<sub>n</sub> '''and''' ''Z(t)'' > E<sub>x</sub>
 +
** when using bands, it is the same as having ''R(t)'' < ''U<sub>n</sub>(t)'' '''and''' ''R(t-1)'' >= ''U<sub>n</sub>(t-1)'' '''and''' ''R(t)'' > ''U<sub>x</sub>(t)''
 +
** to open long pair position, we require ''Z(t)'' > -E<sub>n</sub> '''and''' ''Z(t-1)'' <= -E<sub>n</sub> '''and''' ''Z(t)'' < -E<sub>x</sub>
 +
** when using bands, it is the same as having ''R(t)'' > ''L<sub>n</sub>(t)'' '''and''' ''R(t-1)'' <= ''L<sub>n</sub>(t-1)'' '''and''' ''R(t)'' < ''L<sub>x</sub>(t)''
 +
 +
Why we have the '''simple entry mode'''? In normal situations and backtests, it gives same results as the '''uptick mode'''. But the difference comes up while trading multiple pairs in portfolio. The simple mode allows you to jump in the position immediately after a new slot is freed, regardless of the previous Z-scores.
 +
 +
Which entry mode is better? Hard to tell, sometimes the uptick, sometimes the downtick. You have to do your homework and decide, which idea suits your trading style better. In general, uptick/simple mode is more aggressive, as it does not wait for first signs of spread mean reversion.

Revision as of 11:41, 26 November 2014

Pair Trading Lab offers pair trading algorithms based on various mathematical models. These are models currently supported in PTL:

Ratio Model

This is one of the standard pair trading models described in literature. It is based in ratio of instrument prices, moving average and standard deviation. In other words, it is based on Bollinger Bands indicator.

Model support:

  • in PTL backtester: yes (max Z-score not supported)
  • in PTL portfolio backtester: yes
  • in PTL Trader: yes

Model parameters:

  • entry threshold En for Z-score, typical value range is <1.5, 2.5>, 2.0 is used most often
  • exit threshold Ex for Z-score, typical value is <-0.5, 0.5>, 0 is used most often...we allow positive values only for now
  • max Z-score Emax (optional, to filter out extremes, typical value is >4 if used)
  • moving average period Pm (typical range <10, 100>), default = 15
  • moving average type T (algorithm), default = exponential
  • standard deviation period Ps (typical range <10, 100>), default = 15
  • entry mode (simple, uptick, downtick)

Description:

  • we trade pair of stocks A, B, having price series A(t), B(t)
  • we need to calculate ratio time series R(t) = A(t) / B(t)
  • let's apply moving average of type T with period Pm on R(t) to get time series M(t)
  • let's apply standard deviation with period Ps on R(t) to get time series S(t)
  • now we can create Z-score series Z(t) as Z(t) = (R(t) - M(t)) / S(t), this time series can give us z-score to signal trading decision directly
  • another common approach (to visualize) is to create bands and put it above the moving average M(t):
    • upper entry band Un(t) = M(t) + S(t) * En
    • lower entry band Ln(t) = M(t) - S(t) * En
    • upper exit band Ux(t) = M(t) + S(t) * Ex
    • lower exit band Lx(t) = M(t) - S(t) * Ex
    • these bands are actually the same bands as in Bollinger Bands indicator and we can use crossing of R(t) and bands as trade signals

Entry signals depends on entry mode:

  • for the entry mode = simple:
    • to open short pair position, it is simple enough if the Z-score Z(t) >= En (equivalent to R(t) >= Un(t))
    • to open long pair position, it is simple enough if the Z-score Z(t) <= -En (equivalent to R(t) <= Ln(t))
  • for the entry mode = uptick: same as simple, but in addition, previous Z-score must be below the entry band (so we cross the band from inside to outside):
    • to open short pair position, we require Z(t) >= En (equivalent to R(t) >= Un(t)) and Z(t-1) < En (same as R(t-1) < Un(t-1))
    • to open long pair position, we require Z(t) <= -En (equivalent to R(t) <= Ln(t)) and Z(t-1) > -En (same as R(t-1) > Ln(t-1))
  • for the entry mode = downtick: we wait for the Z-score crossing back the band from outside to inside:
    • to open short pair position, we require Z(t) < En and Z(t-1) >= En and Z(t) > Ex
    • when using bands, it is the same as having R(t) < Un(t) and R(t-1) >= Un(t-1) and R(t) > Ux(t)
    • to open long pair position, we require Z(t) > -En and Z(t-1) <= -En and Z(t) < -Ex
    • when using bands, it is the same as having R(t) > Ln(t) and R(t-1) <= Ln(t-1) and R(t) < Lx(t)

Why we have the simple entry mode? In normal situations and backtests, it gives same results as the uptick mode. But the difference comes up while trading multiple pairs in portfolio. The simple mode allows you to jump in the position immediately after a new slot is freed, regardless of the previous Z-scores.

Which entry mode is better? Hard to tell, sometimes the uptick, sometimes the downtick. You have to do your homework and decide, which idea suits your trading style better. In general, uptick/simple mode is more aggressive, as it does not wait for first signs of spread mean reversion.

Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox