Skip to content
This repository was archived by the owner on May 8, 2021. It is now read-only.

Commit 0d22e50

Browse files
commit
1 parent c6de034 commit 0d22e50

File tree

5 files changed

+35
-23
lines changed

5 files changed

+35
-23
lines changed

back.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77

88
def ba(backtest,data):
9-
9+
'''
1010
data['high']=data.close.shift(1).rolling(window=5).max()
1111
data['low']=data.close.shift(1).rolling(window=5).min()
1212
data['avg']=analysis.ma(data.close,5)
@@ -18,9 +18,9 @@ def ba(backtest,data):
1818
backtest.buy(5)
1919
elif sell.tail(1).bool():
2020
backtest.sell(5)
21-
else:
22-
print('No trade')
23-
21+
22+
'''
23+
pass
2424
#rets=analysis.daily_returns(data.close)
2525
#data['volatility']=analysis.moving_volatility(rets,1)
2626
#data['slip']=data.high-data.close
@@ -29,4 +29,4 @@ def ba(backtest,data):
2929

3030

3131

32-
run_backtest(ba,['AAPL'],data="US_STOCKS_daily",start_date='2018-01-01',end_date='2019-01-01')
32+
run_backtest(ba,['AAPL'],data="US_STOCKS_ohlcv",start_date='2019-01-01',end_date='2019-07-01')

libkloudtrader/algorithm.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import libkloudtrader.backtest as bt
1313
import libkloudtrader.crypto as crypto
1414
import libkloudtrader.analysis as analysis
15+
from tqdm import tqdm
1516

1617

1718

@@ -44,15 +45,17 @@ def run_backtest(strategy: str,
4445
start_date,
4546
end_date
4647
)
48+
print(data_batch)
4749
batch = processing.Buffer(len(data_batch), dtype=object)
4850
backtest=bt.Backtest(capital=100000,commission=1,enable_slippage=True)
49-
for index, bar in data_batch.iterrows():
51+
for datetime, bar in data_batch.iterrows():
5052
batch.append(bar)
51-
backtest.update_bar(index,bar)
53+
backtest.update_bar(datetime,bar)
5254
data_batch = pd.DataFrame(batch)
5355

5456
locals()['strategy'](backtest,data_batch)
55-
print(backtest.get_trade_log)
57+
#print(pd.merge(data_batch,backtest.get_portfolio,on = index))
58+
#print(data_batch)
5659

5760
'''
5861
for symbol in symbol_bucket:

libkloudtrader/backtest.py

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -45,29 +45,29 @@ def __init__(self,capital:float,commission:float,enable_slippage:bool):
4545
self.commission=commission
4646
self.enable_slippage=enable_slippage
4747
self.slippage=0
48-
self.trades_log=pd.DataFrame(columns=['datetime','trade type','price','fill price','order cost'])
48+
self.trades_log=pd.DataFrame(columns=['datetime','trade_type','price','fill_price','order_cost','capital','position'])
4949

5050

5151
def buy(self,quantity):
5252
'''emulates a buy order'''
5353
self.capital-=self.order_cost
5454
self.update_positions(quantity)
55-
self.update_trade_logs(datetime=self.bar.datetime,trade_type='Buy',price=self.bar.close,fill_price=self.fill_price,order_cost=self.order_cost)
56-
print('Bought {} of stocks @ {} but price is {}'.format(quantity,self.order_cost,self.bar.close))
55+
self.update_trade_logs(datetime=self.bar.datetime,trade_type='Buy',price=self.bar.close,fill_price=self.fill_price,order_cost=self.order_cost,capital=self.capital,position=self.position)
56+
#print('Bought {} of stocks @ {} but price is {}'.format(quantity,self.order_cost,self.bar.close))
5757

5858

5959
def sell(self,quantity):
6060
'''emulates a sell order'''
61-
if self.position!=0:
62-
self.capital+=self.order_cost
63-
self.update_positions(-1*quantity)
64-
self.update_trade_logs(datetime=self.bar.datetime,trade_type='Sell',price=self.bar.close,fill_price=self.fill_price,order_cost=-1*self.order_cost)
65-
print('Sold {} of stocks @ {} but price is {}'.format(quantity,self.order_cost,self.bar.close))
66-
else:
67-
print('No position to close')
68-
69-
def update_trade_logs(self,datetime,trade_type,price,fill_price,order_cost):
70-
df=pd.DataFrame([{'datetime':datetime,'trade type':trade_type,'price':price,'fill price':fill_price,'order cost':order_cost}])
61+
#if self.position!=0:
62+
self.capital+=self.order_cost
63+
self.update_positions(-1*quantity)
64+
self.update_trade_logs(datetime=self.bar.datetime,trade_type='Sell',price=self.bar.close,fill_price=self.fill_price,order_cost=self.order_cost,capital=self.capital,position=self.position)
65+
#print('Sold {} of stocks @ {} but price is {}'.format(quantity,self.order_cost,self.bar.close))
66+
#else:
67+
#pass#print('No position to close')
68+
69+
def update_trade_logs(self,datetime,trade_type,price,fill_price,order_cost,capital,position):
70+
df=pd.DataFrame([{'datetime':datetime,'trade_type':trade_type,'price':price,'fill_price':fill_price,'order_cost':order_cost,'capital':capital,'position':position}])
7171
self.trades_log=self.trades_log.append(df)
7272

7373

@@ -120,3 +120,11 @@ def getbar(self):
120120
def getposition(self):
121121
return self.position
122122

123+
@property
124+
def get_portfolio(self):
125+
trade_log=self.get_trade_log
126+
portfolio=pd.DataFrame(index=trade_log.index)
127+
portfolio['holdings']=trade_log.position.multiply(trade_log.price)
128+
portfolio['cash']=trade_log.capital
129+
portfolio['total']=portfolio.cash+portfolio.holdings
130+
return portfolio

libkloudtrader/enumerables.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77

88
class Data_Types(Enum):
99
'''Data Types of backtesting and live trading'''
10-
US_STOCKS_daily = partial(stocks.ohlcv)
10+
US_STOCKS_ohlcv = partial(stocks.ohlcv)
1111
US_STOCKS_live_feed = partial(stocks.incoming_tick_data_handler)
1212
CRYPTO_live_feed = partial(crypto.incoming_tick_data_handler)
1313
CRYPTO_live_feed_level2 = partial(crypto.incoming_tick_data_handler_level2)
14+

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,6 @@
1717
"numpy",
1818
"empyrical",
1919
"asyncio",
20-
"ccxt @ git+https://github.com/kloudtrader/kloudtrader_ccxt#egg=ccxt"
20+
"ccxt"
2121
],
2222
)

0 commit comments

Comments
 (0)