資源の読み込みに... 荷物...

2.4 FMZ Quant プラットフォームで取引戦略を書く方法

作者: リン・ハーン優しさ作成日: 2019-04-17 15:01:01, 更新日: 2019-04-27 11:55:41

概要

前回のセクションを勉強した後,私たちは最終的に定量的な取引戦略を書く準備ができています. これは手動取引から定量的な取引への入門の最も重要なステップになります. 実際,それはそれほど神秘的ではありません. 戦略を書くことは,コードであなたのアイデアを実現する以上のものではありません. このセクションは,ゼロから定量的な取引戦略を実装します. 研究の後,誰もがFMZ Quantシステムで戦略を書く方法を知ることができます.

準備はいい

まず,FMZ Quantの公式ウェブサイトを開いてアカウントにログインします. ダッシュボード戦略戦略を追加をクリックしてください. コードを書く前に,プログラミング言語の種類を選択する必要があります. このセクションではJavaScriptを使用します. ドロップダウンメニューからそれを選択します. さらに,FMZ Quantプラットフォームも Python,C++およびビジュアルプログラミングをサポートします.

戦略のアイデア

前章では,移動平均戦略を紹介しました.つまり:価格が過去10日の平均価格よりも高くなった場合,ロングポジションを開きます.価格が過去10日の平均価格よりも低くなった場合,ショートします.しかし,価格が市場の状況を直接反映できるものの,依然として多くの誤った突破信号があります.したがって,私たちはこの戦略をアップグレードし,改善する必要があります.

まず,トレンド方向を判断するために,より大きな期間の移動平均値を選択します. 誤った突破信号の少なくとも半分はフィルタリングされています. 大きいサイクルの移動平均は遅いですが,より安定します. その後,開口ポジションの成功率を高めるために,別の条件を追加します. この大きなサイクルの移動平均値は少なくとも上向きです. 最後に,価格,短期移動平均と長期移動平均の相対位置関係が完全な取引戦略を形成するために使用されます.

img

戦略の論理

上記の戦略のアイデアを使って,この戦略の論理を構築してみることができます. ここでの論理は,天体の動きの法則を計算させないことです. それはそれほど複雑ではありません. これは,以前の戦略のアイデアを言葉で表現する以上のものではありません.

  • オープン・ロング・ポジション: 現在,ポジションがない場合,閉じる価格が短期移動平均より高く,閉じる価格が長期移動平均より高く,短期移動平均が長期移動平均より高く,長期移動平均が上昇している場合.

  • オープン・ショートポジション:現在ポジションがない場合,閉じる価格が短期移動平均を下回り,閉じる価格が長期移動平均を下回り,短期移動平均が長期移動平均を下回り,長期移動平均が下がっている場合.

  • ロングポジションを閉じる:現在ロングポジションを保有している場合,閉じる価格は長期移動平均を下回り,または短期移動平均は長期移動平均を下回り,または長期移動平均が下がっている場合.

  • クローズ・ショートポジション:現在のショートポジションを保持し,閉じる価格が長期移動平均値よりも高くなったり,短期移動平均値が長期移動平均値よりも高くなったり,長期移動平均値が上昇している場合

上記は戦略全体の論理です. この戦略のテキストバージョンをコードに変換すると,市場コートの取得,指標の計算,ポジションの開閉命令,これらの3つのステップを含むでしょう.

M 言語戦略

M言語では,閉じる価格を得るAPIは: CLOSEです. つまり,最新のK線閉じる価格を得るためには,コード領域に CLOSEを入力するだけです.

次に指標を計算する.この戦略では,短期間移動平均と長期移動平均という2つの指標を使用します. 短期移動平均は10期移動平均,長期移動平均は50期移動平均であると仮定します. この2つを表現するためにコードを使用するには,以下を参照してください:

MA10:=MA(CLOSE,10); // Get the 10-cycle moving average of the latest K-line and save the result in variable MA10
MA50:=MA(CLOSE,50); // Get the 50-cycle moving average of the latest K-line and save the result in variable MA50

手動取引では,50期移動平均が上昇しているか低下しているか一目で確認できますが,それをコードで表現するにはどうすればよいですか? 移動平均が上昇しているか否かを判断して,注意深く考えてみてください.K線の現在の移動平均は前のK線の移動平均より大きいですか? それとも前回の2つのK線よりも高いですか? 答えはイエスです.移動平均が激落していると言えるでしょう. 同じ方法で下落も判断できます.

MA10:=MA(CLOSE,10); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10
MA50:=MA(CLOSE,50); //Get the 50-cycle moving average of the latest K line and save the result to variable MA10

MA10_1:=REF(MA10,1); //Get the 10-cycle moving average of the pervious K line and save the result to variable MA10_1
MA50_1:=REF(MA50,1); //Get the 50-cycle moving average of the pervious K line and save the result to variable MA50_1
MA10_2:=REF(MA10,2); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10_2
MA50_2:=REF(MA50,2); //Get the 50-cycle moving average of the latest K line and save the result to variable MA50_2
MA50_ISUP:=MA50>MA50_1 AND MA50_1>MA50_2; //Determine whether the current 50-line moving average of the K line is rising
MA50_ISDOWN:=MA50<MA50_1 AND MA50_1<MA50_2; //Determine whether the current 50-line moving average of the K line is falling

上記のコードの行8と9に,単語ANDは論理演算子であることに注意してください. これは,and条件の両側が真実である場合,文全体が真実であり,そうでなければそれは偽である. (条件の片側だけが真実である場合,全体として,それは依然として偽である). 英語に翻訳してください. 現在のK線の50期移動平均が前のK線の50期移動平均よりも大きい場合,そして前回のK線の50期移動平均が50期移動平均K線前のK線よりも大きい場合は,値をyesとして計算します. そうでなければ,値をnoとして計算し,結果をMA50_ISUPに代入します.

最後のステップは,注文を出すことであり,論理コードの後に購入販売操作を実行するためにFMZ Quantの注文 APIを呼び出すだけです. 下を参照してください:

MA10:=MA(CLOSE,10); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10
MA50:=MA(CLOSE,50); //Get the 50-cycle moving average of the latest K line and save the result to variable MA10

MA10_1:=REF(MA10,1); //Get the 10-cycle moving average of the pervious K line and save the result to variable MA10_1
MA50_1:=REF(MA50,1); //Get the 50-cycle moving average of the pervious K line and save the result to variable MA50_1
MA10_2:=REF(MA10,2); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10_2
MA50_2:=REF(MA50,2); //Get the 50-cycle moving average of the latest K line and save the result to variable MA50_2
MA50_ISUP:=MA50>MA50_1 AND MA50_1>MA50_2; //Determine whether the current 50-line moving average of the K line is rising
MA50_ISDOWN:=MA50<MA50_1 AND MA50_1<MA50_2; //Determine whether the current 50-line moving average of the K line is falling

CLOSE>MA10 AND CLOSE>MA50 AND MA10>MA50 AND MA50_ISUP,BK; //open long position
CLOSE<MA10 AND CLOSE<MA50 AND MA10<MA50 AND MA50_ISUP,SK; //open short position
CLOSE<MA50 OR MA10<MA50,SP;//close long position
CLOSE>MA50 OR MA10>MA50,BP;//close short position

上記の 13 行と 14 行に,別の論理演算子である OR という単語が, M 言語で or を意味していることに注意してください. 英語に翻訳してください. 現在の K ラインの閉値が現在の K ラインの 50 期間の移動平均値よりも小さい場合,または現在の K ラインの 10 期間の移動平均値が現在の K ラインの 50 期間の移動平均値よりも小さい場合,値は Yes と計算されます. そしてすぐに注文します. そうでなければ計算は no で何もしません.

ANDOR は M 言語の論理演算子であることに注意してください.

  • ANDはすべての条件がyesで,最終条件がyesであるときです.

  • ORは,条件のいずれかがyesである限り,最終条件はyesである.

結論から言うと

上記は,Mプログラミング言語を使用してFMZ Quantプラットフォームで取引戦略を書く全プロセスです. 戦略アイデアを持つことから,戦略思考,論理を記述するためにテキストを使用すること,そして最終的にコードで完全な取引戦略を実装することまで,合計で3つのステップがあります. これは単純な戦略ですが,戦略の戦略とデータ構造が異なります. したがって,このセクションの定量戦略プロセスを理解している限り,FMZ Quantプラットフォームで定量戦略研究と実践を行うことができます.

放課後 運動

  1. このセクション の 戦略 を 自分 で 実行 する よう 努力 し て みてください.

  2. このセクションの戦略に基づいて,ストップ・ロースとテイク・プロフィートの関数を追加します.

次のセクションの通知

定量的な取引戦略の開発において,プログラミング言語は武器のようなもので,良いプログラミング言語は,努力の半分で2倍の結果を得るのに役立ちます.例えば,定量的な取引の世界で最も一般的に使用されるPython,C++,Java,C#,EasyLanguage,M言語は12種類以上あります.戦場で戦うためにどの武器を選ぶべきですか?次のセクションでは,これらの一般的なプログラミング言語,および各プログラミング言語の特徴を紹介します.


もっと