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

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

MathTan関数は、指定された数値(角度)の正弦(タンジェント)を計算するための関数です。数学的には「直角三角形の底辺に対する対辺の比率」を求めます。

実務開発、特にインジケーターやEA(エキスパートアドバイザー)の作成において、この関数は「チャート上の傾き(スロープ)」を数値化する際に非常に重宝します。例えば、移動平均線がどの程度の角度で上昇しているかを計算し、その角度が一定以上(例:45度以上)の場合のみエントリーするといったロジックを組む際に使用します。

開発者が最もつまずきやすいポイントは、「角度の単位」です。MQL5に限らず、プログラミングの世界では角度を「度(0〜360)」ではなく、「ラジアン(弧度法)」で渡す必要があります。この変換を忘れると、意図しない計算結果となり、トレード戦略が根底から崩れるため注意が必要です。

2. 構文と戻り値

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

double MathTan(
   double  rad      // ラジアン単位の角度
);
  • パラメーター: rad
  • タンジェントを求めたい角度を「ラジアン」で指定します。
  • 戻り値:
  • 指定した角度のタンジェント値を double 型で返します。

※数学的特性として、$\pi/2$(90度)や $3\pi/2$(270度)に近い値では、戻り値が非常に大きな値(理論上の無限大)になる可能性がある点に留意してください。

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

以下は、チャート上の移動平均線(MA)の「傾き」をラジアンから計算し、その強さを判定する実践的なコード例です。

//+------------------------------------------------------------------+
//| 移動平均線の傾きからトレンドの勢いを計算するサンプル                |
//+------------------------------------------------------------------+
void OnTick()
{
    // 例:角度30度をラジアンに変換してタンジェントを求める
    double degrees = 30.0;
    double radians = degrees * (M_PI / 180.0); // 度をラジアンに変換

    // タンジェント(底辺1に対する高さの比率)を計算
    double slopeValue = MathTan(radians);

    // ログ出力
    Print("角度: ", degrees, "度, タンジェント値: ", slopeValue);

    // --- 実戦的な応用例:価格変化量から角度を逆算する場合 ---
    // 2本前のMAと現在のMAの差を「高さ」、期間を「底辺」として傾きを出す
    double ma_current = iMA(_Symbol, _Period, 14, 0, MODE_SMA, PRICE_CLOSE, 0); // 擬似コード
    double ma_previous = iMA(_Symbol, _Period, 14, 0, MODE_SMA, PRICE_CLOSE, 1); // 1本前

    // 価格の差分(高さ)
    double priceDiff = ma_current - ma_previous;

    // ここでMathTanの逆関数であるMathArcTanを使うことも多いですが、
    // 「目標とする角度(例:45度)」がある場合、MathTanで基準値を計算して比較します。
    double threshold = MathTan(45.0 * (M_PI / 180.0)); // 45度の時のタンジェント値(1.0)

    if(priceDiff > threshold * _Point * 10) // 10ポイント以上の急角度上昇
    {
        Print("強い上昇トレンドを検知しました。");
    }
}

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

  1. 「度」と「ラジアン」の混同
    MathTan(45) と書くと、45度ではなく「45ラジアン」として計算されます。

    • 正しい変換式:ラジアン = 度 * (M_PI / 180.0)
    • これを忘れると、EAは全くデタラメなエントリー根拠を持つことになります。
  2. 垂直に近い角度の計算
    タンジェントは90度($\pi/2$)に近づくほど値が急激に大きくなり、90度ちょうどでは定義されません。EAで動的に角度を計算して MathTan に渡す場合は、入力値が M_PI/2 にならないよう、またはその近辺で計算エラーが起きないようバリデーション(範囲チェック)を入れるのが安全です。

  3. 計算負荷の考慮
    MathTan は浮動小数点演算を伴うため、単純な比較演算よりはCPU負荷がかかります。数千個のラインの角度を一度に計算するような特殊なインジケーターを作成する場合は、計算頻度(毎ティック計算するか、新しい足が確定したときだけ計算するか)を最適化しましょう。

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

アルゴリズムの精度を MathTan でどれだけ高めたとしても、個人投資家が陥る最大の罠は「物理的なネットワーク遅延」にあります。自宅のPCや一般的な汎用クラウドサーバーでEAを稼働させる場合、MT5サーバーとの物理的距離により、ミリ秒単位の遅延(レイテンシ)が発生します。この遅延は、計算された絶好のエントリータイミングを「滑らせ(スリッページ)」、バックテストでは利益が出ていたロジックをリアル口座で損失に変えてしまう決定的な要因となります。

クオンツエンジニアの視点から言えば、コンマ数秒の遅延は、トレードのエッジ(優位性)を完全に消し去ります。極限まで約定スピードを高め、スリッページを最小限に抑えるためには、金融取引に最適化された専用のVPS環境が不可欠です。取引サーバーの至近距離に位置するVPSを選択することは、高度な数学モデルを実装することと同等、あるいはそれ以上に、プロのトレーダーにとっての「常識」であり、勝つための最低条件と言えます。

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

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

コメント

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