うまくいったように見えるが、正直、英文を丸写ししただけの訳なので意味がよくわかっていない。
そこで、自分なりのシミュレーションができるように細かく調べていくことにする。
まず、1日ごとに呼ばれるonBarsにコメントを入れてみた
def onBars(self, bars): # Wait for enough bars to be available to calculate SMA and RSI. # 各種指標が出るまで待つ if self.__exitSMA[-1] is None or self.__entrySMA[-1] is None or self.__rsi[-1] is None: return bar = bars[self.__instrument] if self.__longPos is not None:#買いポジがないとき if self.exitLongSignal():#終了シグナルあり self.__longPos.exitMarket()#買いポジ全決済 elif self.__shortPos is not None:#売りポジないとき if self.exitShortSignal():#終了シグナルあり self.__shortPos.exitMarket()#売りポジ全決済 else:#ノーポジのとき if self.enterLongSignal(bar):#買い条件成立時 #全予算の90%で買う shares = int(self.getBroker().getCash() * 0.9 / bars[self.__instrument].getPrice())# self.__longPos = self.enterLong(self.__instrument, shares, True) elif self.enterShortSignal(bar):#売り条件成立時 #全予算の90%を使って売る shares = int(self.getBroker().getCash() * 0.9 / bars[self.__instrument].getPrice()) self.__shortPos = self.enterShort(self.__instrument, shares, True)
このケースでは、売り買いどちらからでも入ることができるが両建てはしない。持っている現金の90%で買えるだけ買って、決済注文も全決済と潔いケースである。
マーケットインおよびマーケットアウトの指標、購入売却のところは関数になっているので、トリガーと資金マネジメントは別で考えることができる。
何が用意された関数で、どれが自分で用意した関数なのかよくわからなくなるので整理する。
まず Brokerさんは取引に必要なお金を管理しており、getBrokerで呼び出すことができる。
Brokerクラスにはたくさんの関数があるが、getCashしか使っていない
enterLongとenerShortはstrategyクラスの関数だ。価格はいらない、数量だけでいい。後ろのTrueはセッションクローズ時に自動的にポジションクローズしない設定らしい。セッションが何を指すのかよくわからないのでTrueにしておけばよさそう。
それにしてもたくさんの機能があるが、深入りするよりはサンプルの戦略を言調べるほうがよさそう。
0 件のコメント:
コメントを投稿