Type/to search
0
Follow
80
Followers
発明家による定量取引入門 - 基礎から実践まで
Original
Created 2019-06-25 15:48:58  Updated 2023-10-31 21:01:08
 2
 16107

img

目次

第1章 定量取引の基礎

1.1 定量取引とは何ですか?

まとめ

科学と機械の組み合わせの産物である定量取引は、現代の金融市場の状況を変えています。現在、多くの投資家がこの分野に注目しています。リスクを最小限に抑え、可能な限り最高の利益を得るにはどうすればよいでしょうか?これは、この一連の講座の目的でもあります。第1回目として、「定量取引とは何か」について簡単に説明します。

概要

多くの人は「定量取引」という言葉を聞くと、それが高級なもので一夜にして金持ちになれるものだと考えます。ディープラーニング、ビッグデータ、クラウドコンピューティングなどの先端技術の台頭に伴い、人工知能の時代は神秘的な色彩を帯びてきました。定量的な取引を使用する限り、「完璧な」取引戦​​略を構築できるようです。

実際のところ、ある程度まで、定量取引は神話となっている。取引はさておき、「定量化」とは実際には、科学的な投資システムを通じてコン​​ピューター、統計、数学、その他の方法を使用し、予想される取引シグナル システムのセットを見つけることです。このシグナル システムは、いつ、どの価格で売買すべきかを教えてくれます。

定量取引の発展

源流を遡れば、データの変化を分析して市場価格の変動パターンを発見するために定量的手法を初めて用いたのは、株式発祥のオランダ人でもなく、近代金融を推進したイギリス人でもなく、建国以来金融と共存してきたアメリカ人でもなく、フランス人だった。

18 世紀初頭、フランスの株式仲買人ジュール・ルニョーが、株価変動の現代理論を提唱しました。彼は後に「確率計算と株式取引の哲学」という本を出版し、その中で「価格の変動は時間の平方根に比例する」という自ら発見した市場の変動の法則 (正規分布) について詳しく述べ、最終的に合理的で定量的な投資判断を通じて取引の成功を達成しました。

昨今、インターネット+ビッグデータ+クラウドコンピューティング+人工知能の時代となり、定量取引も急速に発展しています。かつては世界金融の中心地であったロンドンのカナリーワーフは、長い間IT企業の拠点となってきました。世界のトップクラスの投資銀行も独自のクオンツチームを育成し、「モデルを手に入れた者が世界を制する」という金融戦争に参加しようとしています。取引モデルを開発するこれらの IT チームは、クオンツチームとも呼ばれています。規模で言えば、先行している米国にはすでに強力なクオンツヘッジファンドが多数存在している。

対照的に、中国では、ハードウェア設備と投資調査能力の両方がまだ初期段階にあります。しかし、ますます多くの機関投資家やプロの投資家が定量取引の利点を認識し、この分野に参加しています。特に、監督がますます厳しくなり、市場の効率性が徐々に向上するにつれて、定量取引にはより大きな成長の余地があります。

定量取引の特徴

科学的検証: トレーディング システムを作成した後、その有効性をテストするためにシミュレートされたトレーディング システムを使用すると、膨大な時間がかかる可能性があります。実際のトレーディング システムで直接テストすると、実際のお金が失われる可能性があります。ただし、定量取引におけるバックテスト機能を使用すると、大量の履歴データを通じて科学的な方法で取引システムをテストできます。単に大衆に従うのではなく、何が機能し、何が機能しないかをデータで判断しましょう。

客観的かつ正確: トレードにおける本当の敵は私たち自身です。自分の精神状態を管理するのは言うほど簡単ではありません。貪欲、恐怖、運などの人間の弱点は、取引市場では何倍にも増幅されます。定量取引は、これらの弱点を克服し、取引においてより良い決定を下すのに役立ちます。

タイムリーかつ効率的: 主観的な取引では、人間の反応速度はコンピュータよりも速くなることはできず、人間の体力とエネルギーは24時間稼働することはできません。チャンスがつかみどころのない取引市場では、定量的な取引は主観的な取引を完全に置き換え、取引の機会を見つけ、市場の変化をタイムリーかつ迅速に追跡することができます。

リスク管理定量的取引では、過去のデータから将来繰り返される可能性のある過去のパターンを探ることができるだけでなく、これらの過去のパターンは勝つ確率が高い戦略でもあります。また、さまざまな投資ポートフォリオを構築して、システムリスクを軽減し、資金調達曲線を平滑化することもできます。

定量取引における古典的な取引戦略は何ですか?

オープニングブレイクアウト戦略

取引開始後の最初の 30 分で、その日のトレンドが決まることがよくあります。この戦略では、取引開始後 30 分以内に価格がプラスかマイナスかを判断して、その日のトレンドを判断する基準とします。プラスラインの場合は買いポジションを開き、マイナスラインの場合は売りポジションを開き、決済の数分前にポジションをクローズします。これは非常にシンプルな取引戦略です。

ドンチャンチャネル戦略

img

図1-1 ドンチャンチャネル戦略図

ドンチャン チャネル戦略は、デイトレードの元祖ともいえます。そのルールは、現在の価格が以前の N K ラインの最高価格よりも高い場合は買い、現在の価格が以前の N K ラインの最低価格よりも低い場合は売るというものです。有名なタートル トレーディング ルールでは、ドンチャン チャネル戦略の修正バージョンが使用されています。

期間をまたいだ裁定取引戦略

期間をまたぐ裁定取引は、最も一般的なタイプの裁定取引です。これは、同じ取引商品について、異なる受渡月を持つ契約の価格に基づいています。2 つの価格に大きな価格差がある場合、異なる期間の先物契約を同時に売買して、期間をまたぐ裁定取引を行うことができます。主契約と二次主契約の価格差が長期間にわたって-50~50程度に留まっていると仮定します。ある日にスプレッドが 70 に達した場合、将来のある時点でスプレッドが 50 に戻ると予想されます。次に、メイン契約を売却し、同時にセカンダリメイン契約を購入して、価格差をショートすることができます。逆に。

要約する

上記では、定量取引の定義、発展、特徴、および古典的な取引戦略の観点から、定量取引の関連概念を簡単に紹介しました。

定量取引を理解することは、クオンツになるための重要な足がかりです。最後に、弱気相場で皆様が豊かになり、知識の実現を一日も早く実現できることを祈っております!覚えておいてください、あなたは経済的自由からたった 1 つの強気相場を経るだけです!

次のセクションのプレビュー
定量取引と従来の取引の違いは何ですか?実際の取引では、伝統的な取引と定量的な取引のどちらを選択すべきでしょうか?次のセクションでは、これら 2 つの質問を取り上げて、定量取引をさらに理解していきます。

宿題

  1. 定量取引とは何かを一文で簡単に説明してください。
  2. 定量取引の特徴は何ですか?

1.2 定量取引を選択する理由

まとめ

多くの人は、定量的取引について議論する際、複雑な戦略プログラミングを出発点として用い、意図せずして定量的取引に謎のベールをかぶせてしまいます。このセクションでは、定量取引の謎を解明するために、わかりやすい言葉で定量取引の簡単な「スケッチ」を作成してみようと思います。基礎知識のない初心者でも簡単に理解できると思います。

定量的取引と主観的取引の違い

主観的な取引では、人間の分析と市場感覚にもっと注意を払います。買いや売りのシグナルが現れても、注文は選択的に出されます。人々は間違いを犯すよりも、むしろ市場を逃すことを好みます。人間の感情は複雑で、変わりやすく、当てにならないものです。ほとんどのトレーダーは、連続して損失を経験すると、別の方法に切り替える傾向があります。ランダム性が高く、損益に悩みやすく、安定した利益を上げることが難しい。

定量取引では、取引を理解することで一貫した売買戦略を開発します。取引では、すべてのトレンドを平等に扱い、ポジションの開始と終了を体系的に処理します。機会を逃すよりも、ミスをする方がよいでしょう。また、過去のデータをバックテストすることで、どのタイプの市場や商品に戦略がより適しているかを判断し、複数の戦略と商品を組み合わせることで収益性を実現する完全な評価システムも備えています。

つまり、主観的取引は定量的取引の基礎であり、定量的取引は主観的取引の改良である。主観的な取引は、武術の練習に似ています。最終的に成功できるかどうかは、主にあなたの才能に依存します。10年経っても悟りを開かない人もいれば、1日で悟りを開かせる人もいます。定量取引はフィットネスに似ています。一生懸命努力すれば、才能がなくても筋肉をつけることができます。

定量的な取引は主観的な取引よりも優れているのでしょうか?

成功した主観的トレーダーは、ある意味では定量的トレーダーでもあります。なぜなら、成功する主観的トレーダーは、独自のルールと方法、つまり取引システムを持たなければならないからです。主観的取引を成功させるには、取引規律と取引ルールに基づく必要があり、取引ルールの実行部分は、実際には主観的取引の定量的な部分です。

逆に、成功する定量的トレーダーは、優れた主観的トレーダーでなければなりません。なぜなら、定量的トレーディング戦略の開発は、実際には個人のトレーディング哲学の結晶だからです。市場に対する認識や理解が最初から間違っていれば、開発された取引戦略で長期的に利益を上げることは難しくなります。

したがって、収益性の観点から、トレーダーが最終的に成功できるかどうかを決定する重要な要素は、主観的な取引であるか定量的な取引であるかではなく、取引哲学です。定量取引は表面的には高尚に聞こえるかもしれないが、その利益の本質は主観取引と本質的には変わらない。それらは一つのものの両面のようなもので、相反しながらも統一されている。

しかし、取引ツールの面では定量取引に多くの利点があることは否定できません。

より速いレビュー: 取引戦略をテストしたい場合は、大量の履歴データを計算する必要があります。定量取引では、数分以内に結果を計算できます。このスピードは主観的な取引よりも何倍も速いです。

より科学的:戦略が優れているかどうかを評価するには、利己的なペテン師ではなく、データ(シャープレシオ、最大ドローダウン率、年率リターンなど)に頼ります。

より多くの機会:世の中には何千もの取引商品があり、主観的な取引では同時に市場を監視することは不可能ですが、定量的な取引では市場全体をリアルタイムで監視できるため、取引機会を逃さず、収益性を高めることができます。

定量取引は確実に利益を生むのでしょうか?

もちろん可能ですが、長期間続けるのは難しいです。利益を生むかどうかは定量取引自体には依存しません。定量取引は単なるツールです。定量取引は、取引のアイデアをプログラムされ、規則的かつ定量化された方法で実行するだけです。プログラムは実行を置き換えるだけです。難しいのは、長期的に安定して利益を上げることです。なぜなら、市場はゲームであり、動的に変化し、取引のアイデアも市場に合わせて変化する必要があるからです。

定量取引のリスク

定量取引にもリスクはありますが、なぜでしょうか?定量取引とは、過去のデータからパターンを発見し、取引戦略を立てることだからです。しかし、金融市場は生態系であり、その法則と人間の性質は相互に作用する動的なプロセスであり、結局のところ、金融市場は依然として人間市場です。市場の法則は人間の本性に影響され、市場の変化に応じて人間の本性にある貪欲さや恐怖心も変化します。市場には不変の法則はほとんどありません。取引戦略がいかに強力であっても、このような法則の突然の変化に対処することは困難です。

要約する

上記の説明から、定量取引は独自の取引方法ではなく、取引ロジックを分析し、取引戦略を改善するのに役立つ単なる取引ツールであることがわかります。バリュー投資家であろうとテクニカル投資家であろうと、株式、債券、商品、オプションのいずれに投資しているかにかかわらず、すべてを実際に定量化できます。個人的な経験に基づいて意思決定を行うトレーダーと比較して、定量的トレーダーが手にする武器は市場の証拠と合理性です。

次のセクションのプレビュー

定量化は単なる取引方法であり、戦略は単なる取引アイデアの伝達手段であり、プログラムは各取引プロセスを実行します。次のセクションでは、戦略の構想、モデルの構築、バックテストとチューニング、シミュレーション取引、実際の取引、戦略の監視など、定量取引のライフサイクル全体について説明します。

宿題

  1. 定量的取引と主観的取引の最も重要な違いは何ですか?
  2. 主観的取引と比較して定量的取引の利点は何ですか?

1.3 定量取引を行うためには何の準備が必要ですか?

まとめ

完全な定量取引ライフサイクルは、取引戦略そのものではありません。戦略の構想、モデルの構築、バックテストとチューニング、シミュレーション取引、実際の取引、戦略の監視など、少なくとも 6 つのリンクで構成されています。

戦略的思考

まず、定量的な取引を行うには、まず取引市場に戻り、市場の価格をより観察し、市場変動の法則を理解し、各取引のロジックを推測し、最後に取引戦略をまとめる必要があります。ここに近道はありません。古典的な投資本を読んだり、取引を続けながら失敗から学んだりする必要があるかもしれません。

定量取引の初心者にとって、最初に取引戦略を開発する最良の方法は、模倣することです。既存のテクニカル分析指標を直接使用して戦略ロジックを構築し、売買ルールを記述することで、シンプルな戦略を取得できます。あなたの取引戦略が次の通りだとします: 価格が過去 10 日間の平均価格よりも高い場合は買い、価格が過去 10 日間の平均価格よりも低い場合は売る。そのアーキテクチャは次のようになります (下図参照)。
img
図1-2 取引戦略の例

もちろん、戦略経験を積み、独自の取引手法を形成するにつれて、論理的な選択はますます多様化し、より体系的な定量的な取引へと進んでいきます。株式市場であれ先物市場であれ、定量的な思考を持つトレーダーになれるのは幸運です。なぜなら、そのような人はどの取引市場でも持続的で安定した収益性を持っているからです。

モデルの構築

第二に、トレーディング戦略を作成し、トレーディングのアイデアを実現するために、定量的なトレーディングツールを習得する必要があります。市場で一般的に使用されているソフトウェアであればどれでも使用できます。しかし、ハイエンドの定量的トレーダーになりたいのであれば、

コンピュータ言語を理解してください。科学計算用の権威ある言語であるため、Python をお勧めします。
また、さまざまなオープンソース分析パッケージ、ファイル処理、ネットワーク、データベースなども提供します。

プログラミング能力が弱い場合(ほとんどの初心者の弱点であると考えられています)は、比較的シンプルなビジュアルプログラミング言語またはMai言語を使用することをお勧めします。これにより、定量取引の学習への関心が高まり、戦略に集中して、戦略開発を効率的に完了できるようになります。下図のように、Mai 言語を使用して、上記のように取引戦略を開発します。 画像をダブルクリックすると、戦略コード内の詳細なコメントが表示されます。

img
図1-3 取引戦略開発ページ

上図の戦略コードは、発明者の定量ツールのMai言語を使用して実証されています。直接使用できる多くの機能モジュールを統合し、バックテストと実際の取引機能をサポートしています。すぐに始めるのに適しています。

バックテストとチューニング

次に、戦略モデルを記述した後、次のステップは、戦略をバックテストし、パラメータをスクリーニングして最適化することです。さまざまなパラメータを使用して戦略をバックテストし、戦略のシャープ比、最大ドローダウン、年間リターンなどを観察できます。戦略を継続的にデバッグおよび修正することで、最終的には完全な定量的取引戦略が得られます。

たとえば、2017 年の履歴データをインサンプル データとして、2018 年の履歴データをアウトサンプル データとして取得します。まず、2017年のデータを使用して、良好なパフォーマンスを示すいくつかのパラメータセットを最適化し、次にこれらのパラメータを使用して2018年を最適化します。

データのバックテスト。一般的に言えば、アウトオブサンプルのバックテスト結果は、インサンプルのバックテスト結果ほど良くありません。ただし、アウトオブサンプルとインサンプルの結果が大きく異なる場合、戦略はほとんど効果がなく、戦略が失敗した理由を判断するために観察と分析を行う必要があります。

サンプル外データが原因で戦略が失敗し、特定の極端な市場状況によって大きな損失が発生することが判明した場合、このリスクを回避するために固定ストップロス条件を追加できます。また、取引が多すぎるために戦略が失敗することが判明した場合は、取引ロジックを少し厳しくして、取引頻度を減らすことができます。

注意すべき点は、最初にトレードロジック自体が間違っていると、いくら修正しても利益の出る戦略を得ることは難しいということです。このとき、戦略的な考え方を再検討する必要があります。さらに、パラメータの最適化では、利用可能なパラメータ グループが多いほど効果的であり、この戦略の適用範囲が広いことを示しています。バックテストを行う際、取引数が少なすぎる戦略では生存者バイアスの影響を受ける可能性があります。バックテストの結果が超収益性の高いファンドカーブである場合
多くの場合、あなたの論理は間違っています。

シミュレーション取引

その後、正しい取引ロジックを持ち、サンプルの内外両方で利益が出る戦略を身に付けたら、急いで実際の口座で取引を始めないでください。特に初心者の場合は、少なくとも 3 か月間はシミュレーション アカウントを実行する必要があります。中頻度または低頻度のオーバーナイト戦略の場合は、より長いシミュレーション取引時間が必要になります。

将来、完全に未知のシミュレートされた市場で、シミュレートされた取引における戦略のパフォーマンスを観察し、バックテスト信号がシミュレートされた取引信号と一致しているかどうか、注文が出されたときの価格と取引が完了したときの価格の間に偏差があるかどうかを注意深く確認します。パフォーマンスが期待と一致していれば、戦略が有効であることを意味します。

リアルディスク取引

最後に、長期間にわたって戦略をテストした後、実際の取引にそれを適用するときが来ます。もちろん、定量取引のプロセス中も、警戒を怠らず、極端な市場状況に警戒する必要があります。実際の取引では、戦略の期待値は一般的に割り引かれ、期待値の 50% を達成すれば合格とみなされます。

ポリシー監視

最後に、取引が進むにつれて、戦略の有効性も観察する必要があることを皆さんに思い出していただきたいと思います。戦略が予想以上の損失をもたらしたことが判明した場合、戦略を再評価する必要があります。市場特性は変化するため、現在私たちが策定する戦略は主に過去の市場特性をターゲットにしています。市場特性が変化した場合は、戦略モデルを適時に調整するか、戦略を一時的に停止する必要があります。

要約する

この記事では、定量取引の完全なプロセスについて説明します。つまり、市場経験のある投資家の場合、コンピュータ言語の基礎が足かせとなります。ビジュアル言語またはMai言語から始めて、このプラットフォームでトレーニングし、戦略を構築し、徐々にPythonのハイエンド定量取引に移行することができます。

理工系の学​​生やプログラミングスキルに優れた IT 実務家の場合、市場投資の経験が足かせとなるでしょう。この点を過小評価しないでください。有能な定量投資家として、両方のタイプの知識は不可欠です。

次のセクションのプレビュー

定量取引ライフサイクル全体の中核は、依然として取引戦略です。次のセクションでは、取引戦略フレームワークの観点から、完全な取引戦略の要素について詳しく説明します。これにより、取引戦略をより包括的に構築し、定量取引を新たなレベルに引き上げることができます。

宿題

  1. このセクションの取引戦略をMai言語を使用して記述してみてください。
  2. 定量取引のバックテストで最も重要なパフォーマンス指標は何ですか?

1.4 完全な戦略の要素は何ですか?

まとめ

完全な戦略とは、実際にはトレーダーが自ら設定するさまざまなルールです。取引のあらゆる側面を網羅し、トレーダーの主観的な想像力が入り込む余地はありません。戦略は、あらゆる売買の決定に答えを与えます。少なくとも、戦略の選択、商品の選択、資本管理、注文の配置、極端な市場状況への対応、取引の考え方などが含まれます。

戦略の選択

ヘッジファンドの観点から見ると、主流の取引戦略は、下図に示すように、トレンド取引、ペア取引、バスケット取引、イベント駆動型、高頻度取引、オプション戦略などに分類できます。もちろん、戦略を分類する方法は固定されていません。
img
図1-4 取引戦略の分類

定量取引の初心者は、多くの用語や概念を心配する必要はありません。最も簡単なステップから始めてください。初心者に定量取引戦略を 1 つだけ推奨するとしたら、それはトレンド取引です。なぜなら、それがシンプルで効果的だからです。金融知識を体系的に学ばなくても、良い取引ができると信じています。この戦略は、初期の公開取引戦略では長い間存在しており、人間の本質を変えるのは難しいため、今日でも複数の市場で有効です。

何を買うか、何を売るか

取引をしたことがある人なら、それぞれの品種に独自の個性があることを知っているはずです。いくつかの品種は非常に「ホット」な性格を持ち、流動性が高く、変動が大きく、ボラティリティが高い一方、いくつかの品種は非常に「おとなしい」性格を持ち、年間を通じて一定の範囲内で変動し、ボラティリティが低いです。

したがって、取引商品を選択する際には、ボラティリティの概念を持たなければなりません。ボラティリティの高い商品は、良いトレンドを形成しやすいことが多いです。商品先物の場合、トレンド追跡戦略であれば、工業製品を選択するようにしてください。製品属性の観点から見ると、工業製品は農産物よりもボラティリティが大きい傾向があります。

さまざまな戦略がさまざまな市場状況に適応し、適切な取引商品を選択することが先物取引の大きなプロジェクトにとって非常に重要なスタートとなります。絶対的な意味では、絶対に良い品種や絶対に悪い品種は存在しません。投資スタイルやリスク許容度に応じて、独自の基準に合わせて調整する必要があります。

いくら買っていくら売るか

トレードでお金を失うのは簡単ですが、お金を稼ぐのは困難です。口座資金が 50% 失われた場合、損失を回復するには 100% の利益が必要です。 100% の利益を何度も得ることができたとしても、100% の損失を一度でも経験すれば、すべてを失うことになります。したがって、成熟した取引戦略には資金管理が含まれる必要があります。

誰もが理解しやすいように、前のセクションの移動平均戦略もここで使用されます。実際、従来のテクニカル指標を使用して構築された多くの取引戦略では、最大ドローダウン率が 50% 以上になることがよくあります。しかし、これはまったく実行不可能な非常に危険な戦略なのでしょうか?

もちろんそうではありません。最大ドローダウン率はファンド管理を通じて完全に制御できます。ポジションを半分に減らすと、全体のリスクも半分に減り、最大ドローダウン率は30%になります。さらにポジションを半分に減らすと、最大ドローダウン率は15%になります。最終的には、最大ドローダウン率が15%程度に抑えられた戦略になります。これは単純かつ大雑把な資金管理方法です。フルポジションで運用できないことは分かっていても、なぜフルポジションで運用できないのか分からない人が多いのではないでしょうか。その答えはここにあります。

いつ買うか、いつ売るか

適切な購入ポイントは成功の半分を占めます。コストのかかる領域からすぐに抜け出すことができるからです。しかし、この点から始めるのが正しく、あの点から始めるのが間違っていると誰も言うことはできません。ポジションを開くことはトレードの核心ではありません。トレードの核心は、ポジションを開いた後、いかにそのポジションを最適化していくかです。

短期戦略であろうと長期戦略であろうと、重要なのは誰がより長くポジションを保有するかではなく、リスクとリターンの比率です。言い換えれば、戦略のパフォーマンスに影響を与える最終的な結果は、どのように撤退し、いつ利益を実現するかということです。エグジット方法は、ストップロスエグジットとテイクプロフィットエグジットの 2 種類に分けられます。これら 2 つの部分は、あらゆる取引システムに必要であり、取引戦略の成功または失敗を決定する重要な分岐点でもあります。

購入と販売の方法

1. 注文の種類と方法:
注文を出すには、キュー指値注文、相手方価格、最新価格、オーバープライス、上限価格、下限価格、最初の買い価格、2 番目の買い価格、最初の売り価格、2 番目の売り価格を使用する、最初にキュー価格を使用して次にオーバープライスを使用する、注文をバッチで出す、大きな注文を小さな注文に分割する、またはすべての注文を直接出すなど、多くの種類と方法があります。

2. 注文のキャンセル
注文が実行されなかった場合、引き続き待つべきか、注文をキャンセルすべきでしょうか。キャンセル条件は時間に基づきます。たとえば、10 秒以内に取引が行われず、価格が注文時の価格から 10 ジャンプ離れている場合、引き続き待つべきか、注文をキャンセルすべきか、注文をフォローアップすべきでしょうか。

3. フォローアップ注文
注文が実行されなかった場合に、注文をフォローアップするかどうか。注文を追跡する場合、最新の価格、相手方価格、または価格制限に従って追跡する必要がありますか? 追跡注文がまだ実行されていない場合、注文の追跡を継続する必要がありますか?

4. 価格制限
上限価格や下限価格で注文シグナルが表示された場合はどうすればいいですか?上限価格と下限価格で執行するためにキューに入れるかどうか、また執行されなかった場合はどうするか。

5. オークションを呼び出す
オープニングオークションに参加するべきか、また参加方法を教えてください。

6. 夜間取引
一部の商品先物取引では、夜間取引が21:00から翌日の2:30まで行われ、この時間帯は手動で行うか、コンピューターで行うかを選択できます。

7. 主な祭り
大きな祭りの期間中の長期休暇前にポジションを維持する必要がありますか?保有する場合のリスクをどのように管理するか。

極端な市場状況

  1. 短期間での価格変動が大きい
    即時価格制限、継続価格制限、誤注文、ブラックスワン市場価格の暴落などの状況に対処する方法。

  2. 流動性リスク
    相手方に希望する注文量がないのに、時間内に取引を完了する必要がある場合、特に非主要契約の流動性が非常に悪い場合、発注した注文が市場に影響を与えやすく、スリッページが大きい場合、どのように対処すればよいでしょうか?

  3. 品種ルールの変更
    商品先物取引の夜間取引への追加、証拠金比率の引き上げ、手数料の引き上げなど、特に短期戦略においては、こうした変化に非常に敏感になるだろう。

  4. 取引環境リスク
    たとえば、突然の停電、インターネットの停止、コンピュータの障害、ソフトウェアのクラッシュ、銀行先物送金の停止、自然災害などが発生した場合の対応方法などです。

上記の状況が発生する可能性は非常に低い、またはほぼ不可能です。しかし、それが起こり得るなら、それは起こるでしょう。こうした想定を立てて予防策を講じることが必要です。

心理的構築

取引でよく見られる 3 つの主な心理的感情は、貪欲、恐怖、そして幸運です。投資家は、さまざまな段階で上記の 3 つの感情を制御し、さらに活用するために、強力な取引心理学システムを必要とします。

取引を行う前に、市場の期待や商品に対する心理的な期待など、将来に対する全体的な期待を持たなければなりません。市場の期待とは、市場の位置と将来の方向性に関する明確な目標を指し、商品の期待とは、商品の現在の位置における取引機会とリスク状況を指します。上記の心理的基礎がなければ、何も達成できません。

実際の取引の全プロセスは、継続的な分析、修正、実行のプロセスです。取引に費やす時間はそれほど多くありませんが、追跡と忍耐に費やす時間は多くなります。これは、精神状態を総合的に検査し、人間性をテストするプロセスです。トレーダーのすべての習慣は、取引プロセス中に完全に表示され、拡大されます。経験と教訓を絶えず学び、まとめ、経験を積み続けることによってのみ、人間の本質に共通する考え方や心理的な弱点を克服することができます。

要約する

まとめると、いわゆるトレーディング戦略は実際には次のようになります。完璧な側面と不完全な側面があります。トレーディング戦略が合理的かどうかを測るとき、完璧な側面や不完全な側面だけを見ることはできません。戦略の完全性を総合的に分析する必要があります。

最後に、戦略の特性に基づいて、自分の性格や財務状況と組み合わせて、その戦略が自分に適しているかどうかを測定します。自分に適している場合は、それを貫く可能性を十分に評価し、事前に最悪の結果に備える必要があります。最悪のシナリオを考えていれば、それを実行する可能性は比較的高くなります。

覚えておいてください、取引においては、自信は心からの認識から生まれ、自信は正しい取引哲学から生まれます。

次のセクションのプレビュー

これは第 1 章の最後の記事です。次の章では、定量的取引ツールの全体的な紹介、定量的取引システムの構成方法、一般的な API の説明、定量的システムでの戦略の記述方法など、定量的取引ツールについてさらに詳しく説明します。

宿題

  1. トレンド取引戦略では、高ボラティリティ商品と低ボラティリティ商品のどちらを選択すべきでしょうか?
  2. 取引注文の種類は何ですか?

第2章 定量的ツールの紹介

2.1 定量的ツールの全体的な紹介

まとめ

前の章では、定量取引の関連概念について学び、定量取引の基本的な理解を得ました。では、市場で定量取引を行うためのツールは何でしょうか?ニーズに応じてどのように選択すればよいでしょうか?

オープンソースおよび商用ソフトウェア
国内の定量取引ツールは、一般的にオープンソースソフトウェアと商用ソフトウェアの 2 つのカテゴリに分けられます。いわゆるオープンソースソフトウェアとは、ソースコードが公開されており、直接ダウンロードして使用できるソフトウェアを指します。一方、商用ソフトウェアとは、一般的には商用企業が保守・運営するクローズドソースソフトウェアを指し、通常は有料です。

オープンソース定量ソフトウェア

まず、オープンソース ソフトウェアは柔軟性が高く、完全に無料です。ユーザーは基本的にこのソフトウェアを使用して、中頻度または低頻度の取引戦略、裁定取引戦略、オプション戦略など、カスタマイズされたモジュールを通じて実現できるあらゆる機能を実装できます。ユーザーはソフトウェアのソース コードを制御してソフトウェアの隅々まで理解できるため、信頼性が高く安全です。

オープンソース ソフトウェアには多くの利点がありますが、定量取引の初心者にとってはあまり使いやすくありません。Python、Java、C++ などの標準的なプログラミング言語を体系的に学ぶ必要があります。始めることから諦めることまで、その困難さは想像に難くありません。時には、バグのデバッグで自分の人生を疑うこともあります。また、商用ソフトウェアとは異なり、お客様の質問に即座に回答する専用の技術カスタマー サービスがあります。この時点で達成感を感じられないだけでなく、学習を続ける意欲も失ってしまいます。

したがって、学習の観点から、定量取引の初心者は、最も簡単な商用ソフトウェアから段階的に始めることをお勧めします。有料ではありますが、戦略が利益を生む場合、ソフトウェア料金は利益のほんの一部にすぎません。さらに、商用ソフトウェアは一般的にチームによって保守されており、その成熟度はオープンソースソフトウェアよりもはるかに優れています。

ビジネス定量ソフトウェア

中国には、プロ仕様で包括的、製品数が多い Interactive Broker、大量の同時データ処理が可能で高頻度取引に適した APAMA、C++ インターフェースをサポートし実行効率に優れた SPT、取引実行とリスク管理に重点を置いた Nuggets Quantitative、個人トレーダー向けの MC、TB、MQ など、定量取引用の商用ソフトウェアが数十種類あります。下の図では、国内の主流の定量プラットフォームを総合的に評価し、定量ツールの難易度をある程度分類しました。読者は実際の状況に応じて選択できます。
img
図2-1 国内主流定量プラットフォームの総合評価

上記は商用ソフトウェアですが、標準的なプログラミング言語やスクリプト言語も使用しています。そうする代わりに、無料で安全なオープンソースソフトウェアを直接使用する方がよいでしょう。初心者には、FMZ Inventor Quantitative Platform を直接使用することをお勧めします。Web サイトは www.fmz.com です。定量取引を学ぶための足がかりとして。

定量取引ツールの発明者と出会う

発明家の定量分析ツールは初心者にも優しく、基礎知識がなくてもツールを活用すれば定量分析の魅力を体感できます。このツールは高頻度取引用に設計されており、パフォーマンスとセキュリティに関する厳しい要件があります。高頻度戦略、アービトラージ戦略、トレンド戦略をサポートします。また、戦略開発、テスト、最適化、シミュレーション、実際の取引の完全なプロセスを統合します。さらに、シンプルで使いやすいMai言語と、PythonやC++などの高度な定量取引言語の両方をサポートしているため、一度学習すればシームレスに切り替えることができます。実際の取引のみに 0.125 元/時間かかるため、学習段階でのソフトウェア コストが削減されます。同時に、シミュレーション取引は無料で行うことができます。

定量化への第一歩:定量ツールの使用

定量ツールの使い方は非常に簡単です。Web サイトにアクセスしてクリックするだけで、独自の定量戦略を設計できます。 Inventor Quantitative Toolの公式サイトにアクセスし、登録してログインし、コントロールセンターをクリックして使用できます(下図を参照)。現在人気のTikTokに似ています。登録してログインした後、独自のショートビデオを投稿でき、定量ツールにログインした後、独自の定量取引戦略を設計できます。

img
図2-2 FMZ定量取引プラットフォームのメインページ

定量的ツールをプログラミングするための集中機能エリアがあります。機能エリアには主に次のものが含まれます(下図参照)。左上隅のコントロールセンターは定量的ツールのコア機能です。クリックすると、取引戦略と戦略バックテストを記述したり、取引商品の取引所を設定したり、戦略ロボットを管理するカストディアンを作成したり、特定の定量的取引ロボットを作成したりできます。機能の具体的な使い方については、次回以降の記事で詳しくご紹介していきます。現在は準備段階です。

img
図2-3 FMZ定量取引プラットフォームにログインした後の管理ページ

定量的研究に不慣れな友人は、コードやプログラミングが理解できないからといって落胆する必要はありません。ユーザーの敷居を下げるために、公式コミュニティでは、定量取引の初心者がすぐに始められるように、多くのビデオチュートリアルを制作しています。同時に、Strategy Square には、誰もがコピーして学習できる、公式およびサードパーティの無料かつオープンな取引戦略が何千も集約されています。

さらに、戦略編集インターフェースには古典的な戦略サンプルも設定されています。クリックするだけで戦略コードを直接使用でき、定量取引全体のコアプロセスを簡単に体験できます。初心者でもすぐに習得して実行できます。

実際のお金で取引する前に、シミュレーション取引も欠かせないステップです。このツールのシミュレーション取引は取引所のルールに準拠しており、完全に無料です。シミュレーションに含まれる時間、価格、注文量などは、実際の市場とリアルタイムで一致しており、実際の取引と非常に一致しています。戦略検証の効率を大幅に向上します。

要約する

オープンソースソフトウェアであろうと商用ソフトウェアであろうと、良いと悪いの区別はなく、完璧な定量取引ツールはありません。各ツールには独自の焦点があります。最も重要なことは、ニーズに応じて自分に合ったツールを選択することです。商用ソフトウェアは有料ですが、サービスなどが充実しており、この業界に参入したばかりの初心者に適しているかもしれません。この業界に長く携わり、豊富な経験を積んでいる場合、またはより複雑な取引戦略を実装する必要がある場合は、オープンソース ソフトウェアの方が適しています。

次のセクションのプレビュー

ツールの使い方は?新しい携帯電話を購入し、初めて電源を入れるときに簡単な起動設定を行う必要があるのと同じように、定量ツールにも基本的な設定と構成が必要です。次のセクションでは、Inventor 定量取引ツールを構成する手順を順を追って説明します。取引所の追加、カストディアンの追加、取引戦略の作成、定量的ロボットの作成など、定量的取引への最初の扉を開きます。基本的な設定が完了したら、最初の定量戦略を正式に作成できます。

宿題

  1. 定量取引ツールの 2 つの主要なカテゴリは何ですか?
  2. 一般的に使用されている定量的プログラミング言語は何ですか?

2.2 Inventor Quantitative Trading System の設定方法

まとめ

定量的な取引戦略を開発する場合、最初に行うことは取引ツールを構成することです。構成とは何ですか?実際には単なる設定です。このセクションでは、取引所の設定、取引戦略の作成、定量取引ロボットの作成など、定量取引に必要な前提条件について説明します。

構成は、入門レベルの学習シミュレーション取引構成とリアルタイム取引構成に分かれており、このカテゴリでは、主に国内商品先物に焦点を当てています。他の種類の定量投資は、国内の特定の状況により推奨または導入されていませんが、操作プロセスは同じで、構成プロセスのみが異なります。

取引所を追加する

取引所の追加は、設定プロセス全体の最初のステップです。具体的なプロセスについては、下の図を参照してください。このステップでは、どの取引所に属しているかわからない人にとって、取引所を追加することは難しくないことを強調する必要があります。まずは学習をシミュレーションすることをお勧めします。
img
図2-4 FMZ定量取引プラットフォームの登録と取引所の追加手順

商品先物取引所(ライブ)構成

当社のリアルタイム定量取引は主に国内先物取引商品に焦点を当てています。現在、Inventor Quantitativeの主なサービス対象も国内先物取引所です。外国為替取引を行う友人にとって、Inventor Quantitativeは学習プラットフォームとして使用できます。外国為替定量取引はすでにMT5などのプラットフォームに登場していますが、より専門的です。

リアルタイム設定で注意すべき事項は次のとおりです。発明者の定量ツールは複数の取引市場をサポートしているため、商品先物を設定するときは、まずステップ 1 で「従来の先物」を選択し、ステップ 2 で、口座を開設した先物会社から提供された先物口座とパスワードを入力する必要があります。

発明者の定量ツールはCTPプロトコルを採用し、国内のすべての先物会社をサポートしています。実際の市場を設定するときに、アカウントとパスワードが間違っていない限り、リンクが失敗することはありません。したがって、初心者はアカウントとパスワードを明確に確認するように注意してください。
img
図2-5 FMZ定量取引プラットフォームに先物取引が追加

商品先物取引所(シミュレーション)構成

商品先物取引が初めての方には、まず一定期間取引をシミュレーションすることをお勧めします。定量的取引戦略を開発するプロセスでは、継続的なテスト、デバッグ、最適化が必要になるためです。運転と同じように、最初は必ず数か月間自動車学校で学習し、試験に合格して免許を取得した後に運転できるようになります。

ここでは、SimNowシミュレーション取引の使用をお勧めします。SimNowは、Shangqi Technologyが投資家向けに特別に作成した金融シミュレーション取引プラットフォームです。この製品は、さまざまな取引所の取引と決済ルールをシミュレートし、現在、さまざまな国内先物取引所の商品先物取引をサポートしています。具体的なプロセスについては、下の図を参照してください。
img
図2-6 ログイン後のFMZ定量取引プラットフォーム管理ページ

戦略ライティング

戦略ライブラリはコードが保存される場所であり、当社の定量取引戦略ウェアハウスに相当します。主に戦略作成とシミュレーションバックテストの 2 つの機能に分かれています。戦略作成領域は、将来戦略を開発するための主な作業領域です(下図参照)。多くの初心者は、さまざまなコードに阻まれ、非常に困難に感じています。実際には、少し注意を払うだけで、これらのコードを学ぶことができます。心理的な負担はありません。シミュレーション バックテスト領域は、戦略開発プロセス中に戦略をデバッグするため、また戦略開発が完了した後に戦略をテストするために使用できます。これについては、次の章で詳しく説明します。
img
図2-7 ポリシーを作成する手順

定量取引ロボットの作成

定量取引ロボットは、取引戦略の実行者です。戦略が作成されたら、戦略コード内のすべての取引ロジック、ポジションの開始と終了、注文の取り消し、その他の売買操作を自動的に実行できるロボットを作成します。定量取引ロボットを作成するための具体的な手順は次のとおりです。まず、ステップ①:コントロールセンターページで、「ロボット」をクリックし、「ロボットの作成」をクリックします。ステップ②:ロボットにカスタム名を付けます。ステップ 3: 「+」記号をクリックして取引プラットフォームを追加します。ステップ4: 「ロボットを作成」をクリックします
img
図2-8 ロボットを作成する手順

要約する

上記のプロセスでは、実際の取引とシミュレーションを選択する最初のステップを除いて、戦略の作成と取引ロボットの作成という後続のステップは統一されたステップです。定量ツール全体が構成され、取引ロボットはすでに実行されており、戦略の特定の条件に従って売買操作を実行します。定量取引を構成するには、取引所を追加して先物口座のパスワードを入力し、取引戦略を記述し、リアルタイムの定量取引ロボットを作成するという 3 つの手順があります。簡単じゃないですか?

次のセクションのプレビュー

定量取引はわずか 3 つの簡単な手順で実現できますが、取引所を追加して定量取引ロボットを作成するのも簡単であることがわかります。しかし、実行可能な取引戦略を実装するのはそれほど簡単ではありません。次のセクションでは、実行可能な取引戦略を作成するための準備として、定量取引でよく使用される API について学習します。どのような定量取引ツールを使用する場合でも、定量取引戦略を実現するための重要な機能である API インターフェースと切り離すことはできません。

宿題

  1. 取引所を追加してみます。
  2. このセクションで取引戦略を記述してみてください。

2.3 共通APIの説明

まとめ

プログラミングに関して言えば、API は避けて通れません。IT に詳しくない多くの人にとって、API とは何でしょうか? API ≒ わかりません。このセクションでは、API とは何かをわかりやすく説明し、定量ツールでよく使用される API を紹介します。

APIとは何ですか?

オンラインで検索すると、次のような結果が得られます。API (アプリケーション プログラミング インターフェイス) は、アプリケーションや開発者がソース コードにアクセスしたり、内部の動作メカニズムの詳細を理解したりすることなく、特定のソフトウェアまたはハードウェアに基づく一連のルーチンにアクセスする機能を提供することを目的とした、定義済みの関数のセットです。では、もっと簡単に言えば、API とは何でしょうか?

実際、私たちの日常生活には、API に似たシナリオがたくさんあります。たとえば、レストランに行って食事をするとき、料理がどのように作られているかを知らなくても、メニューを見て注文するだけで済みます。メニュー内の料理名は特定の API であり、メニューは API ドキュメントです。

定量取引における API とは何ですか?

現在の商品の初値を取得する必要がある場合、その取得方法を知る必要はありません。コードエディタに「OPEN」と書いて直接使用するだけです。「OPEN」はMai言語での始値のAPIです。

よく使われるMai言語API

Mai Language API について説明する前に、共通コード構造とその機能コンポーネントを見てみましょう。これにより、API をよりよく理解できるようになります。以下の例をご覧ください。
img
図2-9 マイ言語の例

上記のコードに示すように:
紫色のAAは変数です。変数とは中学校で習った代数のように、変化する量のことです。始値が AA に割り当てられている場合は、AA が始値になります。最高値が AA に割り当てられている場合は、AA が最高値になります。もちろん、AA は単なるカスタム名であり、BB として定義することもできます。

緑色の「:=」は代入を意味し、「:=」の右側の値を左側の変数に代入することを意味します。

オレンジ色のコードは、Inventor Quantitative Tool の Mai 言語 API です。1 行目の OPEN は終値を取得するための API で、直接使用できます。2 行目の MA は移動平均を取得するための API で、2 つのパラメータを渡す必要があります。つまり、どのような移動平均が必要かを Inventor Quantitative Tool に伝える必要があります。始値に基づいて計算された 50 期間の移動平均を取得する場合は、次のように記述できます。MA(OPEN,50); 2 つのパラメータの間には英語のカンマがあることに注意してください。

黄色の「//」はコメント記号で、その後ろの青い漢字がコメント内容です。これは自分で読むためのもので、コード行の意味を示すために使用されます。プログラムは実行中にコメントを処理しません。コメント文字の前に、コードの各行の行末に英語のセミコロンが必要であることに注意してください。

コード構造の基本的な理解を踏まえて、以下によく使われる言語をいくつか紹介します。これらの言語は今後も頻繁に使用されるでしょう。
OPEN——最新のKラインの始値を取得
例: AA: =OPEN; 最新のKラインの始値を取得し、その結果をAAに代入します。

HIGH——最新のKラインの最高価格を入手
例: AA: =HIGH; 最新のKラインの最高価格を取得し、その結果をAAに割り当てます。

LOW——最新のKラインを最安値で入手
例: AA: =LOW; 最新のKラインの最低価格を取得し、その結果をAAに割り当てます

CLOSE-Kラインの最新の終値を取得します。日中のKラインが終了していない場合は、最新の価格を取得します。
例: AA: =CLOSE; 最新のKラインの終値を取得し、その結果をAAに代入します。

VOL——最新のKライン取引量を取得する
例: AA: =VOL; 最新のKライン取引量を取得し、その結果をAAに割り当てます。

REF(X,N) - N サイクル前の X の値を参照します。
例: REF(CLOSE,1); 前回のKラインの始値を取得します

MA(X,N) - N期間のXの単純移動平均を求める
例: MA(CLOSE,10); //最新のKラインの10期間移動平均を取得します

CROSSUP(A,B) - A が B を下から上に横切る場合は 1 (はい) を返し、それ以外の場合は 0 (いいえ) を返します。
例: CROSSUP(CLOSE,MA(C,10)) // 終値が10期間平均価格を横切る

CROSSDOWN(A,B) - AがBを上から横切る場合は1(はい)を返し、そうでない場合は0(いいえ)を返します。
例: CROSSDOWN(CLOSE,MA(C,10)) // 終値が10期間平均価格を下回る

BK——買いポジション
例: CLOSE>MA(CLOSE,5),BK; //終値が5期間移動平均より大きい場合、買いポジション

SP——ポジションをクローズするために売る
例: CLOSE<MA(CLOSE,5),SP; // 終値が5期間移動平均より低い場合は、売り、ポジションをクローズします

SK——売りオープニングポジション
例: CLOSE<MA(CLOSE,5),SK; //終値が5期間移動平均より小さい場合、売りポジション

BP——買いで終了
例: CLOSE>MA(CLOSE,5),BP; //終値が5期間移動平均より大きい場合は、買いポジションをクローズします

BPK——ポジションを閉じるために買い、ポジションを開くために買い(逆ロングポジション)
例: CLOSE>MA(CLOSE,5),BPK; // 終値が 5 期間の移動平均より大きい場合は、ショート ポジションをクローズしてから、新しいポジションを開くために購入します。

SPK——ポジションを閉じるために売り、ポジションを開くために売る(空売り)
例: CLOSE<MA(CLOSE,5),SPK; // 終値が 5 期間移動平均を下回る場合、ロング ポジションをクローズし、オープン ポジションを売却します。

CLOSEOUT——すべてのポジションをクローズします。ポジション増減モデルで使用することをお勧めします。例: CLOSEOUT; すべての方向のすべてのポジションをクローズします。

よく使われるJavaScript言語API

JavaScript 言語 API を説明する前に、一般的なコード構造とその機能コンポーネントを見てみましょう。これにより、API をよりよく理解できるようになります。次の例をご覧ください。
img
図2-10 JavaScriptコード例

上記のコードに示すように:
JavaScript 言語で変数を作成することは、多くの場合、変数を「宣言する」と呼ばれます。赤いコードでは、var キーワードを使用して変数を宣言し、変数名はオレンジ色のコードで「aa」です。

JavaScript では、等号を使用して値を割り当てます。つまり、「=」の右側の値が左側の変数に割り当てられます。
シアン色のコード「exchange」は取引所オブジェクトです。ここでの取引所は、設定した先物会社のことを指します。これは固定形式であり、JavaScript 言語 API を呼び出すときに取引所オブジェクトを指定する必要があります。

緑色のコードは JavaScript API です。これを呼び出すと、実際には exchange オブジェクト内の関数が呼び出されます。青いコードの後のドットも固定形式であることに注意してください。ここでの関数は中学校で習った関数と同じです。関数にパラメータが必要ない場合は、空の括弧を使用してそれを示します。関数にパラメータを渡す必要がある場合は、括弧内にパラメータを記述します。

例を通してコードの基本構造と原則を理解した後、今後よく使用する JavaScript 言語 API をいくつか紹介します。
SetContractType("商品コード") - 契約タイプ、つまり取引したい商品を設定します
例: exchange.SetContractType("rb1905"); // トランザクション タイプを "Rebar 1905 Contract" に設定します

GetTicker——ティックデータを取得する
例: exchange.GetTicker(); //ティックデータを取得する

GetRecords——K ラインデータを取得する
例: exchange.GetRecords(); //Kラインデータを取得

買う
例: exchange.Buy(5000, 1); // 5000元で1ロット購入

売る——買う
例: exchange.Sell(5000, 1); // 1ロットを5,000元で売る

GetAccount——アカウント情報を取得する
例: exchange.GetAccount(); // アカウント情報を取得する

GetPosition——位置情報を取得する
例: exchange.GetPosition(); //位置情報を取得する

SetDirection - ロングまたはショート注文タイプを設定する
例:
exchange.SetDirection("buy"); //ロングポジションを開くために注文タイプを買いに設定します
exchange.SetDirection("closebuy"); //ロングポジションをクローズするために注文タイプを売りに設定する
exchange.SetDirection("sell"); //ショートポジションを開くために注文タイプを売りに設定する
exchange.SetDirection("closesell"); //ショートポジションをクローズするために注文タイプを買いに設定する

ログ - ログにメッセージを出力する
例: Log("hello, world"); // ログに「hello world」を出力します

スリープ - 一定時間プログラムを一時停止します
例: Sleep(1000); //プログラムを1秒間一時停止します

上に挙げたような多くの API をどうやって覚えればよいのか、と疑問に思う方もいるかもしれません。実際、これらすべてを暗記する必要はありません。Inventor Quant の公式 Web サイトには、詳細な API ドキュメントが用意されています。辞書を引くのと同じように、必要なときに調べるだけです。初めて見るコードやその他のコンテンツに怖気付かないでください。私たちが望んでいるのは、これらの言語を通じて独自の戦略を体系化することです。テクノロジーは決して定量化の境界ではないことを忘れないでください。優れた戦略を持っているかどうかが、定量市場で長期的に活躍できるかどうかの鍵です。

要約する

上記は定量取引で最もよく使用される API であり、基本的にはデータの取得、データの計算、売買注文の配置が含まれており、単純な定量取引戦略を処理するには十分です。もちろん、より複雑な戦略を記述したい場合は、Inventor Quantitative Tool の公式 Web サイトにアクセスして入手する必要があります。

宿題

  1. 5 期間の移動平均が 10 期間の移動平均を交差するという文を Mai Language で書いてみてください。
  2. JavaScript で GetAccount を使用してアカウント情報を取得し、Log を使用してログに出力します。

次のセクションのプレビュー

プログラミングはレゴブロックを組み立てるようなもので、API はブロックのさまざまなパーツのようなもので、プログラミングプロセスはさまざまなレゴパーツを組み合わせて完全なおもちゃを作ることです。次のセクションでは、Mai Language API を使用して完全な定量取引戦略を組み立てる方法を説明します。

2.4 Inventor Quantitative System で戦略を書く方法

まとめ

前のセクションを学習した後、ようやく定量的な取引戦略の作成を開始できます。これは、手動取引から定量取引に移行するための最も重要なステップになります。実際のところ、それほど神秘的なことではありません。戦略を書くということは、アイデアをコードに変換することにすぎません。このセクションでは、定量的取引戦略を最初から実装し、Inventor Quantitative System で戦略を記述する方法を説明します。

準備する

まず、Inventor Quantitative Tool の公式サイトを開き、「戦略ライブラリ」と「新しい戦略」を順番にクリックします。コードの記述を開始する前に、プログラミング言語のドロップダウン メニューで Mai 言語または JavaScript 言語を選択する必要があることに注意してください。もちろん、プラットフォームは Python、C++、ビジュアル言語もサポートしています。

戦略的アイデア

前の章では、移動平均線を価格が突破するための戦略を紹介しました。つまり、価格が過去 10 日間の平均価格よりも高い場合は買い、価格が過去 10 日間の平均価格よりも低い場合は売ります。しかし、価格は市場の状況を直接反映できるものの、誤ったブレイクスルーシグナルが多く発生するため、この戦略をアップグレードして改善する必要があります。

まず、トレンドの方向を決定するために、より長い期間の移動平均を選択します。これにより、少なくとも半分近くの誤ったブレイクスルー シグナルが除去されます。 長い期間の移動平均は遅いですが、より安定します。次に、エントリーの成功率をさらに高めるために、この長い期間の移動平均が少なくとも上向きであるという別の条件を追加します。最後に、価格、短期移動平均、長期移動平均の相対的な位置関係を使用して、完全な取引戦略を形成します。

戦略ロジック

上記の戦略的なアイデアや考えを基に、戦略ロジックを構築することができます。ここでの論理は、天体の動きの法則を計算するように求めるものではありません。それほど複雑ではありません。それは、これまでの戦略的な考えを言葉で表現したものに過ぎません。

ロングポジションオープン: 現在ポジションがなく、終値が短期移動平均より大きく、終値が長期移動平均より大きく、短期移動平均が長期移動平均より大きく、長期移動平均が上昇している場合。

ショートポジションを開く: 現在ポジションがなく、終値が短期移動平均を下回り、終値が長期移動平均を下回り、短期移動平均が長期移動平均を下回り、長期移動平均が下降している場合。

ロングポジションのクローズ: 現在ロング注文を保有しており、終値が長期移動平均を下回っている場合、または短期移動平均が長期移動平均を下回っている場合、または長期移動平均が下降している場合。

ショートポジションのクローズ: 現在ショート注文を保有しており、終値が長期移動平均よりも高い場合、または短期移動平均が長期移動平均よりも高い場合、または長期移動平均が上昇している場合。

上記は、定量取引戦略全体の論理的な部分です。戦略ロジックのテキスト バージョンをコードに変換すると、市場状況の取得、指標の計算、および売買注文の配置という 3 つのステップが含まれます。

言語戦略

最初のステップは、市場情報を取得することです。この定量取引戦略では、終値を取得するだけで済みます。Mai Languageでは、終値を取得するためのAPIはCLOSEです。つまり、最新のKラインの終値を取得するには、コードにCLOSEと記述するだけで済みます。

次に計算指標です。この定量的取引戦略では、短期移動平均と長期移動平均の合計 2 つの技術を使用します。短期移動平均は 10 期間の移動平均であり、長期移動平均は 50 期間の移動平均であると想定します。では、コードを使用して 10 期間の移動平均と 50 期間の移動平均をどのように表現するのでしょうか。次の図をご覧ください。
img
図2-11 Mai言語戦略コード

手動取引では、50期間の移動平均が上昇しているのか下降しているのかが一目でわかりますが、コードではどのように表現するのでしょうか。よく考えてみると、移動平均が上昇しているかどうかを判断するには、現在のKラインの50期間移動平均値が前のKラインの50期間移動平均値よりも大きく、前のKラインの50期間移動平均値が前のKラインの50期間移動平均値よりも大きいのではないでしょうか。その逆は真実であり、移動平均が下がっていることを意味します。したがって、コードでは次のようになります。
img
図2-12 マイ言語判定移動平均コード

上図の 8 行目と 9 行目のバラ色のコード「AND」に注目してください。これはマイ語で「and」を意味します。たとえば、9 行目は中国語に翻訳すると次のようになります: 現在の K ラインの 50 期間移動平均が前の K ラインの 50 期間移動平均よりも大きく、前の K ラインの 50 期間移動平均が前の K ラインの 50 期間移動平均よりも大きい場合、値は「はい」として計算されます。それ以外の場合、値は「いいえ」として計算され、結果は「MA50_ISUP」に割り当てられます。

最後のステップは、売買注文を出すことです。売買ロジック コードの後に​​発明者の定量ツールの注文 API を呼び出して、売買操作を実行するだけです。次の図をご覧ください。
img
図2-13 マイ言語売買取引コード

上の図の 13 行目と 14 行目にあるバラ色のコード「OR」に注目してください。これはマイ語で「または」を意味します。たとえば、13 行目は中国語に翻訳すると次のようになります: 現在の K ラインの終値が現在の K ラインの 50 期間移動平均より小さい場合、または現在の K ラインの 10 期間移動平均が現在の K ラインの 50 期間移動平均より小さい場合、値は「はい」と計算され、すぐに注文が行われます。それ以外の場合は、「いいえ」と計算され、何も行われません。

注意: 「AND」と「OR」はMai言語の論理演算子です。
「AND」は、すべての条件が「はい」の場合、最終条件も「はい」になることを意味します。
「OR」は、すべての条件のうち、いずれかの条件が「はい」であれば、最終条件も「はい」になることを意味します。

要約する

上記は、Inventor Quantitative Tool で Mai 言語で取引戦略を書くプロセス全体です。戦略のアイデアを持つことから、戦略を考案してロジックを言葉で記述すること、そして最後にコードで完全な取引戦略を実装することまで、合計で 3 つのステップしかありません。これは単純な戦略ですが、戦略のアルゴリズムとデータ構造が異なることを除いて、具体的な実装プロセスはより複雑な戦略のプロセスと似ています。したがって、このセクションで定量戦略プロセスを理解して習得していれば、必要に応じてMai言語を使用して定量戦略の研究を行い、発明者の定量ツールを実践することができます。

宿題

  1. このセクションの戦略を自分で実装してみてください。
  2. このセクションの戦略に基づいて、ストッププロフィット関数とストップロス関数を追加します。

次のセクションのプレビュー

定量的取引戦略の開発において、プログラミング言語は武器や装備のようなものです。優れたプログラミング言語は、半分の労力で 2 倍の結果を得るのに役立ちます。たとえば、定量取引業界で最も一般的に使用されている言語は、Python、C++、Java、C#、EasyLanguage、Mai Languageなど、10種類以上あります。戦場に出るためにどの武器を選べばいいでしょうか?次のセクションでは、これらの一般的なプログラミング言語と、各プログラミング言語の特徴を紹介します。

第3章 取引戦略を実装するためのシンプルなプログラミング言語

3.1 定量取引プログラミング言語の水平評価

まとめ

第 1 章と第 2 章では、定量取引の基礎と発明者の定量ツールの使用方法を学びました。この章では、取引戦略を詳細に実装します。仕事をうまくやり遂げたいなら、まず道具を研がなければなりません。取引戦略を実装するには、まずプログラミング言語を習得する必要があります。このセクションでは、まず定量取引における主流のプログラミング言語と、各プログラミング言語の特徴を紹介します。

プログラミング言語とは何か

プログラミング言語を学ぶ前に、まず「プログラミング言語」の概念を理解する必要があります。プログラミング言語は、人間とコンピュータの両方が理解できる言語です。これは標準化された通信コードです。プログラミング言語の目的は、人間の言語を使用してコンピュータを制御し、コンピュータに実行したいことを伝えることです。コンピュータはプログラミング言語に従って命令を実行することができ、またコンピュータに命令を出すためのコードを記述することもできます。

両親は私たちが幼い頃に話し方を教えたのと同じように、他人が言うことを理解する方法も教えてくれました。長い期間にわたる影響と独学の末、私たちは気づかないうちに話すことを学び、他の子供たちが言っていることを理解できるようになりました。中国語、英語、フランス語など、多くの言語があります。例:
中国語: こんにちは世界
英語: こんにちは世界
フランス語: Bonjour tout le monde

プログラミング言語を使用してコンピューター画面に「Hello World」を表示すると、次のようになります。
C言語: puts("Hello World");
Java 言語: System.out.println("Hello World");
Python 言語: print("Hello World")
コンピュータ言語には独自の特定のルールがあり、多くの言語があることがわかります。これらの言語ルールは、今日説明する必要があるプログラミング言語の分類です。各分類では、最も基本的で一般的に使用されるルールを覚えておくだけで、これらのプログラミング言語を使用してコンピューターと通信し、コンピューターに指示に従って対応する戦略を実行させることができます。

プログラミング言語の分類

参照や比較を容易にし、自分に合った定量取引プログラミング言語を選択できるように、最も一般的に使用される 6 つのプログラミング言語、つまり Python、Matlab/R、C++、Java/C#、EasyLanguage、ビジュアル言語を分類します (以下を参照)。
img
図3-1 プログラミング言語の評価

機能範囲、実行速度、スケーラビリティ、学習の難易度に基づいて評価しました。スコアは 1 ~ 5 です。たとえば、機能範囲のスコアが 5 の場合は機能が強力であることを意味し、スコアが 1 の場合は機能がそれほど強力ではないことを意味します。 (上図のように) ビジュアル言語と EasyLanguage は習得が簡単で、初心者に最適です。Python は強力で拡張機能が充実しているため、より複雑な取引戦略の開発に適しています。C++ は取引速度が速く、高頻度取引に適しています。

ただし、各プログラミング言語の評価は主に定量取引の分野での応用を目的としており、個人の主観的な要素が含まれています。コメント欄で批判したり、議論のために意見を述べたりすることも歓迎します。次回からは、これらのプログラミング言語を一つずつ紹介していこうと思います。

視覚言語

ビジュアルプログラミングには長い歴史があり、新しいものではありません。この「見たままの結果が得られるもの」というプログラミング コンセプトは、さまざまな制御モジュールを備えており、ドラッグ アンド ドロップするだけでコード ロジックを構築し、取引戦略の設計を完了できます。このプロセスは、ビルディング ブロックと非常によく似ています。
img
図3-2 ビジュアルプログラミング言語インターフェース

上記のように、Inventor Quantitative Trading Platform のビジュアル プログラミングでは、わずか数行のコードで同じプログラムを完成させることができます。これによりプログラミングの敷居が大幅に下がり、特にプログラミングの知識がないトレーダーにとっては素晴らしい操作体験となります。

このビジュアル言語の基礎となる実装戦略は C++ に変換されているため、プログラムの実行速度にほとんど影響はありません。ただし、その機能性と拡張性は比較的弱く、過度に複雑または洗練された取引戦略を開発することはできません。

イージーランゲージ

いわゆる EasyLanguage は、一部の商用定量取引ソフトウェアに固有のプログラミング言語を指します。これらの言語にもオブジェクト指向の機能がいくつかありますが、アプリケーションでは主にスクリプト化されています。構文の面でも、自然言語に非常に近いです。定量取引の初心者にとっては、EasyLanguage をエントリー ポイントとして使用するのがより良い選択です。例: 発明者の定量取引プラットフォームにおける Mai 言語。

このスクリプト言語は、特定のソフトウェアで戦略のバックテストや実際の取引を行うことに問題はありませんが、スケーラビリティの点で制限されることがよくあります。たとえば、戦略開発者は外部 API を呼び出すことができません。さらに、実行速度の面では、このスクリプト言語は独自の仮想マシン上で実行され、パフォーマンスの最適化は Java/C# ほど良くなく、速度が遅くなります。

Python

Stackoverflowでは、主流のプログラミング言語へのアクセス数は近年ほとんど変化しておらず、Pythonのみが上昇傾向を示しています。 Pythonは、Webサイト開発、機械学習、ディープラーニング、データ分析などに使用できます。柔軟性とオープン性により、最も一般的な言語となっています。定量投資の分野でも同様です。現在、国内の定量プラットフォームのほとんどはPythonベースです。

Python の基本的なデータ構造であるリストと辞書は非常に強力であり、基本的にデータ表現のニーズを満たすことができます。より高速で包括的なデータ構造が必要な場合は、NumPy と SciPy を使用することをお勧めします。これら 2 つのライブラリは、基本的に Python 科学計算の標準ライブラリと呼ばれています。

金融工学の場合、よりターゲットを絞ったライブラリは Pandas です。Pandas には、Series と DataFrame という 2 つのデータ構造があり、時系列の処理に非常に適しています。

速度の点では、Python は中間に位置し、C++ より遅く、EasyLanguage より速いです。これは主に、Python が動的言語であり、純粋な Python で実行した場合の速度が平均的であるためです。ただし、Cython を使用すると、一部の関数を静的に最適化して、C++ の速度に近づけることができます。

グルー言語として、拡張性能の点ではPythonは文句なしのナンバーワンです。他の言語と拡張的に接続できるだけでなく、拡張APIも非常に使いやすいように設計されています。学習の難しさという点では、Python は構文がシンプルで、コードが読みやすく、簡単に始められます。

Matlab/R

次は Matlab と R です。この 2 つの言語は主にデータ分析に使用されます。言語の作者は科学的な操作のための構文設計を数多く行っています。その特徴は、定量的な取引操作を自然にサポートすることです。ただし、その適用範囲は比較的限られており、一般的にはデータ分析や戦略のバックテストに使用されます。取引システムや戦略アルゴリズムの開発においては、その使いやすさと安定性は比較的劣っています。

さらに、Matlab と R は独自の言語仮想マシン上で実行されるため、実行速度とスケーラビリティは比較的劣ります。パフォーマンスの点では、それらの仮想マシンは Java や C# よりもはるかに劣ります。しかし、その構文は数式に近いため、比較的簡単に学習できます。

C++

C++ は、手続き型プログラミング、データ抽象化、オブジェクト指向プログラミング、ジェネリックプログラミング、デザインパターンなど、複数のプログラミング モデルをサポートする汎用プログラミング言語です。 C++ を使用すると、実現したいすべての機能を実装できますが、このような強力な言語の最大の欠点は、テンプレート、ポインター、メモリ リークなど、学習が非常に難しいことです。

現在でも、C++ は大量かつ高頻度の取引に好まれるプログラミング言語です。その理由は簡単です。C++ 言語の特性により、基盤となるコンピュータにアプローチしやすく、大量のデータを処理する高性能なバックテストおよび実行システムを開発するための最も効果的なツールだからです。

Java/C#

Java/C# はどちらも仮想マシン上で実行される静的言語です。C++ と比較すると、配列の範囲外エラーやコアダンプがなく、スローされた例外はエラーコードの場所を正確に特定でき、独自の自動ガベージコレクションメカニズムがあり、メモリリークなどを心配する必要がありません。そのため、構文の習得の難しさという点でも、C++ よりも簡単です。実行速度に関しては、仮想マシンはすべてランタイムコンパイル用の独自の JIT 機能を備えているため、速度は C++ に次ぐものです。

ただし、機能面では、C++ のように基盤となる取引システムを最適化することはできません。拡張性能の面では、拡張に C のブリッジを経由する必要があり、この 2 つの言語自体が仮想マシン上で実行されるため、機能モジュールを拡張するときには、それを実現するためにさらに 1 層の壁を越える必要があるため、C++ よりも弱くなります。

要約する

しかし、繰り返しになりますが、定量的プログラミング言語は重要ではなく、重要なのはアイデアです。発明者が考案した定量マイ言語や視覚化言語を定量参入への足がかりとして使うことは全く問題ありません。参入後の改善には、さまざまな市場状況と組み合わせて常に試行錯誤する必要があります。アイデアが出口を決定し、ビジョンが領域を決定すると言えます。

「戦略を設計し、アイデアをトレードする。」この観点から見ると、定量取引の核心は依然としてアイデアのトレードにあります。定量的トレーダーとして、戦略作成プラットフォームの基本的な構文と機能を習得する必要があるだけでなく、実際の戦闘でトレーディングの概念を体験する必要もあります。定量化は、さまざまな取引概念を反映するための単なるツールおよび媒体です。

宿題

  1. 定量取引における Python 言語の利点は何ですか?
  2. 発明者のMai言語を使用して、よく使用されるAPIをいくつか記述してみませんか?

次のセクションのプレビュー

プログラミング言語の上記の紹介により、選択方法がわかるはずです。次のいくつかの章では、プログラミング言語の分類に従って、定量的取引戦略の開発をターゲットに学習します。

3.2 Mai Language クイックスタートガイド

まとめ

マイ語とは何ですか?いわゆるMai言語は、初期の株式テクニカル指標から拡張されたプログラムされた関数ライブラリのセットです。アルゴリズムは関数にカプセル化されており、ユーザーは戦略ロジックを実装するために、ビルディングブロックで遊ぶように関数を 1 行ずつ呼び出すだけで済みます。

「小さな構文、大きな機能」の構築モードを採用し、執筆効率が大幅に向上しました。他の言語では100以上の文章を必要とする戦略も、Mai Languageではわずか10数文で記述できます。発明者の定量的ツールの金融統計関数ライブラリとデータ構造を組み合わせることで、複雑な取引ロジックもサポートできます。

完全な戦略

このセクションの重要な知識を素早く理解できるようにするために、Inventor Quantitative Microwave Language クイック スタートを紹介する前に、まずこのセクションの概念を予備的に理解しておく必要があります。長期の 50 日移動平均と短期の 10 日移動平均を基本ケースとして使用し、前の章で説明した完全な戦略ケースを確認します。

ロングポジションオープン: 現在ポジションがなく、終値が短期移動平均より大きく、終値が長期移動平均より大きく、短期移動平均が長期移動平均より大きく、長期移動平均が上昇している場合。

ショートポジションを開く: 現在ポジションがなく、終値が短期移動平均を下回り、終値が長期移動平均を下回り、短期移動平均が長期移動平均を下回り、長期移動平均が下降している場合。

ロングポジションのクローズ: 現在ロング注文を保有しており、終値が長期移動平均を下回っている場合、または短期移動平均が長期移動平均を下回っている場合、または長期移動平均が下降している場合。

ショートポジションのクローズ: 現在ショート注文を保有しており、終値が長期移動平均よりも高い場合、または短期移動平均が長期移動平均よりも高い場合、または長期移動平均が上昇している場合。

Mai 言語コードで記述すると次のようになります。
img
図3-3 マ​​イ言語の完全な例

完全な定量取引戦略を作成するには、通常、データの取得、データの計算、論理計算、注文の配置など、いくつかのステップが必要です。上図に示すように、コード全体では、1 行目と 2 行目の「CLOSE」という基本データを取得するために 1 つの API のみが使用され、その後、1 行目から 9 行目がデータ計算部分、最後に 11 行目から 14 行目がロジック計算と注文配置部分になります。

紫色のコードは変数であることに注意してください。1行目から9行目まで、緑色の「:=」は代入演算子であり、代入演算子の右側のデータは計算後に左側の変数に割り当てられます。オレンジ色のコードはAPIです。たとえば、1行目では、MA(移動平均)を呼び出すには2つのパラメータを渡す必要があります。これは設定として理解できます。つまり、MAを呼び出すときに、MAのタイプを設定する必要があります。バラ色の「AND」と「OR」は論理演算子であり、主に複数の論理計算などを連結するために使用されます。上記の基本的な知識概念を使用して、Mai 言語の詳細な基礎を学び始めましょう。

基本データ

基本データ(始値、最高値、最低値、終値、取引量)は定量取引に欠かせない要素です。戦略における最新の基本データを取得するには、発明者の定量ツールのAPIを呼び出すだけです。過去の基本データを取得したい場合は、「REF」を使用します。例えば、REF(CLOSE, 1)は昨日の終値を取得します。

変数について

変数は変更可能な数値です。変数の名前はコードとして理解できます。命名には漢字、英字、数字、ダッシュがサポートされていますが、長さは 31 文字以内に制限する必要があります。変数名は互いに繰り返すことはできず、パラメータ名や関数名 (API) とも繰り返すことはできません。また、各ステートメントはセミコロンで終わる必要があります。書いた後に独自の言語コメントを追加したい場合は、最後に「//」を使用します。半角入力方式の大文字モードで入力する必要があります。次の図に示すように:
img
図3-4 マイ言語のデータ型

変数の割り当て

変数代入とは、代入演算子の右側の値を左側の変数に代入することです。代入演算子には 4 種類あり、チャート上に値を表示するかどうかの制御や、表示位置の定義ができます。下の図の緑色のフォントは代入演算子、つまり「:」、「:=」、「^^」、「..」です。図のコードコメントでその意味が詳しく説明されています。
img
図3-5 Mai言語の変数割り当て

データの種類

Mai 言語には多くのデータ型がありますが、その中で最もよく使用されるのは数値型、文字列型、ブール型です。数値型は、整数、小数、正数、負数などを含む数値です。例: 1、2、3、1.1234、2.23456...; 文字列型はテキスト、中国語、英語として理解でき、数値はすべて文字列にすることができます。例: 'Inventor Quantification'、'CLOSEPRICE'、'6000'。文字列型は英語のセミコロンで囲む必要があります。ブール型は最も単純で、「はい」と「いいえ」の 2 つの値のみを持ちます。例: 1 は「はい」を表す true を表し、0 は「いいえ」を表す false を表します。

関連演算子

関係演算子は、その名前が示すように、2 つの値の関係を比較するために使用される演算子です。これらは、以下に示すように、等しい、より大きい、より小さい、以上、以下、等しくないです。
img
図3-6 Mai言語の演算子

論理演算子

論理演算は、個別のブール文を 1 つの全体に結合できます。最もよく使用されるのは、「AND」と「OR」です。 「終値が始値より大きい」と「終値が移動平均より大きい」という 2 つのブール値があるとします。これらを次のようにブール値に組み合わせることができます。「終値が始値より大きい、かつ (AND) 終値が移動平均より大きい」、「終値が始値より大きい、または (OR) 終値が移動平均より大きい」。
img
図3-7 マイ言語の論理演算

皆様、ご注意ください:
「AND」は、すべての条件が「はい」の場合、最終条件も「はい」になることを意味します。
「OR」は、すべての条件のうち、いずれかの条件が「はい」であれば、最終条件も「はい」になることを意味します。
「AND」は「&&」と書き、「OR」は「||」と書きます。

算数演算子

Mai言語でよく使われる算術演算子(「+」、「-」、*”、”/”)は、以下に示すように、小学校で習う数学と変わりません。
img
図3-8 マイ語の算術演算

優先する

100があれば*式 (10-1)/(10+5) の場合、プログラムはどのステップを最初に計算しますか?中学校の数学では、①同じレベルの演算であれば、一般的には左から右へ計算すると教えられています。 ② 足し算と引き算、掛け算と割り算がある場合は、まず掛け算と割り算を計算し、その後に足し算と引き算を計算します。 ③括弧がある場合は括弧内の内容を先に計算します。 ④演算法則に準拠している場合は、演算法則を利用して計算を簡略化することができます。 Mai 言語の優先順位は、以下のとおりです。
img
図3-9 マイ言語における算術演算の優先順位

実行モード

発明者の定量ツールのMai言語では、プログラム戦略実行に終値モードとリアルタイム価格モードの2つのモードがあります。終値モードとは、現在の K ライン シグナルが確立され、次の K ラインが開始されるとすぐに注文取引が実行されることを意味します。リアルタイム価格モードとは、現在の K ライン信号が確立されると、注文取引が直ちに実行されることを意味します。

日中戦略

日中戦略の場合、取引日の終了時にポジションをクローズする必要がある場合は、「TIME」時間関数を使用する必要があります。この関数は、2 番目の期間より上、日中の期間より下にある場合は 4 桁の形式で表示されます (つまり、HHMM (1450-14:50))。注意: 取引終了時にポジションをクローズする条件として TIME 関数を使用する場合は、開始条件にも対応する時間制限を設定することをお勧めします。以下のように表示されます。
img
図3-10 マイク言語時間機能

モデル分類

img
図3-11 Mai言語モデルの分類

Mai 言語には、非フィルタリング モデルとフィルタリング モデルの 2 種類のモデル分類があります。これは実際には非常に理解しやすいです。非フィルタリング モデルでは、連続的な開閉信号が許可され、ポジションの追加と削減の機能を実現できます。フィルタリング モデルでは、連続したオープン信号またはクローズ信号は許可されません。つまり、オープン信号が表示されると、クローズ信号が表示されるまで、後続のオープン信号はフィルタリングされます。非フィルタリング モデルでの信号の順序は、オープン-クローズ-オープン-クローズ-オープン... です。

要約する

上記はMai言語の簡単な紹介です。これを学習すると、定量的な取引戦略をプログラムできるようになります。より複雑な戦略を記述する必要がある場合は、Inventor Quantitative Tool Mai Language API ドキュメントを参照するか、公式カスタマー サービスに直接問い合わせて、定量的な取引戦略を記述してもらうことができます。

次のセクションのプレビュー

デイトレードも取引モデルです。この方法ではポジションを一晩中保持しないため、市場の変動リスクは低くなります。不利な市場状況が発生した場合、時間内に調整を行うことができます。このセクションでMai言語の概要を学習した後、次のセクションでは、実行可能な日中定量取引戦略の記述方法を説明します。

宿題

  1. Inventor Quantitative Tool を使用して、Mai 言語で API を記述し、基本データを取得してみます。
  2. 変数の割り当てをグラフに表示する方法は何ですか?

3.3 マイ語で戦略を実行する方法

まとめ

前回の記事では、Mai言語の紹介、基本構文、モデル実行方法、モデル分類などの側面から取引戦略を実装するための前提を説明しました。この記事では、前回の記事の内容を引き続き、一般的に使用される戦略モジュールとテクニカル指標から、実行可能な日中定量取引戦略を段階的に実現できるようにお手伝いします。

ポリシーモジュール

考えてみてください。レゴのピースを使ってロボットをどうやって作るのでしょうか?上から下へ、あるいは下から上へ、少しずつ組み立てることはできません。常識のある人なら誰でも、頭、腕、脚、翼などを別々に組み立てて、それを組み合わせれば完全なロボットになるはずだと分かります。プログラムを書くときも同じです。必要な機能を戦略モジュールに書き込んでから、戦略モジュールを組み合わせて完全な定量取引戦略を作成します。以下に、よく使用される戦略モジュールをいくつか示します。

フェーズ増加

ステージの増加は、現在の K ラインの終値と前の N 期間の終値との差のパーセンテージを計算することによって計算されます。たとえば、最後の 10 個の K ライン期間の増加を計算するには、次のようにコードを記述します。
img
図3-12 マイ語段階の成長

新たな高値

新たな高値を設定するには、現在の K ラインが N 期間の最高価格より大きいかどうかを計算する必要があります。たとえば、現在の K ラインが過去 10 個の K ラインの最高価格より大きいかどうかを計算するには、次のようにコードを記述します。
img
図3-13 マイ語が新たな高値を達成

大きなボリュームの上昇

大量上昇攻撃は、価格の上昇と取引量の急増として理解できます。たとえば、K ラインの終値が過去 10 本の K ラインの終値の 1.5 倍である場合、10 日間で 50% 増加し、取引量が過去 10 本の K ラインの平均の 5 倍を超えることを意味します。コードでは次のように記述できます。
img
図3-14 まいゆゆのボリュームが上がる

細めの仕上げ

狭い範囲での統合とは、価格が最近の一定期間にわたって一定の範囲内に留まっていることを意味します。たとえば、10 期間内の最高価格と最低価格の差を現在の K ラインの終値で割った値が約 0.05 未満の場合。コードでは次のように記述できます。
img
図3-15 小麦に関する言語の狭い範囲

移動平均の強気配置

移動平均線の強気配置は、強気配置と弱気配置に分かれています。Kラインは、5-10-20-30-60移動平均線の下でサポートされ、上向きに配置されており、これは強気配置です。強気配置は、市場のトレンドが強い上昇トレンドであることを意味します。コードでは次のように記述できます。
img
図3-16 マイランゲージ移動平均強気配置

過去の高値とその場所

以前の最高点と今回の最高点の位置を取得するには、Inventor Quantitative Tool の API を通じて直接取得できます。これはコードで次のように記述できます。
img
図3-17 マイ語の以前の最高点

ギャップ

ギャップとは、2本のKラインの最高価格と最低価格がつながっていない状況です。2本のKラインで構成されています。ギャップは、将来のサポートとプレッシャーポイントの参照価格です。ギャップが発生すると、元のギャップの方向へのトレンドの加速が始まったと想定できます。これはコードで次のように記述できます。
img
図3-18 マイ言語ギャップ

一般的なテクニカル指標

移動平均

img
図3-19 移動平均チャート

統計的な観点から見ると、移動平均は日々の価格の算術平均であり、傾向のある価格の軌跡です。移動平均システムは、ほとんどのアナリストが一般的に使用するテクニカルツールです。技術的な観点から見ると、テクニカルアナリストの心理的な価格や売買の意思決定要因に影響を与える要因であり、テクニカルアナリストにとって優れた参照ツールです。発明者の定量ツールは、次の図に示すように、さまざまな種類の移動平均をサポートしています。
img
図3-20 マイ語の各種指標の算出

BOLLチャンネル

img
図3-21 BOLLチャネル図

BOLL はボリンジャー バンド インジケーターとも呼ばれ、統計原理を使用して、まず N 日移動平均に基づいて中間トラックを計算し、次に標準偏差に基づいて上部トラックと下部トラックを計算します。 BOLLチャネルが狭くなると、価格が徐々に平均値に戻りつつあることを意味します。 BOLL チャネルが狭いものから広いものに変わると、市場が変化し始めたことを意味します。価格が上のトラックを横切ると、買いの力が高まったことを示します。価格が下のトラックを横切ると、売りの力が高まったことを示します。

すべてのテクニカル指標の中で、BOLL の計算方法は最も複雑なものの 1 つであり、統計における標準偏差の概念を導入し、中間線 (MB)、上線 (UP)、下線 (DN) の計算を伴います。計算方法は以下の通りです。
img
図3-22 Mai Languageボリンジャーバンド計算

MACD指数について

img
図3-23 MACDインジケーター

MACD インジケーターは、高速 (短期) および低速 (長期) 移動平均とそれらの収束および分離の兆候を使用し、二重の平滑化操作を実行します。移動平均の原理に基づいて開発されたMACDは、頻繁に誤ったシグナルを発する移動平均の欠陥を排除し、移動平均の効果を保持しています。そのため、MACD指標は移動平均の傾向、安定性、安定性の特徴を備えています。株の売買のタイミングを判断し、株価の上昇と下落を予測するために使用されるテクニカル分析指標です。計算方法は以下の通りです。

img
図3-24 マイランゲージのMACDインジケーター

上記は、定量的取引戦略を開発する際に最も一般的に使用される戦略モジュールです。もちろん、これらよりもはるかに多くのモジュールがあります。上記のモジュールの例を通じて、主観的取引で最も一般的に使用される取引モジュールのいくつかを実装することもできます。方法はすべて普遍的です。次に、実行可能な日中定量取引戦略の作成を開始します。

戦略ライティング

外国為替スポット市場では、HANS123戦略というブレイクスルー取引戦略がかつて広く普及していました。これは、取引開始後のN Kラインの単純な高値と安値のブレイクスルーを取引シグナルを発動する基準として使用します。これも早期参入の取引モードです。

戦略ロジック

市場が開いてから 30 分以内に市場に入る準備をしてください。
上のトラック = 開通後 30 分後の最高点。
下限トラック = 開始後 30 分間の低水準。
価格が上限を突破したら、買いポジションを開きます。
価格が下限を下回ったら、売りポジションを開きます。
日中取引戦略、市場が閉まる前にポジションをクローズする。

戦略コード

img
図3-25 マイ言語戦略コード

要約する

以上、戦略モジュールの概念を学び、いくつかのよく使われる戦略モジュールの事例を通して、発明者の定量的ツールのプログラミング方法に精通しました。戦略モジュールの書き方を学び、プログラミングの論理的思考を向上させることは、高度な定量的取引の重要なステップであると言えます。最後に、発明者の定量的ツールを使用して、外国為替スポット取引で一般的に使用される取引戦略を実装しました。

次のセクションのプレビュー

友人の中には、密集したコードを理解できず混乱してしまう人もいるかもしれません。心配しないでください。私たちはすでにこれらすべてをあなたのために考えました。Inventor Quantitative Tool には、初心者ユーザーに適したプログラミング言語もあります。それはビジュアル プログラミングです。名前が示すように、見たものがそのまま得られます。一緒に楽しみにしていましょう!

宿題

  1. 主観的な取引で最も頻繁に使用するいくつかの取引モジュールを実装してみます。
  2. 発明者の定量ツールで Mai 言語を使用して KDJ インジケーター アルゴリズムを実装してみます。

3.4 ビジュアルプログラミングのクイックスタート

まとめ

多くの主観的トレーダーは定量的取引に興味を持っています。彼らは最初は自信に満ちています。しかし、伝統的なプログラミング言語の基本的な構文、データ操作、データ構造、論理制御などを学んだ後、長くて複雑なコードを見て落胆したり、諦めたりすることがよくあります。このとき、ビジュアルプログラミング言語はあなたが始めるのに適しているかもしれません。

完全な戦略

このセクションの重要な知識を誰もがすぐに理解できるようにするために、Inventor 定量ビジュアル プログラミング言語の簡単な紹介の前に、まずビジュアル言語で記述された戦略がどのようなものかを見てみましょう。また、このセクションの名詞の概念を予備的に理解しておきます。終値が 50 期間移動平均より大きい場合にロングし、終値が 50 期間移動平均より小さい場合にショートするという最も単純な例を見てみましょう。

ロングポジションオープン: 現在ポジションがなく、終値が 50 期間移動平均より大きい場合。
ショートポジションを開く: 現在ポジションがなく、終値が 50 期間移動平均を下回っている場合。
ロングポジションのクローズ:現在ロングポジションを保有しており、終値が50期間移動平均を下回っている場合。
ショートポジションのクローズ:現在ショート注文を保有しており、終値が50期間移動平均を上回っている場合。

上記の戦略をビジュアル言語で記述すると、次のようになります (下図参照)。
img
図3-26 ビジュアル言語インターフェース

上図に示すように、戦略設計プロセス全体は、市場タイプを設定し、K ライン配列を取得し、前回の K ラインの 50 期間平均を取得し、前回の K ラインの終値を取得し、ポジション配列を取得し、ポジションの状態を判定し、終値が移動平均より大きいか小さいかを判断し、オープンまたはクローズを実行します。

ここで、「配列」の概念に注意する必要があります。配列は、あらゆるプログラミング言語にとって重要なデータ構造の 1 つです。配列は、一連の値を格納できるコンテナのようなものです。たとえば、API を呼び出して K ライン配列を取得すると、次の結果が返されます。
img
図3-27 Kラインアレイ

上図のコードは K ライン配列です。配列には、前の K ラインのデータ、前の K ラインのデータ、現在の K ラインのデータの合計 3 つのデータが含まれています。この配列を変数「arr」に割り当て、この配列の最後のデータ(ルート K ラインのデータ)を取得したい場合は、次のように記述できます(下の図の 4 行目と 5 行目を参照)。
img
図3-28 配列参照

実際には数百または数千の K ライン データがあり、新しい K ラインが絶えず増加しているため、2 番目の書き方 (行 5) を使用できます。まず配列の長さを取得します。「arr.length」は配列の長さを取得し、最新の K 行のデータである「1」を減算することを意味します。前のKラインのデータを取得したい場合は、「2」を減算します。

注意深い人は、これらのデータが「{}」で囲まれていることに気付くかもしれません。英語名から、これらは時間、始値、最高値、最低値、終値、取引量に対応していることが大まかにわかります。前の K ラインの終値を取得したい場合は、末尾に「.」と必要な値を追加するだけです。下の図の 8 行目から 10 行目を参照してください。
img
図3-29 配列参照

なぜビジュアルプログラミング言語を使用するのでしょうか?

上記の概念を踏まえて、まずは Java を使用して「hello, world」を出力するプログラムを作成し、以下のように従来のプログラミングを体験してみましょう。
img
図3-30

「hello world!」という文字列を出力するだけのプログラムには、たった 5 行のコードしか必要ありません。ほとんどの初心者は括弧内の英語の単語「hello, world」しか知らず、残りの部分をどこから始めればよいのかわからないと思います。したがって、途方に暮れるよりも、ビジュアルプログラミングから始める方が良い選択です。

ビジュアルプログラミングとは何ですか?

ビジュアルプログラミングには長い歴史があり、新しいものではありません。この「見たままの結果が得られるもの」というプログラミング コンセプトは、さまざまな制御モジュールを備えており、ドラッグ アンド ドロップするだけでコード ロジックを構築し、取引戦略の設計を完了できます。このプロセスは、ビルディング ブロックと非常によく似ています。
img
図3-31

上記のように、Blockly ビジュアル プログラミングでは、同じプログラムを 1 行のコードだけで完成させることができます。これによりプログラミングの敷居が大幅に下がり、特にプログラミングの知識がないトレーダーにとっては素晴らしい操作体験となります。

ビジュアルプログラミング言語の特徴は何ですか?

Blockly はプログラミングのおもちゃではなく、本物のエディターであり、エディターを装ったオペレーティング システムではありません。変数、関数、配列、簡単に拡張およびカスタマイズできるブロックなど、プログラミングの多くの基本要素をサポートしています。これを使用して、複雑なプログラミング タスクを完了できます。この設計は、Unix の哲学「1 つのことだけを行う」と非常に一致しています。

定量的ビジュアルプログラミングの発明は、Google がリリースしたブロック可視化ツールを通じても実現されました。このデザインは、MIT が立ち上げた Scratch に似ており、閾値は実際にはゼロです (下図参照)。
img
図3-32

Inventor Quant のビジュアル プログラミング インターフェイスには、よく使用される数百のトレーディング モジュールが組み込まれています。トレーダーの新しいアイデアや新しいアプリケーションをサポートするために、今後さらに多くのトレーディング モジュールが追加される予定です。これらは開発者によって共同で開発および保守されます。

構文はシンプルですが、パフォーマンスは犠牲になりません。最も単純な定量取引戦略の開発にほぼ対応できます。機能性や速度面では、PythonやJavaScriptといった従来のプログラミング言語と比べても劣りません。将来的には、論理的に複雑な金融アプリケーションをサポートする予定です。

使い方

img
図3-33

Hello, Worldプログラムを書く

img
図3-34

「hello, world」を実行して印刷します

img
図3-35

要約する

上記では、完全な視覚化戦略から始めて、視覚化言語の概要と特徴を紹介し、最後に Inventor Quant ツールで視覚化言語を使用する方法を紹介し、「hello world」の例を記述しました。ただし、定量取引の入門として、ビジュアル プログラミングは良い足がかりとなりますが、現在 Inventor Quantitative Tool では限られた API インターフェイスしか公開されていないことを皆様に思い出していただく必要があります。定量取引の場合、戦略のロジックを整理するのに役立つ補助ツールとして使用するのが最適です。

次のセクションのプレビュー

ビジュアルプログラミングと高水準プログラミング言語の基礎には違いはなく、いくつかの側面は共通しています。ビジュアルプログラミングを学習すると、高水準プログラミングの学習に一歩近づくことになります。次のセクションでは、ビジュアル言語を使用して Inventor Quantitative Tool で一般的に使用される定量取引モジュールを記述する方法や、完全な日中取引戦略を開発する方法など、ビジュアルプログラミングの高度な学習について詳しく説明します。

宿題

  1. Inventor Quant ビジュアル プログラミング インターフェイスで API を使用して、その意味を理解します。
  2. ビジュアル言語を使用して最新の始値を取得し、ログに出力します。

3.5 視覚言語を用いた戦略の実装方法

まとめ

前回の記事では、ビジュアルプログラミング言語の紹介と特徴、「hello world」の例、発明者の定量取引ツールでの戦略の書き方について学び、取引戦略を実装するための前提条件を説明しました。この記事では、前回の記事に引き続き、一般的に使用される戦略モジュールとテクニカル指標から始めて、戦略ロジックまで説明し、誰もが完全なデイトレード戦略を段階的に実現できるようにします。

ポリシーモジュール

フェーズ増加

ステージの増加は、現在の K ラインの終値と前の N 期間の終値との差のパーセンテージを計算することによって計算されます。たとえば、最後の 10 個の K ライン期間の増加を計算するには、次のようにコードを記述します。
img
図3-36

上記のコードから、コンピューターの実行方法には完全な論理ループが必要であることがわかります。たとえば、最後の 10 K ライン期間の成長率を計算するには、次の手順に分割する必要があります。
まず、コンピュータは、取引したい商品を明確に認識する必要があります。たとえば、上記の例はメタノールなので、契約コードを「MA888」に設定します。契約コードを設定すると、契約のKラインデータを取得できます。

K ライン データを使用すると、これらの K ライン データから任意の K ラインの詳細データを取得できます。
周期的な増加を計算するには、まず 2 つの K ラインの終値を取得する必要があります。たとえば、前の K ラインの終値とその前の 11 番目の K ラインの終値です。

最後に、これら 2 つの K ラインの終値に基づいて、段階増加率を計算します。以下の各戦略には、このようなロジック ループと条件属性の特徴があります。このロジックを理解すれば、ビジュアル プログラミングがはるかに簡単になります。

大きなボリュームの上昇

大量上昇攻撃は、価格の上昇と取引量の急増として理解できます。たとえば、K ラインの終値が過去 10 本の K ラインの終値の 1.5 倍である場合、10 日間で 50% 増加し、取引量が過去 10 本の K ラインの平均の 5 倍を超えることを意味します。コードでは次のように記述できます。
img
図3-37

ギャップ

ギャップとは、2本のKラインの最高価格と最低価格がつながっていない状況です。2本のKラインで構成されています。ギャップは、将来のサポートとプレッシャーポイントの参照価格です。ギャップが発生すると、元のギャップの方向へのトレンドの加速が始まったと想定できます。これはコードで次のように記述できます。
img
図3-38

一般的なテクニカル指標

EMA移動平均

統計的な観点から見ると、移動平均は日々の価格の算術平均であり、傾向のある価格の軌跡です。移動平均システムは、ほとんどのアナリストが一般的に使用するテクニカルツールです。技術的な観点から見ると、テクニカルアナリストの心理的な価格や売買の意思決定要因に影響を与える要因であり、テクニカルアナリストにとって優れた参照ツールです。発明者の定量ツールは、次の図に示すように、さまざまな種類の移動平均をサポートしています。
img
図3-39

MACD指数について

MACD インジケーターは、高速 (短期) および低速 (長期) 移動平均とそれらの収束および分離の兆候を使用し、二重の平滑化操作を実行します。移動平均の原理に基づいて開発されたMACDは、頻繁に誤ったシグナルを発する移動平均の欠陥を排除し、移動平均の効果を保持しています。そのため、MACD指標は移動平均の傾向、安定性、安定性の特徴を備えています。株の売買のタイミングを判断し、株価の上昇と下落を予測するために使用されるテクニカル分析指標です。計算方法は以下の通りです。
img
図3-40

KDJインジケーター

KDJ 指標は、モメンタム概念、強さと弱さの指標、移動平均の利点を組み合わせ、株価が通常の価格範囲からどの程度変動しているかを測定するために使用されます。終値だけでなく、最近の最高値と最低値も考慮されるため、終値のみを考慮し、実際のボラティリティを無視するという弱点を回避できます。計算方法は以下の通りです。
img
図3-41

戦略ライティング

ウォーレン・バフェットの師であるベンジャミン・グレアムは、著書『賢明なる投資家』の中で、株式と債券の動的バランスの取引モデルについて言及したことがあります。

この取引モデルは非常にシンプルです。
資金の 50% を株式ファンドに投資し、残りの 50% を債券ファンドに投資します。つまり、株式と債券がそれぞれ半分ずつを占めていることになります。

一定の間隔で、または市場の変化に基づいて資産のバランスを調整し、株式資産と債券資産の比率を当初の 1:1 に戻します。これは、いつ売買するか、どれだけの量を売買するかなど、戦略の全体的なロジックです。とても簡単です!

この方法では、債券ファンドのボラティリティは実際には非常に小さく、株式のボラティリティよりもはるかに低いため、債券は「参照アンカー」として使用され、つまり債券を使用して株式が上昇しすぎているかどうかを測定します。まだ少なすぎます。

株価が上昇すると、株式の時価総額が債券の時価総額を上回ることになります。両者の時価総額比率が設定された閾値を超えると、総ポジションが再調整され、株式が売却され、株式と債券の時価比率を元の1:1に戻すために債券が購入されます。

逆に株価が下落すると、株式の時価総額は債券の時価総額を下回ります。両者の時価総額比率が設定された閾値を超えると、株式を買い増す方向にポジションが再調整されます。債券を売却して株式と債券の時価比率を元の1:1に戻します。

株と債券の比率を動的に均衡させることで 株の成長の恩恵を享受し,資産の変動率を減らすことができるのです. 価値投資の先駆者として,グレアムが私たちに素晴らしいアイデアを提供してくれたのです.

戦略ロジック

現在のBTCの価値に応じて、口座残高は現金5000円とBTC 0.1になります。つまり、現金とBTCの市場価値の初期比率は1:1です。

BTCの価格が6000円まで上昇した場合、つまりBTCの時価が口座残高より大きくなり、その差額が設定された閾値を超えた場合、(6000-5000)/6000/2コインが売却されます。これは、BTC の価値が上昇し、お金を交換できることを意味します。

BTCの価格が4000円まで下がった場合、つまりBTCの時価が口座残高を下回り、その差額が設定された閾値を超えた場合は、(5000-4000)/4000/2コインを購入します。これは、BTC の価値が下がったことを意味するので、BTC を買い戻します。

このように、BTC が値上がりしても値下がりしても、口座残高と BTC の市場価値は常に等しく保たれます。 BTC が下落した場合は、一部を購入し、再び上昇したら、残高と同じように一部を売却します。

購入条件現在のポジションの市場価値から現在の利用可能残高を差し引いた金額が、マイナスの現在の利用可能残高の 5% 未満の場合、買いポジションを開きます。
販売条件:現在のポジションの時価から現在の利用可能残高を引いた金額が現在の利用可能残高の5%を超える場合は、ポジションを決済して売却します。

前提条件

  • 現在の市場
  • 流動資産
  • コインの市場価値合計
  • 資産差

戦略構築

ビジュアルオーサリング戦略ステップ1

取引戦略の 4 つの前提条件を計算し、それぞれの変数に割り当てます。ビジュアルプログラミングでは、コードブロックは次のようになります。下記の通り
img
図3-42

なお、通貨の時価総額とは、現在保有しているコインの総数の合計時価総額のことであり、その計算方法は、現在保有しているコインの総数に現在の最新価格を掛け合わせたものである。資産差額は、通貨の合計市場価値から現在の利用可能残高を差し引いたものです。

ビジュアルオーサリング戦略ステップ2

前提条件と必要な条件を割り当てた後、トランザクション ロジックを記述する必要があります。これはあなたが思っているほど複雑ではありません。上記の戦略ロジックをコードブロックの形式で表現するだけです。

つまり、資産差額が利用可能残高のマイナスの 5% 未満の場合は買い、資産差額が利用可能残高の 5% を超える場合は売ります。以下のように表示されます。
img
図3-43

全体の戦略は書かれているように見えますが、プログラムは上から下まで実行され、実行後に停止することを知っておく必要があります。しかし、私たちの取引戦略は、取引条件を一度実行するのではなく、何度も繰り返し実行することです。

つまり、プログラムは戦略条件が満たされているかどうかを常にチェックする必要があります。満たされている場合は、買いまたは売りを実行し、満たされていない場合はチェックを続けます。このとき、次に示すように、別のループ ステートメントを使用する必要があります。
img
図3-44

戦略バックテスト

視覚化戦略と他のプログラミング言語で書かれた戦略の間に本質的な違いはありません。また、複数の期間と精度レベルでの履歴データテストもサポートしています。もちろん、国内外の商品先物やデジタル通貨のリアルタイム取引もサポートしています。以下は、この戦略のバックテスト情報です。
img
図3-45

この時点で、完全な取引戦略が完成します。私たちを利用しようとする人々に対処するために、この戦略は戦略広場で共有されており、直接コピーして研究することができます。

結論

10,000 時間のルールは常に存在しますが、基礎知識のないトレーダーにとって、業界に再参入するために 10,000 時間を費やすことは不可能です。したがって、ラダーが必要です。プログラミングの基礎知識がまったくないトレーダーにとって、Inventor Quant のビジュアル プログラミングは、素早いエントリーのためのラダーとなります。

ビジュアル プログラミングでは、構文やメソッド名を覚える必要はなく、関数モジュールを参照して必要なものを簡単に見つけることができます。これは、クオンツの発明者の本来の意図でもあり、より多くのクオンツ初心者が参入障壁を下げ、クオンツ取引への関心を高め、誰もがクオンツトレーダーになれるように支援することです。

しかし、そうは言っても、ビジュアルプログラミングは定量的な学習への足がかりとしてはまったく問題ありませんが、過度に複雑で洗練された取引戦略を開発できないなど、独自の制限もあります。しかし、これは定量取引の第一歩には影響しません。

次のセクションのプレビュー

定量取引の専門性の観点から見ると、マイ言語とビジュアル言語はどちらも定量取引の世界に入るための単なる移行言語です。言語特性によって定量的取引戦略の開発における限界が決まり、複雑な戦略は実装できない可能性が高くなります。そこで次のセクションでは、正式な高水準プログラミング言語であり、高度な定量取引に進むための唯一の方法である JavaScript について説明します。

宿題

  1. 視覚言語を使用してボリンジャー バンド インジケーターを実装してみます。
  2. このセクションの取引モジュールを使用して、取引戦略を完成させてください。

第4章 主流のプログラミング言語での取引戦略の実装

4.1 JavaScript言語の簡単な紹介

まとめ

将来の定量取引のスターとして、単純な言語を学ぶだけでは不可能です。発明者の定量的ツールのMai言語と視覚化言語は、開始するには役立ちますが、言語特性により、戦略開発には多くの制限があります。したがって、定量取引で足がかりを得たい場合は、正式なプログラミング言語を学ぶ必要があります。

JavaScriptを学ぶ理由

ビジュアル言語と比較すると、JavaScript はパフォーマンスと実行効率に優れています。また、戦略開発の点では、JavaScript はビジュアル言語よりもはるかに柔軟性があります。たとえば、アービトラージ戦略を開発したい場合、モジュールが限られており、アービトラージのような戦略をサポートしていないため、ビジュアル言語は使用できませんが、JavaScript では簡単にその作業を行うことができます。

さらに、JavaScript はビジュアル言語よりも簡潔でエレガントです。たとえば、ビジュアル言語では 10 行のコードが、JavaScript では 5 行で記述できます。ある意味では、ビジュアル言語は JavaScript のテキストバージョンにすぎず、コードの実行とロジックは JavaScript とほぼ同じです。ビジュアル言語を学べば、JavaScript の学習は非常に簡単になります。

JavaScript 入門

JavaScript は正式な高水準プログラミング言語です。プログラミング学習の入門言語として、また日常的な開発のための実用言語としても適しています。現在最も将来性があり有望なコンピュータ言語の一つであり、ブラウザ側では依然として揺るぎない優位な地位を占めています。ウェブページの開発で有名ですが、サーバー、PC、モバイルデバイスなど、ブラウザ以外の環境でも数多く利用されています。もちろん定量取引もできます!

完全な戦略

このセクションの重要な知識を素早く理解できるようにするために、発明者の量子化された JavaScript 言語の簡単な紹介を始める前に、まずこのセクションの概念を予備的に理解しておく必要があります。最も単純な二重移動平均戦略を例に挙げてみましょう。

ロングポジションオープン: 現在のポジションがなく、5 期間移動平均が 20 期間移動平均より大きい場合。
ショートポジションを開く: 現在のポジションがなく、5期間の移動平均が20期間の移動平均より小さい場合。
ロングポジションのクローズ:現在ロングポジションを保有しており、5期間移動平均が20期間移動平均を下回っている場合。
ショートポジションのクローズ: 現在ショートポジションを保有しており、5期間の移動平均が20期間の移動平均よりも大きい場合。

JavaScript で記述すると、次のようになります。
img
図4-1

上図のコードは、JavaScript で記述された完全な定量取引戦略です。リアルタイムで実行し、自動的に注文を行うことができます。コード量の点では、この言語はビジュアル言語よりもシンプルです。戦略全体の設計プロセスは、市場タイプの設定、K ライン データの取得、ポジション情報の取得、取引ロジックの計算、および売買注文の配置です。

アイデンティティ

JavaScript のすべて (変数、関数名、演算子) では大文字と小文字が区別されます。つまり、変数名 test と変数名 Test は 2 つの異なる変数です。識別子(変数、関数、プロパティ、関数パラメータの名前)の最初の文字は、文字、アンダースコア(_次の図に示すように、( )、ドル記号 ($)、およびそれに続く文字は数字としても使用できます。
img
図4-2

コメント

コメントには、単一行コメントとブロックレベルコメントが含まれます。 1行コメントは2つのスラッシュで始まり、ブロックコメントはスラッシュとアスタリスク(/)で終わり、アスタリスクとスラッシュ(/) を以下のように記述します。
img
図4-3

声明

各ステートメントはセミコロンで終わります。セミコロンは必須ではありませんが、省略しないことをお勧めします。次の図に示すように、セミコロンを追加すると、場合によってはコードのパフォーマンスが向上することがあります。
img
図4-4

変数について

変数にはあらゆる種類のデータを保存できます。変数を作成するには、var 演算子に続いて変数名を使用します。変数を定義するときに、その値を設定することもできます。変数が作成されると、次に示すように、var 演算子を使用して変数の値を再度設定する必要はありません。
img
図4-5

データ

JavaScript には、次の図に示すように、Undefined、Null、Boolean、Number、String の合計 5 つのデータ型があります。
img
図4-6

Undefined には、まだ設定されていない値を表す特別な「undefined」という値が 1 つだけあります。たとえば、変数を定義するだけで、その変数に値を設定しない場合、変数の値は「未定義」になります。

Null には、空に設定された値を表す特別な「null」という値が 1 つだけあります。たとえば、最初に変数を作成し、次に変数の値を「null」に設定すると、変数によって返される値も「null」になります。

ブール値には、「true」と「false」の 2 つの値があります。「true」は真を表し、「false」は偽を表します。 「true」と「false」は両方とも小文字であることに注意してください。

数値は、正の数、負の数、整数、小数などを含む数値の種類です。さらに、「NaN」は値が返されない状況を具体的に示す特殊な数値でもあります。たとえば、1 を 0 で割ると「NaN」が返されます。

文字列は中国語や英語を含むテキストとして理解でき、一重引用符または二重引用符を使用して文字列を構築できます。たとえば、「fmz」または「inventor quantization」などです。

オブジェクト

オブジェクトは、属性と値が互いに対応するさまざまなデータを格納するコンテナと考えることができます。まず、 new 演算子を使用してこのコンテナーを作成できます。次の図に示すように、作成したオブジェクトにプロパティとメソッドを追加することもできます。
img
図4-7

グループ

配列もさまざまなデータを格納するためのコンテナですが、コンテナ内の要素は左から右の順に並べられます。最初の要素は 0、2 番目の要素は 1 というように続きます。さらに、JavaScript 配列には、次に示すように任意のデータ型を格納できます。
img
図4-8

関数

JavaScript の関数は、中学校で習った関数と基本的に同じです。次の図に示すように、関数に渡されるものと、関数の計算によって出力されるものと考えることができます。
img
図4-9

オペレーター

JavaScript には、算術演算子、比較演算子、論理演算子など、さまざまな演算子があります。その中で、算術演算子は加算、減算、乗算、除算の数学演算です。比較演算子は、2 つの値がより小さいか小さいかを比較できます。主な論理演算子は、論理 AND、論理 OR、および論理 NOT です。次の図に示すように:
img
図4-10
「&&」は論理 AND であり、「および」を意味することに注意してください。 「||」は論理ORで、「または」を意味します。 「!」は論理否定で、「いいえ」を意味します。
「&&」は、すべての条件が「真」の場合、最終条件も「真」になることを意味します。
「||」は、すべての条件のうち、いずれか 1 つが「真」であれば、最終条件も「真」になることを意味します。

優先する

100があれば*式 (10-1)/(10+5) の場合、プログラムはどのステップを最初に計算しますか?中学校の数学では、①同じレベルの演算であれば、一般的には左から右へ計算すると教えられています。 ② 足し算と引き算、掛け算と割り算がある場合は、まず掛け算と割り算を計算し、その後に足し算と引き算を計算します。 ③括弧がある場合は括弧内の内容を先に計算します。 ④演算法則に準拠している場合は、演算法則を利用して計算を簡略化することができます。以下に示すように、JavaScript 言語の優先順位についても同様です。
img
図4-11

条件文

多くの場合、コードを書くときには、さまざまな決定に対してさまざまなアクションを実行する必要があります。このタスクを実行するには、コード内で条件文を使用できます。 JavaScript では、次の条件文を使用できます。
if文 - 指定された条件が真の場合にのみコードを実行するには、この文を使用します。
if...else ステートメント - 条件が true の場合はコードを実行し、条件が false の場合は他のコードを実行します。
if...else if....else ステートメント - このステートメントを使用して、実行する複数のコードブロックの 1 つを選択します。
switch文 - この文を使用して、実行する複数のコードブロックの1つを選択します。

If文

このステートメントは、指定された条件が真の場合にのみコードを実行します。小文字の場合は使用してください。大文字 (IF) を使用すると、JavaScript エラーが発生します。次の図に示すように:
img
図4-12#

if...else ステートメント

次の図に示すように、条件が true の場合はコードが実行され、条件が false の場合は他のコードが実行されます。
img
図4-13

forループ

場合によっては、過去数日間の K ライン データを取得する必要があり、K ライン データの位置に従って K ライン配列から順番に取得する必要があります。その場合、次の図に示すように、for ループを使用すると非常に便利です。
img
図4-14

whileループ

市場は常に変化していることは誰もが知っています。最新の K ライン配列を取得したい場合は、同じコードを何度も繰り返し実行する必要があります。その場合は、whilex ループを使用します。指定された条件が真である限り、ループは常に最新の K ライン配列を取得できます。
img
図4-15

break ステートメントと continue ステートメント

ループには前提条件があります。前提条件が「真」の場合にのみ、ループは繰り返し実行を開始し、前提条件が「偽」になるまでループは終了しません。ただし、break ステートメントはループの実行中にすぐにループから抜け出すことができ、continue ステートメントは特定のループを中断して次のループを続行することができます。次の図に示すように:
img
図4-16

戻り文

return ステートメントは関数の実行を終了し、関数の値を返します。 return ステートメントは関数本体にのみ使用できます。コード内の他の場所に出現すると、構文エラーが発生します。
img
図4-17

CTA戦略フレームワーク

Inventor Quantitative Tool では、JavaScript で戦略を記述するのが非常に便利です。次の図に示すように、公式には一連の標準戦略フレームワークが組み込まれています。
img
図4-18

上記のコードに示されているように、これは標準的な戦略フレームワークです。変更可能な「商品先物商品コード」を除いて、他のすべては固定形式です。フレームワークを使用して戦略を記述する最大の利点は、戦略ロジックのみを記述する必要があることです。市場の獲得、注文処理など、その他の問題はすべてフレームワークによって処理されます。これにより、戦略開発に集中できるようになります。

要約する

上記は JavaScript 言語の簡単な紹介です。これを学習すれば、定量的な取引戦略をプログラムできるようになります。より複雑な戦略を記述する必要がある場合は、Inventor Quantitative Tool の JavaScript 言語 API ドキュメントを参照してください。

次のセクションのプレビュー

デイトレードも取引モデルです。この方法ではポジションを一晩中保持しないため、市場の変動リスクは低くなります。不利な市場状況が発生した場合、時間内に調整を行うことができます。このセクションで JavaScript 言語を学習した後、次のセクションでは、実行可能な日中定量取引戦略の記述方法を説明します。

宿題

  1. Inventor Quantitative Tool で JavaScript 言語を使用して、K ラインの履歴データを取得してみます。
  2. このセクションの冒頭に戦略コードを書き留めて、コメントを追加してみてください。

4.2 JavaScript言語を使用して戦略取引を実装する方法

まとめ

前回の記事では、JavaScript 言語の紹介、基本構文、CTA 戦略フレームワークなどの側面から、取引戦略を実装するための前提条件について説明しました。この記事では、前回の記事の内容を引き続き、一般的に使用される戦略モジュールとテクニカル指標から、実行可能な日中定量取引戦略を段階的に実現できるようにお手伝いします。

戦略の紹介

ボリンジャー バンドはボリンジャー チャネルとも呼ばれ、英語では BOLL と略されます。これは最も一般的に使用されるテクニカル指標の 1 つであり、1980 年代にジョン・ボリンジャーによって発明されました。理論上、価格は常に一定の範囲内で変動します。この理論的根拠に基づいて、ボリンジャー バンドは「価格チャネル」の概念を導入しました。

計算方法は、統計原理を使用して、まず一定期間にわたる価格の「標準偏差」を計算し、次に移動平均から標準偏差の 2 倍を加算/減算して、価格の「信頼区間」を見つけます。基本的な形態は、3 つのトラック ライン (中間トラック、上部トラック、下部トラック) で構成されるストリップ チャネルです。中央のトラックは価格の平均コストを表し、上部と下部のトラックはそれぞれ価格の圧力ラインとサポートラインを表します。

標準偏差の概念を採用しているため、ボリンジャーバンドの幅は最近の価格変動に応じて動的に調整されます。ボラティリティが小さい場合、ボリンジャーバンドは狭くなり、ボラティリティが大きい場合、ボリンジャーバンドは広くなります。 BOLLチャネルが狭くなると、価格が徐々に平均値に戻りつつあることを意味します。 BOLL チャネルが狭いものから広いものに変わると、市場が変化し始めたことを意味します。価格が上のトラックを横切ると、買いの力が高まったことを示します。価格が下のトラックを横切ると、売りの力が高まったことを示します。

ボリンジャーバンド指標の計算方法

すべてのテクニカル指標の中で、ボリンジャーバンドの計算方法は最も複雑なものの 1 つであり、統計における標準偏差の概念を導入し、中間線 (MB)、上線 (UP)、下線 (DN) の計算を伴います。計算方法は以下の通りです。

ミドルトラック = N期間にわたる単純移動平均
上部トラック = 中間トラック + K × N期間の標準偏差
下部レール = 中間トラック − K × N期間の標準偏差
img
図4-19

戦略ロジック

ボリンジャーバンドの使い方は様々です。単独で使用することも、他のインジケーターと組み合わせて使用​​することもできます。 このチュートリアルでは、ボリンジャー バンドを使用する最も簡単な方法を使用します。つまり、価格が下から上へ上方向の軌道を突破すると、つまり上圧力線を突破すると、強気の力が強まり、上昇相場の波が形成され、買い開始シグナルが生成されます。価格が上から下へ下方向の軌道を下回ると、つまりサポートラインを下回ると、弱気の力が強まり、下降トレンドの波が形成され、売り開始シグナルが生成されます。
img
図4-20

買いポジションを開いた後、価格がボリンジャーバンドの中間軌道まで下落した場合、強気の力が弱まっているか、弱気の力が強まっていると考えられ、売り決済シグナルが生成されます。売りポジションを開いた後、価格がボリンジャーバンドの中間軌道まで上昇した場合、弱気の力が弱まっているか、強気の力が強まっていると考えられ、買い決済シグナルが生成されます。

取引条件

ロングポジションオープン: ポジションがなく、終値が上値より高く、時間が14:45でない場合
ショートポジションを開く: ポジションがなく、終値が下限値より低く、時刻が14:45でない場合
ロングポジションのクローズ:ロング注文を保有し、終値が中間トラックより低い場合、または時間が14:45の場合
ショートポジションのクローズ:ショート注文を保有し、終値が中間トラックよりも高い場合、または時間が14:45の場合

戦略コードの実装

戦略を実行するには、まずどのようなデータが必要かを検討する必要があります。どの API を通じて取得しますか?では、トランザクションロジックをどのように計算するのでしょうか?最後に、注文や取引にはどのような方法が使用されますか?次に、ステップごとに実装してみましょう。

ステップ1: CTA戦略フレームワークを使用する

いわゆる CTA 戦略フレームワークは、Inventor Quantitative によって正式にリリースされた標準フレームワークです。このフレームワークを使用すると、定量的な取引戦略の開発に関する些細な問題を心配する必要がなく、取引ロジックのプログラミングに直接集中できます。例えば、このフレームワークを使用しない場合、注文を出す際に、月ごとの振替、注文の売買価格、注文のキャンセルや注文が成立しなかったときのフォローアップなどを考慮する必要があります。
img
図4-21

上の図は、発明者の定量的ツールを使用した CTA 戦略フレームワークです。これは固定コード形式であり、すべてのトランザクションロジックコードは 3 行目から記述されます。使用中は品種コード(淡黄色)以外は変更の必要はありません。

なお、上図の商品コードは「rb000/rb888」となっており、シグナルデータは「rb000」、取引データは「rb888」を使用し、月シフトは自動で行われることを意味しています。もちろん、製品コード「rb1910」などの特定の製品コードを指定することもできます。これは、シグナル データとトランザクション データの両方で「rb1910」が使用されることを意味します。

FMZ には JavaScript 商品先物取引ライブラリが組み込まれています。戦略編集インターフェースの参照をクリックするだけで、コード内で使用できます。
img

ステップ2: さまざまなデータを取得する

よく考えてください。どのようなデータが必要ですか?私たちの戦略取引ロジックから、まず現在のポジションの状態を取得し、次に終値とボリンジャーバンドインジケーターの上限、中位、下限のトラックとの関係を比較し、最後に市場が閉じようとしているかどうかを判断する必要があることがわかりました。それではこのデータを取得しましょう。

K線データを取得する

最初のステップは、K ライン配列と前の K ラインの終値を取得することです。これは、K ライン配列がないとボリンジャー バンド インジケーターを計算できないためです。コードで表すと次のようになります:
img
図4-22

上の図に示すように:
4 行目: 固定形式の K 行配列を取得します。
5 行目: ボリンジャー バンド インジケーターの計算に使用するパラメーターが 20 であるため、K ラインの長さをフィルターします。K ラインが 20 未満の場合、ボリンジャー バンド インジケーターを計算できません。したがって、ここで K ラインの長さをフィルタリングする必要があります。K ラインが 20 未満の場合、直接戻って次の K ラインを待ち続けます。
6 行目: 取得した K ライン配列から、まず前の K ラインのオブジェクトを取得し、次にオブジェクトから終値を取得します。配列の最後から2番目の要素を取得します。これは配列の長さから2を引いた値です(r[K ライン配列の要素はすべてオブジェクトであり、始値、最高値、最低値、終値、取引量、および時間が含まれています。終値を取得するには、末尾に「.」と属性名を追加します (r[r.length - 2].Close)。

Kライン時間データを取得する

私たちは日中戦略を使用しているため、市場が閉まる前にポジションをクローズする必要があります。そのため、現在の K ラインが市場終値に近いかどうかを判断する必要があります。近い場合は、ポジションをクローズします。そうでない場合は、ポジションを開くことができます。コードは次のとおりです。
img
図4-23

上の図に示すように:
8 行目: 現在の K 行のタイムスタンプ属性を取得し、時間オブジェクト (new Date(timestamp)) を作成します。
9 行目: 時間オブジェクトに基づいて時間と分を計算し、K 行の時刻が 14:45 かどうかを判断します。

位置データを取得する

定量的な取引戦略において、ポジション情報は非常に重要な条件です。取引条件が満たされた場合、ポジションの状況やポジション数に基づいて注文を出すかどうかを決定することも必要です。たとえば、買いポジションを開く条件が満たされた場合、ポジションを持っている場合は再度注文する必要はありません。ポジションを持っていない場合は注文することができます。コードで表すと次のようになります:
img
図4-24
上の図に示すように:
11行目: 現在の位置ステータスを取得します。複数の注文がある場合、値は 1 になります。ショート注文がある場合、値は -1 になります。ポジションがない場合、値は 0 になります。

ボリンジャーバンドデータを取得する

次に、ボリンジャーバンドインジケーターの上部、中間、下部のトラックの値を計算する必要があります。次に、まずボリンジャーバンド配列を取得し、次に配列から上部、中間、下部のバンドの値を取得する必要があります。 Inventor Quantitative Tool では、ボリンジャーバンド配列を取得するのは非常に簡単です。ボリンジャーバンド API を直接呼び出すことができます。難しいのは、ボリンジャーバンド配列が 2 次元配列であるため、上部、中部、下部のトラックの値を取得することです。

2 次元配列は、実は非常に理解しやすいものです。配列内の配列です。したがって、取得の順序は次のようになります。まず、配列内の指定された配列を取得し、次に、指定された配列から指定された要素を取得します (次の図を参照)。
img
図4-25

下の図に示すように、13行目から19行目では、ボリンジャーバンドの上部、中部、下部のレールの値を取得するコードを使用しています。このうち、13行目は発明者の定量ツールのAPIを直接使用してボリンジャーバンド配列を直接取得します。14行目から16行目は、まず2次元配列内の上レール配列、中レール配列、下レール配列をそれぞれ取得します。17行目から19行目は、上レール配列、中レール配列、下レール配列からそれぞれ前回のKラインのボリンジャーバンド上レール、中レール、下レール値を取得します。
img
図4-26

ステップ3: 注文する

上記のデータを使用して、取引ロジックと注文を出すためのコードを記述できます。フォーマットも非常にシンプルです。最もよく使用されるのは「if ステートメント」で、言葉で説明すると、「条件 1 と条件 2 が満たされている場合は注文を行う。条件 3 または条件 4 が満たされている場合は注文を行う」となります。次の図に示すように:
img
図4-27

上の図では、21 行目から 24 行目が取引ロジックと注文配置コードです。上から下へ、ロングクローズ、ショートクローズ、ロングオープン、ショートオープンです。

ロングポジションを開く(23行目)を例にとると、これは「if文」です。この文で1行のコードしか実行されない場合は、中括弧「{}」を省略できます。このステートメントは、テキストに翻訳すると次のようになります: 現在のポジションが 0 で、終値が上位トラックよりも大きく、K ラインの時間が 14:45 でない場合は、「1 を返す」

注意深い人は、これらの行に「return 1」と「return -1」があることに気付くかもしれません。これは固定形式で、つまり、買いの場合は「return 1」と書き、売りの場合は「return -1」と書きます。ロングポジションのオープンとショートポジションのクローズはどちらも買いなので、「戻り値 1」と記述します。ショートポジションのオープンとロングポジションのクローズはどちらも売りなので、「戻り値 -1」と記述します。

完全な戦略コード

この時点で、完全な戦略コードが記述されています。取引フレームワーク、取引データ、取引ロジック、注文の配置などを個別に記述すると、非常に簡単になります。以下は、この戦略のコード全体です。
img
図4-28

注意すべき点が 2 つあります。ルート K ライン条件が満たされたときに次の K ライン注文が出されるか、前の K ライン条件が満たされたときにルート K ライン注文が出されるような戦略ロジックを記述するようにしてください (ただし、必ずしもそうする必要はありません)。このようにすると、バックテストの結果は実際の結果とあまり変わりません。必ずしもこのように書く必要はありませんが、戦略ロジックが正しいかどうかには注意する必要があります。一般的に言えば、ポジションをクローズするロジックは、ポジションを開くロジックの前に記述する必要があります。これを行う目的は、戦略ロジックを可能な限り期待と一致させることです。たとえば、戦略ロジックが逆ポジションに追いついた場合、逆ポジションのルールは、まずポジションをクローズしてから新しいポジションを開くことです。最初に新しいポジションを開いてからそれを閉じるのではなく。オープニングロジックの直前にクロージングロジックを記述すると、この問題は発生しません。

要約する

上記では、戦略の紹介、ボリンジャーバンド指標の計算方法、戦略ロジック、売買条件、戦略コードの実装など、完全な日中定量取引戦略を開発するための各ステップを学びました。この戦略ケースを通じて、発明者の定量ツールのプログラミング方法に精通できるだけでなく、このテンプレートに基づいてさまざまな戦略に適応することもできます。

定量的な取引戦略は、主観的な取引経験やシステムの要約にすぎません。戦略を書く前に、主観的な取引で使用した経験やシステムを書き留めておき、それを1つずつコードに変換すれば、戦略を書くのがはるかに簡単になります。ぜひお試しください!

次のセクションのプレビュー

定量的取引戦略の開発において、プログラミング言語を 1 つしか選択できない場合は、迷わず Python を選択する必要があります。データの取得から戦略のバックテスト、取引まで、Python はビジネス チェーン全体をカバーしています。金融定量投資の分野で重要な位置を占めています。次のコースでは、Python 言語の基礎知識を学習します。

宿題

  1. このセクションの知識を活用して、二重移動平均戦略を実装してみてください。
  2. Inventor Quantitative Tool で JavaScript 言語を使用して KDJ インジケーター アルゴリズムを実装してみます。

4.3 Python言語の簡単な紹介

まとめ

定量的取引戦略の開発において、プログラミング言語を 1 つしか選択できない場合は、迷わず Python を選択する必要があります。データの取得から戦略のバックテスト、取引まで、Python はビジネス チェーン全体をカバーしています。金融定量投資の分野で重要な位置を占めています。このコースでは、Python 言語の基礎知識を学習します。

なぜこれほど多くのプログラミング言語を学ぶのでしょうか?

これまでのコースを振り返ると、このセクションで学習するPython言語を含め、合計でMai言語、ビジュアル言語、JavaScript言語を学習しました。疑問に思う友人もいるかもしれません。私は定量取引を学ぶためにここに来たのに、なぜこんなに多くのプログラミング言語を学ばなければならないのですか?

実際、各プログラミング言語には独自の言語特性があり、良い言語と悪い言語の区別はありません。それは、あなたの戦略がどのプログラミング言語に適しているか、そしてそのプログラミング言語があなたに合っているかどうかによって決まります。だから、自分でやってみなければ分からない、という格言があります。これが、私たちがプログラミング言語について話すことに多くのスペースを割いている理由です。仕事をうまくやり遂げたいなら、まずツールを磨かなければなりません。

同時に、私たちは定量的研究への扉をすべての人に開き、さまざまなプログラミング言語の知識を普及させることにも取り組んでいます。定量的研究は私たちが想像するほど神秘的で手の届かないものではありません。定量的研究は将来的に普及し、一般の人々にもアクセスできるようになると信じています。

定量取引にPythonを選ぶ理由

定量取引のプロセスは、データの取得、データの分析と計算、データの処理などに他なりません。データ分析の面では、Python ほど計算が得意でパフォーマンスを維持できる言語は他にありません。特に時系列解析データ(K-line は時系列データ)の処理においては、Python の方がシンプルで便利という利点があります。さらに、他のプログラミング言語と比較して、Python は簡潔で学習しやすいです。優れた Python プログラムを読むと、英語を読んでいるような感覚になります。

Pythonを選ぶ5つの理由

1. 定量的な応用範囲が広い:

米国のQuantopianと中国のInventor QuantはどちらもPython言語を使用できます。

2. 簡単に学べる:

Python の設計哲学はユーザー中心であり、デバッグが容易なインタープリタ型言語です。

3. 無料でオープンソース:

使用コストなし、オープンソースコードの共有、学習と使用の効率性の向上。

4. 豊富なライブラリ:

データ処理、データコンピューティング、視覚化、統計分析、テクニカル分析、機械学習...

5. アプリケーションインターフェース:

主要プラットフォームからのリアルタイムの市場情報に基づいて注文を取得、保存、呼び出し、および発注するためのインターフェース。

完全な戦略

このセクションの重要な知識を素早く理解できるようにするために、発明者の量子化された JavaScript 言語の簡単な紹介を始める前に、まずこのセクションの概念を予備的に理解しておく必要があります。最も単純な二重移動平均戦略を例に挙げてみましょう。

ロングポジションオープン: 現在のポジションがなく、5 期間移動平均が 20 期間移動平均より大きい場合。
ショートポジションを開く: 現在のポジションがなく、5期間の移動平均が20期間の移動平均より小さい場合。
ロングポジションのクローズ:現在ロングポジションを保有しており、5期間移動平均が20期間移動平均を下回っている場合。
ショートポジションのクローズ: 現在ショートポジションを保有しており、5期間の移動平均が20期間の移動平均よりも大きい場合。

Python で記述すると、次のようになります。
img
図4-29

上図のコードは、Python で記述された完全な定量取引戦略です。リアルタイムで実行し、自動的に注文を行うことができます。コードの量で言えば、CTA トレーディング フレームワークを使用していないため、Python は JavaScript より多くなります。

ただし、市場タイプの設定、K ライン データの取得、ポジション情報の取得、取引ロジックの計算、売買注文の配置など、戦略全体の設計プロセスはほぼ同じです。つまり、プログラミングの構文は違っても、書かれている戦略ロジックは同じなので、次はPythonの基本構文を学んでいきましょう!

バージョンの選択

Python には、Python2 と Python3 という 2 つのバージョンがあります。かつて、Python は二連銃のようなものだというジョークがありましたが、一度に弾丸を発射できる銃身は 1 つしかなく、どちらがより正確であるかはわかりません。したがって、Python を初めて使用する場合は、Python 3 を直接学習することをお勧めします。これは、Python 3 が最新であり、Python コミュニティによってメンテナンスされているためです。私たちのコースも Python 3 で教えられます。

アイデンティティ

識別子は変数の名前です。例: test、Test、test10、デモ等Python のすべて (変数、関数名、演算子) は大文字と小文字が区別されます。つまり、変数名 test と変数名 Test は 2 つの異なる変数です。識別子(変数、関数、プロパティ、関数パラメータの名前)の最初の文字は、文字、アンダースコア() の場合、次の図に示すように、それに続く文字は数字になることもあります。
img
図4-30

コメント

コメントは、コード行の翻訳または説明です。ルールは非常に単純で、単一行コメントとブロックレベルコメントが含まれます。単一行コメントはポンド記号 (#) で始まり、ブロックコメントは 3 つの単一引用符 (''') または 3 つの二重引用符 (""") で始まり、3 つの単一引用符 (''') または 3 つの二重引用符 (""") で終わります (次の図を参照)。
img
図4-31

行とインデント

Python の最も特徴的な機能は、中括弧 {} を必要とせずに、インデントを使用してコード ブロックを示すことです。 インデント用のスペースの数は可変ですが、同じコード ブロック内のステートメントには同じ数のインデント用のスペースが含まれている必要があります。以下のように: この場合、プログラムはエラーを報告します。 if 条件が true であっても、コードが実行される前に Python がコード構文が正しいかどうかを自動的に検出するため、「True」は出力されません。コード形式が正しくない場合、プログラムは実行されません。その理由は、コードの 5 行目に統一されたコード インデント形式がないためです。 4 スペースのインデントは Python の固定形式であり、誰もがそれに精通している必要があります。
img
図4-32

変数について

変数には、あらゆるタイプのデータを保存できます。変数の名前を記述するだけで変数が作成されます。ただし、変数を作成するときは、同時に変数の値を設定する必要があります。そうしないと、プログラムはエラーを報告します。等号 (=) 演算子の左側は変数名であり、等号 (=) 演算子の右側は変数に格納される値です。下の図に示すように、name2 は変数名であり、「発明者定量化」は変数の値です。 name2 に新しい値を設定しない場合、name2 の値は常に「発明者定量化」になります。
img
図4-33

データ

Python には 6 つのデータ型があり、そのうち 3 つは不変で、残りの 3 つは可変です。名前が示すように、不変データは作成されると値を変更できず、メモリ内のアドレスは一意になります。一方、可変データはメモリ内のアドレスへの参照であり、値が変更されてもメモリ アドレスは変更されません。
不変データ(3):数値、文字列、タプル
変更可能なデータ(3):リスト、辞書、セット。
img
図4-34

数字について

Python の数値型は、int (整数)、float (浮動小数点)、bool (ブール値)、complex (複素数) をサポートします。組み込みの type() 関数を使用すると、変数が参照するオブジェクトの型を照会できます。以下のように表示されます。
img
図4-35

オペレーター

ほとんどの言語と同様に、Python での数学は簡単です。算術演算子、比較演算子、論理演算子など、すべて学校で習ったものと同じです。その中で、算術演算子は加算、減算、乗算、除算の数学演算です。比較演算子は、2 つの値がより小さいか小さいかを比較できます。主な論理演算子は、論理 AND、論理 OR、および論理 NOT です。 [取引戦略でよく使用される文字列について簡単に説明していただけますか?] たとえば、当社の取引戦略で最もよく使用される文字列は、「rb1910」、「MA1910」などの製品コードです。
img
図4-36

「and」は論理積であり、「かつ」を意味することに注意してください。 「または」は論理 OR であり、「いずれか」を意味します。 「!」は論理否定で、「いいえ」を意味します。
「and」は、すべての条件が「真」の場合、最終条件も「真」になることを意味します。
「または」は、すべての条件のうち、いずれか 1 つが「真」であれば、最終条件も「真」になることを意味します。

優先する

100があれば*式 (10-1)/(10+5) の場合、プログラムはどのステップを最初に計算しますか?中学校の数学では、①同じレベルの演算であれば、一般的には左から右へ計算すると教えられています。 ② 足し算と引き算、掛け算と割り算がある場合は、まず掛け算と割り算を計算し、その後に足し算と引き算を計算します。 ③括弧がある場合は括弧内の内容を先に計算します。 ④演算法則に準拠している場合は、演算法則を利用して計算を簡略化することができます。 Mai 言語の優先順位は、以下のとおりです。
img
図4-37

ブール

ブール値は真偽を表し、通常は条件判断やループ文で使用されます。 Python では、真と偽を表す 2 つの定数「True」と「False」が定義されています。 実際、次の図に示すように、任意のオブジェクトをブール型に変換し、条件判断に直接使用することもできます。
img
図4-38

文字列

文字列はテキストです。「if1905」などの文字列は、商品コードを設定するときによく使用されます。 Python の文字列は、一重引用符 ' または二重引用符 " で囲まれます。プラス記号 + は文字列連結演算子です。次に示すように、インデックス値に基づいて文字列内の文字を取得できます。
img
図4-39

リスト

リストは、Python で最も頻繁に使用されるデータ型です。リストはコンテナと考えることができますが、コンテナ内の要素は左から右の順に並べられます。最初の要素は 0、2 番目の要素は 1 というように続きます。さらに、Python リストには、次に示すように任意のデータ型を保存できます。
img
図4-40

関数

Python の関数は、中学校で習った関数と基本的に同じです。次の図に示すように、関数に渡されるものと、関数の計算によって出力されるものと考えることができます。
img
図4-41

if 文について

私たちの生活の中では、「もし今日雨が降ったら、傘をさします」というような表現がよく出てきます。つまり、ステートメントは指定された条件が True の場合にのみコードを実行します。注意: コードのインデント形式に注意してください。そうしないと、Python エラーが生成されます。次の図に示すように:
img
図4-42

if...else ステートメント

If...else ステートメントもよく使用されるステートメントです。たとえば、「今日雨が降ったら傘を差します。そうでなければ傘を差しません。」 else ステートメントは if ステートメントの拡張であり、つまり、指定された条件が False の場合にのみ else に続くコードが実行されます。次の図に示すように:
img
図4-43

elif ステートメント

Python は switch ステートメントをサポートしていないため、複数の条件判断を実装するには elif ステートメントのみを使用できます。たとえば、プラスのラインであれば強気になり、マイナスのラインであれば弱気になり、そうでなければ様子を見ます。次の図に示すように:
img
図4-44

forループ

場合によっては、過去数日間の K ライン データを取得する必要があり、K ライン データの位置に従って K ライン配列から順番に取得する必要があります。その場合、次の図に示すように、for ループを使用すると非常に便利です。
img
図4-45

whileループ

市場は常に変化していることは誰もが知っています。最新の K ライン配列を取得したい場合は、同じコードを何度も繰り返し実行する必要があります。その場合は、whilex ループを使用します。指定された条件が真である限り、ループは常に最新の K ライン配列を取得できます。
img
図4-46

break ステートメントと continue ステートメント

ループには前提条件があります。前提条件が「真」の場合にのみ、ループは繰り返し実行を開始し、前提条件が「偽」になるまでループは終了しません。ただし、break ステートメントはループの実行中にすぐにループから抜け出すことができ、continue ステートメントは特定のループを中断して次のループを続行することができます。次の図に示すように:
img
図4-47

戻り文

return ステートメントは関数の実行を終了し、関数の値を返します。 return ステートメントは関数本体にのみ使用できます。コード内の他の場所に出現すると、構文エラーが発生します。
img
図4-48

戦略フレームワーク

戦略アーキテクチャは、戦略の固定形式として理解できます。発明者の定量ツールは、ポーリング モードを採用しています。以下は、古典的な商品先物戦略アーキテクチャです。

4行目から7行目はプログラム全体のメインエントリ関数です。つまり、コンピュータは4行目からコードの実行を開始します。次に、直接5行目を実行し、無限ループに入ります。次に、無限ループ内で戦略ロジック関数(onTick)とスリープ関数(Sleep)が実行されます。onTick関数は1行目のコードであり、2行目に戦略ロジックを記述できます。ループ内ではプログラムの実行速度が非常に速いことがわかっているので、スリープ関数(Sleep)を使用すると、プログラムをしばらく一時停止できます。次のコードSleep(500)は、ループが完了するたびに500ミリ秒間スリープすることを意味します。
img
図4-49

要約する

上記は Python 言語の簡単な紹介です。これは単なる基本的な知識ですが、これを使用して簡単な定量取引戦略を記述することは問題ありません。より複雑な戦略を記述する必要がある場合は、Inventor Quantitative Tool の Python 言語 API ドキュメントを参照してください。

次のセクションのプレビュー

テクニカル分析の分野におけるトレンド戦略の中で、移動平均とチャネルブレイクスルーは間違いなく2大流派です。目標は価格変動のトレンドを捉えることですが、これら 2 つの戦略の取引哲学とリスク特性はまったく異なります。このセクションで Python 言語の概要を学習した後、次のセクションでは、チャネル突破のための定量的取引戦略の記述方法を説明します。

宿題

  1. Inventor Quantitative Tool で Python 言語を使用して、K ラインの履歴データを取得してみます。
  2. このセクションの冒頭に戦略コードを書き留めて、コメントを追加してみてください。

4.4 Python言語を使用して戦略取引を実装する方法

まとめ

前回の記事では、Python言語の概要、基本構文、戦略フレームワークなどを学びました。内容は退屈ですが、トレーディング戦略を実行するために不可欠なスキルなので、必ず学ばなければなりません。この記事では、鉄は熱いうちに打つ、という姿勢で前回の記事の基本的な Python の知識を引き継ぎます。シンプルな戦略から始めて、使いながら学び、誰もが段階的に実行可能な定量的取引戦略を実現できるように支援します。

戦略の紹介

多くの取引戦略の中で、ドンチャンチャネル戦略は最も古典的な画期的な戦略の1つであるはずです。1970年代にはすでによく知られていました。当時、外国の会社が主流のプログラム取引戦略のシミュレーションテストと研究を実施しました。その結果は、すべての戦略テストの中で、ドンチャン チャネル戦略が最も成功したことがわかりました。

その後、トレード史上最も有名な「タートル」トレーダーのトレーニングが米国で行われ、大きな成功を収めました。当時、「タートルズ」の取引方法は秘密にされていたが、10年以上経って「タートルズ取引ルール」が公開されると、「タートルズ」がドンチャンチャネルの改良版を使用していたことが判明した。戦略。

ブレークスルー取引戦略は、比較的滑らかなトレンドを持つ商品の取引に適しています。最も一般的なブレークスルー取引方法は、価格とサポートおよびレジスタンスの相対的な位置関係を使用して、特定の取引の売買ポイントを決定することです。このセクションのドンチャン チャネル戦略はこの原則に基づいています。

ドンチャンチャネル戦略のルール

ドンチャン チャネルはトレンド インジケーターであり、その外観とシグナルはボリンジャー バンド インジケーターに多少似ています。しかし、ドンチャンの価格チャネルは、一定期間内の最高価格と最低価格に基づいて構築されます。たとえば、最新の 50 本の K ラインの最高価格の最大値を計算して上部のトラックを形成し、最新の 50 本の K ラインの最低価格の最小値を計算して下部のトラックを形成します。
このインジケーターは、異なる色の 3 つの曲線で構成されています。デフォルトでは、20 期間内の最高価格と最低価格が表示され、市場価格の変動性を示します。チャネルが狭い場合、市場の変動性が小さいことを意味します。逆に、チャネルが広い場合、市場の変動性が比較的大きいことを意味します。

価格が上限の線を上回った場合は買いシグナル、逆に価格が下限の線を下回った場合は売りシグナルとなります。上限と下限のトラックは最高値と最低値を使用して計算されるため、通常の状況では、価格が同時に上限チャネルラインと下限チャネルラインを下回って上昇したり下落したりすることはほとんどありません。ほとんどの場合、価格は上側または下側の軌道に沿って、または上側と下側の軌道間で一方的に動きます。

ドンチャンチャネル計算法

Inventor Quantitative Tool では、ドンチャン チャネルの計算方法は非常に簡単で、次の図に示すように、指定期間内の最高価格または最低価格を直接取得できます。5 行目は 50 期間の最高価格の最大値を取得し、6 行目は 50 期間の最低価格の最小値を取得します。
img
図4-50

戦略ロジック

ドンチャン チャネルを使用する方法は多数あります。単独で使用することも、他のインジケーターと組み合わせて使用​​することもできます。このコースでは最も簡単な方法を使用します。つまり、価格が下から上へ上向きの軌道を突破すると、つまり上圧力線を突破すると、強気の力が強まり、上昇相場の波が形成され、買い開始のシグナルが現れると考えられます。が生成されます。価格が上から下に下落し、下側のトラックを突破した場合、つまりサポートラインを下回った場合、ショートサイドが強くなり、下降トレンドが形成され、売り開始となると考えられます。信号が生成されます。
img
図4-51

ロングポジションが開かれた後、価格がドンチャンチャネルの中間軌道まで下落した場合、強気派が弱まっているか弱気派が強まっていると判断され、売りシグナルが生成されます。価格が中間軌道まで下落した場合、ショートポジションが開かれた後にドンチャンチャネルの軌道を外れた場合、強気派が弱まっているか弱気派が強まっているとみなされ、売りシグナルが生成されます。ドンチャンチャネルの中間軌道に戻った場合、弱気派の力が弱まっているか、強気派の力が強まっており、買い終値シグナルが生成されます。

取引条件
ロングポジションオープン: ポジションがなく、終値が上限トラックよりも大きい場合
ショートポジションを開く: ポジションがなく、終値が下限値より低い場合
ロングポジションのクローズ:ロングオーダーを保有し、終値が中間トラックより低い場合
ショートポジションのクローズ:ショート注文を保有し、終値が中間トラックよりも高い場合

戦略コードの実装

戦略を実行するための最初のステップはデータを取得することです。なぜなら、データは取引戦略の前提条件だからです。どのようなデータが必要か想像してみてください。このデータはどのように入手するのでしょうか?次に、これらのデータに基づいて取引ロジックを設計し、最後に取引ロジックに従って売買注文を出します。具体的な手順は次のとおりです。

ステップ1: トレーディングライブラリを使用する

トレーディング ライブラリは機能モジュールとして考えることができます。トレーディング ライブラリを使用する利点は、戦略ロジックの作成に集中できることです。たとえば、トレーディングライブラリを使用する場合、ポジションを開いたり閉じたりするときに、トレーディングライブラリ内の注文 API を直接使用できます。しかし、トレーディングライブラリを使用しない場合、ポジションを開いたり閉じたりするときに、市場価格を取得したり、注文を出したのに実行されない問題を考慮したり、注文をキャンセルする問題を考慮したりする必要があります。
img
図4-52

上の図は、発明者の定量的ツールを使用した CTA 戦略フレームワークです。これは固定コード形式であり、すべてのトランザクションロジックコードは 4 行目から記述されます。その他の部分での変更は必要ありません。

JavaScript のテンプレート ライブラリは組み込まれていますが、Python ではこのテンプレートをコピーして保存する必要があります: https://www.fmz.com/strategy/24288。次に、ポリシー編集ページで「参照」をクリックします。 もちろん、テンプレートライブラリを使用せずに戦略を完了することもできます。

img

ステップ2: さまざまなデータを取得する

よく考えてください。どのようなデータが必要ですか?私たちの戦略取引ロジックから、まず現在のポジションの状態を取得し、次に終値とボリンジャーバンドインジケーターの上限、中位、下限のトラックとの関係を比較し、最後に市場が閉じようとしているかどうかを判断する必要があることがわかりました。それではこのデータを取得しましょう。

K線データを取得する

最初のステップは、K ライン配列と現在の K ライン終値を取得することです。K ライン配列を使用してのみ、API を呼び出して N 期間の最高価格または最低価格を取得できます。コードで表すと次のようになります:
img
図4-53
上の図に示すように:
4 行目: 固定形式の K 行配列を取得します。
5 行目: K ラインの長さをフィルタリングします。N 期間の最高価格または最低価格を計算するため、使用するパラメータは 50 です。K ラインの数が 50 未満の場合、計算できません。したがって、ここで K ラインの長さをフィルタリングする必要があります。K ラインが 50 未満の場合、このループをスキップして、次の K ラインを待機し続けます。
6行目: コード「records」を使用します[「len(records) - 1]」は、まずKライン配列の最後のデータ、つまり最新のKラインデータを取得します。このデータはオブジェクトであり、始値、最高値、最低値、終値、取引量、時間などのデータが含まれています。オブジェクトであるため、「.Close」を直接使用して最新のKライン終値を取得できます。

位置データを取得する

定量的な取引戦略において、ポジション情報は非常に重要な条件です。取引条件が満たされた場合、ポジションの状況やポジション数に基づいて注文を出すかどうかを決定することも必要です。たとえば、買いポジションを開く条件が満たされた場合、ポジションを持っている場合は再度注文する必要はありません。ポジションを持っていない場合は注文することができます。今回は位置情報を関数に直接カプセル化し、この関数を呼び出すだけで使用できるようになります。
img
図4-54

上の図に示すように:
ポジション情報を取得する関数です。ショートポジションの場合は0を返し、ロングポジションの場合は1を返し、ショートポジションの場合は-1を返します。上記のコードに注目してください:
2 行目: パラメータを持たない mp という名前の関数を作成します。
3 行目: 固定形式の位置配列を取得します。
4行目: 位置配列の長さを決定します。長さが に等しい場合は、空の位置であるはずなので、0を返します。
6 行目: for ループを使用して配列の走査を開始します。次のロジックは非常に単純です。ロング ポジションを保持している場合は 1 を返し、ショート ポジションを保持している場合は -1 を返します。
18 行目: 位置情報を取得するために、先ほど記述した関数 mp を呼び出します。

過去5万本のラインの最高価格と最低価格を取得します

Inventor Quantitative Tool では、論理計算を自分で記述しなくても、「TA.Highest」および「TA.Lowest」関数を使用して直接取得できます。また、「TA.Highest」関数と「TA.Lowest」関数によって返される結果は、配列ではなく特定の値です。これは非常に便利です。それだけでなく、公式には何百ものインジケーター機能が組み込まれています。
img
図4-55

上の図に示すように:
19行目: 「TA.Highest」関数を呼び出して、50期間の最高価格の最大値を取得します。
20行目: 「TA.Lowest」関数を呼び出して、50期間の最低価格の最小値を取得します。
21行目: 50期間の最高価格の最大値と50期間の最低価格の最小値に基づいて平均値を計算します。

ステップ3: 注文する

上記のデータを使用して、取引ロジックと注文を出すためのコードを記述できます。フォーマットも非常にシンプルです。最もよく使用されるのは「if ステートメント」で、言葉で説明すると、「条件 1 と条件 2 が満たされている場合は注文を行う。条件 3 または条件 4 が満たされている場合は注文を行う」となります。
img
図4-56

上の図に示すように:
22行目: 固定形式のトランザクションライブラリを使用する
23 行目と 24 行目: これは、前に学習した「比較演算子」と「論理演算子」を使用した、ロング ポジションをクローズするためのステートメントです。つまり、現在ロング ポジションを保有しており、終値が中間トラックよりも低い場合は、すべてのポジションがクローズされます。
25 行目と 26 行目: これはショート注文をクローズするためのステートメントで、前に学習した「比較演算子」と「論理演算子」を使用します。つまり、現在ショート注文を保持しており、終値が中間トラックよりも高い場合、すべてのポジションがクローズされます。
27 行目: 現在のポジションの状態を判断します。ポジションがショートの場合は、次の手順に進みます。
28 行目と 29 行目: 終値が上限トラックよりも高いかどうかを判断します。終値が上限トラックを上回った場合は、買いでポジションを開きます。
行 30 および 31: 終値が下限値より低いかどうかを判断します。終値が下限値より低い場合は、売却してポジションを開きます。

要約する

上記では、戦略の紹介、ドンチャン チャネルの計算方法、戦略ロジック、売買条件、戦略コードの実装など、Python を使用して完全な定量取引戦略を開発するための各ステップを学習しました。このセクションは、出発点として、単純な戦略にすぎません。方法は 1 つではありません。独自の取引システムに従ってさまざまな取引方法を重ね合わせて、独自の定量取引戦略を形成することができます。

次のセクションのプレビュー

定量取引戦略の開発において、プログラミング言語の実行速度の観点から、どの言語が最も速いかと問われれば、それは C++ に他なりません。特にデリバティブや高頻度取引の分野では、C++ は独自の言語特性と数値計算における優位性を持っています。JavaScript や Python と比較して、その速度は数桁も向上します。将来デリバティブや高頻度取引の分野で開発を進めたいと考えているなら、このコースは見逃せないでしょう。

宿題

  1. まず、このセクションの戦略をコピーして実装します。
  2. 取引の頻度を減らすために、このセクションの戦略に移動平均インジケーターを追加してみてください。

第5章 戦略のバックテスト、デバッグ、改善

5.1 バックテストの重要性と落とし穴

まとめ

バックテストは、定量取引と従来の取引の最大の違いです。過去に発生した実際の市場データに基づいて、戦略信号のトリガーとトランザクションのマッチングを迅速にシミュレートし、一定期間のパフォーマンスレポートやその他のデータを取得します。国内外の株式、商品先物、外国為替などの市場における戦略策定の最も重要な要素の一つです。

バックテストの重要性

前の章では、主流のプログラミング言語の基礎を学び、これらのプログラミングの基礎を使用していくつかの簡単な取引戦略を作成する方法を教えました。長い行進の半分以上をすでに通過したと言えます。ただし、戦略を一度作成しても、それを直接実践することはできません。戦略がモデルの内容を完全に実装し、スムーズに実行できるようになるまで、継続的なバックテスト、デバッグ、バックテスト、デバッグなどが必要になります。

定量的な取引ロジックの観点から見ると、戦略は実際には市場に関する一連の認識と仮定に基づいています。バックテストにより、これらの仮定が有効で安定しているかどうかを効率的に判断できます。歴史的に不安定な時期にはどのような損失が発生する可能性があるか、また、それらの損失を防ぐための意思決定をどのように支援するか。

さらに、定量的な取引操作の観点から、バックテストは、将来の機能、価格の盗難、マルチフィッティングなどの戦略ロジックのバグを検出するのに役立ちます。戦略が実際の取引で使用できるという信頼できる証拠を提供します。

  • 取引シグナルの正確性を確認します。
  • トランザクション ロジックとアイデアが実現可能かどうかを確認します。
  • 取引システムの欠陥を発見し、元の戦略を改善します。

したがって、バックテストの重要性は、履歴データを通じて実際の取引プロセスをできるだけ現実的に復元し、戦略の有効性を検証し、間違った戦略に高い代償を払うことを避け、取引戦略をスクリーニング、改善、最適化するのに役立ちます。

バックテストの落とし穴

バックテストトラップ信号点滅:

取引戦略は静的な履歴データに基づいてバックテストされます。実際の取引データは動的です。例: 最高価格が昨日の終値よりも高い場合は、買いでポジションを開きます。実際の取引では、K ラインがまだ完了していない場合、最高価格は動的になり、取引シグナルが前後に点滅することがあります。バックテスト中、バックテスト エンジンは静的な履歴データに基づいて一致するトランザクションをシミュレートできます。

将来の関数のバックテストの罠:

future 関数は将来の価格を使用するため、現在の状況は将来変更される可能性があります。また、future 関数によってシグナルが点滅することもあります。したがって、どの関数も「ジグザグ関数」などの未来関数の特性を持ちます。

下の図に示すように、ZigZag 関数はピークと谷の転換点を示します。最新のリアルタイム価格に応じて値を調整できます。ただし、現在の価格が変化すると、ZigZag 関数によって計算された結果も変化します。未来機能を持つ関数を使用すると、現在の注文シグナルは成立し、注文は出されるかもしれませんが、しばらくするとシグナルが成立しなくなる可能性があります。
img
図5-1

バックテストの罠:価格窃盗

いわゆる価格窃盗とは、過去の価格を利用して取引することを指します。たとえば、最高価格が固定価格よりも高い場合は、始値で購入します。この状態は価格窃盗です。なぜなら、実際の市場では、最高価格が一定価格よりも高い場合、その価格は既に始値よりも一定距離高くなっており、この時点で始値で買うことはできないからです。しかし、バックテストでは買いシグナルがあり、取引を完了することができます。

別の状況もあります。価格が急騰し、戦略で設定された固定価格よりも高い価格でオープンした場合、バックテスト中は固定価格で取引を完了できますが、実際の市場では当然この固定価格は利用できません。

バックテストの罠: あり得ない取引価格

価格を取引できない状況がいくつかあります。
1 つ目は、実際の取引では、価格が上限に達したときに購入することは一般的にできず、逆もまた同様です。ただし、バックテストでの取引は可能です。

2 番目のタイプ: 交換マッチング メカニズムは、価格優先と時間優先です。品種によっては、市場価格で大量の注文が入ることがよくあります。実際の取引中に買い注文または売り注文を出すと、市場価格が厚くなるまで待たなければ取引が完了せず、場合によっては完了できないこともあります。ただし、バックテスト中は、保留中の買い注文と売り注文が実行される場合があります。

3 番目のタイプ: 裁定取引戦略の場合、バックテストの利益は非常に高くなります。これは、バックテスト中に毎回、これらの価格差が捕捉されたと想定されるためです。現実には、多くの価格差はつかめないか、1つのレッグしかつかめません。一般的に言えば、あなたの方向に不利なレッグが最初に実行されるため、もう一方のレッグをすぐに埋める必要があります。このとき、スリッページは1ポイントまたは2ポイントではなくなり、裁定取引戦略自体がこれらの数ポイントの価格差を稼ぎます。この状況はバックテストでシミュレートすることはできません。実際の利益はバックテストほど良くありません。

4番目のタイプ: ブラックスワンイベント。下図の赤丸で示すように、スイスフラン為替のブラックスワンイベントでは、表面的には始値、最高値、最低値、終値があるものの、実際には当日の極端な市場状況では、中間の価格は真空状態であり、大量のストップロス注文が殺到し、流動性がゼロとなり、取引は非常に困難でしたが、バックテストではストップロスを達成できました。
img
図5-2

バックテストの罠:過剰適合

下の写真を見るたびに、私はこう思います。「ハハハハ...」 下の写真から、不合理なモデルであっても、十分に複雑であれば、データに完全に適応できることがわかります。
img
図5-3

定量取引の場合、バックテストは履歴データに基づいていますが、履歴データのサンプルは限ら​​れています。取引戦略のパラメータが多すぎる場合や、取引ロジックが複雑すぎる場合は、取引戦略が履歴データに過度に適応してしまいます。

定量戦略のモデリング プロセスは、本質的には、大量の一見ランダムなデータからローカルの非ランダム データを見つけるプロセスです。統計知識の助けがなければ、過剰適合の罠に陥りやすくなります。

だから、自分を騙さないでください。サンプル外データのパフォーマンスが良くないことがわかり、モデルを破棄するのは残念だと思ったり、モデルが良くないことを認めたくないために、サンプル外データでモデルのパフォーマンスがサンプル外データと同等になるまでモデルを最適化し続けると、結局は苦労して稼いだお金が無駄になってしまいます。

バックテストの罠: 生存者バイアス

ウォール街にはよく聞くジョークがあります。「市場に投資に参加している猿が 1,000 匹いるとします。最初の 1 年間で、市場に負けた猿 500 匹が排除されます。」 2年目には再びサルの半分が駆除され、250匹のサルが残った。 3年目の終わりまでに、残った猿は125匹になりました。
img
図5-4

9年目になると、猿は1匹だけ残りました。それから、左右を見てみると、見覚えがあるように思えます。最後に、金融雑誌の表紙を見たとき、突然「ああ、これはバフェットではないか」と思い出したのです。

もちろんこれは単なる冗談ですが、1,000 人のファンドマネージャーがいるとしたら、10 年後には約 10 人のファンドマネージャーが 10 年連続で市場を上回る成績を上げるだろうと考えたことがありますか。しかし、これは偶然性と運によって決まる可能性があり、ファンドマネージャーのスキルとはまったく関係ありません。

下の画像の左側のバックテストのパフォーマンスのように、ほとんどの投資家が驚かれると思います。この投資戦略は、大きなドローダウンがほとんどなく、非常に堅調なパフォーマンスを示しました。
img
図5-5

ちょっと待ってください、右の写真の通り、実際の状況は中にあります。左側のバックテスト曲線は、多くのバックテストの中で最もパフォーマンスが優れていることがわかります。つまり、左側のバックテストでは、さらにパフォーマンスが悪くなる状況が多くあります。

バックテストの罠:インパクトコスト

実際の取引環境では、価格は常に変動しています。取引の機会を見つけて注文を出した時には、価格が変わっている場合があります。したがって、主観的な取引であれ定量的な取引であれ、スリッページの問題は避けられません。

ただし、バックテストは静的なデータに基づいており、実際の取引環境をシミュレートすることは困難です。たとえば、注文価格は 1050 で購入することになっていますが、実際の取引価格は 1051 になる場合があります。この現象には、極端な市場状況における流動性の不足、ネットワークの遅延、ソフトウェアおよびハードウェア システム、サーバーの応答など、多くの理由があります。

スリッページなしのバックテスト

img
図5-6

上図の通り、スリッページなしのバックテストです。資本曲線は良く見えますが、実際の取引における実際の取引価格と戦略バックテストの理想的な取引価格には差があります。したがって、このエラーを減らすために、戦略をバックテストするときに、購入価格を上げるか、販売価格を下げるために 2 つのスリッページ ポイントを設定できます。

スリッページによるバックテスト

img
図5-7

上図に示すように、同じ戦略であっても、2 ジャンプ スリッページを追加した後のバックテスト結果がスリッページなしのバックテスト結果と大幅に異なる場合は、この戦略を改善するか、新しい戦略に置き換える必要があることを意味します。特に、取引頻度が比較的高い戦略の場合、バックテスト中に 1 ~ 2 ジャンプのスリッページを追加すると、バックテストを実際の取引環境に近づけることができます。

要約する

定量的な取引には多くの問題があるかもしれないので、自分の戦略が適切であることをどうやって証明すればいいのかと尋ねる友人もいるかもしれません。実際、答えは非常に簡単です。戦略を実際に実装する前に、まず一定期間の取引をシミュレートする必要があります。シミュレートされた取引の取引価格がバックテスト中の取引価格とほぼ同じであれば、戦略に問題がなく、少なくとも戦略ロジックに問題がないことが証明されます。

いずれにせよ、経験豊富な取引システム開発者にとって、バックテストは必須です。戦略のアイデアが過去の取引で効果的であることが検証できるかどうかを判断できるからです。しかし、多くの場合、バックテストは将来の収益性を意味するものではありません。バックテストには落とし穴が多すぎるため、お金をかけて学ばなければ理解できません。そして、これらの教訓は実際のお金を使って学ばれます。この記事を読むことで、少なくとも多くの定量的な回り道や罠を避けることができると思います。

宿題

  1. オーバーフィッティングとは何か、またそれを避けるにはどうすればよいか?
  2. 現実世界における生存者バイアスの例にはどのようなものがありますか?

5.2 定量取引バックテストの実施方法

まとめ

バックテストの意義と重要性は疑う余地がありません。定量的なバックテストを実施するときは、できる限り実際の歴史的環境に戦略を当てはめるように努めるべきです。歴史的環境の詳細を無視すると、定量的なバックテスト全体が無効になる可能性があります。この記事では、定量取引のバックテストを行う方法について説明します。

バックテストは、データの再生に相当します。過去の K ライン データを再生し、実際の売買ルールをシミュレートして、最終的に一定期間内のシャープ レシオ、最大ドローダウン率、年率収益率、資本曲線などのデータをまとめます。現在、商品が充実しているWenhua Financeや、柔軟にカスタマイズできるVNPYなど、バックテストが行​​えるソフトウェアは数多く存在します。

商用の定量取引ソフトウェアである Inventor Quant には、高性能なバックテスト エンジンが搭載されており、より高速なベクトル化計算のための for ループ (ポーリング) バックテスト フレームワークを採用しています。また、バックテストと実際の取引のコードを統一し、「バックテストは簡単、実際の取引は難しい」というジレンマを部分的に解決します。

バックテストインターフェースの紹介

Inventor Quantitative の Mai Language Strategy を例に、Inventor Quantitative Trading Tool の公式 Web サイト (www.fmz.com) を開いてみましょう。コントロール センター、戦略ライブラリ、戦略の選択、バックテストのシミュレーションをクリックし、次のページに入ります。
img
図5-8

バックテスト設定インターフェースでは、実際のニーズに応じてカスタマイズできます。たとえば、バックテスト時間、K ライン期間、データ タイプ (シミュレーション レベル データまたはリアルタイム レベル データ) を設定します。比較すると、シミュレーション レベル データのバックテストは高速ですが、リアルタイム レベル データのバックテストはより正確です。また、バックテスト手数料や口座初期資金なども設定できます。

Mai Language 取引ライブラリをクリックすると、最初は取引設定タブになります。Inventor Quantitative Trading Tool の Mai Language 戦略には、終値モデルとリアルタイム価格モデルの 2 つのバックテスト実行方法があります。終値モデルとは、現在の K ラインが完了した後にのみモデルが実行され、次の K ラインが開始したときにトランザクションが実行されることを意味します。リアルタイム価格モデルとは、価格が変化するたびにモデルが一度実行され、取引シグナルが確立されるとすぐに取引が実行されることを意味します。以下のように表示されます。
img
図5-9

デフォルトのオープンロットサイズは、バックテスト中にオープンおよびクローズされるポジションの数を指し、最大単一トランザクション注文サイズは、単一のトランザクションでバックテストエンジンに委託されるオープンおよびクローズポジションの最大数です。実際の取引価格と事前に設定した取引価格の間には乖離があります。この乖離は一般的にトレーダーにとって不利な方向に動き、取引での追加損失につながるため、スリッページを追加する必要があります。国内商品先物では、実際の取引環境をシミュレートするために、通常1〜2ジャンプ、またはそれ以上のジャンプを追加します。

先物オプションでバックテストする契約タイプ(rb000 や rb888 など)を入力します。リアルオプションは主に実際の取引に使用され、バックテストではデフォルト設定を維持できます。自動回復の進行状況をクリックして true にすると、リアルタイム操作中に戦略によってロボットが停止したときに、ロボットを再起動すると、信号を再計算せずに以前の信号位置が自動的に復元されます。デフォルトの注文再試行回数は 20 です。注文が失敗した場合、システムは再度注文を試行します。ネットワーク ポーリング間隔は、ロボットが戦略コードを実行する時間間隔です。
img
図5-10

スポット取引オプションは主にデジタル通貨取引用であり、バックテストではデフォルト設定を維持できます。単一取引量、最小取引量、価格設定通貨精度、取引商品精度、手数料、口座同期時間、損益統計間隔などを指定できます。また、個々のデジタル通貨取引所ごとに、レバレッジ倍率などの関連設定も設定できます。
img
図5-11

戦略バックテスト

バックテストを行う前に、まず取引戦略を決定します。ここでは、サーモスタット戦略を例に挙げます。この戦略では、市場の状況に基づいて、トレンド市場ではトレンド戦略を採用し、変動の激しい市場では変動の激しい戦略を採用します。ソースコードは次のとおりです (Inventor Quantitative 公式サイトの Strategy Square から直接ダウンロードすることもできます)。
img
図5-12
シミュレーション バックテスト インターフェイスで、バックテスト設定を構成した後、[バックテストの開始] ボタンをクリックするだけで、数十秒後にバックテストの結果がすぐに表示されます。バックテスト ログには、バックテストにかかった秒数、ログの合計数、トランザクション数が記録されます。アカウント情報には、戦略バックテストの最終パフォーマンス結果(平均損益、ポジション損益、証拠金、手数料、推定収益など)が印刷されます。
img
図5-13

ステータス情報列には、取引種別、ポジション数量、ポジション価格、最新価格、最終シグナル種別、ポジション保有後の最高価格と最低価格、更新回数と時刻、資金情報が記録されます。さらに、変動損益ラベルには、アカウントの詳細な資本曲線と、一般的に使用されるパフォーマンス指標(利回り、年率利回り、シャープ比、年率ボラティリティ、最大ドローダウン率)が表示され、基本的にほとんどのユーザーのニーズを満たすことができます。

その中でも最も重要なパフォーマンス指標はシャープレシオです。シャープレシオは、リターンとリスクの両方を考慮した総合的な指標です。また、ファンド商品を測る上で重要な参考指標でもあります。平たく言えば、1ドルの収益に対してどれだけのリスクを負うかということです。したがって、シャープレシオが高いほど良いと言えます。

名前が示すように、年間ボラティリティは、日次ボラティリティに年間の取引日数を掛けたものです。これはファンドのリスクを測定しますが、必ずしも総リスクではありません。たとえば、戦略 A はボラティリティが高いものの、良好な収益率で上昇傾向にあり、戦略 B はボラティリティが低いものの、横ばい傾向にあります。戦略 B は戦略 A よりも優れていると言えますか?次の図に示すように、戦略 A:
img
図5-14

最後に、ログ情報列には、バックテスト中の各取引のマッチングステータスが詳細に記録され、取引の具体的な時間、取引所、売買、開始と終了の種類、バックテストエンジンによってマッチングされた取引価格、取引量、印刷された情報などが含まれます。
img
図5-15

バックテスト後

多くの場合、ほとんどの場合、バックテストの結果は期待とはかけ離れます。結局のところ、長期的かつ持続的かつ安定した利益を生み出す戦略を得るのは容易なことではありません。市場を理解する能力が求められます。

戦略のバックテストで損失が発生した場合でも、落胆しないでください。これは実際には正常なことです。まず、戦略ロジックが間違って記述されていないか、極端なパラメータが使用されていないか、開始条件と終了条件が多すぎないかなどを確認します。必要に応じて、別の角度から取引戦略と取引哲学を再検討することもできます。

戦略のバックテスト結果が非常に良好で、資本曲線が完璧であり、シャープ比が 1 以上である場合。まだ喜ばないでください。このような状況に遭遇した場合、ほとんどの場合、それは未来関数の使用、価格盗難、オーバーフィッティング、またはスリッページの設定の失敗などが原因です。サンプル外データとシミュレートされた実際の取引を使用して、これらの問題を排除できます。

要約する

上記は、細部に至るまで仕様が決められていると言える、トレーディング戦略全体をバックテストする全プロセスの紹介です。結局のところ、履歴データのバックテストは、すべてのリスクがわかっている理想的な環境であることに注意してください。したがって、戦略をバックテストする最適なタイミングは、強気相場または弱気相場を通過することであり、部分的な生存者バイアスを回避するために、有効な取引回数は 100 回以上である必要があります。

市場は常に変化し、進化しています。過去のバックテストで優れたパフォーマンスを示した戦略が、将来も優れたパフォーマンスを示すとは限りません。戦略は、バックテスト環境における既知のリスクに対処するだけでなく、将来の未知のリスクにも対処する必要があります。したがって、リスク耐性と戦略の普遍性を高めることが非常に重要です。

宿題

  1. このセクションの戦略をコピーしてパフォーマンスレポートをバックテストしてみてください
  2. あなた自身の取引経験に基づいて、このセクションの戦略を改善し、最適化してみてください。

5.3 戦略バックテストパフォーマンスレポートを理解する方法

まとめ

戦略バックテストが完了すると、Inventor Quantitative Trading Tool はさまざまなパフォーマンス指標と利益曲線チャートを Web ページに出力します。しかし、おそらくこれらの指標の解釈と内容に精通していないため、戦略の良し悪しを正確に判断することはできません。この記事では、主要な指標の概念から始めて、誰もが戦略のバックテストパフォーマンスレポートを理解し、戦略の長所と短所を区別できるようにします。もちろん、ほとんどの定量取引ツールにはこのようなバックテストのパフォーマンスレポートがあり、内容も似ています。このセクションの内容を一度学んでおけば、他の取引ツールに切り替えた場合でも応用できます。

客観的かつ完全な評価

実際の取引データの記録であれ、履歴データを使用したバックテストレポートであれ、取引状況の統計を通じてモデルの品質が評価されます。

重要な質問は、比較にはどのような統計データが必要かということです。例を見てみましょう。下の図に示すように、同じ期間にテストで次の 2 つのデータセットが取得されたと仮定すると、どちらのモデルのパフォーマンスが優れているかを判断できるでしょうか。
img
図5-16

答えはノーです。評価システムの一方的な性質は、定量取引システムを行き詰まらせることになるでしょう。

取引システムは、実際に使用される前に、過去のバックテストに合格する必要があります。過去のバックテストに合格できない取引システムは、長期的には実際の取引で利益を上げる可能性は低くなります。過去のバックテストは、取引システムを実際の取引に導入するために必要な前提条件です。

過去のバックテストに合格できる取引システムは必ずしも良い取引システムではありませんが、過去のバックテストに合格できない場合は、間違いなく良い取引システムではありません。一般的に言えば、パフォーマンスレポートは、安定性、持続可能性、期待に応えているかどうかという観点から分析する必要があります。
img
図5-17

上の図に示すように、定量取引に携わったことがある人なら誰でも、これらの長くてわかりにくいバックテスト パフォーマンス データの用語を見たことがあるでしょう。これらのパフォーマンス データの中には、矛盾しているものも数多くあります。多くの定量分析の初心者は、どのデータに焦点を当てるべきか混乱します。

上図のパフォーマンス指標の用語は、一般的にパフォーマンス比率、サイクル分析、さまざまな曲線、極端な取引分析など、いくつかのカテゴリに分類できます。ファンド商品の観点から見ても、そのほとんどはバックテストの計算結果を表示するだけであり、口座資本要件、保有収益、信頼限界など、実際の応用上の意義はほとんどありません。重要なものだけに集中する必要があるかもしれません。以下では、バックテストのパフォーマンス指標の中から最も重要なものを選択し、詳細に説明します。

重要なパフォーマンス指標

最大ドローダウン

最大ドローダウンの計算式は上記の通りです。モデルにとって、最大ドローダウンはボラティリティよりもさらに重要なリスク指標です。バックテストで確認された最大ドローダウンは、ある意味では、ポジションを開いた後に発生する可能性のある最悪の状況を表しています。

数学的な観点から言えば、資本が 20% 失われた場合、元の資本規模を回復するには、残りの資金で 25% の利益を上げる必要があります。損失が 50% の場合、損失前の資本規模を回復するには、残りの資金で 100% の利益を上げる必要があります。

そうなると、損失が大きくなればなるほど、当初の資本規模まで回復できる可能性は小さくなり、困難さも増すのは間違いありません。ファンドの上方向の利益余地は無限であるが、下方向の損失余地は限られており、底打ちする可能性の方が大きい。

どのように定義されるかはともかく、少なくとも次の 2 点が現在の主流の理解です。

  1. 最大リトレースメントが小さいほど良い。
  2. ドローダウンはリスクに正比例します。ドローダウンが大きいほどリスクは大きくなり、ドローダウンが小さいほどリスクは小さくなります。

調整後リスク収益率(RAROC)

この概念に馴染みのない人も多いでしょう。実際、調整されたリターンとリスクの比率は、プロ プレーヤーとアマチュア プレーヤーの分水嶺となります。これは投資銀行、大規模ファンド、プロのトレーダーにとっても非常に優れた評価ツールであり、世界の金融分野で共通の評価基準となっています。

投資においては、利益だけを見るのではなく、その利益を得るためにどれだけのリスクを負ったかも考慮する必要があります。一般的に言えば、資産のリスクとリターンは比例します。つまり、モデルが収益の面でトップに立ち、急速に進歩しているとき、その栄光の裏にはまだ表面化していないリスクが潜んでいる可能性があるということです。

例えば、モデルにおける開始・終了条件やポジションの増減は、市場が上昇しているときには高いリターンが得られるかもしれませんが、いったん下落すると損失が倍増し、大きな損失につながります。さらに、上昇と下降は、かなりの非対称的な影響を及ぼします。

多くの経験豊富なクオンツトレーダーは、リスクを軽減するためにある程度のリターンを犠牲にすることをいといません。この場合、リスク調整後のリターンは参考としてより価値があります。したがって、バックテストでは、リスクが高くボラティリティが高いモデルは、たとえリターンが高くても必ずしも良いモデルであるとは限りません。

預金は安全ですが、年間利回りはわずか2%です。市場は数日間で 50% の利益をもたらすこともあれば、数日間で 50% の損失をもたらすこともあります。長年の取引を経て、私は非常に重要な概念を身につけました。それは、リスクに向き合うことです。リスクとリターンは、決して切り離して存在するものではありません。取引は、海に出て魚を捕るようなものです。魚を捕りながら海のリスクを負いたくないというのは不可能です。保守的すぎることと過激すぎることは、実は両極端です。戦略モデルの設計についても同様です。

取引件数

モデルを証明するために数か月間のバックテストのパフォーマンスを使用することはできません。バックテスト データが少なすぎると、バックテストの結果が偶然になる可能性があり、パラメータが偶然であるか、市場状況が偶然であるかなどです。さらに、より長い履歴データにより、生存者バイアスをある程度除去することもできます。

一般的に、国内株式や商品の場合は5年以上、新規上場商品の場合は3年以上のバックテストが必要となります。国際市場で以前に上場された商品や金、米ドル指数などの商品については、少なくとも 1 つの強気・弱気サイクルをバックテストする必要があり、これは通常 10 年から 15 年以上になります。バックテストの結果が十分に信頼できるものになるためには、バックテスト期間が十分に長くなければなりません。この要件を満たさない商品の場合、ポジションを開く際に R 値を適切に重み付けして、リスクの露出を積極的に減らす必要があります。

平均利益

平均利益指標は普通のことのように思えますが、実はとても重要なものです。計算も非常に簡単です: 純利益 / 取引数。表面的には明るいように見えるバックテストのパフォーマンスを検出できる鏡であると言っても過言ではありません。下の図に示すように、この戦略で利益を上げることができれば、それは異常です。
img
図5-18
img
図5-19

この戦略のバックテストのパフォーマンスを見ると、「これほど完璧に近い戦略を使用しないのは残念ではないだろうか」という疑問が湧くかもしれません。ちょっと待って! 2枚目の写真の平均利益をよく見てください。わずか17です。これは、各取引からの平均利益がわずか17元であることを意味します。

先物市場の大多数の商品が10元上昇した例を取り上げます。実際の取引をしたことのある人なら、それが何を意味するか理解できるでしょう。実際の取引では、1 回のジャンプはもちろん、10 回や 8 回のジャンプも可能です。 2回ジャンプや3回ジャンプは当たり前です。

勝率

勝率は決して単独では存在せず、勝率のみに基づいて問題を議論するのは非現実的です。適切な市場で適切なモデルを使用すれば、80% の勝率を達成しても驚くことではありませんが、これは意味がありません。

価格は上がるか下がるか、そうでなければ同じままです。時間が十分に長ければ、価格が上昇する確率と価格が下落する確率はそれぞれ 50% であることがわかります。どのようなタイプの戦略モデルを使用する場合でも、バックテスト中に勝率が 50% を超える場合は注意が必要です。数学的および物理的観点から、これは不可能です。

詳細なエクイティカーブ

諺にあるように、一枚の写真は千の言葉に値します。詳細なエクイティ カーブは、チャートの最初のエントリの時点から最後のバーの時点まで表示されます。これは取引用のリアルタイムのエクイティカーブです。各バーの変動損益が考慮されるため、リアルタイムです。
img
図5-20

詳細なエクイティカーブは、アカウントの純価値の変化を反映しており、最も直感的な評価ツールです。これにより、戦略の損失と利益の状況、および損益の変動性/滑らかさを一目で大まかに把握できます。しかし、この戦略パフォーマンスレポートの画像は、千の言葉の価値があるだけでなく、何百万人もの信者を混乱させます。また、終値のエクイティカーブを決して見ないでください。

年率収益率

年率収益率は議論の多い指標です。素人が見るもので、参考価値がないと考える人もいます。まず、利益を上げることがモデルが選択される前提条件であり、言い換えれば、モデルのリターン自体がプラスの期待値を持たなければなりません。
img
図5-21

100% のリターンは無数に得られますが、100% を達成できるのはせいぜい 1 回だけです。年率収益率と実際の収益率(保有期間収益率)の差は非常に大きく、場合によっては私たちの想像以上に大きくなることもあります。

要約する

最後に、説明する必要があることが 1 つあります。完璧なバックテスト パフォーマンスは存在しません。テスト データ自体の問題に加えて、モデルのユーザーはさらに多くの落とし穴に直面する可能性があります。パラメーターの最適化からトランザクションの設計まで、すべてが実際の操作とは異なる場合があります。

さらに重要なのは、実行レベルでの感情的な問題が、モデルを実稼働させる上での重要な要素であるということです。実際の取引は「感情の真空」環境では実行できず、ファットテール現象はすべてのプログラマティックトレーダーが常に警戒しなければならないものです。

宿題

  1. バックテストで最も重要と思われるパフォーマンス指標をリストアップしてください。
  2. シャープレシオ指標を計算してみる

5.4 サンプル外テストが必要な理由

まとめ

前のセクションでは、戦略バックテストのパフォーマンス レポートを理解する方法を説明するために、いくつかの重要なパフォーマンス指標に焦点を当てました。実際、バックテストを通じて利益を上げることができる戦略を書くことは、最も難しいことではありません。より難しいのは、この戦略が実際の取引で引き続き効果的であるかどうかをどのように評価するかです。そこで今日は、サンプル外テストとその重要性について説明します。

バックテストは実際の取引と同じではない

多くの定量分析の初心者は、一見すると良好なパフォーマンス レポートやバックテストからの資本曲線に基づいて、自分の取引戦略に簡単に確信を持ち、市場で自分の才能を発揮する準備が整います。確かに、このバックテストの結果は、彼らが観察した特定の市場状態と完全に一致する可能性がありますが、この取引戦略を長期間にわたって実際の戦闘に投入すると、この戦略は実際には効果的ではないことがわかります。

バックテストで成功率が 50% を超える取引戦略を数多く見てきました。勝率がこのように高い場合、損益比率は依然として 1:1 を超える可能性があります。しかし、これらの戦略を実践すると、基本的には損失につながります。損失には多くの理由がありますが、その 1 つは、バックテスト時にデータ サンプルが少なすぎて、データに偏りが生じることです。

しかし、トレードというのはとても複雑なものなのです。振り返ってみると、非常にわかりやすいのですが、最初に戻ってみると、やはり迷ってしまうのです。これには、定量化の根本的な問題、つまり履歴データの限界が関係しています。したがって、限られた履歴データのみを使用して取引戦略をテストする場合、「バックミラーを見ながら運転する」という問題を回避することは困難です。

サンプル外テストとは何ですか?

データが限られている場合、限られたデータを最大限に活用して取引戦略を科学的にバックテストするにはどうすればよいでしょうか?答えはサンプル外テストです。バックテストでは、履歴データは時系列に従って 2 つのセクションに分割されます。最初のセクションのデータは戦略の最適化に使用され、トレーニング セットと呼ばれます。一方、2 番目のセクションのデータはサンプル外テストに使用され、テスト セットと呼ばれます。

戦略が常に効果的である場合は、トレーニング セット データ内の最適なパラメータを最適化し、これらのパラメータをテスト セット データに適用してバックテストを行います。理想的には、バックテストの結果はトレーニング セットの結果と似ているか、妥当な範囲内にある必要があります。これは、この戦略が比較的効果的であることを示しています。

ただし、ある戦略がテスト セットではうまく機能するが、他のテスト セットではパフォーマンスが低い場合、または大きく異なる場合、および他のパラメーターでも同じことが当てはまる場合は、その戦略にデータ調整バイアスがある可能性があります。

たとえば、商品先物鉄筋のバックテストを行うとします。鉄筋に関するデータは 10 年分ほどあります (2009 ~ 2019 年)。その場合、2009 年から 2015 年までのデータをトレーニング セットとして使用し、2015 年から 2019 年までのデータをテスト セットとして使用できます。たとえば、二重移動平均戦略の場合、トレーニング セット内の最適なパラメーター グループは、(15 期間移動平均と 90 期間移動平均)、(5 期間移動平均と 50 期間移動平均)、(10 期間移動平均と 100 期間移動平均) などです。次に、これらのパラメーター グループをバックテスト用のテスト セットに入れて、トレーニング セットとテスト セットのバックテスト パフォーマンス レポートと資本曲線を比較し、その差が妥当な範囲内にあるかどうかを判断します。

アウトオブサンプルテストを使用せず、2009年から2019年までのデータを直接使用して戦略をバックテストすると、履歴データが適合するため、結果は良好なバックテストパフォーマンスレポートと資本曲線になる可能性があります。ただし、このようなバックテスト結果は実際の取引にはほとんど意味がなく、特にパラメーターが多い戦略の場合はガイドとしての役割はありません。

高度なサンプル外テスト

履歴データを 2 つの部分に分割し、インサンプル バックテストとアウトオブサンプル バックテストを実行することに加えて、実際には、再帰バックテストとクロス バックテストの方法という、より優れたオプションがあります。特に近年上場したばかりの原油先物やリンゴ先物など、過去のデータが少ない場合には、この 2 つの方法を使用することで、限られたデータを使ってモデルを総合的にテストすることができます。

連続推論テストの基本原理:前段の長い歴史データでモデルを訓練し,その後の比較的短いデータでモデルをテストし,その後,データを取得するウィンドウを常に後ろに移動させ,トレーニングとテストのステップを繰り返す.
トレーニング データ: 2000 年から 2001 年、テスト データ: 2002 年。
トレーニング データ: 2001 年から 2002 年、テスト データ: 2003 年。
トレーニング データ: 2002 年から 2003 年、テスト データ: 2004 年。
トレーニング データ: 2003 ~ 2004 年、テスト データ: 2005 年。
トレーニング データ: 2004 年から 2005 年、テスト データ: 2006 年。
"私は,この世界から離れて,
最後に,戦略のパフォーマンスを総合的に評価するために,テストの結果を統計的に (2002,2003,2004,2005年,2006年...) した.

下の図のように,推論テストの原理を直観的に説明できる.
img
図5-22

上図は,推論的な検査の2つの方法を示しています.

第"種は,テストのデータが短く,テスト回数が多い.
2つ目は,テストのデータが長く,テストの回数が少ない.

実際のアプリケーションでは、テスト データの長さを変更し、複数のテストを実行して、非定常データを処理するモデルの安定性を判断できます。クロスバリデーションの基本原理は、すべてのデータを N 個の等しい部分に分割し、毎回 N-1 個の部分をトレーニングに使用し、残りの部分をテストに使用することです。

2000年から2003年を各年ごとに分割して4つの部分に分けます.そのクロスチェックの操作手順は以下の通りです.

  1. 訓練データ:2001-2003,テストデータ:2000;
    2 訓練データ:2000-2002 テストデータ:2003
  2. 訓練データ:2000,2001,2003,テストデータ:2002;
  3. 訓練データ:2000,2002,2003年,テストデータ:2001年
    img
    図5-23

上図のように:クロステストの最大の利点は,限られたデータを充分利用することであり,各トレーニングデータもテストデータである.しかし,クロステストを戦略モデルのテストに適用する際には,明らかな欠点もある:

1.価格データが安定しない場合,モデルのテスト結果は信頼できない.例えば,2008年のデータでトレーニングし,2005年のデータでテストする.,2008年の市場環境は,2005年と比較して大きく変化している可能性が高いため,モデルのテスト結果は信頼できない.
2. 第"項に似たように,交差点検では,最新のデータ訓練モデルを使用して,古いデータテストモデルを使用して,それ自体が論理的に合致しない.
また,対量化戦略モデルをテストする際には,帰帰推テストと交差テストの両方でデータ重複の問題が発生する.

取引戦略モデルの開発において,ほとんどの技術指標は一定の長さの歴史的データに基づいています.例えば,トレンド性指標を使用して,過去50日の歴史的データを計算し,次の取引日,この指標は,取引日の50日前のデータを計算すると,この2つの指標のデータは49日間同じです.これは,この指標の2つの隣接する日の変化が不明瞭になります.
img
図5-24

データの重複は以下のような結果をもたらします.

  1. モデルが予測した結果の遅い変化が, ポジションの遅い変化につながり, これが,私たちがよく指数の遅延性と呼ぶものです.
  2. モデル結果のテストには,いくつかの統計値が使用できません.重複データによる序列関連性により,いくつかの統計テストの結果は信頼できません.

優れた取引戦略は将来的に利益を生み出すことができるはずです。取引戦略を客観的にテストすることに加えて、サンプル外テストは定量的トレーダーの時間を効率的に節約することもできます。ほとんどの場合、すべてのサンプルの最適なパラメータをそのまま採用して実際の戦闘に投入することは非常に危険です。

参数最適化が行われる時間点前のすべての歴史的データを区分して,サンプル内データとサンプル外データに分割し,最初にサンプル内データを使用して参数最適化を行い,次にサンプル外データを使用してサンプル外テストを行うと,このようなエラーを排出し,同時に,最適化後の戦略が将来の市場に適用されるかどうかを検査することができる.

要約する

取引と同様に,私たちは決して時間を越え,少しも間違いのない正しい決断を自分自身にすることはできません.神の手や将来から戻る能力があれば,テストされずに,直接オンラインの実物取引で,<unk>が満杯になります.そして,私のような凡人なら,歴史のデータで私たちの戦略をテストする必要があります.

しかし、歴史のデータが膨大であっても、広大で終わりがなく予測不可能な未来を前にすると、そのデータは非常に不足しているように思われます。したがって、歴史に基づいてボトムアップで開発された取引システムは、時間の経過とともに最終的に沈没することになります。なぜなら、歴史は未来を言い尽くすことはできないからだ。したがって、完全なプラス期待取引システムは、その内部原則とロジックによってサポートされている必要があります。

「信頼せよ、だが検証せよ」— レーガン大統領

宿題

  1. 現実世界では、どのような現象が生存者バイアスなのでしょうか?
  2. 発明者の定量的ツールを使用して、インサンプルとアウトサンプルの両方をバックテストし、それらの違いを比較します。

5.5 取引戦略の最適化と最適化

まとめ

取引戦略の本質は、市場のルールを一般化して結論づけることです。市場に対する理解が深まり、アイデアをコードで表現する能力が高ければ高いほど、戦略は市場に近づきます。このセクションでは、取引戦略を最適化し、実際の取引に向けて最終的な準備を行う方法について引き続き説明します。

エントリーとエグジットの最適化

ほとんどのトレンド追跡戦略では、ブレイクスルーやテクニカル指標を使用して市場のトレンドを捉えます。通常、これらのシグナルのエントリーとエグジットの方法はタイムリーではありません。戦略が終値モデルを使用する場合、エントリーポイントは次のKラインの始値になります。したがって、このKラインを突破するための最適なエントリー時間を逃し、多額の利益を逃すことになります。

したがって、戦略の実装ではより有利なリアルタイム価格を使用し、シグナルが現れたらすぐに注文を出すのが効果的な方法です。この方法では、シグナルが確立されるとすぐに市場に参入でき、利益を逃すことはありません。しかし、リアルタイム価格が終値よりも優れているとは限りません。これは取引戦略によって異なります。シンプルな取引ロジックを持つ一部の戦略では、リアルタイムの価格と終値の差は比較的小さくなります。ただし、終値モデルではより詳細な取引ロジックを処理できないため、リアルタイムの価格を使用する必要があります。

パラメータ最適化

パラメータの最適化により、定量的な取引戦略を履歴データに近づけ、より優れたバックテストのパフォーマンスを実現できます。たとえば、鉄筋契約では二重移動平均戦略を使用しますが、どの 2 つの移動平均が最適でしょうか?次に、発明者の定量ツールのパラメータ調整機能を使用して、最適な 2 つの移動平均パラメータを自動的に見つけることができます。

下の図に示すように、二重移動平均戦略を例にとると、それ自体が多次元のインスタンスです。各パラメータのバックテスト結果を点として描くと(下の図を参照)、各パラメータはこの戦略の次元となり、最終的にすべてのパラメータの組み合わせがこの複雑な多次元表面形状(山のような)を構成します。
img
図5-25

上図は、デュアルパラメータ戦略のパフォーマンスチャートです。パラメータが変化すると、最終的な収益率も大きく変化し、表面が大きく歪み、高さの異なる「山」と「谷」が形成されます。通常、最適化結果の最初の場所は、表面全体の最高点になります。ただし、パラメータの感度、客観性などの観点から、この結果が「最適」なものではない場合があります。市場は常に変化しているからです。

したがって、パラメータ最適化の重要な原則は、パラメータ島ではなくパラメータプラトーを選択することです。いわゆるパラメータプラトーとは、戦略が良好なパフォーマンスを達成できるより広いパラメータ範囲の存在を指します。一般的にはプラトーの中心を持つ正規分布を形成します。いわゆるパラメータ アイランドとは、パラメータ値が非常に狭い範囲内にある場合にのみ戦略が適切に機能することを意味します。パラメータがこの値から逸脱すると、戦略のパフォーマンスは大幅に低下します。
img
図5-26

パラメータプラトー

上図を例にとると、良好な戦略パラメータ分布はパラメータプラトーであるはずです。パラメータ設定が逸脱した場合でも、戦略の収益性は保証されます。このようなパラメータは非常に安定しており、将来の実際の運用でさまざまな市場状況に遭遇したときに、戦略をより普遍的なものにすることができます。
img
図5-27

パラメータ諸島

上図を例にとると、バックテストのパフォーマンスにパラメータアイランドが見られる場合、パラメータがわずかにずれると、戦略の収益性が大幅に低下します。このようなパラメータは、普遍性が低いため、実際の取引では常に変化する市場状況に対応するのが困難な場合がよくあります。

したがって、近くのパラメータのパフォーマンスが最適なパラメータのパフォーマンスよりもはるかに悪い場合、この最適なパラメータは過剰適合の結果である可能性があり、数学的には、求められている最大ソリューションではなく、特異なソリューションと見なすことができます。数学的な観点から見ると、特異点は不安定です。将来の不確実な市場状況では、市場特性が変化すると、最適なパラメータが最悪のパラメータになる可能性があります。

フィルターを追加

多くのトレンド戦略は、市場がトレンドになったときにトレンドをうまく捉え、大きな利益を得ることができます。しかし、長期的には、最終結果はわずかな利益か損失になります。何が問題なのでしょうか?

その理由は、この戦略では変動の激しい市場で繰り返し取引が行われ、変動の激しい取引のほとんどは損失または少額の利益となるためです。市場は、約 70% の時間、変動の激しい市場にあります。長期にわたる継続的な少額の損失は、これまでの利益をすべて失うことにつながります。
img
図5-28

解決策はフィルターを追加することです。市場には、損益フィルター、リスク値フィルター、トレンドパターンフィルター、テクニカル指標フィルターなど、さまざまな種類のフィルターがあります。たとえば、長期移動平均フィルターを追加すると、変動の激しい市場での取引数を減らし、誤った取引の半分を除外することができます。

資金調達曲線の平滑化

定量化は、ほとんどのトレーダーが望む、安定的かつ持続可能な利益獲得方法を追求します。今年は 50% の利益を上げ、来年は 30% の損失を出し、再来年は 40% の利益を上げたい人はいません。むしろ、年間 20% の利益でも 10 年以上続くものを受け入れたいのです。これが定量投資が実現できることです。定量投資は持続可能なパフォーマンスを実現する取引モデルだからです。

滑らかな資本曲線を実現するためには、複数の戦略、複数の種類、複数のサイクル、複数のパラメータを備えた投資ポートフォリオを構築する必要があります。しかし、多ければ多いほど良いというわけではありません。ここでは限界効果の減少が起こります。最初にポートフォリオに追加する資産が多いほど、分散効果は高まります。ただし、戦略が一定の桁に達すると、分散効果の減少効果が現れ始めます。組み合わせのメリットは分散化です。全体的な収益率は最高ではありませんが、最も安定しています。

聖杯の探求をあきらめる

定量取引が聖杯を見つけることができるかどうかは、多くのトレーダーが検討する問題です。トレーダーの中には、簡単なバックテストを行った後、いわゆる完璧な戦略を持って市場に飛び込む人もいます。私はあらゆる戦いに勝ち、あらゆる障害を克服できるプロのクオンツになりたいと願っています。

しかし、聖杯は存在するのでしょうか?実はとても簡単です。答えは「ノー」です。実際、理解するのは難しくありません。この市場に本当にルールがあるのなら、IQが高く、教育水準が高く、一生懸命働いている人たちがそのルールを発見できるでしょう。数学的分析、情報独占、その他の分析方法のいずれを使用しても、最終的に市場で大金を稼ぐのは彼らです。長期的には、これらの人々が取引市場を独占し、市場が正常に機能しなくなるでしょう。

要約する

取引時間が十分に長い場合、取引プロセス中に誰もがさまざまな市場動向に直面する可能性があり、これらの動向が正確に繰り返される可能性は低くなります。定量トレーダーとして、独自の取引戦略を正しく検証して最適化することに加えて、市場の状況を継続的に監視し、市場の変化に応じて戦略を継続的に改善する必要もあります。

同時に、利益と損失は同じ源から生じることも認識する必要があります。損失は取引戦略全体の一部です。最高の取引戦略であっても、一連のドローダウンを経験する可能性があります。すべての取引で損失が発生した場合、取引ルールと戦略に疑問を抱くべきではありません。少なくとも、論理フレームワークが最初から間違っていない限り、戦略的な論理フレームワークを簡単に変更しないでください。

宿題

  1. 独自の戦略の特性に基づいて投資ポートフォリオを構築し、発明者の定量的ツールを使用してバックテストを行う
  2. このセクションの内容に基づいて定量取引戦略を最適化してください。

5.6 確率的思考を構築し、取引パターンを改善する

まとめ

トレーディングは科学であると同時に芸術でもあります。取引にはバリュー投資、テクニカル分析、イベントホットスポット、裁定ヘッジなど多くの方法があり、それらは表面的には論理的に厳密で、理論的には意味があるように見えます。しかし、現実には、それらはしばしば矛盾しています。時には、科学の厳密さでは芸術の大胆な想像力を説明できないこともあります。

さまざまな取引方法の出発点は異なりますが、すべての道はローマに通じます。バリュー投資の利点は、価値に基づいて価格変動に対する安全マージンを設定できることです。テクニカル分析の利点は、3 つの主要な仮定によって取引が科学的になることです。

しかし、それらにはすべて共通の特徴が 1 つあります。それは、将来の価格分析について大まかな予測しかできず、正確な予測はできないということです。ファンダメンタル分析とテクニカル分析を組み合わせても、「精度」の向上という問題は解決できないため、トレーディングは最初から最後まで確率ゲームとなります。

運任せのゲーム

実際、取引は単なる確率のゲームではありません。人生において、道路を渡る(信号は青、今道路を渡っても安全か?)とか、どんな友達を作るか(この友達は信頼できるか?)といった小さなことから、どんなキャリアを追求するか(プロのトレーダーは本当に良いキャリアか?)とか、誰と結婚するか(一緒にいて幸せになれるか?)といった大きなことまで、すべてはリスクとリターンを評価する確率ゲームです。私たちには未来を予測する能力がないので、何かを行うときは、どんなに自信があっても常にリスクがあり、100%確実とは言えません。

多くの人が取引でミスを犯す主な理由は、確率的思考が欠如していることと、取引時に合理的ではなく感情的になりすぎることです。感情は実は私たちの原始的な本能です。市場では、これらの原始的な本能が多くの人間の弱点を刺激し、それを飛躍的に増幅させる可能性があります。これが、ほとんどの人が市場に参入して失敗してしまう理由です。

取引失敗の理由

理由1: 人間の本性のため

大多数の人には弱点があります。それは、小さなものを利用するのが好きで、小さな損失を被ることを恐れるということです。市場で小さな利益が出ると、すぐに現金化して利益を得て市場から撤退します。一方、損失が出ると、偶然にお金を取り戻そうと、負けたポジションを保持します。その結果、小さな損失が徐々に蓄積され、大きな損失になります。

価格は上がるか下がるか、あるいは同じままです。長期的には、取引手数料やスリッページを考慮しなければ、利益が出るか損失が出るかの確率は約 50% です。そのため、ほとんどの人の取引方法は、利益が限られ、リスクが無制限の、期待値がマイナスの戦略になります。取引決済明細書は次のようになります: 小さな利益>>......>>小さな利益>>大きな損失。

現実世界では、これは貧しい人々の考え方と裕福な人々の考え方に非常に似ています。貧しい人々はリスクを嫌い、お金を失うことを恐れます。安定した収入が保証され、安定を追求できる仕事が好きです。何かをすることについて絶対的な確信が持てない場合でも、決してそれをすべきではありません。表面的には、これを行うことに何の問題もないように思えますが、その背後には大きなチャンスとリスクが潜んでいます。

お金持ちはリスクとリターンが常に比例することを知っているので、リスクを取る意欲が強い。リスクだけがチャンスを生み出す。彼らはリスクを合理的に評価し、リスクが制御可能な場合は勇敢な賭けをする。

理由2: すぐにお金を稼ぎたい

ある外国の機関が統計をとったところ、長期的にはほとんどの産業の純資産の年率利益率は15%を超える可能性は低いことが示されました。逆に、多くの個人投資家は、市場で 15% の利益を上げた場合、他の人に挨拶するのが恥ずかしいと感じます。人々はすぐにお金を稼ぐことを好み、その行動には大量取引や短期取引が含まれます。

ヘビーポジション
重いポジション、高いレバレッジ、資本配分はどれも非常に魅力的ですが、非常に危険でもあります。成功すれば成功し、失敗すれば破滅する。勝率50%のトレード戦略を持ち、フルポジションとマージントレードで運用すれば、運が良ければ10回以上連続で勝つこともあり、富が量的変化から質的変化に変わる可能性もあります。

しかし、一度でもミスをすると、すべてがゼロにリセットされてしまいます。たとえ資本配分をせずに重いポジションで運用したとしても、次の市場状況で連続して12回以上損失を出さないという保証はないため、口座残高がゼロになるリスクがあります。たとえ激しい取引であっても、当初予想されていた取引戦略が、勝ち負けが不平等な戦略に変わってしまう可能性があります。

短期
この世で唯一負けない武術はスピードだ。トレーディング界では、手動のデイトレード、デイトレードの短期トレード、定量的な高頻度トレードは常に非常に神秘的でした。私はストップウォッチを見てトレードするこれらの人々を疑っているわけではありませんが、別の観点から短期トレードをあきらめるように説得しようとしています。

ある方法が実行可能かどうかを判断するときは、その方法を使って成功した人だけでなく、その方法を使って失敗した人も見るべきです。言い換えれば、一部の人がジャックポットを当てたからといって、宝くじを買うことが期待値の高い戦略であると決めつけることはできません。

さらに、過去 3 年間のプライベート エクイティ商品のランキングを見ると、上位 100 社のうち、日々の投機や短期取引を行っている企業はいくつあるでしょうか。短期投資の成功率は非常に低いことは間違いありません。たとえ成功したとしても、すぐにお金を稼ぐこの方法は長期的に維持するのが困難です。才能がない場合は、このようなトリックを使用するときは注意してください。結局のところ、シモンズは 1 人しかいません。

理由3: 偏見

可能であれば、映画「十二人の怒れる男」を 100 分間観ることをお勧めします。 1957年にアメリカ版が初公開され、1991年に日本版、1997年にロシア版、2014年に中国版と4か国でリメイクされた映画。この映画はトレードの仕方を教えることはできませんが、物事の見方や自分自身を知る方法を教えてくれます。これはとても重要です。

人間の経験には限界があるため、人間の認知にも限界があります。誰もが、自分の経験に基づいて、多かれ少なかれ偏見を持っています。多くの場合、偏見はほとんどの人々の習慣となっており、人々は自分の感情に基づいて多くのことを判断することを当然のことと考えています。

市場に戻ると、市場の判断がファンダメンタル分析に基づくかテクニカル分析に基づくかは、実際には重要ではありません。あなたの見解が市場の大多数の見解と異なる場合、価格は市場の大多数の見解に有利になる傾向があり、市場はあなたの見解通りには動きません。

したがって、取引においては、「判断はするが、判断に頼らない」ということを忘れてはなりません。最終的には、事実と価格に基づいて行う必要があります。価格を上下させる唯一の力は、ほとんどの人が将来をどう予想するかです。あなたの判断は市場では意味をなさないので、決して自分の判断で偏見を持たないようにしてください。

理由4:完璧さの追求。

市場の参加者には、物理​​学、統計学、数学、天文学など、あらゆる分野の専門家が含まれます。多くの人が専門知識を使ってこの市場を説明しようとします。

しかし、市場の主な参加者は人間であり、人間自身にも認知上の限界があるため、市場自体が間違っており不完全であることを意味します。では、これらの「完璧な」方法をどのように使って市場を説明できるのでしょうか?これは市場の本質に反するのではないでしょうか?

上記は、市場に参入する大多数の人々が最終的に失敗する理由を列挙したものです。上記の主な理由に加えて、ここでは一つ一つ挙げていない他の要因も数多くあります。つまり、勝利への自信を除いて、他のすべては成功を妨げる障害なのです。

幸運のおかげで市場でお金を稼いだ人は、やがて時間をかけてそのお金を市場に還元することになります。したがって、先物市場はマイナスサムゲームです。考え方を変えて独自の取引戦略を確立することによってのみ、成功の可能性が生まれます。

確率的思考とは何ですか?

確率的思考というのはおしゃれな名前ですが、簡単に言えばギャンブル的思考です。おっしゃる通り、取引はギャンブルです。ギャンブルと聞くと、「ギャンブルですべてを失った人、借金で逃げた人、家族がいない人」を思い浮かべて、遠ざかってしまうかもしれません。

確かに、社会の中にはギャンブルに夢中になっているギャンブラーもいます。しかし、ギャンブル≠ギャンブラーではありません。 「ギャンブル」はおそらく最も誤解されている言葉の一つです。あなたの戦略がマイナスの期待値である場合、あなたはギャンブラーです。あなたの戦略がプラスの期待値である場合、あなたはギャンブルをしています。

「ギャンブル」の否定的な意味を取り除き、一定の利益と引き換えに一定のリスクを負う活動として理解すれば、人生はどこでも本当に「ギャンブル」であることになります。学校でどの専攻を選ぶか、家を買うか、プロジェクトを始めるか、働くか、ビジネスを始めるか、など。

将来インフレが起こるかどうか、あるいは銀行が破産するかどうかはわからないので、銀行にお金を預けることさえギャンブルです(ギリシャ債務危機を参照)。つまり、ゆりかごから墓場まで、人生のあらゆる過程はギャンブルなのです。

長期的に勝つ方法

ギャンブルの概念をさらに解明する必要があります。長期的にどうすれば勝てるのでしょうか?長期的な勝利戦略を学ぶ前に、まず長期的な勝利戦略の原則を学びましょう。紙幣印刷機以外に、長期的な勝利を保証できるものは何でしょうか?

カジノではバカラ、ルーレット、スロットマシン、ブラックジャックなどが起こります。プレイ方法がどのように変化しても、最終的にはカジノが勝ちます。実はここには、カジノが決して明かさない秘密が隠されています。それは、大数の法則です。

シックボーの仕組み

サイコロを3つ、大きさに賭けます。4~10は小さく、11~17は大きく、正しく賭ければお金を獲得できます。シックボーには囲みサイコロというものがあり、3つのサイコロの点が同じ場合、カジノディーラーが勝ちます。囲みサイコロが出現する確率は2.8%です。すると、大きな数字と小さな数字が出現する確率はそれぞれ 48.6% になります。カジノはこの 2.8% の確率に依存しています。すべてのギャンブラーが各ゲームに 100 元を賭けた場合、カジノは 100 ゲームをプレイした後に 280 元を獲得します。

(0.486+0.028)100100-0.486100100=280

しかし、このカジノ戦略には抜け穴があり、大口プレイヤーが突然数百億を賭けて勝った場合、カジノは突然倒産してしまいます。したがって、カジノは賭け金の制限を設定し、制限を超えた場合、このラウンドでそれ以上の賭けを行うことはできません。このように、ギャンブラーは一時的には幸運にもお金を勝ち取ったとしても、長期的には確率によって負けることになります。無限の数のシックボー ゲームで、ギャンブラーはお金の 2.8% を失うことになります。

大数の法則

カジノオーナーの優位性はギャンブラーの優位性よりわずか 2% 高いだけです。1 回のギャンブルで、オーナーは損失を被ったり、連続して損失を被ったりすることもあります。しかし、カジノのオーナーは損失を恐れることはありません。なぜなら、儲かる理由は「大数の法則」が働いているからだと知っているからです。人々がギャンブルを続ける限り、長期的に安定した利益を維持するために必要なのはわずか 2% の優位性だけです。

つまり、カジノはあなたがお金を勝ち取ることを恐れているのではなく、あなたが来ないことを恐れているのです。銀行が破産したという話は何年も前から聞いていますが、カジノが破産したという話は聞いたことがありますか?長期的には、カジノが常に勝者となります。これが、ギャンブルが長期的に勝つ理由です。

長期的に勝利する同様の例としては、さまざまな宝くじが挙げられます。宝くじの賞金プール資金は宝くじが開始されて以来どんどん蓄積されてきましたが、このお金は当然ながら大多数の宝くじ参加者から出ています。ダブルカラーボールで500万が当たる確率はどれくらいかご存知ですか?答えは1770万分の1です。

確率の変化

両面の重さが同じコインがあり、単語(裏面)または花(表面)が出る確率が 50% で、コインを投げるたびに前回の結果が変わるとします。コインを10,000回連続で投げた場合、表が出る可能性は約50%です。

しかし、10回だけ投げる場合、陽性結果が出る確率は変わり、確率は50%にならない可能性があります。したがって、カジノディーラーは、このプラス期待戦略が効果を発揮するために、このプラス期待戦略が十分な回数実行されるようにする必要があります。これは、プライベートエクイティ機関が定量取引戦略を開始したときに、特別な条件がない限り、その戦略を停止できない理由でもあります。

「大数の法則」を利用して金融市場で長期的な勝利戦略を作成する方法が、次の一連のコースの内容になりますので、お楽しみに!

要約する

上記では、確率、トレードが失敗する理由、正しいトレードの考え方、ギャンブルで長期的に勝つための原則などの観点からトレードを科学的に見る方法を説明しました。よく学べば、考え方が変われば行動も変わり、行動が変われば成功も変わると私は信じています。

宿題

  1. なぜトレーディングは確率のゲームなのでしょうか?
  2. 取引が失敗するその他の理由は何ですか?
Related Recommendations
Comment
All comments (2)

    好文章啊!

    5 years ago

    mark

    5 years ago
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)