このコースを受講することで何が得られますか? まず,このコースはJavaScriptとPythonプログラミング言語に基づいています. 言語は単なる技術です. 最後に,私たちはこの技術を産業に適用する必要があります. 定量取引は,現在急速な発展段階にあり,人材への需要が大きい新興産業です.
このコースの体系的な学習を通じて,定量取引の分野についてより深い理解を得ることができます. あなたが定量取引の分野に入るために準備している学生である場合,それはあなたにも役立ちます. あなたが株式または先物投資の熱心者であれば,定量取引は主観的な取引を支援することができます. 取引戦略を開発することによって,あなたは金融市場で利益を得ることができ,また,あなたの投資と財務管理のためのチャネルとプラットフォームを広げることができます.
その前に,私の個人的な取引経験についてお話しします. 私は金融専攻ではありません.統計学を学びました. 最初は,私は学校時代に主観的に株式を取引し始めました. その後,私は主に戦略研究と戦略開発に従事する国内プライベート・エクイティファンドの定量的な取引実習者になりました.
私はこのサークルで10年以上取引しており,さまざまなタイプの戦略を開発しています.私の投資哲学は:リスク管理は,何よりも上にあり,絶対的リターンに焦点を当てています.私たちのトピックのテーマは:定量的な取引から資産管理 - 絶対的リターンのためのCTA戦略開発です.
CTAとは何か?CTAとは何か?CTAは外国では商品取引顧問,中国では投資マネージャーと呼ばれます.伝統的なCTAは,大半の投資家の資金を集め,それを専門投資機関に委託し,最終的に取引顧問 (CTA) による株式指数先物,商品先物,国債先物に投資することです.
しかし,実際には,グローバル先物市場の継続的な発展と拡大とともに,CTAの概念も拡大しており,その範囲は伝統的な先物市場をはるかに超えています.先物市場だけでなく,金利市場,株式市場,外為市場,オプション市場にも投資することができます.この種類について一定の量の歴史的データが存在する限り,これらの歴史的データに基づいて対応するCTA戦略を開発することができます.
1980年代には電子取引技術はまだ成熟していなかった.当時,ほとんどのトレーダーはウィリアム指数,KDJ,RSI,MACD,CCIなどの技術指標を手動で描き,商品先物取引の将来の傾向を判断した.後にトレーダーは,顧客が資産を管理するのを助けるために特別なCTAファンドを設立した.1980年代に電子取引が普及するまで,実際のCTAファンドが現れ始めた.
CTA基金管理の規模の変化
数十億ドルで
上記のグラフを見てみましょう.特に定量取引の台頭により,グローバル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よりもはるかに低いことがわかります.
中国におけるCTAの発展は過去10年でしかなかったが,その勢いは非常に強い.これは主に国内商品先物取引の比較的オープンな取引環境,取引資金の低しきい値,ロングとショートの両方の取引にマージンシステムの使用,低取引コスト,株式と比較して取引所のより高度な技術構造,およびより簡単なシステム取引によるものである.
2010年以来,CTA基金は主に民間基金の形で存在している.国内政策における基金特別口座の投資範囲の段階的な開設により,CTA基金は基金特別口座の形で存在し始めた.より透明でオープンな運用モードは,より多くの投資家が資産を配分するための必要なツールにもなった.
CTA戦略は,入場しやすさ,資本の限界,取引戦略の実行,API接続性において他の取引戦略よりも個別のトレーダーにとってより適しています.国内先物契約は非常に小さいです.例えば,トウモロコシまたは大豆粉は数千元で取引することができ,資本の限界はほとんどありません.また,一部のCTA戦略は伝統的な技術分析から来ているため,他の戦略と比較して比較的簡単です.
CTA戦略の設計プロセスは比較的シンプルです.まず,歴史的なデータが最初処理され,次いで定量モデルに入力されます.定量モデルには,数学モデリング,プログラミングデザイン,その他のツールによって形成された取引戦略が含まれ,これらのデータを計算し分析することによって取引信号が生成されます.もちろん,実際の開発では,上記のチャートほど簡単ではありません. ここでは,全体的な概念を提供します.
CTA戦略は,取引戦略の観点からも多様性があります. それはトレンド戦略またはアービタージ戦略であり,長期間の中期および長期戦略,または日中の短期戦略であり,戦略論理は技術分析または基本的分析に基づいており,主観的な取引またはシステム取引である可能性があります.
CTA戦略には異なる分類方法があります.取引方法によると,主観的取引とシステム取引に分けることができます.外国CTA戦略の開発は比較的進歩しており,システム取引のCTA戦略は100%に近いです.分析方法によると,基本分析と技術分析に分けることができます.収入源に応じて,トレンド取引と振動取引に分けることができます.
一般的にCTA戦略は,取引市場全体の約70%を占め,トレンド戦略は約25%を占め,反トレンドまたはトレンド逆転戦略は約5%を占め,それらのうち,最も大きな割合を持つトレンド戦略は,ポジション期間に応じて高周波取引,日中取引,短期・中期取引,中期・長期取引に分けることができます.
現在,市場には2つの主流の高周波取引戦略があります.一つは高周波市場構築戦略であり,もう一つは高周波仲介戦略です.市場構築戦略は,取引市場で流動性を提供することです.つまり,市場構築者との取引市場で,誰かが取引したい場合,市場構築者は,その注文が取引可能であることを確保する必要があります.市場に十分な流動性がない場合,注文が取引できない場合は,市場構築者は相手方の注文を購入または販売する必要があります.
高周波仲介とは,高度に相関する2つの株やETFとETFポートフォリオの取引を指す.ETFの計算方法によると,ETFの予想価格は同じ方法で計算することができる.ETFインデックス価格は,ETFの予想価格を引いて価格差を得ることができる.通常,価格差は価格チャネルで実行される.価格差が上下チャネルを通過した場合,価格差を取引し,価格差の返還を待って,そこから収入を得ることができます.
文字通り,一夜間のポジションがない限り,それは日中取引戦略と呼ばれる.日中取引の保持期間が短いため,市場に入ってからすぐに利益を得て,すぐに市場から脱出することは通常不可能です.したがって,この取引モードには市場リスクが低い.しかし,市場は短時間で急速に変化するため,日中戦略は通常トレーダーに対してより高い要求を持っています.
理論上,保有期間が長くなるほど,戦略的能力は大きくなり,リスク・リターン比も低くなります.特に機関取引では,短期戦略の限られた容量のために,短期間の期間で大きな資金が市場に入ったり退出したりできないため,より長期的な戦略が割り当てられます.一般的に,ポジション期間は数日,数ヶ月,またはそれ以上です.
一般的にCTA戦略は,開店価格,最高価格,最低価格,閉店価格,取引量などを含む分,時間,日々のデータで研究されます.L2データにおけるTickデータ,例えば購入価格,販売価格,購入量,販売量などの詳細なデータを使用するCTA戦略はわずかです.
CTA戦略の基本考えについては,まず最初に考えるのは,従来の技術指標に基づいていること,この分野には多くの公共の参考資料があり,論理は通常シンプルで,その多くは統計的原則に基づいています.例えば,私たちは様々な技術指標を知っています:MA,SMA,EMA,MACD,KDJ,RSI,BOLL,W&R,DMI,ATR,SAR,BIAS,OBV,など.
また,市場にはいくつかの古典的な取引モデルがあり,参考として使用され改善することもできます.例えば,複数の移動平均の組み合わせ,ダブルスルースト,R-ブレイカー,タートル取引方法,グリッド取引方法などです.
これらはすべて,伝統的な技術分析に基づく取引戦略である.このプロセスは,歴史的データと正しい取引概念に基づいて確率優位性を持つ要因または取引条件を抽出し,将来も市場がそのような法則を持つことを仮定する.最後に,取引戦略はコードと完全に自動取引によって実現される. ポジションを開く,利益を停止する,損失を停止する,ポジションを増やす,ポジションを減らすなど,一般的に手動の介入を必要としない.実際には,価格時間系列の正の自動相関系数を使用して勝者を購入する戦略である.
CTA戦略の最大の利点は,現在の市場が上昇しているか下落しているかに関わらず,絶対的な利益を得ることができるということです.特に市場が急速に変化しているとき,または市場のトレンドが明らかにスムーズである場合,戦略の利点は明らかです.要するに,トレンドがある場合,利益があります.しかし,市場が不安定な状況にあり,トレンドが明らかでない場合,戦略は高点で購入し,低点で販売し,損失を往復させることができます.
CTAの先物取引戦略は主に以下の点から利益を得ています.
また,トレンドトラッキングの取引の特徴は,市場がないときに少額のお金を失うこと,そして市場が来ると大金を稼ぐことです.しかし,取引をした人は,市場がほとんど不安定で,トレンド市場はわずか時間でしかないことを知っています.したがって,トレンドトラッキング戦略は,取引で低い勝利率を持っていますが,各取引の全体的な利益と損失は比較的大きいです.
トレンドトラッキング戦略は収入の観点から不安定であるため,多くの投資機関がポートフォリオを構築するために複数の種類と戦略を使用し,また一定量の逆転戦略で構成されます.逆転戦略は,価格の時間列に負の係数を持つ自動相関性である.すなわち,高い販売と低い取扱.
CTAと伝統的な資産との相関
上記のチャートを見てみましょう.理論的には,異なるスタイルまたは比較的低い相関を持つさまざまな戦略は,市場の価格のさまざまな変化に直面すると,時には同じ,時には異なる取引信号を同時に送信します.複数のリターン曲線が重なり合っているため,全体的なリターンは互いを補完し,リターン曲線はよりフラットになり,その結果,リターンの変動が減少します.
上記の観点から,マスター戦略を開発するよりも複数の適度サブ戦略を開発することが良いと結論づけることができます.これらの戦略を制御するにはどうすればよいですか? ここで,機械学習におけるランダムフォレストアルゴリズムから学ぶことができます.ランダムフォレストは独立したアルゴリズムではなく,複数の意思決定ツリーを含む意思決定フレームワークです. それは意思決定ツリーのサブ戦略の上に親戦略と同等です. サブ戦略クラスタは親戦略を通じて組織され制御されます.
次に,母戦略を策定する必要があります. 利益の変動が低い商品先物品のポートフォリオをスクリーニングするために,全商品先物市場における各品種の流動性,収益性,安定性を評価し,その後業界中立スクリーニングを行い,ポートフォリオの業界分散を通じて全体的な変動をさらに削減し,最終的に取引のための市場価値マッチングを通じて実際の商品先物品の多品種ポートフォリオを構築することができます.
各種は,マルチパラメータ戦略で構成され,バックテストで良いパフォーマンスを有するパラメータ組み合わせを選択することもできます.市場のトレンドが明らかになると,マルチパラメータ戦略は一般的に一貫して動作し,ポジションを追加することに等価です.市場は不安定な状況にあるとき,複数のパラメータ戦略のパフォーマンスは通常不一致で,それぞれロングまたはショートでリスクをカバーすることができます.これはポジションを削減することに等価です.これは,ポートフォリオの最大バックテスト率をさらに低下させ,全体のリターン率を変化しないまま維持することができます.
ニュートンはかつて言いました "私が他者よりも遠くを見ることができるのは 巨人の肩の上に立っているからです"
CTA戦略は,SMA戦略,ボリンジャーバンド戦略,亀取引規則,モメント戦略,仲介戦略など,市場で公開されている.定量的な取引戦略は,一旦公開されるとゆっくりと失敗する1つの特徴を持っています.しかし,これは,これらの戦略から学び,巨人の肩の上に問題を解決できるように,それらの本質から学ぶことに影響しません.
基本分析は,短期的な価格動向を気にする必要はない. 価値が最終的に価格に反映されると考えられる. 価格の背後にある要因を分析して,多様性の価値を決定する. 一般的には,マクロ要因,多様性要因,その他の要因から,トップダウン分析方法が採用される.
上記のグラフから,商品価格に影響する要因が多く,これらのデータは常に変化していることがわかります. 個々の個人投資家は,客観的な分析を言うまでもなく,これらの膨大なデータを入手する能力を超えています.
実際,商品先物取引の基本的な分析は すべての要因を分析するものではありません. 複雑な情報からルールを見つけるために, 基本的な分析の基本的な要素を把握するだけです.
マクロ経済データは複雑で変化する.毎日,毎時,国家政治,中央銀行,投資銀行,公式および非公式から多くの経済データが公開されています.政治と経済危機に加えて,マクロ分析は会話のための良い素材ですが,実践的ではありません. 米国で有名なファンド管理専門家であるピーター・リンチはかつて言いました: "私は毎年経済状況の分析に15分以上費やしません".
基本的分析では,多様性分析は主にプレミアムと割引,需要と供給の関係,商品の在庫,産業利益などを分析するものです. 商品先物取引の多様性要素分析を習得すれば,市場の傾向の大半を判断することができます.
フューチャーをした友達が知っているように,国内商品フューチャーズは単純に工業製品と農業製品に分けることができます.産業製品と農業製品の分析方法は異なります.我々は供給と需要の2つの側面について詳しく説明します.産業製品では,供給は比較的安定しています.大きな技術革新がない限り,生産能力は短期間に大きく変化する可能性はほとんどありません.したがって,産業製品の価格に影響を与える主な要因は需要です.農業製品の需要は比較的安定しています.長期的には,農業製品の需要は変化しますが,短期的には,農業製品の需要は安定傾向にあります.したがって,農業製品の価格に影響を与える主な要因は供給です.
経済学の法則によれば,物価を決定するのは供給と需要の関係である.理論的には,供給と需要のデータが入手できる限り,将来の物価が決定できる.工業製品では供給データを入手するのは簡単だが,需要データを入手するのは難しい.農業製品では需要データを入手するのは簡単で,供給データを入手するのは難しい.
実際には,さらに減算することができます. 経済市場における供給と需要の相互の結果は,在庫です. 在庫データを通して,市場供給と需要の関係を判断することができます. 商品の在庫が非常に高ければ,市場の供給が需要よりも大きいことを意味し,外的条件が変わらないという前提で商品価格が下がります. 商品の在庫が非常に低い場合,市場需要が供給よりも大きいことを意味し,外的条件が変わらないという前提で商品価格が上昇します.
商品の在庫分析に加えて,現貨市場と先物市場の価格差も分析する必要があります.これはベース差とも呼ばれます.先物価格が現貨価格よりも大きい場合,それを先物プレミアムと呼びます.先物価格が現貨価格よりも低い場合,それを先物割引と呼びます.先物配送システムによると,先物配送日に先物価格が現貨価格に等しくなければなりません.
プレミアムまたは割引に関係なく,先物配送システムの制約により,配送日の先物価格は理論上スポット価格に等しいべきである.配送日が近づくにつれて,スポット価格と先物価格の両方が一貫している傾向がある.一つは先物への帰還であり,もう一つは先物への帰還である.
上記の原理に従って,将来的な先物価格を同時に決定するために,在庫とベース差を使用することができます.商品の在庫が低く,先物価格がスポット価格よりもはるかに低い場合,当日市場の需要が供給よりも大きいと判断することができ,将来的にスポット価格の増加の確率は大きい.また,先物配達システムにより,配達日が近づくにつれて,先物価格が上昇し,即時価格に等しい.将来的に先物価格の増加の確率は大きいと判断できます.
最後に,将来価格の確率は,在庫とベース差によって判断されますが,購入と売却の正確なポイントはありませんので,入口と出口の明確なシグナルを与えるために技術分析と協力する必要があります. 基本分析全体の構造は:低在庫+深値下げ+技術分析 ロングポジションシグナル=ロング; 高在庫+実質的なプレミアム+技術分析 ショートポジションシグナル=ショート.
トレーディング戦略に関しては,代表的な亀取引規則について語らなければなりません.亀取引規則は,取引の歴史で最も有名な実験から来ている. 商品投機家リチャード・デニス (Richard Dennis) は,偉大なトレーダーは生まれているか,訓練されているかを知りたいと思っています. この目的のために,1983年に13人を募集し,フューチャー取引の基本的な概念,そして自身の取引方法と原則を教えました.これらの学生は
その後4年間で,タートルズは平均年間複合利息80%を達成した.デニス氏は,単純なシステムとルールによって,取引経験が少ないまたは全くない人々が優れたトレーダーになることができることを証明した.しかし,一部のタートルは利益のためにウェブサイトでタートル取引規則を販売する.この行動を防ぐために,2人のオリジナルタートル,カーティス・ファースとアーサー・マドックが,ウェブサイトでタートル取引規則を無料で公開することを決定した.
真実が明らかになった後,人々はタートル取引規則が最適化されたドンチアンチャネルを採用し,ポジション管理のためにATRインジケーターを使用していることを発見した.数十年の歴史的テストの後,それは普通の小売投資家が利益を得るために簡単な取引方法になりました.それは今日もいくつかの品種で機能しています.
次に,カメの取引ルールを見てみましょう.
このように,カメの取引規則は非常にシンプルに見えますが,実際には,それは取引システムのプロトタイプの本当の意味を形成しています.それは完全な取引システムのすべての側面をカバーし,トレーダーに主観的な想像的な決定を下す余地を与えません.これは,プログラムされたシステムの操作の利点をプレイします.
カメ取引方法の最大の利点は,効果的な取引方法のセットを確立するのに役立ちます.バッチオープニング,ダイナミックストップ利益とストップ損失,および市場のトレンドフォロー戦略の組み合わせです.特にATR値の使用とポジション管理の概念は,非常に学ぶ価値がある.もちろん,トレンド追跡戦略,すなわち浮動利益と引き戻しとの共通の問題もあります. 勝者を購入して得られた浮動利益はすべて,次の急落の波のために取り出されます. 一般的なトレンドでは非常に強く,不安定な市場で期待されるほど良くない.
過去世紀末には,非常に驚くべき取引方法が米国で金融投資分野に普及し始めた.数千人の実践の後,人々はこの方法が有効性と大きな実用的な価値があることを発見した.同時に,多くの投資専門家とプロトレーダーによって認識されている.今のところ,それは外国為替,金,株式,先物,原油,またはインデックスと債券である混沌操作方法であるほぼすべての金融投資分野に完璧に適用することができます.
混沌という言葉は,宇宙の混沌とした状態の記述を指します.その考えは,結果が避けられないことですが,既存の知識が結果を計算できないので,計算自体も結果を変えているため,最大または最小の結果が最終的に現れるかもしれませんが,避けられない結果はありません.これは取引市場に非常に似ています.参加者は市場を分析し,買ったり売ったりすると市場も変化します.市場には永遠の変動があります.参加者が市場の新しい形を理解すると,市場も参加者が認識していることを理解し,変化が発生します.そして参加者の未知の方向に変化する傾向があります.参加者が変化のルールを捉えることを防ぐのに十分な知恵を持っています.つまり,市場は安定していません.そして市場の過去を理解することは未来を表現することはできません.
混沌操作方法 (Chaos operation method) は,ビル・ウィリアムズによって発明された投資理念,取引戦略,エントリー&エグジット・シグナルの一連の完全セットである.現在,世界の多くの投資家が市場取引に参加するために混沌操作を採用している.中国の金融市場の発展が遅れ,混沌理論も比較的新しい考えであるため,中国では混沌操作方法を学ぶ人は少ない.混沌操作方法は普遍性の高い取引戦略であり,株式,債券,先物,外貨,デジタル通貨を含むほぼすべての金融投資分野に適用できるため,このコースは,混沌戦略の簡略化されたバージョンを投資利益と収入を改善するための出発点として使用する.
混沌操作方法の理論的基礎は,天気学者エドワード・ローレンズによって提案された混沌理論である.これは20世紀末の最大の科学的発見の一つである.彼は有名な"蝶効果"を提唱した.ビル・ウィリアムズは,混沌理論を金融投資分野に創造的に適用し,フラクタル幾何学,非線形動力学および他の学科と組み合わせ,非常に効果的な技術分析指標のシリーズを作成した.
混沌操作のメソッド全体は5つの主要な次元 (技術指標) から構成されています.
ワニ
フラクタル
勢い
加速する
バランスライン
上記のグラフを見てみましょう. アリゲーターは,フラクタル幾何学と非線形動学を用いた平衡線の集合です. その本質は指数的な重度の移動平均を拡張することです. これは,ある種の平均線ですが,その計算方法は通常の平均線よりも少し複雑です. 次に,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時間のレベルでの予備的なバックテストパフォーマンスレポートです.
資本曲線とバックテストパフォーマンスデータから,戦略は良好なパフォーマンスを発揮し,全体的な資本曲線は安定して上昇した.しかし,2016年末以降,リバー品種の市場の特徴は,一方的な高い変動傾向から広範な変動傾向に変化した.資本曲線の観点から,2017年から現在までの利益は明らかに弱である.
一言で言えば,混沌操作方法の本質は,市場がどのように動いているか,またはそれが真実か偽のブレイクアウトかどうか気にせずに,ターニングポイントを見つけることです.それがフラクタルを突破した場合,それは直接市場に入ります.決して市場を予測しようとしないでください.しかし,観察者とフォロワーです.
ジョージ・ソロスは,1987年に書いた"The Alchemy of Finance"で重要な命題を提出した.市場価格が常に誤っているという意味では,将来への偏った見を示していると考えられる.彼は市場効率仮説は理論的仮説にすぎないと考えた.実際には,市場参加者は常に合理的ではなく,各時点において,参加者はすべての情報を完全に入手し,客観的に解釈することはできません.さらに,同じ情報であっても,すべてのフィードバックは異なります.つまり,価格自体にはすでに市場参加者の間違った期待が含まれています.したがって,本質的には,市場価格は常に間違っている.これは仲介者の利益源かもしれません.
上記の原則によると,非効率な先物市場で,異なる期間の配送契約に対する市場の影響が常に同期ではなく,価格設定が完全に効果的でない理由がわかる.次に,異なる期間の同じ取引対象物の配送契約価格に基づいて,両価格の価格差が大きい場合,クロス期間の仲介のために,異なる期間の先物契約を同時に購入および販売することができます.
商品先物と同様に,デジタル通貨にもクロス・ペリオド・アービタージ・コントラクト・ポートフォリオがあります.例えば,OKEX取引所で,以下があります: ETC 現週,ETC 来週,ETC 四半期.例えば,現週の ETC と ETC の四半期間の価格差が長期間 5 周りのままでいると仮定します.価格差が1日 7 に達すると,将来,価格差が 5 に戻ると予想します.その後,当週の ETC を販売し,同時期に ETC の四半期を購入して価格差をショートすることができます.その逆です.
この価格差は存在するが,手動アービタージには時間がかかる手動操作,精度が低いこと,価格変動の影響による不確実性が多い.定量アービタージの魅力は,定量モデルを通じてアービタージ機会を把握し,アービタージ取引戦略を策定すること,また,プログラムされたアルゴリズムを通じて取引所に自動取引注文を配置することで,迅速かつ正確に機会を把握し,効率的かつ安定的に利益を得ることができる.
このコースでは,FMZ量子取引プラットフォームとOKEX取引所の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つのステップに簡素化できます.
次に,実際の取引プロセスと取引の詳細に従って,必要な詳細コードを戦略枠に記入する必要があります.
var chart = {}
var ObjChart = Chart ( chart )
var bars = []
var oldTime = 0
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
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;
}
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;
}
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
}
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;
}
}
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
}
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);
}
}
}
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