【MQL5】tan関数の使い方と自動売買実装コード

1. tan関数の概要と実務での活用法

MQL5のtan関数は、指定された角度(ラジアン単位)の正接(タンジェント)を計算するための組み込み関数です。数学的には「直角三角形の底辺に対する対辺の比率」を求めます。

FXの実務開発において、tan関数は単なる計算以上に「チャート上の勾配(角度)を数値化する」という重要な役割を担います。例えば、移動平均線の傾きをラジアンで取得し、それを具体的な「価格の伸び率」に変換する際や、ガンの幾何学的な分析、あるいはトレンドラインの自動描画ロジックなどで頻繁に利用されます。

開発者が特につまずきやすいのは、「度数(0~360度)」と「ラジアン」の混同です。MT4/MT5のチャート上で「45度の角度で上昇している」と判断しても、そのまま45を関数に渡すと全く異なる計算結果になります。この単位変換の理解が、実務における最初の壁となります。

2. 構文と戻り値

tan関数の構文は非常にシンプルです。

double  tan(
   double  rad      // ラジアン単位の角度
   );

パラメーター

  • rad: タンジェントを求めたい角度を「ラジアン」で指定します。

戻り値

  • 指定されたラジアンのタンジェント値をdouble型で返します。

数学的な補足

もし手元に「度数(Degree)」しかない場合は、以下の数式でラジアンに変換してから代入する必要があります。
ラジアン = 度数 × (π / 180)
※MQL5ではπ(円周率)はM_PIという定数で定義されています。

3. 具体的な使い方・実践サンプルコード

以下は、チャート上のトレンドラインの「角度」から、次のローソク足で価格が理論上どこに位置するか(垂直方向の距離)を算出する実用的なスクリプト例です。

//+------------------------------------------------------------------+
//|                                               TanExample_EA.mq5  |
//|                                  Copyright 2023, Quant Engineer  |
//+------------------------------------------------------------------+
#property strict

//--- 角度(度数)をラジアンに変換するマクロ
#define DEG_TO_RAD(deg) ((deg) * M_PI / 180.0)

void OnStart()
{
    // 例:チャート上に30度の角度で引かれた上昇ラインがあると仮定
    double angle_degrees = 30.0;

    // 1. 度数をラジアンに変換
    double rad = DEG_TO_RAD(angle_degrees);

    // 2. tan関数を使用して勾配(比率)を算出
    // tan(30°) は 約0.577
    double slope = tan(rad);

    // 3. 実務への応用:
    // 横軸(時間軸)が「100ポイント」進んだ場合、縦軸(価格)はどれだけ変化するか?
    double horizontal_distance = 100.0;
    double vertical_change = horizontal_distance * slope;

    PrintFormat("角度: %.1f度", angle_degrees);
    PrintFormat("タンジェント値(勾配): %.4f", slope);
    PrintFormat("横に %.1f ポイント進んだ際の、縦の変化量: %.2f ポイント", 
                horizontal_distance, vertical_change);
}

4. 使用上の注意点とよくあるエラー

① ラジアン変換の失念

最も多いミスは tan(45) のように度数を直接入力することです。tan(45.0) は数学的には約 1.62 ですが、45度はラジアンで約0.785であり、tan(0.785) は 1.0 になります。この差がロジックの致命的なバグに繋がります。

② 90度(π/2)付近の挙動

タンジェントの性質上、90度、270度(垂直)に近づくと戻り値は無限大(非常に大きな数値)に向かいます。EA内で角度を動的に計算している場合、90度付近の入力が入ると計算結果がオーバーフローしたり、予期せぬ挙動を示したりすることがあります。入力値の範囲には必ずリミッターを設けるのがクオンツ流の作法です。

③ 価格と時間のスケーリング

MT5のチャート上での「見た目の角度」は、ウィンドウの縦横比やズーム倍率によって変わります。tan関数で計算される「数学的な角度」と「見た目の角度」は一致しないため、座標計算に用いる際は、必ず価格(Price)とバーの本数(Time)の比率を固定して考える必要があります。

5. 【重要】自動売買における約定スピードと環境の罠

アルゴリズムの計算精度がいかに高くても、それを実行するインフラが貧弱であれば、シストレで利益を出すことは不可能です。特に、自宅のPCや一般的な光回線を利用したトレード環境では、証券会社サーバーとの物理的な距離に起因する「ネットワーク遅延(レイテンシ)」が致命的なリスクとなります。

相場が急変し、tan関数を用いたロジックが完璧なエントリーサインを出したとしても、注文がサーバーに届くまでに数ミリ秒〜数十ミリ秒の遅れが生じれば、約定価格が滑る(スリッページ)、あるいは約定拒否されるといった事態を招きます。極限までエッジを追求するエンジニアにとって、取引サーバーの目と鼻の先に位置する専用VPS(仮想専用サーバー)の導入は、もはやオプションではなく必須の装備です。24時間安定稼働し、物理的な距離による遅延を最小化することこそが、あなたのアルゴリズムを真に機能させるための大前提となります。

💡 この記事の内容を実運用で活かすには?

この記事の内容を実運用で活かすには、正しい環境が必要です。
特にVPSを使わないと、このロジックは再現できません。

コメント

タイトルとURLをコピーしました