またろうのシストレブログ

マネックス証券が提供しているトレードステーションと、MT4などシストレ関連について色々書きます。株と自動売買、EasyLanguageについても。

EasyLanguageの言語仕様 その1



今年に入ってから株に興味を持ち始めて色々やってみたものの、
成果が出なくてこれは自動売買でやらないと無理だなという結論に達し
3か月ほどマネックス証券のトレードステーションを触ってみたので
良い機会なので文書化してみようかと思います。

EasyLanguageはEasyではない

結論から先に言うと、ゲームなり業務なりで何らかのアプリケーションを作った経験のある人でないとEasyLanguageを扱うことは難しいかと思います。
(経験者であれば、やや仕様に癖があるもののアジャストはさして難しくないかなあと。)

トレードステーションはEasyLanguageにてチャートを自作したり
ストラテジーを組んで自動売買できたりします。

そのEasyLanguageなのですが、
言語仕様がJavaScriptでもVBでもない独特のものとなっています。
Pascalという言語が基になっているような記述を見つけたのですが、それともやや仕様が異なるようです)

JavaScriptと異なるところ

恐らく最も利用者が多いであろうJavaScriptとの違いを見てみます。

基本構文

JavaScriptとかだと処理の単位をブレース{}で括りますが、EasyLanguageでは
BEGIN~ENDで括ります。

 JavaScriptの場合

var view = 1;
var ro = 0;

if (ro === 0) {
    view = 2;
}

EasyLanguageの場合

vars: 
    view(0),
    ro(1);

if ro = 1 then
begin
    view = 2;
end;

書いていて気づきましたが、EasyLanguageの場合は代入と比較が同じ記法(=)ですね。

セミコロンの扱い

命令の最後にセミコロン(;)を付与するのは同じですが、EasyLanguageの場合やや癖があります。
とくにIF~ELSE文が絡む場合は注意が必要です。

if UPTICKS >= Sikii then
BEGIN
	Alert(!("上昇"));
END
ELSE
if AnswerUP >= Sikii then
BEGIN
	Alert(!("上昇出来高合計"));
END
ELSE
BEGIN
    for ii = 0 to VwapAvg - 1
    BEGIN
        if ii < BarCount then
	BEGIN
            PriceW += (AvgPrice[ii] * AnyVol[ii]);
	END;
    END;
END;

基本は命令の最後に付与しますが、ネストする場合はそれぞれの最後に付与する形になります。
IF文をBEGIN~END句なしに記述すると以下の通りとなります。

IF RoundFlg = 0 then
    Answer = PriceW / ShareW
ELSE IF RoundFlg = 1 then
    Answer = Round(PriceW / ShareW, 0)
ELSE
    Answer = Round(PriceW / ShareW, 1);

最も、エディター(開発環境)でシンタックスエラーを指摘してくれるのですぐに慣れるかと思います。

ちょっと長くなりそうなので記事を分けます。