��ことも、他のインジケーターと組み合わせて使用することもできます。 このチュートリアルでは、ボリンジャー バンドを使用する最も簡単な方法を使用します。つまり、価格が下から上へ上方向の軌道を突破すると、つまり上圧力線を突破すると、強気の力が強まり、上昇相場の波が形成され、買い開始シグナルが生成されます。価格が上から下へ下方向の軌道を下回ると、つまりサポートラインを下回ると、弱気の力が強まり、下降トレンドの波が形成され、売り開始シグナルが生成されます。
図4-20
買いポジションを開いた後、価格がボリンジャーバンドの中間軌道まで下落した場合、強気の力が弱まっているか、弱気の力が強まっていると考えられ、売り決済シグナルが生成されます。売りポジションを開いた後、価格がボリンジャーバンドの中間軌道まで上昇した場合、弱気の力が弱まっているか、強気の力が強まっていると考えられ、買い決済シグナルが生成されます。
ロングポジションオープン: ポジションがなく、終値が上値より高く、時間が14:45でない場合 ショートポジションを開く: ポジションがなく、終値が下限値より低く、時刻が14:45でない場合 ロングポジションのクローズ:ロング注文を保有し、終値が中間トラックより低い場合、または時間が14:45の場合 ショートポジションのクローズ:ショート注文を保有し、終値が中間トラックよりも高い場合、または時間が14:45の場合
戦略を実行するには、まずどのようなデータが必要かを検討する必要があります。どの API を通じて取得しますか?では、トランザクションロジックをどのように計算するのでしょうか?最後に、注文や取引にはどのような方法が使用されますか?次に、ステップごとに実装してみましょう。
いわゆる CTA 戦略フレームワークは、Inventor Quantitative によって正式にリリースされた標準フレームワークです。このフレームワークを使用すると、定量的な取引戦略の開発に関する些細な問題を心配する必要がなく、取引ロジックのプログラミングに直接集中できます。例えば、このフレームワークを使用しない場合、注文を出す際に、月ごとの振替、注文の売買価格、注文のキャンセルや注文が成立しなかったときのフォローアップなどを考慮する必要があります。
図4-21
上の図は、発明者の定量的ツールを使用した CTA 戦略フレームワークです。これは固定コード形式であり、すべてのトランザクションロジックコードは 3 行目から記述されます。使用中は品種コード(淡黄色)以外は変更の必要はありません。
なお、上図の商品コードは「rb000/rb888」となっており、シグナルデータは「rb000」、取引データは「rb888」を使用し、月シフトは自動で行われることを意味しています。もちろん、製品コード「rb1910」などの特定の製品コードを指定することもできます。これは、シグナル データとトランザクション データの両方で「rb1910」が使用されることを意味します。
FMZ には JavaScript 商品先物取引ライブラリが組み込まれています。戦略編集インターフェースの参照をクリックするだけで、コード内で使用できます。

よく考えてください。どのようなデータが必要ですか?私たちの戦略取引ロジックから、まず現在のポジションの状態を取得し、次に終値とボリンジャーバンドインジケーターの上限、中位、下限のトラックとの関係を比較し、最後に市場が閉じようとしているかどうかを判断する必要があることがわかりました。それではこのデータを取得しましょう。
最初のステップは、K ライン配列と前の K ラインの終値を取得することです。これは、K ライン配列がないとボリンジャー バンド インジケーターを計算できないためです。コードで表すと次のようになります:
図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 ラインが市場終値に近いかどうかを判断する必要があります。近い場合は、ポジションをクローズします。そうでない場合は、ポジションを開くことができます。コードは次のとおりです。
図4-23
上の図に示すように: 8 行目: 現在の K 行のタイムスタンプ属性を取得し、時間オブジェクト (new Date(timestamp)) を作成します。 9 行目: 時間オブジェクトに基づいて時間と分を計算し、K 行の時刻が 14:45 かどうかを判断します。
定量的な取引戦略において、ポジション情報は非常に重要な条件です。取引条件が満たされた場合、ポジションの状況やポジション数に基づいて注文を出すかどうかを決定することも必要です。たとえば、買いポジションを開く条件が満たされた場合、ポジションを持っている場合は再度注文する必要はありません。ポジションを持っていない場合は注文することができます。コードで表すと次のようになります:
図4-24
上の図に示すように:
11行目: 現在の位置ステータスを取得します。複数の注文がある場合、値は 1 になります。ショート注文がある場合、値は -1 になります。ポジションがない場合、値は 0 になります。
次に、ボリンジャーバンドインジケーターの上部、中間、下部のトラックの値を計算する必要があります。次に、まずボリンジャーバンド配列を取得し、次に配列から上部、中間、下部のバンドの値を取得する必要があります。 Inventor Quantitative Tool では、ボリンジャーバンド配列を取得するのは非常に簡単です。ボリンジャーバンド API を直接呼び出すことができます。難しいのは、ボリンジャーバンド配列が 2 次元配列であるため、上部、中部、下部のトラックの値を取得することです。
2 次元配列は、実は非常に理解しやすいものです。配列内の配列です。したがって、取得の順序は次のようになります。まず、配列内の指定された配列を取得し、次に、指定された配列から指定された要素を取得します (次の図を参照)。
図4-25
下の図に示すように、13行目から19行目では、ボリンジャーバンドの上部、中部、下部のレールの値を取得するコードを使用しています。このうち、13行目は発明者の定量ツールのAPIを直接使用してボリンジャーバンド配列を直接取得します。14行目から16行目は、まず2次元配列内の上レール配列、中レール配列、下レール配列をそれぞれ取得します。17行目から19行目は、上レール配列、中レール配列、下レール配列からそれぞれ前回のKラインのボリンジャーバンド上レール、中レール、下レール値を取得します。
図4-26
上記のデータを使用して、取引ロジックと注文を出すためのコードを記述できます。フォーマットも非常にシンプルです。最もよく使用されるのは「if ステートメント」で、言葉で説明すると、「条件 1 と条件 2 が満たされている場合は注文を行う。条件 3 または条件 4 が満たされている場合は注文を行う」となります。次の図に示すように:
図4-27
上の図では、21 行目から 24 行目が取引ロジックと注文配置コードです。上から下へ、ロングクローズ、ショートクローズ、ロングオープン、ショートオープンです。
ロングポジションを開く(23行目)を例にとると、これは「if文」です。この文で1行のコードしか実行されない場合は、中括弧「{}」を省略できます。このステートメントは、テキストに翻訳すると次のようになります: 現在のポジションが 0 で、終値が上位トラックよりも大きく、K ラインの時間が 14:45 でない場合は、「1 を返す」
注意深い人は、これらの行に「return 1」と「return -1」があることに気付くかもしれません。これは固定形式で、つまり、買いの場合は「return 1」と書き、売りの場合は「return -1」と書きます。ロングポジションのオープンとショートポジションのクローズはどちらも買いなので、「戻り値 1」と記述します。ショートポジションのオープンとロングポジションのクローズはどちらも売りなので、「戻り値 -1」と記述します。
この時点で、完全な戦略コードが記述されています。取引フレームワーク、取引データ、取引ロジック、注文の配置などを個別に記述すると、非常に簡単になります。以下は、この戦略のコード全体です。
図4-28
注意すべき点が 2 つあります。ルート K ライン条件が満たされたときに次の K ライン注文が出されるか、前の K ライン条件が満たされたときにルート K ライン注文が出されるような戦略ロジックを記述するようにしてください (ただし、必ずしもそうする必要はありません)。このようにすると、バックテストの結果は実際の結果とあまり変わりません。必ずしもこのように書く必要はありませんが、戦略ロジックが正しいかどうかには注意する必要があります。一般的に言えば、ポジションをクローズするロジックは、ポジションを開くロジックの前に記述する必要があります。これを行う目的は、戦略ロジックを可能な限り期待と一致させることです。たとえば、戦略ロジックが逆ポジションに追いついた場合、逆ポジションのルールは、まずポジションをクローズしてから新しいポジションを開くことです。最初に新しいポジションを開いてからそれを閉じるのではなく。オープニングロジックの直前にクロージングロジックを記述すると、この問題は発生しません。
上記では、戦略の紹介、ボリンジャーバンド指標の計算方法、戦略ロジック、売買条件、戦略コードの実装など、完全な日中定量取引戦略を開発するための各ステップを学びました。この戦略ケースを通じて、発明者の定量ツールのプログラミング方法に精通できるだけでなく、このテンプレートに基づいてさまざまな戦略に適応することもできます。
定量的な取引戦略は、主観的な取引経験やシステムの要約にすぎません。戦略を書く前に、主観的な取引で使用した経験やシステムを書き留めておき、それを1つずつコードに変換すれば、戦略を書くのがはるかに簡単になります。ぜひお試しください!
定量的取引戦略の開発において、プログラミング言語を 1 つしか選択できない場合は、迷わず Python を選択する必要があります。データの取得から戦略のバックテスト、取引まで、Python はビジネス チェーン全体をカバーしています。金融定量投資の分野で重要な位置を占めています。次のコースでは、Python 言語の基礎知識を学習します。
定量的取引戦略の開発において、プログラミング言語を 1 つしか選択できない場合は、迷わず Python を選択する必要があります。データの取得から戦略のバックテスト、取引まで、Python はビジネス チェーン全体をカバーしています。金融定量投資の分野で重要な位置を占めています。このコースでは、Python 言語の基礎知識を学習します。
これまでのコースを振り返ると、このセクションで学習するPython言語を含め、合計でMai言語、ビジュアル言語、JavaScript言語を学習しました。疑問に思う友人もいるかもしれません。私は定量取引を学ぶためにここに来たのに、なぜこんなに多くのプログラミング言語を学ばなければならないのですか?
実際、各プログラミング言語には独自の言語特性があり、良い言語と悪い言語の区別はありません。それは、あなたの戦略がどのプログラミング言語に適しているか、そしてそのプログラミング言語があなたに合っているかどうかによって決まります。だから、自分でやってみなければ分からない、という格言があります。これが、私たちがプログラミング言語について話すことに多くのスペースを割いている理由です。仕事をうまくやり遂げたいなら、まずツールを磨かなければなりません。
同時に、私たちは定量的研究への扉をすべての人に開き、さまざまなプログラミング言語の知識を普及させることにも取り組んでいます。定量的研究は私たちが想像するほど神秘的で手の届かないものではありません。定量的研究は将来的に普及し、一般の人々にもアクセスできるようになると信じています。
定量取引のプロセスは、データの取得、データの分析と計算、データの処理などに他なりません。データ分析の面では、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 で記述すると、次のようになります。
図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 つの異なる変数です。識別子(変数、関数、プロパティ、関数パラメータの名前)の最初の文字は、文字、アンダースコア() の場合、次の図に示すように、それに続く文字は数字になることもあります。
図4-30
コメントは、コード行の翻訳または説明です。ルールは非常に単純で、単一行コメントとブロックレベルコメントが含まれます。単一行コメントはポンド記号 (#) で始まり、ブロックコメントは 3 つの単一引用符 (“‘) または 3 つの二重引用符 (”“”) で始まり、3 つの単一引用符 (“’) または 3 つの二重引用符 (”“”) で終わります (次の図を参照)。
図4-31
Python の最も特徴的な機能は、中括弧 {} を必要とせずに、インデントを使用してコード ブロックを示すことです。 インデント用のスペースの数は可変ですが、同じコード ブロック内のステートメントには同じ数のインデント用のスペースが含まれている必要があります。以下のように: この場合、プログラムはエラーを報告します。 if 条件が true であっても、コードが実行される前に Python がコード構文が正しいかどうかを自動的に検出するため、「True」は出力されません。コード形式が正しくない場合、プログラムは実行されません。その理由は、コードの 5 行目に統一されたコード インデント形式がないためです。 4 スペースのインデントは Python の固定形式であり、誰もがそれに精通している必要があります。
図4-32
変数には、あらゆるタイプのデータを保存できます。変数の名前を記述するだけで変数が作成されます。ただし、変数を作成するときは、同時に変数の値を設定する必要があります。そうしないと、プログラムはエラーを報告します。等号 (=) 演算子の左側は変数名であり、等号 (=) 演算子の右側は変数に格納される値です。下の図に示すように、name2 は変数名であり、「発明者定量化」は変数の値です。 name2 に新しい値を設定しない場合、name2 の値は常に「発明者定量化」になります。
図4-33
Python には 6 つのデータ型があり、そのうち 3 つは不変で、残りの 3 つは可変です。名前が示すように、不変データは作成されると値を変更できず、メモリ内のアドレスは一意になります。一方、可変データはメモリ内のアドレスへの参照であり、値が変更されてもメモリ アドレスは変更されません。
不変データ(3):数値、文字列、タプル
変更可能なデータ(3):リスト、辞書、セット。
図4-34
Python の数値型は、int (整数)、float (浮動小数点)、bool (ブール値)、complex (複素数) をサポートします。組み込みの type() 関数を使用すると、変数が参照するオブジェクトの型を照会できます。以下のように表示されます。
図4-35
ほとんどの言語と同様に、Python での数学は簡単です。算術演算子、比較演算子、論理演算子など、すべて学校で習ったものと同じです。その中で、算術演算子は加算、減算、乗算、除算の数学演算です。比較演算子は、2 つの値がより小さいか小さいかを比較できます。主な論理演算子は、論理 AND、論理 OR、および論理 NOT です。 [取引戦略でよく使用される文字列について簡単に説明していただけますか?] たとえば、当社の取引戦略で最もよく使用される文字列は、「rb1910」、「MA1910」などの製品コードです。
図4-36
「and」は論理積であり、「かつ」を意味することに注意してください。 「または」は論理 OR であり、「いずれか」を意味します。 「!」は論理否定で、「いいえ」を意味します。 「and」は、すべての条件が「真」の場合、最終条件も「真」になることを意味します。 「または」は、すべての条件のうち、いずれか 1 つが「真」であれば、最終条件も「真」になることを意味します。
100があれば*式 (10-1)/(10+5) の場合、プログラムはどのステップを最初に計算しますか?中学校の数学では、①同じレベルの演算であれば、一般的には左から右へ計算すると教えられています。 ② 足し算と引き算、掛け算と割り算がある場合は、まず掛け算と割り算を計算し、その後に足し算と引き算を計算します。 ③括弧がある場合は括弧内の内容を先に計算します。 ④演算法則に準拠している場合は、演算法則を利用して計算を簡略化することができます。 Mai 言語の優先順位は、以下のとおりです。
図4-37
ブール値は真偽を表し、通常は条件判断やループ文で使用されます。 Python では、真と偽を表す 2 つの定数「True」と「False」が定義されています。 実際、次の図に示すように、任意のオブジェクトをブール型に変換し、条件判断に直接使用することもできます。
図4-38
文字列はテキストです。「if1905」などの文字列は、商品コードを設定するときによく使用されます。 Python の文字列は、一重引用符 ‘ または二重引用符 “ で囲まれます。プラス記号 + は文字列連結演算子です。次に示すように、インデックス値に基づいて文字列内の文字を取得できます。
図4-39
リストは、Python で最も頻繁に使用されるデータ型です。リストはコンテナと考えることができますが、コンテナ内の要素は左から右の順に並べられます。最初の要素は 0、2 番目の要素は 1 というように続きます。さらに、Python リストには、次に示すように任意のデータ型を保存できます。
図4-40
Python の関数は、中学校で習った関数と基本的に同じです。次の図に示すように、関数に渡されるものと、関数の計算によって出力されるものと考えることができます。
図4-41
私たちの生活の中では、「もし今日雨が降ったら、傘をさします」というような表現がよく出てきます。つまり、ステートメントは指定された条件が True の場合にのみコードを実行します。注意: コードのインデント形式に注意してください。そうしないと、Python エラーが生成されます。次の図に示すように:
図4-42
If…else ステートメントもよく使用されるステートメントです。たとえば、「今日雨が降ったら傘を差します。そうでなければ傘を差しません。」 else ステートメントは if ステートメントの拡張であり、つまり、指定された条件が False の場合にのみ else に続くコードが実行されます。次の図に示すように:
図4-43
Python は switch ステートメントをサポートしていないため、複数の条件判断を実装するには elif ステートメントのみを使用できます。たとえば、プラスのラインであれば強気になり、マイナスのラインであれば弱気になり、そうでなければ様子を見ます。次の図に示すように:
図4-44
場合によっては、過去数日間の K ライン データを取得する必要があり、K ライン データの位置に従って K ライン配列から順番に取得する必要があります。その場合、次の図に示すように、for ループを使用すると非常に便利です。
図4-45
市場は常に変化していることは誰もが知っています。最新の K ライン配列を取得したい場合は、同じコードを何度も繰り返し実行する必要があります。その場合は、whilex ループを使用します。指定された条件が真である限り、ループは常に最新の K ライン配列を取得できます。
図4-46
ループには前提条件があります。前提条件が「真」の場合にのみ、ループは繰り返し実行を開始し、前提条件が「偽」になるまでループは終了しません。ただし、break ステートメントはループの実行中にすぐにループから抜け出すことができ、continue ステートメントは特定のループを中断して次のループを続行することができます。次の図に示すように:
図4-47
return ステートメントは関数の実行を終了し、関数の値を返します。 return ステートメントは関数本体にのみ使用できます。コード内の他の場所に出現すると、構文エラーが発生します。
図4-48
戦略アーキテクチャは、戦略の固定形式として理解できます。発明者の定量ツールは、ポーリング モードを採用しています。以下は、古典的な商品先物戦略アーキテクチャです。
4行目から7行目はプログラム全体のメインエントリ関数です。つまり、コンピュータは4行目からコードの実行を開始します。次に、直接5行目を実行し、無限ループに入ります。次に、無限ループ内で戦略ロジック関数(onTick)とスリープ関数(Sleep)が実行されます。onTick関数は1行目のコードであり、2行目に戦略ロジックを記述できます。ループ内ではプログラムの実行速度が非常に速いことがわかっているので、スリープ関数(Sleep)を使用すると、プログラムをしばらく一時停止できます。次のコードSleep(500)は、ループが完了するたびに500ミリ秒間スリープすることを意味します。
図4-49
上記は Python 言語の簡単な紹介です。これは単なる基本的な知識ですが、これを使用して簡単な定量取引戦略を記述することは問題ありません。より複雑な戦略を記述する必要がある場合は、Inventor Quantitative Tool の Python 言語 API ドキュメントを参照してください。
テクニカル分析の分野におけるトレンド戦略の中で、移動平均とチャネルブレイクスルーは間違いなく2大流派です。目標は価格変動のトレンドを捉えることですが、これら 2 つの戦略の取引哲学とリスク特性はまったく異なります。このセクションで Python 言語の概要を学習した後、次のセクションでは、チャネル突破のための定量的取引戦略の記述方法を説明します。
前回の記事では、Python言語の概要、基本構文、戦略フレームワークなどを学びました。内容は退屈ですが、トレーディング戦略を実行するために不可欠なスキルなので、必ず学ばなければなりません。この記事では、鉄は熱いうちに打つ、という姿勢で前回の記事の基本的な Python の知識を引き継ぎます。シンプルな戦略から始めて、使いながら学び、誰もが段階的に実行可能な定量的取引戦略を実現できるように支援します。
多くの取引戦略の中で、ドンチャンチャネル戦略は最も古典的な画期的な戦略の1つであるはずです。1970年代にはすでによく知られていました。当時、外国の会社が主流のプログラム取引戦略のシミュレーションテストと研究を実施しました。その結果は、すべての戦略テストの中で、ドンチャン チャネル戦略が最も成功したことがわかりました。
その後、トレード史上最も有名な「タートル」トレーダーのトレーニングが米国で行われ、大きな成功を収めました。当時、「タートルズ」の取引方法は秘密にされていたが、10年以上経って「タートルズ取引ルール」が公開されると、「タートルズ」がドンチャンチャネルの改良版を使用していたことが判明した。戦略。
ブレークスルー取引戦略は、比較的滑らかなトレンドを持つ商品の取引に適しています。最も一般的なブレークスルー取引方法は、価格とサポートおよびレジスタンスの相対的な位置関係を使用して、特定の取引の売買ポイントを決定することです。このセクションのドンチャン チャネル戦略はこの原則に基づいています。
ドンチャン チャネルはトレンド インジケーターであり、その外観とシグナルはボリンジャー バンド インジケーターに多少似ています。しかし、ドンチャンの価格チャネルは、一定期間内の最高価格と最低価格に基づいて構築されます。たとえば、最新の 50 本の K ラインの最高価格の最大値を計算して上部のトラックを形成し、最新の 50 本の K ラインの最低価格の最小値を計算して下部のトラックを形成します。 このインジケーターは、異なる色の 3 つの曲線で構成されています。デフォルトでは、20 期間内の最高価格と最低価格が表示され、市場価格の変動性を示します。チャネルが狭い場合、市場の変動性が小さいことを意味します。逆に、チャネルが広い場合、市場の変動性が比較的大きいことを意味します。
価格が上限の線を上回った場合は買いシグナル、逆に価格が下限の線を下回った場合は売りシグナルとなります。上限と下限のトラックは最高値と最低値を使用して計算されるため、通常の状況では、価格が同時に上限チャネルラインと下限チャネルラインを下回って上昇したり下落したりすることはほとんどありません。ほとんどの場合、価格は上側または下側の軌道に沿って、または上側と下側の軌道間で一方的に動きます。
Inventor Quantitative Tool では、ドンチャン チャネルの計算方法は非常に簡単で、次の図に示すように、指定期間内の最高価格または最低価格を直接取得できます。5 行目は 50 期間の最高価格の最大値を取得し、6 行目は 50 期間の最低価格の最小値を取得します。
図4-50
ドンチャン チャネルを使用する方法は多数あります。単独で使用することも、他のインジケーターと組み合わせて使用することもできます。このコースでは最も簡単な方法を使用します。つまり、価格が下から上へ上向きの軌道を突破すると、つまり上圧力線を突破すると、強気の力が強まり、上昇相場の波が形成され、買い開始のシグナルが現れると考えられます。が生成されます。価格が上から下に下落し、下側のトラックを突破した場合、つまりサポートラインを下回った場合、ショートサイドが強くなり、下降トレンドが形成され、売り開始となると考えられます。信号が生成されます。
図4-51
ロングポジションが開かれた後、価格がドンチャンチャネルの中間軌道まで下落した場合、強気派が弱まっているか弱気派が強まっていると判断され、売りシグナルが生成されます。価格が中間軌道まで下落した場合、ショートポジションが開かれた後にドンチャンチャネルの軌道を外れた場合、強気派が弱まっているか弱気派が強まっているとみなされ、売りシグナルが生成されます。ドンチャンチャネルの中間軌道に戻った場合、弱気派の力が弱まっているか、強気派の力が強まっており、買い終値シグナルが生成されます。
取引条件 ロングポジションオープン: ポジションがなく、終値が上限トラックよりも大きい場合 ショートポジションを開く: ポジションがなく、終値が下限値より低い場合 ロングポジションのクローズ:ロングオーダーを保有し、終値が中間トラックより低い場合 ショートポジションのクローズ:ショート注文を保有し、終値が中間トラックよりも高い場合
戦略を実行するための最初のステップはデータを取得することです。なぜなら、データは取引戦略の前提条件だからです。どのようなデータが必要か想像してみてください。このデータはどのように入手するのでしょうか?次に、これらのデータに基づいて取引ロジックを設計し、最後に取引ロジックに従って売買注文を出します。具体的な手順は次のとおりです。
トレーディング ライブラリは機能モジュールとして考えることができます。トレーディング ライブラリを使用する利点は、戦略ロジックの作成に集中できることです。たとえば、トレーディングライブラリを使用する場合、ポジションを開いたり閉じたりするときに、トレーディングライブラリ内の注文 API を直接使用できます。しかし、トレーディングライブラリを使用しない場合、ポジションを開いたり閉じたりするときに、市場価格を取得したり、注文を出したのに実行されない問題を考慮したり、注文をキャンセルする問題を考慮したりする必要があります。
図4-52
上の図は、発明者の定量的ツールを使用した CTA 戦略フレームワークです。これは固定コード形式であり、すべてのトランザクションロジックコードは 4 行目から記述されます。その他の部分での変更は必要ありません。
JavaScript のテンプレート ライブラリは組み込まれていますが、Python ではこのテンプレートをコピーして保存する必要があります: https://www.fmz.com/strategy/24288。次に、ポリシー編集ページで「参照」をクリックします。 もちろん、テンプレートライブラリを使用せずに戦略を完了することもできます。

よく考えてください。どのようなデータが必要ですか?私たちの戦略取引ロジックから、まず現在のポジションの状態を取得し、次に終値とボリンジャーバンドインジケーターの上限、中位、下限のトラックとの関係を比較し、最後に市場が閉じようとしているかどうかを判断する必要があることがわかりました。それではこのデータを取得しましょう。
最初のステップは、K ライン配列と現在の K ライン終値を取得することです。K ライン配列を使用してのみ、API を呼び出して N 期間の最高価格または最低価格を取得できます。コードで表すと次のようになります:
図4-53
上の図に示すように:
4 行目: 固定形式の K 行配列を取得します。
5 行目: K ラインの長さをフィルタリングします。N 期間の最高価格または最低価格を計算するため、使用するパラメータは 50 です。K ラインの数が 50 未満の場合、計算できません。したがって、ここで K ラインの長さをフィルタリングする必要があります。K ラインが 50 未満の場合、このループをスキップして、次の K ラインを待機し続けます。
6行目: コード「records」を使用します[「len(records) - 1]」は、まずKライン配列の最後のデータ、つまり最新のKラインデータを取得します。このデータはオブジェクトであり、始値、最高値、最低値、終値、取引量、時間などのデータが含まれています。オブジェクトであるため、「.Close」を直接使用して最新のKライン終値を取得できます。
定量的な取引戦略において、ポジション情報は非常に重要な条件です。取引条件が満たされた場合、ポジションの状況やポジション数に基づいて注文を出すかどうかを決定することも必要です。たとえば、買いポジションを開く条件が満たされた場合、ポジションを持っている場合は再度注文する必要はありません。ポジションを持っていない場合は注文することができます。今回は位置情報を関数に直接カプセル化し、この関数を呼び出すだけで使用できるようになります。
図4-54
上の図に示すように: ポジション情報を取得する関数です。ショートポジションの場合は0を返し、ロングポジションの場合は1を返し、ショートポジションの場合は-1を返します。上記のコードに注目してください: 2 行目: パラメータを持たない mp という名前の関数を作成します。 3 行目: 固定形式の位置配列を取得します。 4行目: 位置配列の長さを決定します。長さが に等しい場合は、空の位置であるはずなので、0を返します。 6 行目: for ループを使用して配列の走査を開始します。次のロジックは非常に単純です。ロング ポジションを保持している場合は 1 を返し、ショート ポジションを保持している場合は -1 を返します。 18 行目: 位置情報を取得するために、先ほど記述した関数 mp を呼び出します。
Inventor Quantitative Tool では、論理計算を自分で記述しなくても、「TA.Highest」および「TA.Lowest」関数を使用して直接取得できます。また、「TA.Highest」関数と「TA.Lowest」関数によって返される結果は、配列ではなく特定の値です。これは非常に便利です。それだけでなく、公式には何百ものインジケーター機能が組み込まれています。
図4-55
上の図に示すように: 19行目: 「TA.Highest」関数を呼び出して、50期間の最高価格の最大値を取得します。 20行目: 「TA.Lowest」関数を呼び出して、50期間の最低価格の最小値を取得します。 21行目: 50期間の最高価格の最大値と50期間の最低価格の最小値に基づいて平均値を計算します。
上記のデータを使用して、取引ロジックと注文を出すためのコードを記述できます。フォーマットも非常にシンプルです。最もよく使用されるのは「if ステートメント」で、言葉で説明すると、「条件 1 と条件 2 が満たされている場合は注文を行う。条件 3 または条件 4 が満たされている場合は注文を行う」となります。
図4-56
上の図に示すように: 22行目: 固定形式のトランザクションライブラリを使用する 23 行目と 24 行目: これは、前に学習した「比較演算子」と「論理演算子」を使用した、ロング ポジションをクローズするためのステートメントです。つまり、現在ロング ポジションを保有しており、終値が中間トラックよりも低い場合は、すべてのポジションがクローズされます。 25 行目と 26 行目: これはショート注文をクローズするためのステートメントで、前に学習した「比較演算子」と「論理演算子」を使用します。つまり、現在ショート注文を保持しており、終値が中間トラックよりも高い場合、すべてのポジションがクローズされます。 27 行目: 現在のポジションの状態を判断します。ポジションがショートの場合は、次の手順に進みます。 28 行目と 29 行目: 終値が上限トラックよりも高いかどうかを判断します。終値が上限トラックを上回った場合は、買いでポジションを開きます。 行 30 および 31: 終値が下限値より低いかどうかを判断します。終値が下限値より低い場合は、売却してポジションを開きます。
上記では、戦略の紹介、ドンチャン チャネルの計算方法、戦略ロジック、売買条件、戦略コードの実装など、Python を使用して完全な定量取引戦略を開発するための各ステップを学習しました。このセクションは、出発点として、単純な戦略にすぎません。方法は 1 つではありません。独自の取引システムに従ってさまざまな取引方法を重ね合わせて、独自の定量取引戦略を形成することができます。
定量取引戦略の開発において、プログラミング言語の実行速度の観点から、どの言語が最も速いかと問われれば、それは C++ に他なりません。特にデリバティブや高頻度取引の分野では、C++ は独自の言語特性と数値計算における優位性を持っています。JavaScript や Python と比較して、その速度は数桁も向上します。将来デリバティブや高頻度取引の分野で開発を進めたいと考えているなら、このコースは見逃せないでしょう。
バックテストは、定量取引と従来の取引の最大の違いです。過去に発生した実際の市場データに基づいて、戦略信号のトリガーとトランザクションのマッチングを迅速にシミュレートし、一定期間のパフォーマンスレポートやその他のデータを取得します。国内外の株式、商品先物、外国為替などの市場における戦略策定の最も重要な要素の一つです。
前の章では、主流のプログラミング言語の基礎を学び、これらのプログラミングの基礎を使用していくつかの簡単な取引戦略を作成する方法を教えました。長い行進の半分以上をすでに通過したと言えます。ただし、戦略を一度作成しても、それを直接実践することはできません。戦略がモデルの内容を完全に実装し、スムーズに実行できるようになるまで、継続的なバックテスト、デバッグ、バックテスト、デバッグなどが必要になります。
定量的な取引ロジ