拙著「FXはチャートで勝つ!」が発売されました。
FX(外国為替証拠金取引)でのチャートの読み方を解説しています。
自由国民社刊で、定価1,728円(消費税込み)です。
MTのテンプレートで乱数等の関数を使うには
昨日、cremaさんがTwitterに「MTで乱数を使いたいので、ちょっと色々考え中。」とつぶやいていました。
それをネタに記事を書いてみます。
1.rand関数とint関数
Perlには「rand」という関数があり、乱数を生成することができます。
「rand(x)」とすることで、0以上x未満の乱数が生成されます。
例えば、以下のようにすると、変数$aに0以上100未満の乱数が代入されます。
$a = rand(100);
ただし、rand関数の値には小数点以下も含まれます。
値の小数点以下を切り捨てて整数化したい場合は、「int」という関数と組み合わせます。
例えば、以下のように書くと、0以上100未満の乱数を生成し、その小数点以下を切り捨てて、変数$aに代入します。
したがって、変数$aの値は0から99の整数のどれかになります。
$a = int(rand(100));
2.既存のプラグインでテンプレート内で関数を使う
MT4以降では変数の機能が拡張されていて、加減乗除の基本的な計算を行うこともできるようになりました。
ただ、関数を使う機能はありません。
この点を拡張するプラグインが、いくつか公開されています。
いずれも、Perlの関数を、MTの変数処理の中で利用できるようにするものです。
なお、拙作のプラグインは、初版(1.00)ではrand関数が使えなかったので、修正版(1.02)をご利用ください。
- 変数操作を無駄に拡張するMovableTypeプラグイン(OpenMagicVox.net)
- MTの計算機能を拡張するプラグイン(Under the Bridge)
- 変数の機能を拡張するプラグイン(拙作)
例えば、拙作のプラグインを使って、テンプレート内の変数xに0以上10未満(小数点以下も含む)の乱数を代入するには、以下のように書きます。
<MTSetVarFormula name="x" formula="rand(10)">
また、変数xに0~9の整数の乱数を代入するには、以下のように書きます。
<MTSetVarFormula name="x" formula="int(rand(10))">
3.PerlScriptプラグインと組み合わせる
先日PerlScriptプラグインを紹介しましたが、これを使う方法もあります。
PerlScriptプラグインの中では、テンプレートの変数は、「$ctx->var('変数名')」で表すことができます。
また、「$ctx->var('変数名', 値)」とすれば、テンプレートの変数に値を代入することもできます。
これらの書き方を使って、テンプレートの変数をPerlのプログラムで操作することができます。
例えば、「ブログ記事からどれか1つをランダムに選んで、そのタイトルを出力する」という例を考えてみます。
この場合、0から(ブログ記事数-1)の間で整数の乱数を生成し、MTEntriesタグのoffsetモディファイアでその数だけ記事と飛ばして、そこから1件だけ記事を出力すれば良いです。
実際にこの処理を書くと、以下のようになります。
<MTBlogEntryCount setvar="count"> <MTPerlScript> # 変数$countに、テンプレート変数countの値(ブログ記事数)を代入する my $count = $ctx->var('count'); # 0~($count - 1)(ブログ記事数 - 1)の乱数を生成して、テンプレート変数xに代入する $ctx->var('x', int(rand($count))); </MTPerlScript> <MTEntries offset="$x" limit="1"> <MTEntryTitle> </MTEntries>