バックテストトランザクションインターフェイス
概要概要
独自の定量的戦略バックテストシステムを確立する前に、戦略バックテストのいくつかのインターフェイスをある程度理解する必要があります。
APIドキュメント:
https ://www.ricequant.com/doc/quant/strategy-api.html#Transaction関連の関数
取引機能
指定株取引
order_shares-指定株取引(株式のみ)
order_shares(id_or_ins, amount, style=MarketOrder())
指定された数の株式の売買注文を出す最も一般的な方法の1つ。パラメーターとして注文タイプを出す必要がある場合、注文のタイプが無視されると、デフォルトは成行注文です(成行注文)
パラメータ:
パラメータ | の種類 | 注釈 |
---|---|---|
id_or_ins | strまたはインストルメントオブジェクト | order_book_idまたはシンボルまたは機器オブジェクト、ユーザーは指定する必要があります |
量 | フロート必須 | 配置する必要のある株式の数。正の数は購入を表し、負の数は販売を表します。xx株の1ロットに基づいて1ロットの倍数に調整されます。たとえば、中国A株は100株の倍数に調整されます。 |
スタイル | OrderType | 注文タイプ。デフォルトは成行注文です。現在サポートされている注文タイプは次のとおりです。style= MarketOrder()、style = LimitOrder(limit_price) |
戻り値:
注文オブジェクト
例:
- 平安銀行の2000株を購入し、成行注文として送信します。
order_shares('000001.XSHE', 2000)
平安銀行の株式2000株を売り、成行注文として送信します:
order_shares('000001.XSHE', -2000)
平安銀行の株式1000株を購入し、10人民元で指値注文として送信します。
order_shares('000001.XSHE', 1000, style=LimitOrder(10))
目標値の順序
order_target_value-目標値で注文します(株式のみ)
order_target_value(id_or_ins, cash_amount, style=OrderType)
証券のポジションを目標値に売買し、自動的に調整します(当面はショートセルはサポートされません)。証券にポジションがまだない場合は、目標値のすべての証券が購入されます。はすでに証券ポジションのポジションであり、証券の現在のポジションと目標ポジションの間の価値の差を調整する証券を売買します。資金が不足している場合、APIは配達注文を作成しないことに注意してください。
トランザクションに関する考慮事項
注文を拒否する
次の状況では、トランザクションはバックテストプラットフォームによって自動的に拒否されます。
- protfolioで利用できる資金が不十分です
- 注文数量が1ロット未満(100株が1ロット)
- 注文価格がコース制限の制限を超えています
- 現在購入可能(販売可能)ポジションが不足しています
- 株式当日の取引停止
- 契約は上場廃止(期限切れ)またはまだ上場されていません
市場価格と制限価格
指値注文(LimitOrder)買い注文価格> =参照価格、または売り注文価格<=参照価格の場合、参照価格がスリッページに追加され、取引に影響を与えます(高く買い、低く売ります)。成行注文( MarketOrder)は直接参照されます価格はトランザクションに影響を与えるためにスリッページを追加します。
合計金額は現在のバー取引量の25%を超えることはできません。たとえば、特定の1分間の取引量が10,000株の場合、バックテスト中に取引を2500株に制限できます。超過すると、成行注文は次のようになります。部分取引後、自動的にキャンセルされます。指値注文は、注文ラインの次のバーデータが一致し、その日の終わりまで配信されるのを常に待機します。1日の終わりの後、すべての未約定の指値注文は、によって自動的にキャンセルされます。システム。
実際の取引における市場への注文の影響をより正確にシミュレートするために、スリッページの設定を導入します。ストラテジー編集ページの[その他]オプションでスリッページを設定できます。許容される設定範囲は[0、1 )設定では、前回の取引価格をある程度「悪化」させます。つまり、より高価に購入し、より安く販売します。私たちのスリッページ方式は、前回の取引の一定の割合に応じて悪化します。たとえば、スリッページを0.1に設定すると、元の買い取引の取引価格が10元の場合、設定後の取引価格は11元になります。
注:実際の取引ではスリッページは必要ありません。
取引手数料
ポートフォリオ
投資ポートフォリオは、投資家や金融機関が保有する株式、債券、金融デリバティブなどの集合体です。
ポートフォリオ情報を見る
投資ポートフォリオに関する情報を含むコンテキストパラメータについては、前に説明しました。
コンテキスト属性
今-現在の時間
context.now
上記の方法を使用するとhandle_bar
、現在のバーの時刻を取得できます。たとえば、デイバーの花はその日の時刻であり、ミニッツバーはこの分の時刻です。
返されるデータ型はdatetime.datetimeです。
ポートフォリオ-ポートフォリオ情報
context.portfolio
ポートフォリオは、それぞれ単一株または先物戦略の株式ポートフォリオと先物ポートフォリオです。株式+先物ハイブリッド戦略では、集計後のポートフォリオ全体を表します。
stock_account-株式ファンドの口座情報
context.stock_account
ポートフォリオオブジェクト
コード
def handle_bar(context, bar_dict):
# 开始编写你的主要的算法逻辑
# bar_dict[order_book_id] 可以拿到某个证券的bar信息
# context.portfolio 可以拿到现在的投资组合信息
# 使用order_shares(id_or_ins, amount)方法进行落单
# TODO: 开始编写你的算法吧!
# 购买股票
order_target_percent(context.s1, 0.1)
order_target_percent("000004.XSHE", 0.1)
# 资金, 仓位
print(context.stock_account)
print("-----------------------")
print(context.portfolio.positions.keys())
print(context.portfolio.positions[context.s1].quantity)
print("-----------------------")
print("投资组合的可用资金为", context.portfolio.cash)
print("投资组合的市场价值为",context.portfolio.market_value)
print("投资组合的总价值为", context.portfolio.total_value)
出力結果: