-
This commit is contained in:
46
main.py
Normal file
46
main.py
Normal file
@@ -0,0 +1,46 @@
|
||||
from typing import List
|
||||
|
||||
from internal_types.types import Instrument, Position, SecurityType
|
||||
from strategy.buy_and_hold import BuyAndHold
|
||||
from strategy.strategy import Strategy
|
||||
from strategy.turtle_system_1 import TurtleSystem1
|
||||
from trading_gateway.trading_gateway import BacktestGateway, TradingGateway
|
||||
from utils.utils import log_sharpe_ratio, simple_sharpe_ratio
|
||||
|
||||
|
||||
def main():
|
||||
trading_gateway: TradingGateway = \
|
||||
BacktestGateway('./csv/qqq_2023_02_01_15_min.csv', '2024-01-01', '2025-01-01')
|
||||
instr = Instrument('QQQ', SecurityType.EQUITY, 1)
|
||||
initial_balance = 1_000_000
|
||||
# strategy: Strategy = BuyAndHold(initial_balance, instr)
|
||||
strategy: Strategy = TurtleSystem1(initial_balance, instr)
|
||||
balance_history: List[float] = []
|
||||
|
||||
# todo: use asyncio to run multiple strategies concurrently
|
||||
for quote in trading_gateway.next_quote():
|
||||
balance = strategy.net_liquid_value(quote.close)
|
||||
balance_history.append(balance)
|
||||
|
||||
if balance <= 0:
|
||||
break
|
||||
|
||||
strategy.process_quote(quote)
|
||||
|
||||
# todo: handle strategy that trades multiple symbols
|
||||
pos_diff = strategy.desired_position() - strategy.curr_position()
|
||||
|
||||
if pos_diff:
|
||||
# todo: order should be filled async
|
||||
# trading_gateway.submit_order(pos_diff)
|
||||
strategy.order_filled(Position(instr, quantity=pos_diff, price=quote.close))
|
||||
|
||||
interval_sec = 15 * 60 # 15 minutes
|
||||
print(round(simple_sharpe_ratio(balance_history, interval_sec), 4))
|
||||
print(round(log_sharpe_ratio(balance_history, interval_sec), 4))
|
||||
print(round(balance_history[-1] / initial_balance - 1, 4) * 100, '%')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
# todo: asyncio
|
||||
main()
|
||||
Reference in New Issue
Block a user