量的な取引から資産管理へ - 絶対的収益のためのCTA戦略開発

作者: リン・ハーンリディア, 作成日:2023-02-07 09:58:41, 更新日:2023-09-18 20:25:11

img

量的な取引から資産管理へ - 絶対的収益のためのCTA戦略開発

前言

なぜこのコースを取るべきか?

このコースを受講することで何が得られますか? まず,このコースはJavaScriptとPythonプログラミング言語に基づいています. 言語は単なる技術です. 最後に,私たちはこの技術を産業に適用する必要があります. 定量取引は,現在急速な発展段階にあり,人材への需要が大きい新興産業です.

このコースの体系的な学習を通じて,定量取引の分野についてより深い理解を得ることができます. あなたが定量取引の分野に入るために準備している学生である場合,それはあなたにも役立ちます. あなたが株式または先物投資の熱心者であれば,定量取引は主観的な取引を支援することができます. 取引戦略を開発することによって,あなたは金融市場で利益を得ることができ,また,あなたの投資と財務管理のためのチャネルとプラットフォームを広げることができます.

その前に,私の個人的な取引経験についてお話しします. 私は金融専攻ではありません.統計学を学びました. 最初は,私は学校時代に主観的に株式を取引し始めました. その後,私は主に戦略研究と戦略開発に従事する国内プライベート・エクイティファンドの定量的な取引実習者になりました.

私はこのサークルで10年以上取引しており,さまざまなタイプの戦略を開発しています.私の投資哲学は:リスク管理は,何よりも上にあり,絶対的リターンに焦点を当てています.私たちのトピックのテーマは:定量的な取引から資産管理 - 絶対的リターンのためのCTA戦略開発です.

1.フューチャー CTA戦略 お金を稼ぐ論理

1.1 未来のCTAを理解する

CTAとは何か?CTAとは何か?CTAは外国では商品取引顧問,中国では投資マネージャーと呼ばれます.伝統的なCTAは,大半の投資家の資金を集め,それを専門投資機関に委託し,最終的に取引顧問 (CTA) による株式指数先物,商品先物,国債先物に投資することです.

しかし,実際には,グローバル先物市場の継続的な発展と拡大とともに,CTAの概念も拡大しており,その範囲は伝統的な先物市場をはるかに超えています.先物市場だけでなく,金利市場,株式市場,外為市場,オプション市場にも投資することができます.この種類について一定の量の歴史的データが存在する限り,これらの歴史的データに基づいて対応するCTA戦略を開発することができます.

1980年代には電子取引技術はまだ成熟していなかった.当時,ほとんどのトレーダーはウィリアム指数,KDJ,RSI,MACD,CCIなどの技術指標を手動で描き,商品先物取引の将来の傾向を判断した.後にトレーダーは,顧客が資産を管理するのを助けるために特別なCTAファンドを設立した.1980年代に電子取引が普及するまで,実際のCTAファンドが現れ始めた.

CTA基金管理の規模の変化

img

数十億ドルで

上記のグラフを見てみましょう.特に定量取引の台頭により,グローバルCTAファンドの規模は2005年の130,600億ドルから2015年には300億ドル以上に増加しました.CTA戦略は,グローバルなヘッジファンドの主流投資戦略の1つになりました.

CTAファンドの業績は,そのサイズとともに上昇している.下記のチャートでBarclays CTA指数を見てみましょう. Barclay CTA指数は,グローバルコモディティ取引アドバイザーにとって代表的な業界基準です. 1979年末から2016年末まで,Barclay CTAファンド指数の累積収益率は28.95倍,年間収益率は9.59%,シャープ比率は0.37,最大引き上げ率は15.66%でした.

資産配分ポートフォリオでは,CTA戦略は通常,他の戦略と非常に低い相関を維持しているためである.下記の赤い円のように,2000年から2002年にかけての世界的な株式熊市場と2008年の世界的なサブプライム危機の間,バークレイCTAファンド指数は落ちなかっただけでなく,ポジティブなリターンも達成した.株式市場と債券市場が危機に陥ったとき,CTAは強いリターンを提供できた.また,1980年以降のバークレイ商品CTA指数の利益水準がS&P500よりも強く,引き下げもS&P500よりもはるかに低いことがわかります.

img

中国におけるCTAの発展は過去10年でしかなかったが,その勢いは非常に強い.これは主に国内商品先物取引の比較的オープンな取引環境,取引資金の低しきい値,ロングとショートの両方の取引にマージンシステムの使用,低取引コスト,株式と比較して取引所のより高度な技術構造,およびより簡単なシステム取引によるものである.

2010年以来,CTA基金は主に民間基金の形で存在している.国内政策における基金特別口座の投資範囲の段階的な開設により,CTA基金は基金特別口座の形で存在し始めた.より透明でオープンな運用モードは,より多くの投資家が資産を配分するための必要なツールにもなった.

CTA戦略は,入場しやすさ,資本の限界,取引戦略の実行,API接続性において他の取引戦略よりも個別のトレーダーにとってより適しています.国内先物契約は非常に小さいです.例えば,トウモロコシまたは大豆粉は数千元で取引することができ,資本の限界はほとんどありません.また,一部のCTA戦略は伝統的な技術分析から来ているため,他の戦略と比較して比較的簡単です.

CTA戦略の設計プロセスは比較的シンプルです.まず,歴史的なデータが最初処理され,次いで定量モデルに入力されます.定量モデルには,数学モデリング,プログラミングデザイン,その他のツールによって形成された取引戦略が含まれ,これらのデータを計算し分析することによって取引信号が生成されます.もちろん,実際の開発では,上記のチャートほど簡単ではありません. ここでは,全体的な概念を提供します.

1.2 フューチャー戦略の種類

CTA戦略は,取引戦略の観点からも多様性があります. それはトレンド戦略またはアービタージ戦略であり,長期間の中期および長期戦略,または日中の短期戦略であり,戦略論理は技術分析または基本的分析に基づいており,主観的な取引またはシステム取引である可能性があります.

CTA戦略には異なる分類方法があります.取引方法によると,主観的取引とシステム取引に分けることができます.外国CTA戦略の開発は比較的進歩しており,システム取引のCTA戦略は100%に近いです.分析方法によると,基本分析と技術分析に分けることができます.収入源に応じて,トレンド取引と振動取引に分けることができます.

一般的にCTA戦略は,取引市場全体の約70%を占め,トレンド戦略は約25%を占め,反トレンドまたはトレンド逆転戦略は約5%を占め,それらのうち,最も大きな割合を持つトレンド戦略は,ポジション期間に応じて高周波取引,日中取引,短期・中期取引,中期・長期取引に分けることができます.

高周波市場構築戦略

現在,市場には2つの主流の高周波取引戦略があります.一つは高周波市場構築戦略であり,もう一つは高周波仲介戦略です.市場構築戦略は,取引市場で流動性を提供することです.つまり,市場構築者との取引市場で,誰かが取引したい場合,市場構築者は,その注文が取引可能であることを確保する必要があります.市場に十分な流動性がない場合,注文が取引できない場合は,市場構築者は相手方の注文を購入または販売する必要があります.

高周波アビタージ戦略

高周波仲介とは,高度に相関する2つの株やETFとETFポートフォリオの取引を指す.ETFの計算方法によると,ETFの予想価格は同じ方法で計算することができる.ETFインデックス価格は,ETFの予想価格を引いて価格差を得ることができる.通常,価格差は価格チャネルで実行される.価格差が上下チャネルを通過した場合,価格差を取引し,価格差の返還を待って,そこから収入を得ることができます.

日中の戦略

文字通り,一夜間のポジションがない限り,それは日中取引戦略と呼ばれる.日中取引の保持期間が短いため,市場に入ってからすぐに利益を得て,すぐに市場から脱出することは通常不可能です.したがって,この取引モードには市場リスクが低い.しかし,市場は短時間で急速に変化するため,日中戦略は通常トレーダーに対してより高い要求を持っています.

中長期戦略

理論上,保有期間が長くなるほど,戦略的能力は大きくなり,リスク・リターン比も低くなります.特に機関取引では,短期戦略の限られた容量のために,短期間の期間で大きな資金が市場に入ったり退出したりできないため,より長期的な戦略が割り当てられます.一般的に,ポジション期間は数日,数ヶ月,またはそれ以上です.

CTA戦略データ

一般的にCTA戦略は,開店価格,最高価格,最低価格,閉店価格,取引量などを含む分,時間,日々のデータで研究されます.L2データにおけるTickデータ,例えば購入価格,販売価格,購入量,販売量などの詳細なデータを使用するCTA戦略はわずかです.

CTA戦略の基本考えについては,まず最初に考えるのは,従来の技術指標に基づいていること,この分野には多くの公共の参考資料があり,論理は通常シンプルで,その多くは統計的原則に基づいています.例えば,私たちは様々な技術指標を知っています:MA,SMA,EMA,MACD,KDJ,RSI,BOLL,W&R,DMI,ATR,SAR,BIAS,OBV,など.

また,市場にはいくつかの古典的な取引モデルがあり,参考として使用され改善することもできます.例えば,複数の移動平均の組み合わせ,ダブルスルースト,R-ブレイカー,タートル取引方法,グリッド取引方法などです.

これらはすべて,伝統的な技術分析に基づく取引戦略である.このプロセスは,歴史的データと正しい取引概念に基づいて確率優位性を持つ要因または取引条件を抽出し,将来も市場がそのような法則を持つことを仮定する.最後に,取引戦略はコードと完全に自動取引によって実現される. ポジションを開く,利益を停止する,損失を停止する,ポジションを増やす,ポジションを減らすなど,一般的に手動の介入を必要としない.実際には,価格時間系列の正の自動相関系数を使用して勝者を購入する戦略である.

CTA戦略の最大の利点は,現在の市場が上昇しているか下落しているかに関わらず,絶対的な利益を得ることができるということです.特に市場が急速に変化しているとき,または市場のトレンドが明らかにスムーズである場合,戦略の利点は明らかです.要するに,トレンドがある場合,利益があります.しかし,市場が不安定な状況にあり,トレンドが明らかでない場合,戦略は高点で購入し,低点で販売し,損失を往復させることができます.

1.3 フューチャーCTA戦略の利益原則

CTAの先物取引戦略は主に以下の点から利益を得ています.

    1. 価格トレンドには反射性があり,常にトレンドに沿って継続する.投資家が価格が上昇することを観察すると,彼らはトレンドに従って購入し,結果として価格がさらに上昇する.価格の低下も同じです.投資家はより不合理であるため,時には価格が異常な上昇と異常な低下を見ることができます.
    1. 各投資家は,利益と損失の比率に対する不対称な寛容度とリスクに対する異なる寛容度を持っています.ほとんどの小売投資家は,より保守的なホメオパシー取引方法を選択する傾向があり,市場はトレンドにもより傾向があります.
    1. 価格の形成は取引によって決定される.取引は人々によって動いていることは事実だが,人間の性質は変えることは難しい.これが固定パターンが繰り返される理由である.この戦略は,歴史的なデータバックテストにおいて効果的であり,将来においても効果的かもしれないことを示している.

また,トレンドトラッキングの取引の特徴は,市場がないときに少額のお金を失うこと,そして市場が来ると大金を稼ぐことです.しかし,取引をした人は,市場がほとんど不安定で,トレンド市場はわずか時間でしかないことを知っています.したがって,トレンドトラッキング戦略は,取引で低い勝利率を持っていますが,各取引の全体的な利益と損失は比較的大きいです.

トレンドトラッキング戦略は収入の観点から不安定であるため,多くの投資機関がポートフォリオを構築するために複数の種類と戦略を使用し,また一定量の逆転戦略で構成されます.逆転戦略は,価格の時間列に負の係数を持つ自動相関性である.すなわち,高い販売と低い取扱.

CTAと伝統的な資産との相関

img

上記のチャートを見てみましょう.理論的には,異なるスタイルまたは比較的低い相関を持つさまざまな戦略は,市場の価格のさまざまな変化に直面すると,時には同じ,時には異なる取引信号を同時に送信します.複数のリターン曲線が重なり合っているため,全体的なリターンは互いを補完し,リターン曲線はよりフラットになり,その結果,リターンの変動が減少します.

上記の観点から,マスター戦略を開発するよりも複数の適度サブ戦略を開発することが良いと結論づけることができます.これらの戦略を制御するにはどうすればよいですか? ここで,機械学習におけるランダムフォレストアルゴリズムから学ぶことができます.ランダムフォレストは独立したアルゴリズムではなく,複数の意思決定ツリーを含む意思決定フレームワークです. それは意思決定ツリーのサブ戦略の上に親戦略と同等です. サブ戦略クラスタは親戦略を通じて組織され制御されます.

次に,母戦略を策定する必要があります. 利益の変動が低い商品先物品のポートフォリオをスクリーニングするために,全商品先物市場における各品種の流動性,収益性,安定性を評価し,その後業界中立スクリーニングを行い,ポートフォリオの業界分散を通じて全体的な変動をさらに削減し,最終的に取引のための市場価値マッチングを通じて実際の商品先物品の多品種ポートフォリオを構築することができます.

各種は,マルチパラメータ戦略で構成され,バックテストで良いパフォーマンスを有するパラメータ組み合わせを選択することもできます.市場のトレンドが明らかになると,マルチパラメータ戦略は一般的に一貫して動作し,ポジションを追加することに等価です.市場は不安定な状況にあるとき,複数のパラメータ戦略のパフォーマンスは通常不一致で,それぞれロングまたはショートでリスクをカバーすることができます.これはポジションを削減することに等価です.これは,ポートフォリオの最大バックテスト率をさらに低下させ,全体のリターン率を変化しないまま維持することができます.

2. クラシックフューチャーCTA戦略例

ニュートンはかつて言いました "私が他者よりも遠くを見ることができるのは 巨人の肩の上に立っているからです"

CTA戦略は,SMA戦略,ボリンジャーバンド戦略,亀取引規則,モメント戦略,仲介戦略など,市場で公開されている.定量的な取引戦略は,一旦公開されるとゆっくりと失敗する1つの特徴を持っています.しかし,これは,これらの戦略から学び,巨人の肩の上に問題を解決できるように,それらの本質から学ぶことに影響しません.

2.1 フューチャーファンドメンタルの分析 (在庫,ベース差,価格)

基本分析は,短期的な価格動向を気にする必要はない. 価値が最終的に価格に反映されると考えられる. 価格の背後にある要因を分析して,多様性の価値を決定する. 一般的には,マクロ要因,多様性要因,その他の要因から,トップダウン分析方法が採用される.

img

上記のグラフから,商品価格に影響する要因が多く,これらのデータは常に変化していることがわかります. 個々の個人投資家は,客観的な分析を言うまでもなく,これらの膨大なデータを入手する能力を超えています.

実際,商品先物取引の基本的な分析は すべての要因を分析するものではありません. 複雑な情報からルールを見つけるために, 基本的な分析の基本的な要素を把握するだけです.

マクロ要因

マクロ経済データは複雑で変化する.毎日,毎時,国家政治,中央銀行,投資銀行,公式および非公式から多くの経済データが公開されています.政治と経済危機に加えて,マクロ分析は会話のための良い素材ですが,実践的ではありません. 米国で有名なファンド管理専門家であるピーター・リンチはかつて言いました: "私は毎年経済状況の分析に15分以上費やしません".

多様性因子

基本的分析では,多様性分析は主にプレミアムと割引,需要と供給の関係,商品の在庫,産業利益などを分析するものです. 商品先物取引の多様性要素分析を習得すれば,市場の傾向の大半を判断することができます.

フューチャーをした友達が知っているように,国内商品フューチャーズは単純に工業製品と農業製品に分けることができます.産業製品と農業製品の分析方法は異なります.我々は供給と需要の2つの側面について詳しく説明します.産業製品では,供給は比較的安定しています.大きな技術革新がない限り,生産能力は短期間に大きく変化する可能性はほとんどありません.したがって,産業製品の価格に影響を与える主な要因は需要です.農業製品の需要は比較的安定しています.長期的には,農業製品の需要は変化しますが,短期的には,農業製品の需要は安定傾向にあります.したがって,農業製品の価格に影響を与える主な要因は供給です.

経済学の法則によれば,物価を決定するのは供給と需要の関係である.理論的には,供給と需要のデータが入手できる限り,将来の物価が決定できる.工業製品では供給データを入手するのは簡単だが,需要データを入手するのは難しい.農業製品では需要データを入手するのは簡単で,供給データを入手するのは難しい.

実際には,さらに減算することができます. 経済市場における供給と需要の相互の結果は,在庫です. 在庫データを通して,市場供給と需要の関係を判断することができます. 商品の在庫が非常に高ければ,市場の供給が需要よりも大きいことを意味し,外的条件が変わらないという前提で商品価格が下がります. 商品の在庫が非常に低い場合,市場需要が供給よりも大きいことを意味し,外的条件が変わらないという前提で商品価格が上昇します.

商品の在庫分析に加えて,現貨市場と先物市場の価格差も分析する必要があります.これはベース差とも呼ばれます.先物価格が現貨価格よりも大きい場合,それを先物プレミアムと呼びます.先物価格が現貨価格よりも低い場合,それを先物割引と呼びます.先物配送システムによると,先物配送日に先物価格が現貨価格に等しくなければなりません.

プレミアムまたは割引に関係なく,先物配送システムの制約により,配送日の先物価格は理論上スポット価格に等しいべきである.配送日が近づくにつれて,スポット価格と先物価格の両方が一貫している傾向がある.一つは先物への帰還であり,もう一つは先物への帰還である.

上記の原理に従って,将来的な先物価格を同時に決定するために,在庫とベース差を使用することができます.商品の在庫が低く,先物価格がスポット価格よりもはるかに低い場合,当日市場の需要が供給よりも大きいと判断することができ,将来的にスポット価格の増加の確率は大きい.また,先物配達システムにより,配達日が近づくにつれて,先物価格が上昇し,即時価格に等しい.将来的に先物価格の増加の確率は大きいと判断できます.

最後に,将来価格の確率は,在庫とベース差によって判断されますが,購入と売却の正確なポイントはありませんので,入口と出口の明確なシグナルを与えるために技術分析と協力する必要があります. 基本分析全体の構造は:低在庫+深値下げ+技術分析 ロングポジションシグナル=ロング; 高在庫+実質的なプレミアム+技術分析 ショートポジションシグナル=ショート.

2.2 カメ取引に関する規則

トレーディング戦略に関しては,代表的な亀取引規則について語らなければなりません.亀取引規則は,取引の歴史で最も有名な実験から来ている. 商品投機家リチャード・デニス (Richard Dennis) は,偉大なトレーダーは生まれているか,訓練されているかを知りたいと思っています. この目的のために,1983年に13人を募集し,フューチャー取引の基本的な概念,そして自身の取引方法と原則を教えました.これらの学生はと呼ばれました.

その後4年間で,タートルズは平均年間複合利息80%を達成した.デニス氏は,単純なシステムとルールによって,取引経験が少ないまたは全くない人々が優れたトレーダーになることができることを証明した.しかし,一部のタートルは利益のためにウェブサイトでタートル取引規則を販売する.この行動を防ぐために,2人のオリジナルタートル,カーティス・ファースとアーサー・マドックが,ウェブサイトでタートル取引規則を無料で公開することを決定した.

真実が明らかになった後,人々はタートル取引規則が最適化されたドンチアンチャネルを採用し,ポジション管理のためにATRインジケーターを使用していることを発見した.数十年の歴史的テストの後,それは普通の小売投資家が利益を得るために簡単な取引方法になりました.それは今日もいくつかの品種で機能しています.

カメの基本原則

  • 優位性を掌握する ポジティブな期待を伴う 取引戦略を見つけましょう 長期的には ポジティブな収益を生み出せるからです
  • リスク管理: リスクをコントロールし,ポジションを保持する,そうでなければ利益を得るのに1日待たないかもしれない.
  • 忍耐力: 戦略 を 揺るぎない 行動 で 実行 する だけ で,本当に 体系 的 な 結果 を 達成 できる.
  • シンプルで明白です 長期的には シンプルなシステムは 複雑なシステムよりも活力があります

次に,カメの取引ルールを見てみましょう.

  1. 市場 - 何を買ったり売ったり,本質的にどの市場で取引するか. カメは先物トレーダーです.彼らは大きな取引量と高流動性を持つ市場のみを選択します. 市場を選択する為,不活性な取引は,エントリーと出口の追加の滑り込みを増やし,トレンドの多くの機会を逃します.
  2. トートル取引規則は,オープンポジションを計算し,ポジションシグナルを増やし,ストップロスのシグナルを増やすためにATR,すなわち平均リアル・ボラティリティ指数を採用する.これは非常に巧妙な設計である.元の意図は,市場の絶対的ボラティリティを通じてポジションのサイズを調整することである.市場のボラティリティが強いとき,ポジションを減らす,市場のボラティリティが弱いとき,ポジションを増やす.最初に,公式が以下のような単位を定義する: (総資産 * 1%) /ATR.初期ポジションは1ユニットである.その日の変動の減少がATRレベルに達したとしても,その日の損失は総資産の1%内で制御できる.価格が0.5ユニット上昇した場合,ロングポジションは1ユニット,最大4ユニットまで増加する.
  3. 市場への入場 - トートルの市場への入場はドンチアンチャネルに基づいています.価格が最初の20または55Kラインの最高価格を超えると,それはロングに行くために市場に参入します.価格が最初の20または55Kラインの最低価格を下回ると,それはショートに行くために市場に参入します.信号が表示されると,閉じるか次のKラインを待つことなく,取引のために市場に参入します.
  4. Stop loss - 長期的には,損失を止めない取引は成功しないが,ほとんどのトレーダーは損失ポジションを保持し,市場の転機を期待してリスクを取ろうとしている.タートルルルールは,損失ポジションからいつ引き出すかを厳格に規定している.あなたがロングポジションオーダーを保持し,価格が2ユニット低下した場合,ロングポジションはストップ損失で閉鎖される.あなたがショートポジションオーダーを保持し,価格が2ユニット上昇した場合,ショートポジションはストップ損失で閉鎖される.
  5. Stop profit - Turtleのルールでは,ストッププロフィートは浮動利益の多くを失うことを意味します.これは多くのトレーダーにとって受け入れられない部分でもあります.あなたが現在ロングポジションオーダーを保持し,価格が10日間のドンチアンチャネルのトラックを下回ると,すべてのロングオーダーを閉じる.現在のショートポジションオーダーが保持され,価格が10日間のドンチアンチャネルのトラック上に上昇すると,すべてのショートポジションを閉じる.

このように,カメの取引規則は非常にシンプルに見えますが,実際には,それは取引システムのプロトタイプの本当の意味を形成しています.それは完全な取引システムのすべての側面をカバーし,トレーダーに主観的な想像的な決定を下す余地を与えません.これは,プログラムされたシステムの操作の利点をプレイします.

カメ取引方法の最大の利点は,効果的な取引方法のセットを確立するのに役立ちます.バッチオープニング,ダイナミックストップ利益とストップ損失,および市場のトレンドフォロー戦略の組み合わせです.特にATR値の使用とポジション管理の概念は,非常に学ぶ価値がある.もちろん,トレンド追跡戦略,すなわち浮動利益と引き戻しとの共通の問題もあります. 勝者を購入して得られた浮動利益はすべて,次の急落の波のために取り出されます. 一般的なトレンドでは非常に強く,不安定な市場で期待されるほど良くない.

3. 将来のCTA戦略を実践する

3.1 MyLanguage をベースにした CTA のトレンド戦略の策定

過去世紀末には,非常に驚くべき取引方法が米国で金融投資分野に普及し始めた.数千人の実践の後,人々はこの方法が有効性と大きな実用的な価値があることを発見した.同時に,多くの投資専門家とプロトレーダーによって認識されている.今のところ,それは外国為替,金,株式,先物,原油,またはインデックスと債券である混沌操作方法であるほぼすべての金融投資分野に完璧に適用することができます.

混沌という言葉は,宇宙の混沌とした状態の記述を指します.その考えは,結果が避けられないことですが,既存の知識が結果を計算できないので,計算自体も結果を変えているため,最大または最小の結果が最終的に現れるかもしれませんが,避けられない結果はありません.これは取引市場に非常に似ています.参加者は市場を分析し,買ったり売ったりすると市場も変化します.市場には永遠の変動があります.参加者が市場の新しい形を理解すると,市場も参加者が認識していることを理解し,変化が発生します.そして参加者の未知の方向に変化する傾向があります.参加者が変化のルールを捉えることを防ぐのに十分な知恵を持っています.つまり,市場は安定していません.そして市場の過去を理解することは未来を表現することはできません.

混沌操作方法 (Chaos operation method) は,ビル・ウィリアムズによって発明された投資理念,取引戦略,エントリー&エグジット・シグナルの一連の完全セットである.現在,世界の多くの投資家が市場取引に参加するために混沌操作を採用している.中国の金融市場の発展が遅れ,混沌理論も比較的新しい考えであるため,中国では混沌操作方法を学ぶ人は少ない.混沌操作方法は普遍性の高い取引戦略であり,株式,債券,先物,外貨,デジタル通貨を含むほぼすべての金融投資分野に適用できるため,このコースは,混沌戦略の簡略化されたバージョンを投資利益と収入を改善するための出発点として使用する.

混沌操作方法の理論的基礎は,天気学者エドワード・ローレンズによって提案された混沌理論である.これは20世紀末の最大の科学的発見の一つである.彼は有名な"蝶効果"を提唱した.ビル・ウィリアムズは,混沌理論を金融投資分野に創造的に適用し,フラクタル幾何学,非線形動力学および他の学科と組み合わせ,非常に効果的な技術分析指標のシリーズを作成した.

混沌操作のメソッド全体は5つの主要な次元 (技術指標) から構成されています.

  • ワニ

  • フラクタル

  • 勢い

  • 加速する

  • バランスライン

img

上記のグラフを見てみましょう. アリゲーターは,フラクタル幾何学と非線形動学を用いた平衡線の集合です. その本質は指数的な重度の移動平均を拡張することです. これは,ある種の平均線ですが,その計算方法は通常の平均線よりも少し複雑です. 次に,MyLanguageでアリゲーターを定義する方法を見てみましょう:

// Parameters
N1:=11;
N2:=21;

// Defining the price median
N3:=N1+N2;
N4:=N2+N3;
HL:=(H+L)/2;

// Alligator
Y^^SMA(REF(HL,N3),N4,1);
R:=SMA(REF(HL,N2),N3,1);
G:=SMA(REF(HL,N1),N2,1);

まず,2つの外部パラメータN1とN2を定義し,次に外部パラメータに従って最高価格と最低価格の平均HLを計算し,次に異なるパラメータで平均HLを計算します.歯の場合,それは中線の中間期間の平均であり,は中線の大きな期間の平均です.この戦略では,を使用します.

混沌操作方法では,フラクタル概念は鮮明に定義されています.例えとして,手のひらを開いて,指を上向きにして,中指は上方フラクタル,左小指と指輪指,そして右指針指と親指はそれぞれ,記録的な高さのないK線を表しています.基本的なフラクタルはこの5つのK線で構成されています.次に,以下のようなコードでフラクタルを定義できます:

// Fractal
TOP_N:=BARSLAST(REF(H,2)=HHV(H,5))+2;
BOTTOM_N:=BARSLAST(REF(L,2)=LLV(L,5))+2;

TOP:=REF(H,TOP_N);
BOTTOM:=REF(L,BOTTOM_N);

MAX_YRG^^MAX(MAX(Y,R),G); 
MIN_YRG^^MIN(MIN(Y,R),G); 

TOP_FRACTAL^^VALUEWHEN(H>=MAX_YRG,TOP);
BOTTOM_FRACTAL^^VALUEWHEN(L<=MIN_YRG,BOTTOM);

アリガターとフラクタルを計算した後,これらの2つの条件に基づいて単純な混沌操作戦略を書き,アリガターとフラクタルインデックスを計算するための基準価格として指数的に加重された移動平均線をグループとして使用できます.もちろん,元の混沌操作戦略はより複雑になります.コードは以下のとおりです:

// If there are no current long position orders and the closing price rises above the upper fractal and the upper fractal is above the alligator, open a long position.
BKVOL=0 AND C>=TOP_FRACTAL AND TOP_FRACTAL>MAX_YRG,BPK(1);
// If there are no current short position orders and the closing price falls below the lower fractal and the lower fractal is below the alligator, open a short position.
SKVOL=0 AND C<=BOTTOM_FRACTAL AND BOTTOM_FRACTAL<MIN_YRG,SPK(1);

// Long positions are closed if the closing price falls below the jaws of the alligator.
C<Y,SP(BKVOL);
// Short positions are closed if the closing price rises above the jaws of the alligator.
C>Y,BP(SKVOL);

簡単な理解のために,私はコードに直接詳細なコメントを書きました. 我々は単に次のようにこの戦略の取引論理をリストすることができます:

  • ロング・オープニング・ポジション:現在,ロング・ポジションのオーダーがない場合,閉じる価格が上方フラクタルを下回り,上方フラクタルがアリガターの上方にある場合.
  • ショート・オープニングポジション:現在ショート・ポジションオーダーがない場合,閉じる価格が下方フラクタルを下回り,下方フラクタルがアリガターを下回る場合.
  • ローング 閉場:閉場価格がアリガター・チャインを下回る場合.
  • ショート閉場:閉場価格がアリガター・チャインを超えると.

次に,このシンプルな混沌操作戦略バックテストの結果が実際にどのようなものか見てみましょう.バックテストを実際の市場環境に近いものにするため,佣金は為替レートの2倍に設定され,開閉ポジションはそれぞれ2ジャンプの滑り点に制約されます.バックテストデータ型はリバーインデックスであり,取引型はリバーメインフォース連続で,1ロット開設ポジションが固定されています.以下は1時間のレベルでの予備的なバックテストパフォーマンスレポートです.

img

資本曲線とバックテストパフォーマンスデータから,戦略は良好なパフォーマンスを発揮し,全体的な資本曲線は安定して上昇した.しかし,2016年末以降,リバー品種の市場の特徴は,一方的な高い変動傾向から広範な変動傾向に変化した.資本曲線の観点から,2017年から現在までの利益は明らかに弱である.

一言で言えば,混沌操作方法の本質は,市場がどのように動いているか,またはそれが真実か偽のブレイクアウトかどうか気にせずに,ターニングポイントを見つけることです.それがフラクタルを突破した場合,それは直接市場に入ります.決して市場を予測しようとしないでください.しかし,観察者とフォロワーです.

3.2 JavaScript 言語に基づく CTA アビレージ 戦略の開発

ジョージ・ソロスは,1987年に書いた"The Alchemy of Finance"で重要な命題を提出した.市場価格が常に誤っているという意味では,将来への偏った見を示していると考えられる.彼は市場効率仮説は理論的仮説にすぎないと考えた.実際には,市場参加者は常に合理的ではなく,各時点において,参加者はすべての情報を完全に入手し,客観的に解釈することはできません.さらに,同じ情報であっても,すべてのフィードバックは異なります.つまり,価格自体にはすでに市場参加者の間違った期待が含まれています.したがって,本質的には,市場価格は常に間違っている.これは仲介者の利益源かもしれません.

上記の原則によると,非効率な先物市場で,異なる期間の配送契約に対する市場の影響が常に同期ではなく,価格設定が完全に効果的でない理由がわかる.次に,異なる期間の同じ取引対象物の配送契約価格に基づいて,両価格の価格差が大きい場合,クロス期間の仲介のために,異なる期間の先物契約を同時に購入および販売することができます.

商品先物と同様に,デジタル通貨にもクロス・ペリオド・アービタージ・コントラクト・ポートフォリオがあります.例えば,OKEX取引所で,以下があります: ETC 現週,ETC 来週,ETC 四半期.例えば,現週の ETC と ETC の四半期間の価格差が長期間 5 周りのままでいると仮定します.価格差が1日 7 に達すると,将来,価格差が 5 に戻ると予想します.その後,当週の ETC を販売し,同時期に ETC の四半期を購入して価格差をショートすることができます.その逆です.

この価格差は存在するが,手動アービタージには時間がかかる手動操作,精度が低いこと,価格変動の影響による不確実性が多い.定量アービタージの魅力は,定量モデルを通じてアービタージ機会を把握し,アービタージ取引戦略を策定すること,また,プログラムされたアルゴリズムを通じて取引所に自動取引注文を配置することで,迅速かつ正確に機会を把握し,効率的かつ安定的に利益を得ることができる.

このコースでは,FMZ量子取引プラットフォームとOKEX取引所のETC先物契約の使い方を教え,即時の仲介機会を把握し,毎回見られる利益を把握し,簡単な仲介戦略でデジタル通貨取引で遭遇するリスクをヘッジする方法を示します.

デジタル通貨のクロス・ペリオド・アービタージ戦略を作成する難しさ: 普通

戦略環境

  • 取引対象:Ether Classic (ETC)
  • スプレッドデータ: ETCの現在の週 - ETCの四半期 (共同統合テストを省略)
  • 取引期間: 5分
  • 取引期間: 5分
  • トランザクションタイプ:同じタイプのクロス期

戦略の論理

  • 価格差を長期化してポジションを開設する条件:当日口座にポジションがない場合,価格差がボールの下限よりも小さい場合は,価格差を長期化します.つまり,週間の開設ポジション ETCを購入し,四半期の開設ポジション ETCを販売します.
  • 価格差をショートしてポジションを開設する条件:当日口座にポジションがない場合,価格差がボールの上限よりも大きい場合は,価格差をショートします.つまり,週間の開設ポジション ETCを販売し,四半期の開設ポジション ETCを購入します.
  • 価格差を長引いてポジションを閉じる条件:当日週に流通口座がETCの長引いたオーダーを保有し,ETCの四半期を短引くオーダーを保有し,価格差がボールの中央境界よりも大きい場合,価格差を長引いて閉じる.つまり,週間のETCの閉店ポジションを売却し,四半期のETCの閉店ポジションを購入する.
  • 価格差をショートしてポジションを閉じる条件:当日週に現在の口座がETCのショートオーダーを継続し,ETC四半期のショートオーダーを継続し,価格差がボールの中央境界よりも小さい場合,価格差をショートして閉じる.つまり,週間のETCの閉じるポジションを購入し,四半期のETCの閉じるポジションを売る.

上記はデジタル通貨のクロス・ペリオド・アビトラージ戦略の単純な論理説明です. では,このプログラムで私たちのアイデアをどのように実装しますか? FMZ量子取引プラットフォームのフレームワークを構築しようとしています.

function Data() {}  // Basic data function
Data.prototype.mp = function () {}  // Position function
Data.prototype.boll = function () {}  // Indicator function
Data.prototype.trade = function () {}  // Order placement function
Data.prototype.cancelOrders = function () {}  // Order withdrawal function
Data.prototype.isEven = function () {}  // Processing single contract function
Data.prototype.drawingChart = function () {}  // Drawing function

function onTick() {
    var data = new Data(tradeTypeA, tradeTypeB);  // Create a basic data object
    var accountStocks = data.accountData.Stocks;  // Account balance
    var boll = data.boll(dataLength, timeCycle);  // Calculate the technical indicators of boll
    data.trade();  // Calculate trading conditions to place an order
    data.cancelOrders();  // Cancel orders
    data.drawingChart(boll);  // Drawing
    data.isEven();  // Processing of holding individual contract
}

//Entry function
function main() {
    while (true) {  // Enter the polling mode
        onTick();  // Execute onTick function
        Sleep(500);  // Sleep for 0.5 seconds
    }
}

監督取引における我々の取引プロセスはどんなものか想像してください. システム取引には本質的な違いはありません. それはデータを取得し,データを計算し,オーダートランザクションを配置し,オーダーを配置した後処理する以上のものではありません. プログラムでも同様です. まず,プログラムはコンベンションである20行で主要な機能を実行します. プログラムが取引戦略の事前処理 (ある場合) を完了すると,無限ループモード,すなわち投票モードに入ります. 投票モードでは,オンティック機能が繰り返し実行されます.

まず,基本価格データを取得し,その後口座残高を取得し,インデックスを計算し,取引条件を計算し,注文を提出し,最後に注文のキャンセル,引き出し,単一の契約の処理を含む注文の提出後の処理です.

戦略の枠組みは,戦略のアイデアとトランザクションプロセスに従って簡単に設定できます. 戦略全体が3つのステップに簡素化できます.

  • 取引前の事前処理
  • データを集めて計算します
  • 注文して後で処理する

次に,実際の取引プロセスと取引の詳細に従って,必要な詳細コードを戦略枠に記入する必要があります.

I. 取引前の事前処理

1. 必要なグローバル変数をグローバル範囲で宣言する.

  • 設定チャート用のチャートオブジェクトを宣言する
var chart = {}
  • Chart 関数を呼び出し,チャートを初期化する
var ObjChart = Chart ( chart )
  • 値差シリーズを格納する空の配列を宣言する
var bars = []
  • 記録履歴データタイムスタンプ変数を宣言する
var oldTime = 0

2. 戦略の外部パラメータを構成する.

var tradeTypeA = "this_week"; // Arbitrage A Contract
var tradeTypeB = "quarter"; // Arbitrage B Contract
var dataLength = 10; // Indicator period length
var timeCycle = 1; // K-line period
var name = "ETC"; // Currencies
var unit = 1; // Order quantity

3. データ処理機能を定義する

  • 基本データ機能:データ (※) コンストラクタ,データを作成し,その内部プロパティを定義します.アカウントデータ,ポジションデータ,K線データタイムスタンプ,アビタージA/B契約の購入/販売価格,およびポジティブ/ネガティブなアビタージ価格差を含む.
function Data(tradeTypeA, tradeTypeB) { // Pass in arbitrage A contract and arbitrage B contract
    this.accountData = _C(exchange.GetAccount); // Get account information
    this.positionData = _C(exchange.GetPosition); // Get position information
    var recordsData = _C(exchange.GetRecords); // Get K-line data
    exchange.SetContractType(tradeTypeA); // Subscription arbitrage A contract
    var depthDataA = _C(exchange.GetDepth); // Depth data of arbitrage A contract
    exchange.SetContractType(tradeTypeB); // Subscription arbitrage B contract
    var depthDataB = _C(exchange.GetDepth); // Depth data of arbitrage B contract
    this.time = recordsData[recordsData.length - 1].Time; // Time of obtaining the latest data
    this.askA = depthDataA.Asks[0].Price; // Sell one price of Arbitrage A contract
    this.bidA = depthDataA.Bids[0].Price; // Buy one price of Arbitrage A contract
    this.askB = depthDataB.Asks[0].Price; // Sell one price of Arbitrage B contract
    this.bidB = depthDataB.Bids[0].Price; // Buy one price of Arbitrage B contract
    // Positive arbitrage price differences (Sell one price of contract A - Buy one price of contract B)
    this.basb = depthDataA.Asks[0].Price - depthDataB.Bids[0].Price;
    // Negative arbitrage price differences (Buy one price of contract A - Sell one price of contract B)
    this.sabb = depthDataA.Bids[0].Price - depthDataB.Asks[0].Price;
}
  • 位置関数:mp () を取得する 位置配列全体を横切って,指定された契約と方向の位置量を返します.そうでなければ, false を返します.
Data.prototype.mp = function (tradeType, type) {
    var positionData = this.positionData; // Get position information
    for (var i = 0; i < positionData.length; i++) {
        if (positionData[i].ContractType == tradeType) {
            if (positionData[i].Type == type) {
                if (positionData[i].Amount > 0) {
                    return positionData[i].Amount;
                }
            }
        }
    }
    return false;
}
  • K線とインジケータ機能:boll ((() 新しいK線配列は,ポジティブ・アビラージ/ネガティブ・アビラージ価格差データに基づいて合成される.ボール指標で計算された上位トラック,中位トラック,下位トラックデータは返される.
Data.prototype.boll = function (num, timeCycle) {
    var self = {}; // Temporary objects
    // Median value of positive arbitrage price difference and negative arbitrage price difference
    self.Close = (this.basb + this.sabb) / 2;
    if (this.timeA == this.timeB) {
        self.Time = this.time;
    } // Compare two depth data timestamps
    if (this.time - oldTime > timeCycle * 60000) {
        bars.push(self);
        oldTime = this.time;
    } // Pass in the price difference data object into the K-line array according to the specified time period
    if (bars.length > num * 2) {
        bars.shift(); // Control the length of the K-line array
    } else {
        return;
    }
    var boll = TA.BOLL(bars, num, 2); // Call the boll indicator in the talib library
    return {
        up: boll[0][boll[0].length - 1], // boll indicator upper track
        middle: boll[1][boll[1].length - 1], // boll indicator middle track
        down: boll[2][boll[2].length - 1] // boll indicator down track
    } // Return a processed boll indicator data
}
  • オーダー機能:取引 オーダー契約名とオーダータイプを入力し,その後,対価でオーダーを配置し,オーダーを配置した後,結果を返します.同時に異なる方向に2つのオーダーを配置することが必要であるため,購入/販売の1つの価格は,オーダーの契約名に従って関数内で変換されます.
Data.prototype.trade = function (tradeType, type) {
    exchange.SetContractType(tradeType); // Resubscribe to a contract before placing an order
    var askPrice, bidPrice;
    if (tradeType == tradeTypeA) { // If the order is placed in contract A
        askPrice = this.askA; // set askPrice
        bidPrice = this.bidA; // set bidPrice
    } else if (tradeType == tradeTypeB) { // If the order is placed in contract B
        askPrice = this.askB; // set askPrice
        bidPrice = this.bidB; // set bidPrice
    }
    switch (type) { // Match order placement mode
        case "buy":
            exchange.SetDirection(type); // Set order placement mode
            return exchange.Buy(askPrice, unit);
        case "sell":
            exchange.SetDirection(type); // Set order placement mode
            return exchange.Sell(bidPrice, unit);
        case "closebuy":
            exchange.SetDirection(type); // Set order placement mode
            return exchange.Sell(bidPrice, unit);
        case "closesell":
            exchange.SetDirection(type); // Set order placement mode
            return exchange.Buy(askPrice, unit);
        default:
            return false;
    }
}
  • 注文をキャンセルする機能: cancelOrders ((() 注文が完了していない場合は false が返され,完了していない場合は true が返されます.
Data.prototype.cancelOrders = function () {
    Sleep(500); // Delay before cancellation, because some exchanges, you know what I mean
    var orders = _C(exchange.GetOrders); // Get an array of unfilled orders
    if (orders.length > 0) { // If there are unfilled orders
        for (var i = 0; i < orders.length; i++) { // Iterate through the array of unfilled orders
            exchange.CancelOrder(orders[i].Id); // Cancel unfilled orders one by one
            Sleep(500); // Delay 0.5 seconds
        }
        return false; // Return false if an unfilled order is cancelled
    }
    return true; // Return true if there are no unfilled orders
}
  • 単一の契約を保持するハンドル: isEven ((() アブタージ取引の単一のステップの場合,我々は単にすべてのポジションを閉鎖します. もちろん,それは追跡方法にも変更することができます.
Data.prototype.isEven = function () {
    var positionData = this.positionData; // Get position information
    var type = null; // Switch position direction
    // If the remaining 2 of the position array length is not equal to 0 or the position array length is not equal to 2
    if (positionData.length % 2 != 0 || positionData.length != 2) {
        for (var i = 0; i < positionData.length; i++) { // Iterate through the position array
            if (positionData[i].Type == 0) { // If it is a long order
                type = 10; // Set order parameters
            } else if (positionData[i].Type == 1) { // If it is a short order
                type = -10; // Set order parameters
            }
            // Close all positions
            this.trade(positionData[i].ContractType, type, positionData[i].Amount);
        }
    }
}
  • 図面 () ObjChart Add () メソッドを呼び出し,必要な市場データと指標データをチャートに描く:上線,中線,下線,正/負のアビラージ価格差.
Data.prototype.drawingChart = function (boll) {
    var nowTime = new Date().getTime();
    ObjChart.add([0, [nowTime, boll.up]]);
    ObjChart.add([1, [nowTime, boll.middle]]);
    ObjChart.add([2, [nowTime, boll.down]]);
    ObjChart.add([3

関連性

もっと