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

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

良く使う計算式は関数にしておくと便利だよって話



オリジナルのインジケーターやストラテジーを作っていくと、
同じ計算式を毎回書くのは非効率だという考えに行き着くと思います。
そういうのは関数にして呼び出した方が、効率的かつバグになりにくいです。

関数の作り方

「ファイル」→「新規作成」→「関数」
f:id:tsukinowaapp:20180620080545p:plain

名前:関数名を英数字で
メモ:任意
リターンタイプ:適切な設定を
小数点を返すならダブル、整数がいいなら整数、true/falseならブーリアン関数で良いかと。

今回は全体ティックに対しての上昇ティックの割合をオシレーター形式で表示します。
名前は UPDOWN_TICKS とします。

inputs: 
	Avg(NumericSimple);

vars:
	PriceW(0),
	ShareW(0),
	Answer(0),
	ii(0),
	BarCount(0);

if CurrentBar > 1 then 
BEGIN

	PriceW = 0;
	ShareW = 0;
	
	FOR ii = 0 to Avg - 1
	BEGIN
		IF ii < BarCount then
		BEGIN
			PriceW += UPTICKS[ii];
		END;
	END;

	FOR ii = 0 to Avg - 1
	BEGIN
		IF ii < BarCount then
		BEGIN
			ShareW += TICKS[ii];
		END;
	END;
		
	if ShareW > 0 then Answer = (PriceW / ShareW) * 100;

END;

BarCount += 1;

UPDOWN_TICKS = Answer;

関数の場合、inputsは別のソース(インジケーターなり、ストラテジーなり)から値を引き渡す形になりますので
引き渡す型を指定します。
NumericSimple:履歴値を持たない数値
NumericSeries :履歴値を持つ数値
StringSimple :履歴値をもたない文字列

履歴値とは以前説明した,、Close[1]とかいう過去の計算結果を持つ変数のことです。
ほとんどの場合、NumericSimpleで事足りるかと思います。

最終行のUPDOWN_TICKS = Answer;はJavaScriptでいう return Answer; です。

インジケーターの作り方

これをインジケーターに取り込んで表示してみます。

「ファイル」→「新規作成」→「インジケーター」
f:id:tsukinowaapp:20180620090032p:plain

名前:分かりやすい名前(日本語OK)
省略名:分かりやすい名前(日本語OK)
注記:任意
次のウインドウに適用する:デフォルトのまま(全部チェックが入っている状態)
テンプレートを選択:任意(どのみち消してしまうので)

inputs:
	Avg(25),
	ShortAvg(5);

vars: 
	Answer(0),
	ShortAnswer(0);

Answer = UPDOWN_TICKS(Avg);
ShortAnswer = UPDOWN_TICKS(ShortAvg);

Plot1(Answer, !( "ティック率1" ), DarkGray, Default, 1);
Plot2(ShortAnswer, !( "ティック率2" ), DarkMagenta, Default, 1);
Plot3(50, !( "中央" ), DarkCyan, Default, 1);
Plot4(80, !( "High" ), DarkCyan, Default, 1);
Plot5(20, !( "Low" ), DarkCyan, Default, 1);

関数から値を受け取り、画面に表示しています。
さらに中心と上下に直線のラインを引くことで、今どの状態にあるかを分かりやすくしています。

「挿入」→「インジケーター」で画面に表示されます。

f:id:tsukinowaapp:20180620092249p:plain

オリジナルのチャートやオシレーターを作ってニヤニヤ眺めるのもトレステの楽しみ方の一つですね。