3.2 M言語の使い方

作者: リン・ハーン優しさ作成日:2019年4月19日 14:18:38 更新日:2019年4月27日 11:54:30

概要

M言語とは?M言語と呼ばれるものは,初期株式取引の技術指標から広がるプログラミング機能の集合である.アルゴリズムを単一の関数に収めると,ユーザーは戦略論理を実装するために"ビルディングブロック"のような特定の関数を呼び出すだけでよい.

img

プログラミングの効率を大幅に向上させる"小さな文法,大きな関数"の構築モードを採用している.他の言語で100以上の文の戦略書き方は,M言語で数行だけでコンパイルできる.金融統計機能ライブラリとデータ構造は,FMZ Quantツールと組み合わせて,いくつかの複雑な取引論理をサポートすることもできる.

完全な戦略

FMZ Quant M 言語を紹介する前に,このセクションの名詞概念についてまず初歩的な理解をしましょう.私たちは依然として長期50日移動平均と短期10日移動平均を基本ケースとして使用し,前章で言及された完全な戦略ケースをレビューします.

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

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

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

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

M文字で書くと,

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


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

完全な取引戦略を書くには:データ取得,データ計算,論理計算,注文の配置が必要です. 上記のとおり,コード全体では,基本的なデータを取得するためのAPIが1つだけ使用されています. それは最初の行と第2行の"CLOSE"です. その後,第1行から第9行はデータ計算部分です. 11から14行は論理計算と注文の配置部分です.

MA10,MA50,MA10_1,MA50_1,MA10_2,MA50_2は変数であることに注意してください.第1~第9行では", := "は割り当て記号であり,割り当て記号の右側のデータは割り当て記号の左側の変数に割り当てられます. MAはAPIです.例えば,第1行では,MA (移動平均値) を呼び出すには2つのパラメータを通過する必要があります.設定を入力パラメータとして考えることができます.つまり,MAを呼び出すとき,MAの種類を設定する必要があります. "; " AND " " OR "は複数の論理計算を接続するために主に使用される論理演算子です.上記の基本的な知識の概念で,は詳細なM言語知識を学ぶことを始めましょう.

基本データ

基本データ (オープニング価格,最高価格,最低価格,終了価格,ボリューム) は定量的な取引の不可欠な部分です.戦略の最新の基本データを取得するには,FMZ QuantのAPIを呼び出すだけです. 歴史的な価格の基本データを取得したい場合は",REF"を使用できます.例えば:REF (CLOSE, 1) は昨日の終了価格を取得します.

変数

変数は変更できる.変数の名前はコード名として理解できる.その名前は英語の文字,数字,行によってサポートされる.しかし,長さは31文字以内に制御されなければならない.変数の名前は,他の1つで繰り返すことはできない,パラメータ名で重複することはできません,関数名 (API) で重複することはできません,そして各ステートメントはセミコンロンで終了する必要があります. " // "の後にコメントを書く.以下のとおり:

INT:=2; //Integer type
FLOAT:=3.1; //Floating point
ISTRUE:=CLOSE>OPEN; //Boolean type

変数割り当て

変数割り当ては,割り当て符号の右側の値が左側の変数に与えられていることを意味します. 値がチャートに表示されるかどうか,または表示の位置を制御できる4種類の割り当てがあります. これらは" ": ", " := ", " ^^ ", "... ",そして下記のコードコメントは,その意味を詳細に説明します.

CC1: C; //Assign the closing price to the variable CC1 and display it in the sub-chart
CC2:=C; //Assign the closing price to variable CC2, but not display in the status bar and chart
CC3^^C; //Assign the closing price to the variable CC3 and display it in the main chart
CC4..0; //Assign the closing price to the variable CC4 and display it in the status bar, but not in the chart

データの種類

M言語にはいくつかのデータタイプがあり,最も一般的なものは数値型,文字列型,ブル式型である.数値型は整数,小数点,正数,負数,などを含む数字である.例えば: 1, 2, 3, 1.1234, 2.23456...;文字,中国語,英語,数字も文字列として理解できる.例えば: the FMZ Quant, CLOSEPRICE, 6000,文字列型は二重引号で包み込まなければならない.ブル式は最もシンプルで,それは2つの値のみを持っています.

関連演算子

関連演算子は,その名前からわかるように,二つの値の関係を比較するために使用される演算子である.以下のように,等しい,より大きい,より小さい,より大きい,または等しい,より小さい,または等しい,または等しくない:

CLOSE = OPEN; //when closing price equals to opening price, return 1 (true), otherwise return 0 (false)
CLOSE > OPEN; //when closing price greater than opening price, return 1 (true), otherwise return 0 (false)
CLOSE < OPEN; //when closing price less than opening price, return 1 (true), otherwise return 0 (false)
CLOSE >= OPEN; //when closing price greater than or equal to opening price, return 1 (true), otherwise return 0 (false)
CLOSE <= OPEN; //when closing price less than or equal to opening price, return 1 (true), otherwise return 0 (false)
CLOSE <> OPEN; //when closing price is not equal to opening price, return 1 (true), otherwise return 0 (false)

論理演算子

論理演算は,別々のブル式式文を全体に結合することができる.最も一般的に使用されるのは"AND"と"OR"である. ブル式式値が2つあるとする. 閉値が開値よりも大きい閉値が移動平均よりも大きい,それらをブル式値にグループ化することができる.例えば: 閉値が開値よりも大きい (AND) 閉値が移動平均よりも大きい,閉値が開値よりも大きい (OR) 閉値が移動平均よりも大きい.

AA:=2>1; //return true
BB:=4>3; //return true
CC:=6>5; //return true
DD:=1>2; //return false

注意してください:

  • "AND"はすべての条件が"true"で最終条件が"true"であるとき

  • "OR"は,すべての条件において,条件のいずれかが trueである限り,最終条件は trueであることを意味します.

  • "AND"は"&&"で"OR"は"しょう"で書ける.

算術演算子

M言語で使用される算術演算子 ("+, " - , " * , " / ) と通常の学校学習の数学には,以下のとおり,違いはありません.

AA:=1+1; //the result is 2
BB:=2-1; //the result is 1
CC:=2*1; //the result is 2
DD:=2/1; //the result is 2

優先順位

中学校の数学ではこう言います. "100*(10-1) /(10+5) "

1,同じ動作レベルであれば,通常は左から右に計算されます. 2 足し算,減算,掛け算,除算がある場合は,まず掛け算と除算を計算し,次に足し算と減算を計算します. 3,括弧がある場合は,まず括弧の内側を計算します. 4 簡単に操作する法則が満たされている場合,その法則を使用して計算できます.

M言語についても同様です.

100*(10-1)/(10+5)  //the result is 60
1>2 AND (2>3 OR 3<5)  //the result is false
1>2 AND 2>3 OR 3<5  //the result is true

実行モード

FMZ Quant ツールの M 言語では,閉値モードとリアルタイム価格モードという2つのプログラム実行モードがあります. 閉値モードとは,現在の K ライン信号が確立されたときに,次の K ラインに注文を置くことを意味します. リアルタイムモードは,現在の k ライン信号が確立されたときにすぐに実行されます.

日中の戦略

日中取引戦略の場合,ポジションを終了する際に"TIME"タイム関数を使用する必要があります.この関数は第2サイクルの上と日周期の下,四桁の形式で示されています: HHMM (1450 - 14: 50). 注:セッション終了時のポジションを終了するための条件として TIME関数を使用すると,オープニングポジション条件が対応する時間制限の対象となるよう推奨されます.以下のとおり:

CLOSE>OPEN && TIME<1450,BK; //if it is a positive k-line and the time is less than 14:50, opening position.
TIME>=1450,CLOSEOUT; //if the time is beyond 14:50, closing all position.

モデル分類

M言語には,非フィルタリングモデルとフィルタリングモデルという2種類のモデル分類があります.これは実際には非常によく理解されています:非フィルタリングモデルは,ポジションを追加および削減するために使用できる連続的な開閉信号を許可します.フィルタリングモデルは,連続的な開閉信号を許可しません.すなわち,開閉信号が表示されると,閉じる信号が表示されるまで,次の開閉信号がフィルタリングされます.非フィルタリングモデルの順序は:オープンポジション - 閉鎖ポジション - オープンポジション - 閉鎖ポジション - オープンポジション...

img

結論から言うと

上記は,M言語の迅速な開始の内容です.現在,あなた自身の取引戦略をプログラムすることができます. もっと複雑なものを書く必要がある場合は,FMZ QuantプラットフォームのM言語APIドキュメントを参照したり,直接公式の顧客サービスに相談して,あなたのためにそれを書くことができます.

次のセクションの通知

Intraday トレーディングは,人気のあるトレードモードでもあります.この方法は一晩でポジションを保持しません.したがって,市場変動のリスクが低くなります.不利な市場状況が発生すると,時間内に調整できます.次のセクションでは,実行可能な Intraday トレーディング戦略を書くようにします.

放課後 運動

  1. M言語による API から基本日付を取得するために FMZ Quant ツールを使用してみてください.
  2. グラフに変数割り当ての表示方法は何種類あるの?

もっと