Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save robcarver17/3d0f13e49daea396b209a19c6230966f to your computer and use it in GitHub Desktop.

Select an option

Save robcarver17/3d0f13e49daea396b209a19c6230966f to your computer and use it in GitHub Desktop.

Revisions

  1. robcarver17 revised this gist Jan 13, 2020. 1 changed file with 4 additions and 4 deletions.
    8 changes: 4 additions & 4 deletions Create a bunch of trading rules for skew and kurtosis
    Original file line number Diff line number Diff line change
    @@ -46,28 +46,28 @@ for lookback_days in list_of_lookbacks:

    skew_abs = TradingRule(factor_trading_rule, data=['rawdata.get_demeanded_factor_value'],
    other_args=dict(smooth = smooth,
    _factor_name="skew",
    _factor_name="neg_skew",
    _demean_method="historic_average_factor_value_all_assets",
    _lookback_days = lookback_days))
    all_trading_rules["skew_abs_%d" % lookback_days] = skew_abs

    skew_ts = TradingRule(factor_trading_rule, data=['rawdata.get_demeanded_factor_value'],
    other_args=dict(smooth = smooth,
    _factor_name="skew",
    _factor_name="neg_skew",
    _demean_method="average_factor_value_for_instrument",
    _lookback_days = lookback_days))
    all_trading_rules["skew_ts_%d" % lookback_days] = skew_ts

    skew_cs = TradingRule(factor_trading_rule, data=['rawdata.get_demeanded_factor_value'],
    other_args=dict(smooth = smooth,
    _factor_name="skew",
    _factor_name="neg_skew",
    _demean_method="current_average_factor_values_over_all_assets",
    _lookback_days = lookback_days))
    all_trading_rules["skew_cs_%d" % lookback_days] = skew_cs

    skew_rv = TradingRule(factor_trading_rule, data=['rawdata.get_demeanded_factor_value'],
    other_args=dict(smooth = smooth,
    _factor_name="skew",
    _factor_name="neg_skew",
    _demean_method="average_factor_value_in_asset_class_for_instrument",
    _lookback_days = lookback_days))
    all_trading_rules["skew_rv_%d" % lookback_days] = skew_rv
  2. robcarver17 renamed this gist Jan 8, 2020. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  3. robcarver17 created this gist Jan 8, 2020.
    172 changes: 172 additions & 0 deletions temp.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,172 @@
    import numpy as np
    from systems.provided.futures_chapter15.basesystem import *
    import numpy as np
    from syscore.algos import robust_vol_calc


    ## test kurtosis AND skew with trading rules





    # The trading rules
    def factor_trading_rule(demean_factor_value, smooth=90):
    vol =robust_vol_calc(demean_factor_value)
    normalised_factor_value = demean_factor_value / vol
    smoothed_normalised_factor_value = normalised_factor_value.ewm(span=smooth).mean()

    return smoothed_normalised_factor_value

    def conditioned_factor_trading_rule(demean_factor_value, condition_demean_factor_value, smooth=90):
    vol = robust_vol_calc(demean_factor_value)
    normalised_factor_value = demean_factor_value / vol

    sign_condition = condition_demean_factor_value.apply(np.sign)
    sign_condition_resample = sign_condition.reindex(normalised_factor_value.index).ffill()

    conditioned_factor = normalised_factor_value *sign_condition_resample
    smoothed_conditioned_factor = conditioned_factor.ewm(span=smooth).mean()

    return smoothed_conditioned_factor

    list_of_lookbacks=[7,14,30,90,180,365]
    temp_system = futures_system()
    existing_trading_rules = temp_system.config.trading_rules
    all_trading_rules = existing_trading_rules

    temp_config = temp_system.config

    from systems.forecasting import TradingRule

    for lookback_days in list_of_lookbacks:
    smooth = int(np.ceil(lookback_days/4.0))

    # The skew rules

    skew_abs = TradingRule(factor_trading_rule, data=['rawdata.get_demeanded_factor_value'],
    other_args=dict(smooth = smooth,
    _factor_name="skew",
    _demean_method="historic_average_factor_value_all_assets",
    _lookback_days = lookback_days))
    all_trading_rules["skew_abs_%d" % lookback_days] = skew_abs

    skew_ts = TradingRule(factor_trading_rule, data=['rawdata.get_demeanded_factor_value'],
    other_args=dict(smooth = smooth,
    _factor_name="skew",
    _demean_method="average_factor_value_for_instrument",
    _lookback_days = lookback_days))
    all_trading_rules["skew_ts_%d" % lookback_days] = skew_ts

    skew_cs = TradingRule(factor_trading_rule, data=['rawdata.get_demeanded_factor_value'],
    other_args=dict(smooth = smooth,
    _factor_name="skew",
    _demean_method="current_average_factor_values_over_all_assets",
    _lookback_days = lookback_days))
    all_trading_rules["skew_cs_%d" % lookback_days] = skew_cs

    skew_rv = TradingRule(factor_trading_rule, data=['rawdata.get_demeanded_factor_value'],
    other_args=dict(smooth = smooth,
    _factor_name="skew",
    _demean_method="average_factor_value_in_asset_class_for_instrument",
    _lookback_days = lookback_days))
    all_trading_rules["skew_rv_%d" % lookback_days] = skew_rv

    # The skew conditioned on kurtosis rules
    #{(skew - Average skew) / Sigma [Skew]}
    #* sign (Kurtosis - average kurtosis)

    skewK_abs = TradingRule(conditioned_factor_trading_rule, data=['rawdata.get_demeanded_factor_value',
    'rawdata.get_demeanded_factor_value'],
    other_args=dict(smooth = smooth, _factor_name="skew",
    _demean_method="historic_average_factor_value_all_assets",
    _lookback_days = lookback_days,
    __factor_name="kurtosis",
    __demean_method="historic_average_factor_value_all_assets",
    __lookback_days = lookback_days
    ))
    all_trading_rules["skewK_abs_%d" % lookback_days] = skewK_abs

    skewK_ts = TradingRule(conditioned_factor_trading_rule, data=['rawdata.get_demeanded_factor_value',
    'rawdata.get_demeanded_factor_value'],
    other_args=dict(smooth = smooth, _factor_name="skew",
    _demean_method="average_factor_value_for_instrument",
    _lookback_days = lookback_days,
    __factor_name="kurtosis",
    __demean_method="average_factor_value_for_instrument",
    __lookback_days = lookback_days
    ))

    all_trading_rules["skewK_ts_%d" % lookback_days] = skewK_ts

    skewK_cs = TradingRule(conditioned_factor_trading_rule, data=['rawdata.get_demeanded_factor_value',
    'rawdata.get_demeanded_factor_value'],
    other_args=dict(smooth = smooth, _factor_name="skew",
    _demean_method="current_average_factor_values_over_all_assets",
    _lookback_days = lookback_days,
    __factor_name="kurtosis",
    __demean_method="current_average_factor_values_over_all_assets",
    __lookback_days = lookback_days
    ))

    all_trading_rules["skewK_cs_%d" % lookback_days] = skewK_cs

    skewK_rv = TradingRule(conditioned_factor_trading_rule, data=['rawdata.get_demeanded_factor_value',
    'rawdata.get_demeanded_factor_value'],
    other_args=dict(smooth = smooth, _factor_name="skew",
    _demean_method="average_factor_value_in_asset_class_for_instrument",
    _lookback_days = lookback_days,
    __factor_name="kurtosis",
    __demean_method="average_factor_value_in_asset_class_for_instrument",
    __lookback_days = lookback_days
    ))

    all_trading_rules["skewK_rv_%d" % lookback_days] = skewK_rv

    # Now we reverse condition
    kurtS_abs = TradingRule(conditioned_factor_trading_rule, data=['rawdata.get_demeanded_factor_value',
    'rawdata.get_demeanded_factor_value'],
    other_args=dict(smooth = smooth, _factor_name="kurtosis",
    _demean_method="historic_average_factor_value_all_assets",
    _lookback_days = lookback_days,
    __factor_name="skew",
    __demean_method="historic_average_factor_value_all_assets",
    __lookback_days = lookback_days
    ))
    all_trading_rules["kurtS_abs_%d" % lookback_days] = kurtS_abs

    kurtS_ts = TradingRule(conditioned_factor_trading_rule, data=['rawdata.get_demeanded_factor_value',
    'rawdata.get_demeanded_factor_value'],
    other_args=dict(smooth = smooth, _factor_name="kurtosis",
    _demean_method="average_factor_value_for_instrument",
    _lookback_days = lookback_days,
    __factor_name="skew",
    __demean_method="average_factor_value_for_instrument",
    __lookback_days = lookback_days
    ))

    all_trading_rules["kurtS_ts_%d" % lookback_days] = kurtS_ts

    kurtS_cs = TradingRule(conditioned_factor_trading_rule, data=['rawdata.get_demeanded_factor_value',
    'rawdata.get_demeanded_factor_value'],
    other_args=dict(smooth = smooth, _factor_name="kurtosis",
    _demean_method="current_average_factor_values_over_all_assets",
    _lookback_days = lookback_days,
    __factor_name="skew",
    __demean_method="current_average_factor_values_over_all_assets",
    __lookback_days = lookback_days
    ))

    all_trading_rules["kurtS_cs_%d" % lookback_days] = kurtS_cs

    kurtS_rv = TradingRule(conditioned_factor_trading_rule, data=['rawdata.get_demeanded_factor_value',
    'rawdata.get_demeanded_factor_value'],
    other_args=dict(smooth = smooth, _factor_name="kurtosis",
    _demean_method="average_factor_value_in_asset_class_for_instrument",
    _lookback_days = lookback_days,
    __factor_name="skew",
    __demean_method="average_factor_value_in_asset_class_for_instrument",
    __lookback_days = lookback_days
    ))

    all_trading_rules["kurtS_rv_%d" % lookback_days] = kurtS_rv