ここで主に説明しているのは、中および低頻度の取引戦略用にプログラムされたリアルタイム コードの実装です。
戦略
クオンツトレーディング戦略の誕生は一般に、市場を観察して理解し、戦略のアイデアを生成し、その後戦略の具体的な詳細を設計し、次に複数の種類のデータをバックテストして特定のパラメーター値の効果を取得および検証することに基づいています。 。効果が良好で普遍的な適用性がある場合、次のステップは少額の資金で実際の市場をテストすることです。サンプル外の実質オファーが実現可能であれば、最終的には資金を増やして長期間運営することができます。
レバレッジを防ぐために、データマイニング、ディギング、ディギング、ディギングファクターなど、戦略を生成する他の方法ももちろんあることを説明しましょう。機械学習や強化学習などの自動生成要素もあります。ただし、この種のブラックボックス手法は、戦略のリトレースメント期間中実行し続けるのが困難です。なぜなら、これらの掘り出された要因がいつ、なぜ失敗するかわからないからです。クオンツ取引を行う場合、最も重要なことは、相場が良くない場合にポジションを縮小することはできますが、取引を終了することはできません。いつ大きな市場が勃発するかは誰にもわかりません。それを逃すと、これまでのリトレースメントは無駄になります。
戦略の設計とバックテストは、孫子の「兵法」で述べられている「寺算」に相当すると言えます。戦ったことがないが寺院が敗者である人は計算しなければなりません。「少ないほど良い。多ければ勝利を意味し、少なければ少ないことを意味し、何も重要ではありません!」
したがって、取引戦略はよく計画され、最初の設計から慎重に計算されなければなりません。そうしないと、実際のオファーが行われる前に実際に損失を被ることになります。このステップが最も難しいですが、その後の実際のコードは簡単ではありませんが、時間と労力を費やせば、いつでもうまく実行できます。確実なオファーの鍵となるのはリスク管理です。
取引戦略または取引ルールにより、私たちは「正しいことを行う」ことができ、実際のオファーの具体的な実装は「正しいことを行う」ことです。多くの場合、正しい方向を知ることは、距離を歩くよりもはるかに困難です。設備の修理という冗談のように、線を引くのに千元かかります。線を引くこと自体には 1 ドルの価値しかありませんが、線を引く場所を知るには 999 ドルかかります。
戦略と実際のオファーが一緒になって取引システムを形成します。取引システムの設計については、以前の記事「完全な取引システムの 7 つの要素」を参照してください。ここでの本当の提案は、実際には取引システムの次の 4 つのステップ「損益の入力と終了」の具体的な操作です。最初の 3 つのステップは基本的に戦略設計の完了時に決定されます。
しかし、たとえ戦略が良くても、実際に実行できなければその効果は大きく減じられ、元々良い戦略であった可能性も止まってしまいます。優れた戦略を立てるのは簡単ではないので、実行に失敗しないようにしてください。良いアイデアは最終的にはしっかりと実行される必要があります。
質問
1. 市場の急変
この種の戦略は、バー内にシグナルがある場合にのみ適用されます。バー内では、特定の K ラインの終値または始値は使用されませんが、シグナルをトリガーするために日中価格が使用されます。
これは、数日前に実際のオファーで発生した問題の例です。取引市場の微視的な例。通貨業界ではよくあることです。
下の写真は数日前(2023.7.10 17:21)のBNB無期限契約の10秒Kラインです(棒は10秒以内の取引データから集計されたOHLCVの意味です)。

ご覧のとおり、大きな陽線の振幅は 3.53% で、取引額は約 3,000 万ドルです。 10秒で完了。この市場が始まる前は、傾向はほとんど平穏でした。
そのときの 1 秒の K ラインである下の写真を見て、より詳細な情報を得ることができます。

基本的に完全に上昇するまで約4秒かかります。開始1秒で2点以上上昇した。これらは基本的に、高頻度戦略 (イベント駆動型、高頻度トレンド、マーケットメイクなど) と事前に調整されたアルゴリズム注文の結果です。
BNBの4時間足Kラインを見てみましょう。最大の陽線はニュースが出た時間帯です。振幅4.05%。

これらの期間の K ラインを比較すると、この種のニュース主導の変動 (今回のニュースは Binance の新しい IEO、ARKM) が通常は瞬時に完了することがわかります。 4 時間の増加は実際には 10 秒と大差なく、実際の起動はわずか 4 秒程度です。この種の戦場は、徹底的に武装した高頻度戦略に属します。ただし、中周波および低周波の戦略にも影響を及ぼし、スリッページが大きくなる可能性があります。
ここでは高周波戦略については説明しません。中周波戦略と低周波戦略は何を意味するのでしょうか?主に次の 2 つのことが思い浮かびます。
1. 一部のトレンドは非常に突然発生し、短期間で完了するため、戦略を気軽に中断することはできません。通貨サークルにおける実際のオファーは、特にポジションがある場合には 24 時間オンラインであることが保証されなければならず、切断することはできません。
2. 実際のスリッページは 2 パーセントポイントに達する可能性があります。上の 1 秒の K ラインを見てください。あなたの買いシグナルが特定の価格に基づいていて、その価格がたまたま大きな K ラインの下の部分に出ている場合は、何があろうともエントリー後の価格です。市場は2~3%ポイント下落する可能性がある。最悪の場合は4パーセントポイントまで下がる可能性があり、そうした買い注文は針の先端にある。しかし、売れば予想を超える利益が得られます。しかし、マーフィーの法則によれば、落ちてきたパンは必ずバターを塗った側に落ちます。長期的には、さらにスリッページが発生する可能性が高くなります。
ただし、良いことに、これは限られた回数だけ発生するということです。戦略が適切でスリッページが大きい限り、それは単なる利益確定であり、長期的なプラスのリターンには影響しません。もう一回衝撃と磨耗に耐えるようなものです。
これを軽減する 1 つの方法は、WebSocket を使用して最新の価格を取得することです。ドキュメントには 250 ミリ秒ごとに更新されると記載されていますが、実際には更新速度が速い場合があるため、すぐに対応できます。 WebSocket のもう 1 つの利点は、取引所の Restful API の周波数制限を占有しないことです。これについては後で詳しく述べる。
2. 1時間ごとの相場
これは、多くのトレンド戦略で発生します。これは、ほとんどのトレンド戦略がエントリーおよびエグジットシグナルの計算にスイッチポジションの価格を使用するためです。そして時間が経つとみんなが次々と立ち上がります。
毎時、特に 8 の倍数では、戦略がどのようなサイクルであっても、これら 3 つのポイントがすべて公約数の時間を満たしている必要があるため、おそらく全員の自動化された戦略が行動を開始し、高周波、中周波、および低周波が一緒に絞られるでしょう。お互いのライバルである独自のシグナルを生成します。
またこの際、交換には決済と配送も必要となります。無期限契約は引き渡されませんが、引き渡し資本手数料を計算するための他の操作が行われる場合があります。 0/8/16 の 3 時間後の約 6 秒間、Binance のウェブソケットは K ライン情報をプッシュせず、停止しました。どうすればいいのか聞いてください?実際には、解決策がないことがよくあります。
さらに深刻なのは、特に市場が下落しているときに市場が共鳴し、パニックがより伝染しやすくなることです。取引所のサーバーはさらに混雑しており、市場状況が激しい多くの小規模コインはすぐに注文できず、すべて 1001 エラーになります。急いで注文して成功した場合、ピンの先端で取引された注文があなたのものになる可能性があります。
したがって、スリッページは避けられないものであり、それを受け入れるだけではあまり意味がありません。前述したように、もう 1 つのストップロスとして扱ってください。
ただし、共有すべきヒントもいくつかあります。
ほとんどの自動化戦略は、シグナルの計算を開始する前に、その時の K ラインの終値が出るまで待機するため、その時点では、シグナル ランアウトは事前に計算できます。その時点では、混雑は始まっていません。ただし、この操作によって発生する問題は、たとえば、価格がすぐに戻るはずがなく、誤検知が発生する可能性があることです。この時点で、これを行うかどうかはあなたの選択次第です。ただし、特定のしきい値を追加し、それを超えたときにトリガーすることで、短期的な価格リターンによって引き起こされる誤ったシグナルを防ぐことができます。滑りは少し軽減できます。
タイムオフセットやシフトkラインなどのオフセット信号を利用する方法もあります。これにより、正時に信号を発生させず、他の信号と干渉せず、混雑を回避できます。 TWAPなどの方法もあります。
ただし、これらにはある程度のスキルが必要であり、実際のコードはより難しくなります。
確定オファー
基本的な中低周波 CTA 戦略 一般的に、実際のコードは非常に単純です。バラエティの戦略は一つだけで、ポジションの足し算も引き算もないし、クロス情報も混入しない。そうすれば、交換機がすべてを記録するため、ローカル コードは状態を維持する必要がなくなります。ポジションがあるか、証拠金はどのくらい必要か、注文は成立するかなど。中〜低頻度なので、必要なときにいつでも取引所のアカウント情報を確認でき、これが最も即時的かつ正確です。これにより、ローカル データベースを使用してトランザクション ステータスを記録する手間が省けます。
この単純な戦略は実際に実現可能ですが、問題は、リトレースメントが大きくなり、十分に分散されておらず、リスクが高い可能性があることです。単一の製品に市場がなかったり、ショックを受けて後戻りできずにリトレースメントを受けたり、極端な市場状況に遭遇したりすると、資本曲線に新たな大きな穴が現れる可能性があります。真剣に受け止めると怖くなって、耐えられなくなって戦略を中止してしまうでしょう。軽視してしまうと、取引経験はさらに悪くなるでしょう。これらはすべて合理的なポジションの条件下であることに注意してください。そうしないと、ポジションが軽すぎる場合、リトレースメントは小さくなりますが、収益も減少し、利益と損失が同じ源泉から発生するため、ポジションが低い場合は機会を逃すのは残念です。重すぎると失敗してしまい、遅かれ早かれ終わってしまいます。
ただし、初心者はこの戦略のリアルタイム実装から始めることをお勧めします。練習を通じてのみ、取引レベルをすぐに向上させることができます。ただし、ポジションを軽く保つようにし、レバレッジを低くする必要があります。そうすることで、より長い期間継続できるようになります。
よりプロフェッショナルになりたい場合は、シングルポイントリスクを減らし、資本曲線がより滑らかになり、オファーがいつ行われるかを心配する必要が少なくなります(前述したように、合理的なポジションの下では、これは実際には非常に重要です。戦略に固執し、リスクが発生するまで待つ方が簡単です ) は通常、複数種類、複数戦略、複数パラメーターのモデルであり、ポジションの加算と減算が行われます。これは、必ずしも 1 つの戦略でポジションを追加または削除することを意味するわけではありませんが、複数のサブ戦略によってポジションの追加または削除の効果を達成することもできます。ただし、この場合、ポジションのオープンとクローズのスリッページを最小限に抑えたい場合、戦略はより混雑します。コードの複雑さは急激に増加します。
この多品種、複数戦略、複数パラメータのモデルによって引き起こされる困難について話しましょう。
困難
1. APIの頻度制限
複数の戦略における最初の問題は、API の頻度制限です。リアルタイムの価格、ポジション、注文、その他の情報を取得するには、常に取引所にアクセスする必要があります。前述したように、頻度が低くて遅い場合、取得される価格は最新ではない可能性があり、スリッページはさらに大きくなる可能性があります。
取引所のサーバーリソースには限りがあるため、APIのアクセス頻度には制限があります。 Binance の制限は 1 分あたり 2,400 で、その後 10 秒の制限があり、悪意のある動作を検出するための他のいわゆる機械学習モードがあります。とにかく、それが頻繁すぎると間違いなく機能しません。この場合、最終決定権は取引所にあります。ご存知のように、公式はありません。
2400と言われていますが、同時実行性を使って何気なくテストしてみたのですが、一度に最短99行(APIの重みは1)でもK行をリクエストすると、同時に75コインくらいリクエストできます。 , 数分間出禁になります。したがって、簡単に限界に挑戦することはできません。
これに違反すると、429、418エラーが発生し、数分から数日間IPが禁止されます。このとき、ポジションを持っている場合は悲惨なことになります(注文の制限はありません)。特に既存のポジションを清算する場合、WebSocket がない限り、価格情報がありません)。
この問題の解決策は、WebSocket を使用してデータを取得し、取引所が API を占有することなくタイムリーにアクティブにデータをプッシュできるようにすることです。若干の滑りを軽減できます。問題は、別の WebSocket ベースのマーケット センターを維持する必要があることです。ライブコードの難易度は増加し、より複雑になっています。 24時間切断されてはならず、切断された場合は時間内に自動的に再接続される必要があります。
2. 戦略状況
前に述べたように、ストラテジーがより複雑になると、各ストラテジーのステータスを記録する必要があります。そうしないと、取引所のポジションはどのストラテジーがオープンしたか、それぞれがいくらオープンしたかなどがわかりません。また、後で確認したい場合は、さらにデータを記録する必要があります。
このとき、データベースを導入する必要があります(もちろん、ファイルレコードを使用することもできます。同じ考え方です)。
データベースの導入により、データベースの問題が生じます。ただし、これは他の業界のソフトウェア開発と似ており、新しいものは何もありません。特にEC業界では資金残高や注文管理などのことばかりなので、未経験者でもこのような書籍や記事を読むことができます。
データベース トランザクションと同様のアトミックな操作、つまり一連の操作またはすべての操作が成功した場合、何もせずに元の状態にロールバックするためには、多くのステップが必要であることに注意してください。
結局のところ、これは実際のお金の取引であるため、注文情報のデータベース操作には、すべてのダーティ リード、非反復読み取り、ファントムは読みます。つまり、データベースの重要な情報の読み取りと書き込みには、同時実行性、マルチスレッド、さらには非同期の使用は使用されず、すべての操作が 1 つのスレッドで完了します。運用の実施。
同時プログラミングへの挑戦を軽視しないでください。この種のシステムに問題がある場合、それを修正することはおそらく不可能です。これはソフトウェア開発において最も発見が難しいバグです。こういう仕事を綺麗にこなせる人は月給5万以上のプログラマーです。
マルチスレッドまたは非同期を使用するものはあまり思いつきません (マルチスレッドと非同期。非同期は Python の感染症のようなものであるため、マルチスレッドを使用することをお勧めします。一度使用すると、次の環境で使用する必要があります)。本当に有益なのは、DingTalk の警告信号などを送信することです。 DingTalk サービスは中国にあり、為替サーバーは海外にあるため、コード サーバーは為替に近い海外に配置する必要があるため、DingTalk を送信すると、返信に数秒かかる場合があり、場合によってはブロックされることもあります。 10秒以上続く。
やっと
実際、多くのことができなくても問題ありません。より大きなスリッページを受け入れる意識さえあれば、ほぼ1/5、あるいはそれ以上の利益を吐き出すことも可能です。最も重要なことは戦略であり、プラスのリターンを期待し、ダウンタイムなしで実行できることが鍵となります。
つまり、ファームオファーの最優先事項は、確立された戦略ロジックを継続して安定的に実行することです。スリッページはトレードの一部です。筋肉を壊さない限り、スリッページを減らすように努めてください。
一流の戦略、2、3ストリームが実装されており、大きな問題はありません。しかし、戦略が標準に達していない場合、トップクラスの実際の取引コードは役に立たず、負けるべき場合には負けることになります。したがって、良いコードを書くだけでは定量的取引をうまく行うことはできません。戦略は優れており、ライブコードはもちろん最高です。ただし、時間が限られている場合は、戦略に集中してください。
つづく
