34 lines
996 B
Python
34 lines
996 B
Python
# Example 7.1: Opening Gap Strategy for FSTX
|
|
|
|
import numpy as np
|
|
import pandas as pd
|
|
#import matplotlib.pyplot as plt
|
|
|
|
entryZscore=0.1;
|
|
|
|
|
|
df=pd.read_csv('inputDataDaily_FSTX_20120517.csv')
|
|
df['Date']=pd.to_datetime(df['Date'], format='%Y%m%d').dt.date # remove HH:MM:SS
|
|
df.set_index('Date', inplace=True)
|
|
|
|
stdretC2C90d=df['Close'].pct_change().rolling(90).std().shift()
|
|
|
|
longs= df['Open'] >= df['High'].shift()*(1+entryZscore*stdretC2C90d)
|
|
shorts=df['Open'] >= df['Low'].shift()*(1-entryZscore*stdretC2C90d)
|
|
|
|
positions=np.zeros(longs.shape)
|
|
|
|
positions[longs]=1
|
|
positions[shorts]=-1
|
|
|
|
ret=positions*(df['Close']-df['Open'])/df['Open']
|
|
|
|
cumret=(np.cumprod(1+ret)-1)
|
|
cumret.plot()
|
|
|
|
print('APR=%f Sharpe=%f' % (np.prod(1+ret)**(252/len(ret))-1, np.sqrt(252)*np.mean(ret)/np.std(ret)))
|
|
from calculateMaxDD import calculateMaxDD
|
|
maxDD, maxDDD, i=calculateMaxDD(cumret.fillna(0))
|
|
print('Max DD=%f Max DDD in days=%i' % (maxDD, maxDDD))
|
|
#APR=0.074864 Sharpe=0.494857
|
|
#Max DD=-0.233629 Max DDD in days=789 |