Beispiel #1
0
    def test_cross(self):
        s = pd.Series([np.nan, 1, 2, 3, np.nan, 4, 5, np.nan, 4, 3, 2, 1])

        res = ta.cross_signal(s, 3)
        exp = pd.Series([np.nan, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1])
        pdtest.assert_series_equal(res, exp)
        # continuous should produce same effect
        res = ta.cross_signal(s, 3, continuous=1)
        pdtest.assert_series_equal(res, exp)

        # Check when crossing a range
        res = ta.cross_signal(s, [2, 3])
        exp = pd.Series([np.nan, -1, -1, 0, 0, 1, 1, 1, 1, 1, 0, -1])
        pdtest.assert_series_equal(res, exp)
    def test_cross(self):
        s = pd.Series([np.nan, 1, 2, 3, np.nan, 4, 5, np.nan, 4, 3, 2, 1])

        res = ta.cross_signal(s, 3)
        exp = pd.Series([np.nan, -1, -1, -1, -1, 1, 1, 1, 1, 1, -1, -1])
        pdtest.assert_series_equal(res, exp)
        # continuous should produce same effect
        res = ta.cross_signal(s, 3, continuous=1)
        pdtest.assert_series_equal(res, exp)

        # Check when crossing a range
        res = ta.cross_signal(s, [2, 3])
        exp = pd.Series([np.nan, -1, -1, 0, 0, 1, 1, 1, 1, 1, 0, -1])
        pdtest.assert_series_equal(res, exp)
import tia.analysis.ta as ta
import tia.analysis.talib_wrapper as talib
import pandas as pd
from pandas_datareader import get_data_yahoo
from tia.analysis.model import SingleAssetPortfolio, PortfolioPricer, load_yahoo_stock, PortfolioSummary
from tia.analysis.model.ret import RoiiRetCalculator
from tia.util.fmt import DynamicColumnFormatter, DynamicRowFormatter, new_dynamic_formatter
import matplotlib.pyplot as plt

# drop adj close & volume for example sake
msft = load_yahoo_stock('MSFT', start='1/1/2010')

# build signal when 50d crosses 200d
moving_avgs = pd.DataFrame({
    '50': ta.sma(msft.pxs.close, 50),
    '200': ta.sma(msft.pxs.close, 200)
})
signal = ta.cross_signal(moving_avgs['50'], moving_avgs['200']).dropna()
# keep only entry
entry_signal = signal.copy()
entry_signal[signal.shift(1) == signal] = 0
entry_signal = entry_signal[entry_signal != 0]
# show when the signal triggers
moving_avgs.plot(color=['b', 'k'], title='MSFT moving averages')
for i, v in entry_signal.iteritems():
    if v == -1:
        plt.plot(i, moving_avgs['50'][i], 'rv')
    else:
        plt.plot(i, moving_avgs['50'][i], 'k^')
import matplotlib.pyplot as plt
import tia.analysis.ta as ta

# Single SID, Multiple Valid Fields
resp = LocalTerminal.get_historical(['EURUSD Curncy'], ['PX_LAST'],
                                    start='1/1/2020',
                                    end='10/27/2020')
df = resp.as_frame()

#Add the 30 and 50 day rolling averages to the dataframe

df['eurusd30dma'] = df['EURUSD Curncy']['PX_LAST'].rolling(window=30).mean()
df['eurusd50dma'] = df['EURUSD Curncy']['PX_LAST'].rolling(window=50).mean()

# Add the trading signals when the 30 day crosses the 50 day MA
signal = ta.cross_signal(df['eurusd30dma'], df['eurusd50dma']).dropna()

#only keep the entry/exit signals

entry_signal = signal.copy()
entry_signal[signal.shift(1) == signal] = 0
entry_signal = entry_signal[entry_signal != 0]
#df['entry signal'] = entry_signal
#print(entry_signal.head())
#print(df.head())
#print(df['eurusd30dma']['2020-06-01'])

#matplotlib.style.use('ggplot')
df.plot(kind='line',
        title='signals',
        figsize=(15, 10),
Beispiel #5
0
myCapital = Currency('USD',1000000)
myProduct = Product('CurrencySpot','EURUSD','Bloomberg','EURUSD Curncy')
DataRequest = mgr[myProduct.SourceIdentifier]
df = DataRequest.get_historical(['PX_OPEN','PX_LOW','PX_HIGH','PX_LAST'],'1/1/2009','1/28/2019')
df['date'] = pd.to_datetime(df.index)
df['date'] = df['date'].apply(mdates.date2num)
df.rename(columns={'PX_OPEN':'Open','PX_LAST':'Close','PX_HIGH':'High','PX_LOW':'Low'},inplace=True)


x = range(2,10)
l = list(itertools.permutations(x,2))
print ("Testing  ,",len(l)," permutations")
for period1,period2 in l :
    
    moving_avgs = pd.DataFrame({period1: ta.sma(df['Close'], period1),  period2: ta.sma(df['Close'], period2)})
    myCrossSignal = ta.cross_signal(moving_avgs[period1], moving_avgs[period2]).dropna()
    myEntrySignal= myCrossSignal.copy()
    myEntrySignal[myCrossSignal.shift(1)==myCrossSignal] = 0
    myEntrySignal = myEntrySignal[myCrossSignal==1]
    
    myExitSignal = myCrossSignal.copy()
    myExitSignal[myCrossSignal.shift(1)==myCrossSignal]=0
    myExitSignal= -myExitSignal[myCrossSignal==-1]
    
    mySimpleStrategy = SimpleStrategy(myProduct,myEntrySignal,myExitSignal)
    
    myStrategyEngine = StrategyEngine(df,mySimpleStrategy,myCapital,"SMA Cross:"+str(period1)+","+str(period2))
    myStrategyEngine.backtest()
    myStrategyEngine.report()