超簡単Pythonで日本株アルゴリズムトレードバックテスト(J-Quants 利用)
Pythonで超簡単にJ-Quantsを利用して日本株アルゴリズムトレードバックテスト
1. J-Quantsで無料アカウント作成
2. ツールインストール
$ pip install jquants-algo
3. バックテスト
backtest.py
from jquants_algo import Algo
import pprint
class MyAlgo(Algo):
def strategy(self):
fast_ma = self.sma(period=3)
slow_ma = self.sma(period=5)
# golden cross
self.sell_exit = self.buy_entry = (fast_ma > slow_ma) & (
fast_ma.shift() <= slow_ma.shift()
)
# dead cross
self.buy_exit = self.sell_entry = (fast_ma < slow_ma) & (
fast_ma.shift() >= slow_ma.shift()
)
algo = MyAlgo(
mail_address="<your J-Quants mail address>",
password="<your J-Quants password>",
ticker="7203", # TOYOTA
size=100, # 100 shares
)
pprint.pprint(algo.backtest())
実行
$ python backtest.py
{'long': {'average return': '0.156',
'maximum drawdown': '49350.000',
'profit': '11450.000',
'profit factor': '1.080',
'riskreward ratio': '1.455',
'sharpe ratio': '0.038',
'trades': '54.000',
'win rate': '0.426'},
'short': {'average return': '-0.238',
'maximum drawdown': '42050.000',
'profit': '-31020.000',
'profit factor': '0.754',
'riskreward ratio': '1.319',
'sharpe ratio': '-0.091',
'trades': '55.000',
'win rate': '0.364'},
'total': {'average return': '-0.043',
'maximum drawdown': '79950.000',
'profit': '-19570.000',
'profit factor': '0.927',
'riskreward ratio': '1.423',
'sharpe ratio': '-0.013',
'trades': '109.000',
'win rate': '0.394'}}
4. 最新の売買予測
predict.py
from jquants_algo import Algo
import pprint
class MyAlgo(Algo):
def strategy(self):
fast_ma = self.sma(period=3)
slow_ma = self.sma(period=5)
# golden cross
self.sell_exit = self.buy_entry = (fast_ma > slow_ma) & (
fast_ma.shift() <= slow_ma.shift()
)
# dead cross
self.buy_exit = self.sell_entry = (fast_ma < slow_ma) & (
fast_ma.shift() >= slow_ma.shift()
)
algo = MyAlgo(
mail_address="<your J-Quants mail address>",
password="<your J-Quants password>",
ticker="7203", # TOYOTA
size=100, # 100 shares
)
pprint.pprint(algo.predict())
実行
$ python predict.py
{'buy entry': True,
'buy exit': False,
'close': 2416.5,
'date': '2023-08-22',
'sell entry': False,
'sell exit': True}
以上、超簡単!