1。概要
バックトレーダーバックテストプログラムでは、トレードトレードのステータスが変化すると、ストラテジーのnotify_tradeメソッドがトリガーされ、トレードトレード情報を出力できます。例は次のとおりです。
取引収入の記録(省略可能、デフォルトでは結果は出力されません)
def notify_trade(self, trade):
if trade.isclosed:
print('毛收益 %0.2f, 扣佣后收益 % 0.2f, 佣金 %.2f' %
(trade.pnl, trade.pnlcomm, trade.commission))
注意しないと貿易の概念を理解していると思うかもしれませんが、考えてみると本当に理解できているのでしょうか。取引状況の確認は変わりますか?彼にはいくつの州がありますか?どういう意味ですか?すぐにぼやけます!
私たちが一般的に株式を売買するとき、私たちはブローカーに注文を出すことだけを含み、取引の概念はありません。これは次の買い注文ではなく、トランザクションであり、次の売り注文は別のトランザクションを表します。トランザクションの概念は、実際にはユーザー側の概念です。
2では、トランザクションはバックトレーダーでどのように定義されていますか?
通常の自己資金で株式を購入し、ショートできない場合、注文が0から正にポジションを変更すると取引が開始され、その後、注文が正から0にポジションを変更すると取引が終了します。 、どちらの場合も、notify_tradeメソッドがトリガーされます。
トランザクションは複数の注文で構成される場合があります。たとえば、不足できない場合は、次の方法でトランザクションステータスの変化を観察します。
100株を購入するために初めて買い注文が出されたとき。この注文が実行されると、ポジションは0から正の値(100)に変わります。システムはトランザクションを開き、notify_tradeメソッドをトリガーします。notify_tradeでトランザクションステータスステータスを確認します。 、1オープンです。
次に、100株の2番目の買い注文を出します。注文が実行されてもnotify_tradeはトリガーされず、ポジションは200になります。
次に、100株を売る売り注文を出しますが、notify_tradeはトリガーされず、ポジションは100になります。
次の売り注文は100株を売ります。実行されると、ポジションが100から0に変わり、トランザクションがクローズされ、notify_tradeがトリガーされ、トランザクションステータスが2クローズになります。
ショートセルが不可能な場合、self.close()コマンドは一度にすべてのポジションを市場価格で売り、トランザクションをクローズします。
ショートセルの場合、ポジションが0からゼロ以外(ロングポジションが正、ショートポジションが負)に変わると取引が開始され、その後、ポジションがゼロ以外の値からゼロの値に変わります。その後、トランザクションは閉じられます。空売り操作では、self.close()はデフォルトですべてのショートポジションを市場価格で買い戻し、トランザクションを閉じます。
注文がポジションを正の値から負の値に、または負の値から正の値に変更する場合、それは2つのアクションを意味します:トランザクションが閉じられる(ポジションがゼロ以外の値から0に変わる)と新しいトランザクションが開かれます(位置が0からゼロ以外に変更されました)。
トレードオブジェクトには次の属性があります。
添付の本のソースコードtradestatus.pyは、トランザクションステータスの変化を示しています。読者は、ソースコードを自分で実行して、トランザクションステータスの変化を観察できます。
3より高度な使用法
変数self.tradeを使用して、notify_tradeメソッドでトランザクションオブジェクトを記録し、それを他の場所で使用できます。
def __init__(self):
self.trade = None # 定义跟踪交易的变量
# 记录交易收益情况(可省略,默认不输出结果)
def notify_trade(self, trade):
self.trade = trade # 记录交易
if trade.isclosed:
print('毛收益 %0.2f, 扣佣后收益 % 0.2f, 佣金 %.2f' %
(trade.pnl, trade.pnlcomm, trade.commission))
トランザクションを分類したい場合があります。たとえば、0はトレンド取引を意味し、1は回帰取引を意味します。このようにして、バックテストの最後に、さまざまなトランザクションのパフォーマンスを分析できます。これを行う方法?
注文を作成するときに、self.buy(tradeid = 1)など、注文が属するトランザクションタイプを指定できます。これにより、トランザクションが開き、トレードIDが1に設定されて、分析可能な平均回帰トランザクションが示されます。後で。
詳細については、当社が作成したバックトレーダーのテクニカルチュートリアルを参照してください。