def test_best_ranking_dtype_is_int8(self): sm = SwarmManager() index = ['0', '1', '2', '3', '4', '5'] ranks = [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan] rnk = pd.Series(ranks, index=index) r = sm._get_nbest(rnk, nsystems=2) self.assertEqual(r.dtype, np.int8)
def test_best_ranking_full_nans(self): sm = SwarmManager() index = ['0', '1', '2', '3', '4', '5'] ranks = [np.nan, np.nan, np.nan, np.nan, np.nan, np.nan] rnk = pd.Series(ranks, index=index) r = sm._get_nbest(rnk, nsystems=2) # Indexes is a string, because these are pd.Series indexes not array int32 index self.assertEqual(r['0'], 0) self.assertEqual(r['1'], 0) self.assertEqual(r['2'], 0) self.assertEqual(r['3'], 0) self.assertEqual(r['4'], 0) self.assertEqual(r['5'], 0)
def test_best_ranking_negative_and_zeros_filter(self): sm = SwarmManager() index = ['0', '1', '2', '3', '4', '5'] ranks = [np.nan, 0, -5, np.nan, 9, np.nan] rnk = pd.Series(ranks, index=index) r = sm._get_nbest(rnk, nsystems=2) # Indexes is a string, because these are pd.Series indexes not array int32 index self.assertEqual(r['0'], 0) self.assertEqual(r['1'], 0) self.assertEqual(r['2'], 0) self.assertEqual(r['3'], 0) self.assertEqual(r['4'], 1) self.assertEqual(r['5'], 0) self.assertEqual(r.dtype, np.int8)
'ignore_eqty_with_negative_ma_slope_period': 5, # Slope lookback filter = MA-MA[-slope_lookback] <= 0 # Ignoring all swarm members when the change of AvgSwarm equity is negative 'ignore_if_avg_swarm_negative_change': True, # Comment the line to turn off 'ignore_if_avg_swarm_negative_change_period': 14, # AvgSwarm change period }, 'rebalance_time_function': SwarmRebalance.every_monday, 'global_filter_function': SwarmFilter.swingpoint_threshold, 'global_filter_params': { 'up_factor': 10.0, 'down_factor': 10.0, 'period': 5, }, }, 'costs': { 'manager': CostsManagerEXOFixed, 'context': { 'costs_options': 3.0, 'costs_futures': 3.0, } } } swarm_manager = SwarmManager(STRATEGY_CONTEXT) swarm_manager.run_swarm() picked_swarm = swarm_manager.pick() picked_swarm
from backtester.swarms.manager import SwarmManager from backtester.exoinfo import EXOInfo import pandas as pd import numpy as np import scipy import glob from pandas.tseries.offsets import * for file in glob.glob("./temp_swarms/*.swm"): # set file name here # Real swarm from .swm df = SwarmManager.load(file) df = df.swarm print('calculating portfolio for ---', file) # ## Systems overall performance estimation # In[6]: temp_l = [] for strat in df.columns: input_strategy_data = df[strat] # This data is used in metrics calc price_change = input_strategy_data.diff() max_dd = (input_strategy_data -
from strategies.strategy_swingpoint import StrategySwingPoint from strategies.strategy_macross_with_trail import StrategyMACrossTrail try: from .settings import * except SystemError: from settings import * if __name__ == '__main__': for f in os.listdir(sys.argv[1]): if 'strategy_' not in f: continue exo_name = os.path.join(sys.argv[1], f) print("Processing " + exo_name) for name, swarm_context in BATCH_CONTEXT.items(): print("Running swarm " + name) strategy_context = STRATEGY_CONTEXT_COMMON.copy() strategy_context.update(swarm_context) strategy_context['strategy']['exo_name'] = exo_name strategy_context['strategy']['suffix'] = name smgr = SwarmManager(strategy_context) smgr.run_swarm() smgr.pick() # Saving results to swarms directory smgr.save('./swarms/') print('Done')