Skip to content

Commit 3f040cd

Browse files
authored
add new python strategies
1 parent 36b0d79 commit 3f040cd

13 files changed

+880
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
import numpy as np
2+
import datetime
3+
4+
def LAG(field, period):
5+
nMarkets = np.shape(field)[1]
6+
out = np.append(np.zeros((period,nMarkets))*np.nan,field[:-period,:],axis=0)
7+
return out
8+
9+
def ATR(HIGH, LOW, CLOSE, period):
10+
tr = TR(HIGH,LOW,CLOSE)
11+
out = np.mean(tr[-period:,:],axis=0)
12+
return out
13+
14+
def TR(HIGH, LOW, CLOSE):
15+
CLOSELAG = LAG(CLOSE,1)
16+
range1 = HIGH - LOW
17+
range2 = np.abs(HIGH-CLOSELAG)
18+
range3 = np.abs(LOW -CLOSELAG)
19+
out = np.fmax(np.fmax(range1,range2),range3)
20+
return out
21+
22+
def myTradingSystem(DATE, OPEN, HIGH, LOW, CLOSE, settings, exposure):
23+
if 'long' not in settings:
24+
settings['longrule']=[]
25+
settings['shortrule']=[]
26+
27+
nMarkets = len(settings['markets'])
28+
p = np.zeros(nMarkets)
29+
30+
date = datetime.datetime.strptime(str(int(DATE[-1])), '%Y%m%d')
31+
if date.weekday() != 0:
32+
p[:] = 0
33+
return p, settings
34+
35+
closeRange = np.ptp(CLOSE[-4:,1])
36+
atr = ATR(HIGH, LOW, CLOSE, 4)
37+
38+
LongRule1 = CLOSE[-1,1] < CLOSE[-2,1] and closeRange < atr[1]
39+
ShortRule1 = CLOSE[-1,1] > CLOSE[-2,1] and closeRange < atr[1]
40+
41+
if LongRule1:
42+
p[0], p[1] = 0, 1
43+
44+
if ShortRule1:
45+
p[0], p[1] = 0, -1
46+
47+
return p, settings
48+
49+
50+
def mySettings():
51+
settings = {}
52+
53+
settings['markets'] = ['CASH', 'F_AD', 'F_AE', 'F_AH', 'F_AX', 'F_BC', 'F_BG', 'F_BO', 'F_BP', 'F_C', 'F_CA',
54+
'F_CC', 'F_CD', 'F_CF', 'F_CL', 'F_CT', 'F_DL', 'F_DM', 'F_DT', 'F_DX', 'F_DZ', 'F_EB',
55+
'F_EC', 'F_ED', 'F_ES', 'F_F', 'F_FB', 'F_FC', 'F_FL', 'F_FM', 'F_FP', 'F_FV', 'F_FY',
56+
'F_GC', 'F_GD', 'F_GS', 'F_GX', 'F_HG', 'F_HO', 'F_HP', 'F_JY', 'F_KC', 'F_LB', 'F_LC',
57+
'F_LN', 'F_LQ', 'F_LR', 'F_LU', 'F_LX', 'F_MD', 'F_MP', 'F_ND', 'F_NG', 'F_NQ', 'F_NR',
58+
'F_NY', 'F_O', 'F_OJ', 'F_PA', 'F_PL', 'F_PQ', 'F_RB', 'F_RF', 'F_RP', 'F_RR', 'F_RU',
59+
'F_RY', 'F_S', 'F_SB', 'F_SF', 'F_SH', 'F_SI', 'F_SM', 'F_SS', 'F_SX', 'F_TR', 'F_TU',
60+
'F_TY', 'F_UB', 'F_US', 'F_UZ', 'F_VF', 'F_VT', 'F_VW', 'F_VX', 'F_W', 'F_XX', 'F_YM',
61+
'F_ZQ']
62+
63+
settings['slippage'] = 0.05
64+
settings['budget'] = 1000000
65+
settings['lookback'] = 504
66+
67+
return settings
68+
69+
if __name__=='__main__':
70+
import quantiacsToolbox
71+
results = quantiacsToolbox.runts(__file__)
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
import numpy as np
2+
3+
def LAG(field, period):
4+
nMarkets = np.shape(field)[1]
5+
out = np.append(np.zeros((period,nMarkets))*np.nan, field[:-period,:],axis=0)
6+
return out
7+
8+
def ATR(HIGH, LOW, CLOSE, period):
9+
10+
tr = TR(HIGH,LOW,CLOSE)
11+
out = np.mean(tr[-period:,:],axis=0)
12+
return out
13+
14+
def TR(HIGH, LOW, CLOSE):
15+
CLOSELAG = LAG(CLOSE,1)
16+
range1 = HIGH - LOW
17+
range2 = np.abs(HIGH-CLOSELAG)
18+
range3 = np.abs(LOW -CLOSELAG)
19+
out = np.fmax(np.fmax(range1,range2),range3)
20+
return out
21+
22+
def myTradingSystem(DATE, OPEN, HIGH, LOW, CLOSE, settings, exposure):
23+
if 'long' not in settings:
24+
settings['long']=0
25+
settings['short']=0
26+
27+
nMarkets = len(settings['markets'])
28+
p = np.zeros(nMarkets)
29+
30+
holding = 4
31+
32+
if settings['short'] != 0:
33+
settings['short'] = (settings['short'] % holding) +1
34+
p[0],p[1] = 0,-1
35+
if settings['short'] == 0 or settings['short']==4:
36+
p[0],p[1] = 1,0
37+
settings['short'] = 0
38+
39+
if settings['long'] != 0:
40+
settings['long'] = (settings['long'] % holding) +1
41+
p[0],p[1] = 0,1
42+
if settings['long'] == 0 or settings['long']==4:
43+
p[0],p[1] = 1,0
44+
settings['long'] = 0
45+
46+
47+
closeRange = np.ptp(CLOSE[-4:,1])
48+
atr9 = ATR(HIGH, LOW, CLOSE, 9)
49+
atr1 = ATR(HIGH, LOW, CLOSE, 1)
50+
51+
LongRule1 = atr9[1] < atr1[1]
52+
LongRule2 = CLOSE[-1,1] <= min(CLOSE[-9:,1])
53+
LongRule3 = CLOSE[-1,2] > CLOSE[-9,2]
54+
55+
ShortRule1 = atr9[1]< atr1[1]
56+
ShortRule2 = CLOSE[-1,1] >= max(CLOSE[-9:,1])
57+
ShortRule3 = CLOSE[-1,2] < CLOSE[-9,2]
58+
59+
if LongRule1 and LongRule2 and LongRule3:
60+
p[0], p[1] = 0, 1
61+
settings['long'] = (settings['long'] % holding) +1
62+
settings['short'] = 0
63+
64+
if ShortRule1 and ShortRule2 and ShortRule3:
65+
p[0], p[1] = 0, -1
66+
settings['short'] = (settings['short'] % holding) +1
67+
settings['long'] = 0
68+
return p, settings
69+
70+
71+
def mySettings():
72+
settings = {}
73+
74+
settings['markets'] = ['CASH', 'F_AD', 'F_AE', 'F_AH', 'F_AX', 'F_BC', 'F_BG', 'F_BO', 'F_BP', 'F_C', 'F_CA',
75+
'F_CC', 'F_CD', 'F_CF', 'F_CL', 'F_CT', 'F_DL', 'F_DM', 'F_DT', 'F_DX', 'F_DZ', 'F_EB',
76+
'F_EC', 'F_ED', 'F_ES', 'F_F', 'F_FB', 'F_FC', 'F_FL', 'F_FM', 'F_FP', 'F_FV', 'F_FY',
77+
'F_GC', 'F_GD', 'F_GS', 'F_GX', 'F_HG', 'F_HO', 'F_HP', 'F_JY', 'F_KC', 'F_LB', 'F_LC',
78+
'F_LN', 'F_LQ', 'F_LR', 'F_LU', 'F_LX', 'F_MD', 'F_MP', 'F_ND', 'F_NG', 'F_NQ', 'F_NR',
79+
'F_NY', 'F_O', 'F_OJ', 'F_PA', 'F_PL', 'F_PQ', 'F_RB', 'F_RF', 'F_RP', 'F_RR', 'F_RU',
80+
'F_RY', 'F_S', 'F_SB', 'F_SF', 'F_SH', 'F_SI', 'F_SM', 'F_SS', 'F_SX', 'F_TR', 'F_TU',
81+
'F_TY', 'F_UB', 'F_US', 'F_UZ', 'F_VF', 'F_VT', 'F_VW', 'F_VX', 'F_W', 'F_XX', 'F_YM',
82+
'F_ZQ']
83+
84+
settings['slippage'] = 0.0
85+
settings['budget'] = 1000000
86+
settings['beginInSample'] = '20040101'
87+
settings['endInSample'] = '20200101'
88+
settings['lookback'] = 504
89+
90+
return settings
91+
92+
if __name__=='__main__':
93+
import quantiacsToolbox
94+
results = quantiacsToolbox.runts(__file__)

Strategies/LinearRegression.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
### Quantiacs Trading System Template
2+
# This program may take several minutes
3+
# import necessary Packages
4+
5+
import numpy as np
6+
from sklearn import linear_model
7+
from sklearn.preprocessing import PolynomialFeatures
8+
9+
10+
def myTradingSystem(DATE, OPEN, HIGH, LOW, CLOSE, VOL, OI, P, R, RINFO, exposure, equity, settings):
11+
""" This system uses linear regression to allocate capital into the desired equities"""
12+
13+
# Get parameters from setting
14+
nMarkets = len(settings['markets'])
15+
lookback = settings['lookback']
16+
dimension = settings['dimension']
17+
threshold = settings['threshold']
18+
19+
pos = np.zeros(nMarkets, dtype=np.float)
20+
21+
poly = PolynomialFeatures(degree=dimension)
22+
for market in range(nMarkets):
23+
reg = linear_model.LinearRegression()
24+
try:
25+
reg.fit(poly.fit_transform(np.arange(lookback).reshape(-1, 1)), CLOSE[:, market])
26+
trend = (reg.predict(poly.fit_transform(np.array([[lookback]]))) - CLOSE[-1, market]) / CLOSE[-1, market]
27+
28+
if abs(trend[0]) < threshold:
29+
trend[0] = 0
30+
31+
pos[market] = np.sign(trend)
32+
33+
# for NaN data set position to 0
34+
except ValueError:
35+
pos[market] = .0
36+
37+
return pos, settings
38+
39+
40+
def mySettings():
41+
""" Define your trading system settings here """
42+
43+
settings = {}
44+
45+
# Futures Contracts
46+
# does not include F_VX
47+
settings['markets'] = ['CASH', 'F_AD', 'F_AE', 'F_AH', 'F_AX', 'F_BC', 'F_BG', 'F_BO', 'F_BP', 'F_C', 'F_CA',
48+
'F_CC', 'F_CD', 'F_CF', 'F_CL', 'F_CT', 'F_DL', 'F_DM', 'F_DT', 'F_DX', 'F_DZ', 'F_EB',
49+
'F_EC', 'F_ED', 'F_ES', 'F_F', 'F_FB', 'F_FC', 'F_FL', 'F_FM', 'F_FP', 'F_FV', 'F_FY',
50+
'F_GC', 'F_GD', 'F_GS', 'F_GX', 'F_HG', 'F_HO', 'F_HP', 'F_JY', 'F_KC', 'F_LB', 'F_LC',
51+
'F_LN', 'F_LQ', 'F_LR', 'F_LU', 'F_LX', 'F_MD', 'F_MP', 'F_ND', 'F_NG', 'F_NQ', 'F_NR',
52+
'F_NY', 'F_O', 'F_OJ', 'F_PA', 'F_PL', 'F_PQ', 'F_RB', 'F_RF', 'F_RP', 'F_RR', 'F_RU',
53+
'F_RY', 'F_S', 'F_SB', 'F_SF', 'F_SH', 'F_SI', 'F_SM', 'F_SS', 'F_SX', 'F_TR', 'F_TU',
54+
'F_TY', 'F_UB', 'F_US', 'F_UZ', 'F_VF', 'F_VT', 'F_VW', 'F_W', 'F_XX', 'F_YM',
55+
'F_ZQ']
56+
57+
settings['lookback'] = 252
58+
settings['budget'] = 10 ** 6
59+
settings['slippage'] = 0.05
60+
61+
settings['threshold'] = 0.2
62+
settings['dimension'] = 3
63+
settings['beginInSample'] = '20090101'
64+
return settings
65+
66+
67+
# Evaluate trading system defined in current file.
68+
if __name__ == '__main__':
69+
import quantiacsToolbox
70+
results = quantiacsToolbox.runts(__file__)
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
### Quantiacs Trading System Template
2+
3+
4+
# import necessary Packages below:
5+
import numpy
6+
#import pandas
7+
#import scikit.learn
8+
#import sciPy
9+
10+
11+
def myTradingSystem():
12+
'''Define your trading system here.
13+
14+
See the example trading system for a starting point.
15+
16+
The function name "myTradingSystem" should no be changed. We evaluate this function on our server.
17+
18+
Your system should return a normalized set of weights for the markets you have defined in settings['markets']. '''
19+
20+
21+
def mySettings():
22+
'''Define your market list and other settings here.
23+
24+
The function name "mySettings" should not be changed.
25+
26+
Default settings are shown below.'''
27+
28+
settings = {}
29+
30+
# S&P 100 stocks
31+
# settings['markets']=['CASH','AAPL','ABBV','ABT','ACN','AEP','AIG','ALL',
32+
# 'AMGN','AMZN','APA','APC','AXP','BA','BAC','BAX','BK','BMY','BRKB','C',
33+
# 'CAT','CL','CMCSA','COF','COP','COST','CSCO','CVS','CVX','DD','DIS','DOW',
34+
# 'DVN','EBAY','EMC','EMR','EXC','F','FB','FCX','FDX','FOXA','GD','GE',
35+
# 'GILD','GM','GOOGL','GS','HAL','HD','HON','HPQ','IBM','INTC','JNJ','JPM',
36+
# 'KO','LLY','LMT','LOW','MA','MCD','MDLZ','MDT','MET','MMM','MO','MON',
37+
# 'MRK','MS','MSFT','NKE','NOV','NSC','ORCL','OXY','PEP','PFE','PG','PM',
38+
# 'QCOM','RTN','SBUX','SLB','SO','SPG','T','TGT','TWX','TXN','UNH','UNP',
39+
# 'UPS','USB','UTX','V','VZ','WAG','WFC','WMT','XOM']
40+
41+
# Futures Contracts
42+
settings['markets'] = ['CASH', 'F_AD', 'F_BO', 'F_BP', 'F_C', 'F_CC', 'F_CD',
43+
'F_CL', 'F_CT', 'F_DX', 'F_EC', 'F_ED', 'F_ES', 'F_FC', 'F_FV', 'F_GC',
44+
'F_HG', 'F_HO', 'F_JY', 'F_KC', 'F_LB', 'F_LC', 'F_LN', 'F_MD', 'F_MP',
45+
'F_NG', 'F_NQ', 'F_NR', 'F_O', 'F_OJ', 'F_PA', 'F_PL', 'F_RB', 'F_RU',
46+
'F_S', 'F_SB', 'F_SF', 'F_SI', 'F_SM', 'F_TU', 'F_TY', 'F_US', 'F_W',
47+
'F_XX', 'F_YM']
48+
49+
settings['lookback'] = 504
50+
settings['budget'] = 10**6
51+
settings['slippage'] = 0.05
52+
53+
return settings
54+
55+
# Evaluate trading system defined in current file.
56+
if __name__ == '__main__':
57+
import quantiacsToolbox
58+
results = quantiacsToolbox.runts(__file__)

Strategies/bollingerBands.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import numpy as np
2+
3+
4+
def myTradingSystem(DATE, OPEN, HIGH, LOW, CLOSE, VOL, OI, P, R, RINFO, exposure, equity, settings):
5+
6+
def bollingerBands(a, n=20):
7+
sma = np.nansum(a[-n:]) / n
8+
std = np.std(a[-n:], ddof=1)
9+
return sma, sma + 2 * std, sma - 2 * std
10+
11+
nMarkets = len(settings['markets'])
12+
threshold = settings['threshold']
13+
pos = np.zeros((1, nMarkets), dtype=np.float)
14+
15+
for market in range(nMarkets):
16+
sma, upperBand, lowerBand = bollingerBands(CLOSE[:, market])
17+
currentPrice = CLOSE[-1, market]
18+
19+
if currentPrice >= upperBand + (upperBand - lowerBand) * threshold:
20+
pos[0, market] = -1
21+
elif currentPrice <= lowerBand - (upperBand - lowerBand) * threshold:
22+
pos[0, market] = 1
23+
24+
return pos, settings
25+
26+
27+
def mySettings():
28+
""" Define your trading system settings here """
29+
30+
settings = {}
31+
32+
settings['markets'] = ['CASH', 'F_AD', 'F_AE', 'F_AH', 'F_AX', 'F_BC', 'F_BG', 'F_BO', 'F_BP', 'F_C', 'F_CA',
33+
'F_CC', 'F_CD', 'F_CF', 'F_CL', 'F_CT', 'F_DL', 'F_DM', 'F_DT', 'F_DX', 'F_DZ', 'F_EB',
34+
'F_EC', 'F_ED', 'F_ES', 'F_F', 'F_FB', 'F_FC', 'F_FL', 'F_FM', 'F_FP', 'F_FV', 'F_FY',
35+
'F_GC', 'F_GD', 'F_GS', 'F_GX', 'F_HG', 'F_HO', 'F_HP', 'F_JY', 'F_KC', 'F_LB', 'F_LC',
36+
'F_LN', 'F_LQ', 'F_LR', 'F_LU', 'F_LX', 'F_MD', 'F_MP', 'F_ND', 'F_NG', 'F_NQ', 'F_NR',
37+
'F_NY', 'F_O', 'F_OJ', 'F_PA', 'F_PL', 'F_PQ', 'F_RB', 'F_RF', 'F_RP', 'F_RR', 'F_RU',
38+
'F_RY', 'F_S', 'F_SB', 'F_SF', 'F_SH', 'F_SI', 'F_SM', 'F_SS', 'F_SX', 'F_TR', 'F_TU',
39+
'F_TY', 'F_UB', 'F_US', 'F_UZ', 'F_VF', 'F_VT', 'F_VW', 'F_VX', 'F_W', 'F_XX', 'F_YM',
40+
'F_ZQ']
41+
42+
# Futures Contracts
43+
settings['lookback'] = 20
44+
settings['budget'] = 10 ** 6
45+
settings['slippage'] = 0.05
46+
47+
settings['threshold'] = 0.4
48+
49+
return settings
50+
51+
52+
if __name__ == '__main__':
53+
import quantiacsToolbox
54+
55+
quantiacsToolbox.runts(__file__)

0 commit comments

Comments
 (0)