タイムシリーズデータ分析とTickデータバックテスト

作者: リン・ハーンリディア, 作成日:2023-01-06 15:27:16, 更新日:2023-09-20 10:12:15

img

タイムシリーズデータ分析とTickデータバックテスト

時間系列データ

タイムシリーズとは,等時間連続の間隔で得られたデータシリーズを指す.定量投資では,これらのデータは主に追跡投資対象物の価格とデータポイントの動きに反映される.例えば,株式価格の場合,指定された期間中に定期的に記録されるタイムシリーズデータは,読者により明確な理解を与える次のチャートを参照することができます.

img

この場合,連続間隔時間期間は,x軸の日数が14日間隔たれていることを意味します. 2005年3月7日と次の点,2005年3月31日,2005年4月5日,2005年4月19日の違いを注意してください.

しかし,時間系列データを使用すると,日付と価格という2つの列のみを含むこの種類以上のデータが見られます.ほとんどの場合,データ期間,開盤価格,最高価格,最低価格,閉盤価格という5つの列を使用します.つまり,データ期間が日々のレベルに設定されている場合,その日の高値,開盤値,低値,閉盤値の変化がこの時間系列のデータに反映されます.

ティックのデータとは?

ティックデータは,取引所の最も詳細な取引データ構造である.また,上記の時間系列データの拡張形式である.開業価格,最高価格,最低価格,最新の価格,取引量および売上.取引データが川と比較される場合,ティックデータは特定の横断の川のデータである.

外国取引所のすべてのアクションはリアルタイムで市場にプッシュされ,国内取引所は1秒間に2回チェックされます.この期間中にアクションがある場合は,スナップショットが生成されプッシュされます.比較して,データプッシュは OnTimeとしてのみ,OnTickではなく,最高の場合と考えることができます.

このチュートリアルのすべてのコードとタイムシリアルデータ取得は FMZ Quant プラットフォームで完了します.

FMZ Quant に関するデータをチェックする

国内Tickデータは実際のTickではありませんが,少なくともこのデータをバックテストに使用することで,現実に無限に近づき,復元することができます. それぞれのTickは,当時の市場の製品の主要なパラメータを表示し,実際のボットのコードは,理論的なTickに従って計算されます.

img

FMZ Quantでは,1時間間のデータが読み込まれる場合でも,1分間のデータから構成される1時間のK線が設定され,データ粒度も調整できます.もちろん粒度が小さいほど精度は高くなります.さらに強力なのは,データを実際のボットTickに切り替えた場合,実際のボット環境をシームレスに復元できるということです.つまり,1秒に2回のTick Exchangeの実際のデータです.

img

このチュートリアルを完了するために理解する必要がある基本的なコンセプトを学びました. これらのコンセプトはすぐに戻ってきます.

職場環境を整える

より良いツールが良い働きをする.まずはFMZ Quantプラットフォームにドッカーを展開する必要があります.ドッカーという概念に関しては,プログラミング経験のある読者は,さまざまな主流の取引所の公開APIインターフェースと戦略書きとバックテストの技術的な詳細をカプセル化した公式にパッケージ化されたDockerシステムとして想像することができます.このシステムの設立の元の意図は,FMZ Quantプラットフォームを使用する際に戦略書きとデザインに焦点を当てて量的なトレーダーをさせることです.これらの技術的な詳細は,戦略ライターにカプセル化された形式で提示され,多くの時間と労力を節約します.

  • FMZ Quant プラットフォームのドッカーシステムの導入 ドーカーを展開する方法は2つあります.

メソッドA:ユーザーはサーバーを自分でレンタルまたは購入し,AWS,アリババクラウド,デジタルオーシャン,Google Cloudなどのさまざまなクラウドコンピューティングプラットフォームに展開することができます.メリットとしては,戦略セキュリティとシステムセキュリティの両方が保証されています.FMZ Quantプラットフォームでは,ユーザーがこの方法を使用することを推奨しています.分散展開はサーバー攻撃の隠れた危険を排除します (顧客であろうとプラットフォーム自体であろうと).

FMZ Quantプラットフォームのパブリックサーバーをデプロイするために使用する.プラットフォームは香港,シンガポール,日本,東米でデプロイするための4つの場所を提供しています.ユーザーは,取引したい取引所の位置と近接性原則に応じてデプロイできます.この側面の利点は,シンプルで,1クリックで完了するのが簡単で,特に初心者向けに適しています.Linuxサーバーを購入する多くのことを知る必要はありません.また,Linuxコマンドを学ぶことからも時間とエネルギーを節約します.価格は比較的安いです.少額な資金を持つユーザーには,プラットフォームはこのデプロイ方法を使用することをお勧めします.

img

この記事 で は,B 方法 を 採用 する こと が 分かり ます.

特定の操作は:FMZ.COMドーカーをレンタルするには"クリックでドーカーVPSをレンタルします.

パスワードを入力します.

img

  • ロボットシステムとドーカーとの概念の関係 標準のセットを展開しました.次に,この標準のための"インスタンスの生成"が必要です.これはロボットです.

ロボットの作成は非常に簡単です.ドッカーを展開した後,左側のボット列をクリックし,ボットを追加するボタンをクリックし,タグ名に名前を入力して,ちょうど展開されたドッカーを選択します.下記のパラメータとK線期間は,主に取引戦略との連携で,特定の状況に応じて設定できます.

img

今までのところ,私たちの作業環境は構築されています. それは非常にシンプルで効果的であり,各機能が独自の義務を果たしていることがわかります. 次に,私たちは定量的な戦略を書くようになります.

Python で簡単な EMA 戦略を実装する

上記では,時間系列データとTickデータという概念について言及しました.次に,この2つの概念をリンクするために簡単なEMA戦略を使用します.

  • EMA戦略の基本原則

7日間のEMAのような遅い期間のEMAと3日間のEMAのような速い期間のEMAを通過する.それらは同じK線チャートに適用されます.速い期間のEMAが遅い期間のEMAを横切ると,それをゴールデンクロスと呼びます.遅い期間のEMAが速い期間のEMAを横切ると,それをベアッシュクロスオーバーと呼びます.

ポジションを開設する根拠は,ゴールデンクロスでロングポジションを開設し,ベアッシュクロスオーバーでショートポジションを開設することです. ポジションを閉じる理由は同じです.

開いてみようFMZ.COM, アカウント,ダッシュボード,戦略ライブラリにログインし,新しい戦略を作成します. 左上隅にある戦略書き言葉でPythonを選択します. 以下はこの戦略のコードです.各行には詳細なコメントがあります. 理解するのに時間をかけてください. この戦略は実際のボット戦略ではありません. リアルマネーで実験しないでください. 主な目的は,戦略書きと学習のためのテンプレートについての一般的なアイデアを与えることです.

import types # Import the Types module library, which is designed to handle the various data types that will be used in the code.

def main(): # The main function, where the strategy logic begins.
    STATE_IDLE = -1 # Mark position status variables
    state = STATE_IDLE # Mark the current position status
    initAccount = ext.GetAccount() # The spot digital currency trading class library (python version) is used here. Remember to check it when writing the strategy to obtain the initial account information.
    while True: # Enter the loop
        if state == STATE_IDLE : # Here begins the logic of opening positions.
            n = ext.Cross(FastPeriod,SlowPeriod) # The indicator crossover function is used here, for details please see: https://www.fmz.com/strategy/21104.
            if abs(n) >= EnterPeriod : # If n is greater than or equal to the market entry observation period, the market entry observation period here is to prevent positions from being opened indiscriminately as soon as the market opens.
                opAmount = _N(initAccount.Stocks * PositionRatio,3) # Opening position quantity, for the usage of _N, please check the official API documentation.
                Dict = ext.Buy(opAmount) if n > 0 else ext.Sell(opAmount) # Create a variable to store the open position status and execute the open position operation.
                if Dict :  # Check the dict variable and prepare for the following log output.
                    opAmount = Dict['amount']
                    state = PD_LONG if n > 0 else PD_SHORT # Both PD_LONG and PD_SHORT are global constants used to represent long and short positions, respectively.
                    Log("Details of opening positions",Dict,"Cross-period",n) # Log information
        else: # Here begins the logic of closing positions.
            n = ext.Cross(ExitFastPeriod,ExitSlowPeriod) # The indicator crossover function.
            if abs(n) >= ExitPeriod and ((state == PD_LONG and n < 0) or (state == PD_SHORT and n > 0)) : # If the market exit observation period has passed and the current account status is in the position status, then you can determine the Golden Cross or Bearish Crossover.
                nowAccount = ext.GetAccount() # Refresh and get account information again.
                Dict2 = ext.Sell(nowAccount.Stocks - initAccount.Stocks) if state == PD_LONG else ext.Buy(initAccount.Stocks - nowAccount.Stocks) # The logic of closing a position is to close the long position if it is a long position and close the short position if it is a short position.
                state = STATE_IDLE # Mark the position status after closing positions.
                nowAccount = ext.GetAccount() # Refresh and get account information again.
                LogProfit(nowAccount.Balance - initAccount.Balance,'money:',nowAccount.Balance,'currency:',nowAccount.Stocks,'The details of closing positions',Dict2,'Cross-over period:',n) # Log information
        Sleep(Interval * 1000) # Pause the loop for one second to prevent the account from being restricted due to too fast API access frequency.
  • EMA戦略のバックテスト 戦略編集ページでは,戦略を書くのを完了しました.次に,戦略の履歴市場でのパフォーマンスを確認するために,戦略をバックテストする必要があります.バックテストは,いかなる定量戦略開発においても重要な役割を果たしますが,重要な参照としてのみ使用できます.バックテストは利益保証に等しくありません.市場が絶えず変化しているため,バックテストは,まだ誘導のカテゴリーに属している,バックテストは単なる後見の行為です.市場はデデクティブです.

バックテストをクリックすると,直接修正できる多くの調整可能なパラメータがあることを確認できます. 将来的には,戦略はますます複雑になり,パラメータはますます多くなります. この修正方法は,ユーザーがコードを一つずつ修正するトラブルを回避するのに役立ちます.これは便利で,速く,明確です.

img

次の最適化オプションは,設定されたパラメータを自動的に最適化することができます.システムは,戦略開発者が最適な選択を見つけるのを助けるためにさまざまな最適なパラメータを試します.

上記の例から,定量取引の基礎は時間系列データの分析とティックデータのバックテスト相互作用を通じてであることがわかります.論理がどれほど複雑であっても,これらの2つの基本的な要素から分離することはできません.違いは次元の違いだけです.例えば,高周波取引にはより詳細なデータ側面とより多くの時間系列データが必要です.別の例はバックテストサンプルから多くのデータを必要とする仲介取引です.利息拡大と減少の統計的結果を知るために10年以上,2つの取引対象物の継続的な詳細なデータが必要です.将来の記事では,私は次々と高周波取引と仲介取引戦略を紹介します.楽しみにしてください.


関連性

もっと