PR

MQL4のiSAR関数の使い方|MQL4初心者向けガイド

ノートパソコン プログラミング MQL4初心者講座
Adeela WasimによるPixabayからの画像
この記事は約22分で読めます。
[PR] 記事内に広告が含まれています。

MetaTrader 4(MT4)での自動取引やインジケーター作成にはMQL4というプログラミング言語が使われます。

この記事では、MQL4の中でも特に重要な関数の一つであるiSAR関数について、初心者の方にもわかりやすく解説しますね。

iSAR関数は、パラボリックSARというトレンドフォロー型のテクニカル指標を取得するための関数です。

パラメータの設定方法や実際の使い方を具体例を交えてご紹介します。

iSAR関数とは?

ノートパソコン プログラミング

Adeela WasimによるPixabayからの画像

iSAR関数は、MetaTrader 4(MT4)でパラボリックSARを計算し、その値を返すための関数です。

パラボリックSARは、トレンドの転換点を見つけるのに役立つインジケーターで、トレンドフォロー型のトレーダーにとって重要なツールですよ。

iSAR関数を使用することで、自動売買プログラムやカスタムインジケーターにこの指標を組み込むことができますね。

初心者でも使いやすいように、ここではその具体的な使い方とパラメータの設定方法を詳しく解説します。

iSAR関数の基本的な使い方

iSAR関数の基本的な使い方は、次のようになります。

double iSAR(
   string symbol,   // 通貨ペアのシンボル
   int timeframe,   // 時間枠
   double step,     // 加速因子(通常は0.02)
   double maximum,  // 最大値(通常は0.2)
   int shift        // シフト
);

この関数を使うことで、指定した通貨ペアと時間枠に基づいて、パラボリックSARの値を取得することができますね。

例えば、EUR/USDの1時間足チャートでパラボリックSARを計算する場合、次のように書きます。

double sarValue = iSAR("EURUSD", PERIOD_H1, 0.02, 0.2, 0);

パラメータの説明

次に、iSAR関数の各パラメータについて詳しく見ていきましょう。

  • symbol:インジケーターを適用する通貨ペアのシンボル名です。例えば「EURUSD」などです。現在のチャートのシンボルを使う場合はNULLを指定します。
  • timeframe:データを取得する時間枠です。例えば、1時間足ならPERIOD_H1、日足ならPERIOD_D1です。現在のチャートの時間枠を使う場合は0を指定します。
  • step:SARの加速因子を指定します。一般的には0.02が使われます。この値が大きいほど、SARの感度が高くなります。
  • maximum:SARの最大値を指定します。通常は0.2が使われます。この値が大きいほど、SARの感度が低くなります。
  • shift:シフトを指定します。0を指定すると最新の値を取得します。過去の値を取得したい場合は、正の整数を指定します。

iSAR関数を使った具体例

次に、iSAR関数を使ってパラボリックSARを計算し、その値を利用して簡単な売買シグナルを作成する例を見てみましょう。

double sarValue = iSAR(NULL, 0, 0.02, 0.2, 0);

if (sarValue < Close[0]) {
    // パラボリックSARが現在の価格以下なら買いシグナル
    Print("買いシグナル");
} else {
    // パラボリックSARが現在の価格以上なら売りシグナル
    Print("売りシグナル");
}

このコードでは、現在のチャートのシンボルと時間枠でiSAR関数を使い、パラボリックSARの値を取得しています。取得した値と現在の価格を比較して、買いシグナルと売りシグナルを出力します。

実際の使い方

実際にトレードでiSAR関数を活用する際のポイントをいくつかご紹介しますね。

まず、iSAR関数の出力を基にした売買シグナルの生成方法です。

次に、iSAR関数を使ったトレールストップの設定方法についても触れます。

最後に、iSAR関数を他のインジケーターと組み合わせる方法についても見てみましょう。

iSAR関数の使い方

iSAR関数は、MQL4でパラボリックSARを計算し、その値を返すための関数です。この関数を使用することで、トレンドフォロー型の戦略を簡単に作成することができますよ。まずはiSAR関数の基本的な使い方を理解しましょう。

iSAR関数は、以下のように書かれます:

double iSAR(
   string symbol,   // 通貨ペアのシンボル
   int timeframe,   // 時間枠
   double step,     // 加速因子(通常は0.02)
   double maximum,  // 最大値(通常は0.2)
   int shift        // シフト
);

それでは、各パラメータの詳細を見ていきましょう。

シンボル (symbol)

シンボルは、パラボリックSARを計算する対象となる通貨ペアを指定するための文字列です。例えば、”EURUSD”や”GBPJPY”などです。現在のチャートのシンボルを使用する場合は、NULLを指定します。

例えば、現在のチャートで計算を行いたい場合:

double sarValue = iSAR(NULL, 0, 0.02, 0.2, 0);

これにより、現在のチャートの通貨ペアと時間枠でパラボリックSARが計算されます。

時間枠 (timeframe)

時間枠は、データを取得する期間を指定します。一般的な時間枠の例としては、PERIOD_M1(一分足)、PERIOD_H1(一時間足)、PERIOD_D1(一日足)などがあります。現在のチャートの時間枠を使用する場合は、0を指定します。

例えば、一時間足で計算を行いたい場合:

double sarValue = iSAR(NULL, PERIOD_H1, 0.02, 0.2, 0);

加速因子 (step) と 最大値 (maximum)

加速因子(step)は、パラボリックSARがトレンドにどれだけ敏感に反応するかを決定するパラメータです。通常は0.02が使われます。最大値(maximum)は、加速因子の上限を設定します。通常は0.2が使われます。

この2つのパラメータは、トレンドフォローの感度を調整するために重要です。一般的にはデフォルト値が使用されますが、戦略に応じて変更することも可能です。

シフト (shift)

シフトは、取得する値のインデックスを指定します。0を指定すると最新の値が取得されます。過去の値を取得したい場合は、その期間分のシフト値を指定します。

例えば、1本前のバーのパラボリックSAR値を取得する場合:

double previousSarValue = iSAR(NULL, 0, 0.02, 0.2, 1);

このように、必要なタイミングで正確なデータを取得するためにシフトパラメータを利用します。

具体的な使い方の例

ここでは、iSAR関数を使って売買シグナルを生成する簡単な例を見てみましょう。以下のコードは、パラボリックSARの値を取得し、それに基づいて買いシグナルや売りシグナルを出すものです。

double sarValue = iSAR(NULL, 0, 0.02, 0.2, 0);

if (sarValue < Close[0]) {
    // パラボリックSARが現在の価格以下なら買いシグナル
    Print("買いシグナル");
} else {
    // パラボリックSARが現在の価格以上なら売りシグナル
    Print("売りシグナル");
}

このコードでは、iSAR関数を使って最新のパラボリックSAR値を取得し、現在の価格と比較しています。価格がSAR値を上回っている場合は買いシグナル、下回っている場合は売りシグナルとして出力します。

実際の売買戦略での使用

iSAR関数を使った具体的な売買戦略を作成することもできます。例えば、パラボリックSARを使ってトレンドの転換点を見極め、そのシグナルに基づいて自動売買を行う戦略です。以下は、その一例です。

void OnTick() {
    double sarValue = iSAR(NULL, 0, 0.02, 0.2, 0);

    if (OrdersTotal() == 0) {
        if (sarValue < Bid) { // 買いポジションを開く OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0, "Buy order", 0, 0, Blue); } else if (sarValue > Ask) {
            // 売りポジションを開く
            OrderSend(Symbol(), OP_SELL, 0.1, Bid, 3, 0, 0, "Sell order", 0, 0, Red);
        }
    } else {
        // 既存のポジションの管理
        for (int i = 0; i < OrdersTotal(); i++) {
            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
                if (OrderType() == OP_BUY && OrderSymbol() == Symbol()) {
                    // 買いポジションのトレールストップを更新
                    if (OrderStopLoss() < sarValue) { OrderModify(OrderTicket(), OrderOpenPrice(), sarValue, OrderTakeProfit(), 0, Blue); } } else if (OrderType() == OP_SELL && OrderSymbol() == Symbol()) { // 売りポジションのトレールストップを更新 if (OrderStopLoss() > sarValue) {
                        OrderModify(OrderTicket(), OrderOpenPrice(), sarValue, OrderTakeProfit(), 0, Red);
                    }
                }
            }
        }
    }
}

このコードは、パラボリックSARを使って自動売買戦略を実装したものです。具体的には、パラボリックSARが現在の価格より下にある場合に買いポジションを、上にある場合に売りポジションを開きます。また、既存のポジションについてはトレールストップを更新し、リスク管理を行います。

iSAR関数のパラメータ調整

iSAR関数のパラメータを調整することで、トレンドフォロー型の戦略をさらに最適化できます。例えば、加速因子(step)や最大値(maximum)の値を変更することで、パラボリックSARの感度を調整できます。これにより、より迅速にトレンドの転換点を検出することが可能になります。

例えば、以下のように加速因子を0.01に設定することで、パラボリックSARの感度を高めることができます:

double sarValue = iSAR(NULL, 0, 0.01, 0.2, 0);

このように、戦略に応じてパラメータを調整することで、より効果的なトレンドフォロー型の売買戦略を構築することができます。

トレードの実践例

実際にトレードを行う際には、バックテストを通じて戦略の有効性を検証することが重要です。バックテストとは、過去のデータを使用して、トレード戦略がどのように機能するかを検証するプロセスです。

以下は、バックテストを行うためのコード例です:

void OnTick() {
    double sarValue = iSAR(NULL, 0, 0.02, 0.2, 0);

    if (OrdersTotal() == 0) {
        if (sarValue < Bid) { OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0, "Buy order", 0, 0, Blue); } else if (sarValue > Ask) {
            OrderSend(Symbol(), OP_SELL, 0.1, Bid, 3, 0, 0, "Sell order", 0, 0, Red);
        }
    } else {
        for (int i = 0; i < OrdersTotal(); i++) {
            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
                if (OrderType() == OP_BUY && OrderSymbol() == Symbol()) {
                    if (OrderStopLoss() < sarValue) { OrderModify(OrderTicket(), OrderOpenPrice(), sarValue, OrderTakeProfit(), 0, Blue); } } else if (OrderType() == OP_SELL && OrderSymbol() == Symbol()) { if (OrderStopLoss() > sarValue) {
                        OrderModify(OrderTicket(), OrderOpenPrice(), sarValue, OrderTakeProfit(), 0, Red);
                    }
                }
            }
        }
    }
}

このコードは、パラボリックSARを使用したシンプルな売買戦略を実装し、バックテストを行うためのものです。バックテストを通じて、戦略の有効性や改善点を見つけることができます。

まとめ

iSAR関数を使ったパラボリックSARの計算は、トレンドフォロー型の自動売買戦略において非常に有効です。基本的な使い方やパラメータの設定方法を理解することで、初心者の方でも簡単に戦略を構築できます。また、実際にトレードを行う前にバックテストを行い、戦略の有効性を検証することが重要です。

この記事を参考に、ぜひ自分の戦略を作成してみてくださいね。

iSAR関数の応用

iSAR関数は、単にパラボリックSARの値を取得するだけでなく、より高度な自動売買ロジックの一部として利用することができます。例えば、トレールストップの設定や複数のインジケーターとの組み合わせなどが考えられます。

パラボリックSARは、トレンドが継続するか反転するかを判断するためのツールとしてよく使用されます。この特性を利用して、売買シグナルを生成したり、ポジションの管理に役立てることができますね。次に、iSAR関数の具体的な応用例をいくつか紹介します。

トレールストップの設定

トレールストップとは、利益を確保しながら損失を最小限に抑えるための方法です。パラボリックSARをトレールストップとして使用することで、動的にストップロスを調整できます。これは、価格が上昇するとともにストップロスが引き上げられ、価格が下落するときには変わらないという仕組みです。

void OnTick() {
    double sarValue = iSAR(NULL, 0, 0.02, 0.2, 0);
    
    if (OrdersTotal() == 0) {
        if (sarValue < Bid) {
            // 買いポジションを開く
            OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0, "Buy order", 0, 0, Blue);
        }
    } else {
        for (int i = 0; i < OrdersTotal(); i++) {
            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
                if (OrderType() == OP_BUY && OrderSymbol() == Symbol()) {
                    // トレールストップを更新
                    OrderModify(OrderTicket(), OrderOpenPrice(), sarValue, OrderTakeProfit(), 0, Blue);
                }
            }
        }
    }
}

このコードでは、現在のSAR値を使って買いポジションを開き、開いたポジションに対してトレールストップを設定しています。

複数のインジケーターとの組み合わせ

iSAR関数は他のインジケーターと組み合わせて使用することで、より信頼性の高い売買シグナルを生成することができます。例えば、移動平均線や相対力指数(RSI)と組み合わせることで、トレンドの確認やエントリーポイントの精度を高めることができます。

double sarValue = iSAR(NULL, 0, 0.02, 0.2, 0);
double maValue = iMA(NULL, 0, 14, 0, MODE_SMA, PRICE_CLOSE, 0);
double rsiValue = iRSI(NULL, 0, 14, PRICE_CLOSE, 0);

if (sarValue < Close[0] && maValue > Close[0] && rsiValue < 30) { // 強い買いシグナル Print("強い買いシグナル"); } else if (sarValue > Close[0] && maValue < Close[0] && rsiValue > 70) {
    // 強い売りシグナル
    Print("強い売りシグナル");
}

このコードでは、パラボリックSAR、移動平均線、RSIの値を組み合わせて、強い買いシグナルと売りシグナルを生成しています。

エキスパートアドバイザー(EA)の作成

iSAR関数を使用して、自動取引を行うエキスパートアドバイザー(EA)を作成することも可能です。例えば、トレンドフォロー戦略に基づくEAを作成し、特定の条件が満たされたときに自動的に売買を行うように設定できます。

int start() {
    double sarValue = iSAR(NULL, 0, 0.02, 0.2, 0);
    
    if (sarValue < Close[0] && OrdersTotal() == 0) { // 買いポジションを開く OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0, "Buy order", 0, 0, Blue); } else if (sarValue > Close[0] && OrdersTotal() == 0) {
        // 売りポジションを開く
        OrderSend(Symbol(), OP_SELL, 0.1, Bid, 3, 0, 0, "Sell order", 0, 0, Red);
    }
    
    return(0);
}

このコードは、パラボリックSARの値に基づいて自動的に売買を行うEAの基本的な例です。

 

バックテストの活用

バックテストは、過去のデータを使用して取引戦略の有効性を検証する方法です。iSAR関数を用いた戦略もバックテストを行うことで、その有効性を確認できます。バックテストを行うことで、戦略の弱点や改善点を発見し、リアルタイムの取引での成功確率を高めることができますよ。

void OnTick() {
    double sarValue = iSAR(NULL, 0, 0.02, 0.2, 0);
    static datetime lastTime = 0;
    
    if (Time[0] != lastTime) {
        lastTime = Time[0];
        // バックテスト用にログを記録
        Print(TimeToString(Time[0]), ", SAR: ", sarValue, ", Close: ", Close[0]);
    }
}

このコードでは、毎ティックごとにパラボリックSARの値と終値を記録し、バックテストのためのデータを収集します。これにより、後でデータを分析し、戦略の効果を評価することができます。

マルチタイムフレーム分析

マルチタイムフレーム分析とは、複数の時間枠でインジケーターを確認する方法です。例えば、長期のトレンドを確認するために日足(D1)を使用し、エントリーポイントを見つけるために1時間足(H1)を使用することができます。これにより、より精度の高い取引を行うことができますね。

double sarDaily = iSAR(NULL, PERIOD_D1, 0.02, 0.2, 0);
double sarHourly = iSAR(NULL, PERIOD_H1, 0.02, 0.2, 0);

if (sarDaily < Close[0] && sarHourly < Close[0]) { // 長期と短期の両方で買いシグナル Print("長期と短期で買いシグナル"); } else if (sarDaily > Close[0] && sarHourly > Close[0]) {
    // 長期と短期の両方で売りシグナル
    Print("長期と短期で売りシグナル");
}

このコードでは、日足と1時間足の両方でパラボリックSARの値を取得し、同じ方向のシグナルが出た場合に強い売買シグナルとして扱います。

リスク管理と資金管理

iSAR関数を用いた取引戦略を実行する際には、リスク管理と資金管理も重要です。適切なリスク管理を行うことで、大きな損失を避けることができます。例えば、最大損失額を設定したり、取引ごとのリスクを一定に保つためにポジションサイズを調整したりする方法があります。

double accountRisk = 0.01; // 口座資金の1%をリスクとする
double stopLoss = 0.1; // 10ピップのストップロス
double positionSize = (AccountBalance() * accountRisk) / stopLoss;

if (sarValue < Close[0] && OrdersTotal() == 0) { OrderSend(Symbol(), OP_BUY, positionSize, Ask, 3, Bid - stopLoss, 0, "Buy order", 0, 0, Blue); } else if (sarValue > Close[0] && OrdersTotal() == 0) {
    OrderSend(Symbol(), OP_SELL, positionSize, Bid, 3, Ask + stopLoss, 0, "Sell order", 0, 0, Red);
}

このコードでは、口座資金の1%をリスクとして設定し、それに基づいてポジションサイズを計算しています。これにより、一度の取引で過度なリスクを取らないようにします。

まとめ

iSAR関数は、MQL4でパラボリックSARを取得し、自動売買システムやカスタムインジケーターに組み込むための強力なツールです。パラボリックSARはトレンドフォロー型のトレーダーにとって重要なインジケーターであり、トレンドの転換点を見つけるのに役立ちます。

iSAR関数を使うことで、これらのトレンド転換点をプログラム内で簡単に取得し、売買シグナルを生成することができます。基本的な使い方やパラメータの設定方法を理解することで、より効果的にトレンドフォロー型の戦略を構築することができますよ。

iSAR関数の基本

iSAR関数は以下のように使用します:

double iSAR(
   string symbol,   // 通貨ペアのシンボル
   int timeframe,   // 時間枠
   double step,     // 加速因子(通常は0.02)
   double maximum,  // 最大値(通常は0.2)
   int shift        // シフト
);

symbolパラメータには、取引する通貨ペアのシンボルを指定します。例えば、「EURUSD」といった具合ですね。timeframeパラメータには、データを取得したい時間枠を指定します。一般的な値は、現在の時間枠を示す0です。

パラメータの設定

stepとmaximumのパラメータは、パラボリックSARの動作を調整するためのものです。stepは価格の増加ステップであり、通常は0.02が使用されます。maximumはステップの最大値で、通常は0.2が使用されます。

shiftパラメータは、取得したいインジケーターの値のシフトを指定します。最新の値を取得する場合は0を指定します。この設定により、最新のパラボリックSARの値を取得することができます。

実際のコード例

以下は、iSAR関数を使ってパラボリックSARを計算し、買いシグナルと売りシグナルを出力する簡単な例です:

double sarValue = iSAR(NULL, 0, 0.02, 0.2, 0);

if (sarValue < Close[0]) {
    // パラボリックSARが現在の価格以下なら買いシグナル
    Print("買いシグナル");
} else {
    // パラボリックSARが現在の価格以上なら売りシグナル
    Print("売りシグナル");
}

このコードでは、現在のチャートのシンボルと時間枠でiSAR関数を使用し、パラボリックSARの値を取得しています。その値と現在の価格を比較して、買いシグナルと売りシグナルを出力します。

iSAR関数の応用

iSAR関数は、単にパラボリックSARの値を取得するだけでなく、より高度な自動売買ロジックの一部として利用することができます。例えば、トレールストップの設定や複数のインジケーターとの組み合わせなどが考えられます。

以下のコード例では、iSAR関数を使用してトレールストップを設定する方法を紹介します:

void OnTick() {
    double sarValue = iSAR(NULL, 0, 0.02, 0.2, 0);

    if (OrdersTotal() == 0) {
        if (sarValue < Bid) {
            // 買いポジションを開く
            OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0, "Buy order", 0, 0, Blue);
        }
    } else {
        for (int i = 0; i < OrdersTotal(); i++) {
            if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
                if (OrderType() == OP_BUY && OrderSymbol() == Symbol()) {
                    // トレールストップを更新
                    OrderModify(OrderTicket(), OrderOpenPrice(), sarValue, OrderTakeProfit(), 0, Blue);
                }
            }
        }
    }
}

このコードでは、現在のSAR値を使って買いポジションを開き、開いたポジションに対してトレールストップを設定しています。このように、iSAR関数を使うことで、さまざまなトレーディング戦略を実装することができますね。

初心者の方も、この記事を参考にしてぜひ試してみてくださいね。

コメント

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