バックトレーダーの取引とは何ですか?あなたはそれを理解していないかもしれません

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に設定されて、分析可能な平均回帰トランザクションが示されます。後で。

詳細については、当社が作成したバックトレーダーのテクニカルチュートリアルを参照してください。

おすすめ

転載: blog.csdn.net/qtbgo/article/details/109799469