こんにちは、Heywaです。
FXや仮想通貨(ビットコインなど)のBotのバックテストで使えるライブラリ「backtesting.py」は便利なのですが、下図のように公式ドキュメントにあまり例文(example)がすくないため、いまいち細かい注文方法とか操作がわからず、毎回試行錯誤してしまうので、メモを残しておきたく。
同じように悩んだかたの参考になれば幸いです。また、基本的な使い方については、仮想通貨であれば「ビットコイン Backtesting.py」などで検索いただければ色々と見つかると思いますので、そちらも合わせてご覧いただければと思います。
現在の注文をキャンセルして、新しい注文を出す
ポジションを確認して、ポジションがなければ注文状況を確認。注文をすべてCanselして、新しい注文を出すようにしています。ロジックの部分だけ書きます。
class MyStrategy(Strategy): def next(self): # チャートデータの行ごとに呼び出される sell_limit_price = 99999999 buy_limit_price = 99999999 tp = None sl = None stop = None # 買いポジションがない場合 if self.position.is_long ==False: if len(self.orders) > 0: #注文がある場合 for order in self.orders: if order.size >0: #買い注文の場合 order.cancel() #キャンセル self.buy(limit=buy_limit_price, sl=sl, tp=tp, stop=stop, size=1) # 買い # 売りからも入る場合 if self.position.is_short ==False: if len(self.orders) > 0: #注文がある場合 for order in self.orders: if order.size <0: #売り注文の場合 order.cancel() #キャンセル self.sell(limit=sell_limit_price, sl=sl, tp=tp, stop=stop, size=1) # 売り
注文のキャンセルについては、「self.orders」で取得して、ループで回して取得する必要があります。
Sizeがプラスなら買い注文、マイナスなら売り注文だとわかったので、それも判定してそれぞれキャンセルさせるようにしています。
#買い注文のキャンセル if len(self.orders) > 0: #注文がある場合 for order in self.orders: if order.size >0: #買い注文の場合 order.cancel() #キャンセル #売り注文のキャンセル if len(self.orders) > 0: #注文がある場合 for order in self.orders: if order.size <0: #売り注文の場合 order.cancel() #キャンセル
指値注文については、価格をLimitで指定しています。「sl、tp、stop」については、公式のヘルプをご覧いただき、随時指定していく形かなと思います。
backtesting.backtesting API documentation
Core framework data structures. Objects from this module can also be imported from the top-level module directly, e.g …
以上、参考になれば幸いです。
Pythonができるようになるといろいろできるようになって人生楽しいです。
コメント