2025-06-05 08:48:33 +02:00

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