トップ  >  自作してみる >  時系列配列について  >  T3.異なる通貨ペアのデータを取得
T3.異なる通貨ペアのデータを取得


異なる通貨ペアのデータを取得する関数

今回は異なる通貨ペアのデータを取得する為の関数について説明します。

異なる通貨ペアのデータを取得するには前回と同様に以下関数を使用する必要があります。
以下関数を使って現在表示されている通貨ペアのデータを取得する事も可能です。
データの種類 関数 内容
始値 iOpen() 指定した通貨ペア・時間軸の始値取得
高値 iHigh() 指定した通貨ペア・時間軸の高値取得
安値 iLow() 指定した通貨ペア・時間軸の安値取得
終値 iClose() 指定した通貨ペア・時間軸の終値取得
Tick出来高 iVolume() 指定した通貨ペア・時間軸の出来高取得
オープン時間 iTime() 指定した通貨ペア・時間軸のオープン時間取得


とりあえずこの関数を使って、現在表示中の通貨ペアの終値を取得してみましょう。

ソースコード:
//+------------------------------------------------------------------+
//|                               Test_GetTimeSeries_OtherSymbol.mq4 |
//|                                                             yuki |
//|                                      https://yukifx.web.fc2.com/ |
//+------------------------------------------------------------------+
#property copyright "yuki"
#property link      "https://yukifx.web.fc2.com/"
#property version   "1.00"
#property strict // strictは絶対に削除しない事

//+------------------------------------------------------------------+
//| スクリプトプログラムスタート
//+------------------------------------------------------------------+
void OnStart()
{
    double get_value = 0;
    
    get_value = iClose(             // 終値を取得
                       Symbol(),    // 通貨ペア
                       Period(),    // 時間軸
                       0            // シフト
                );
    
    Print( get_value );  // 取得した終値をログ出力

}


結果:
Test_GetTimeSeries_OtherSymbol USDJPY,Weekly: 104.29


これは現在チャートに表示されている通貨ペアと時間軸を指定しているので、
時系列配列に直接アクセスするClose[0]と取得内容が同じになります。

シフトの値は時系列配列のインデックスと同じだと思って下さい。

時系列配列

シフトの値を0にすると、その指定した時間軸の最新のバーの値を取得します。
シフトの値を1にすると、その指定した時間軸の一つ前バーの値を取得します。

ドルストレートのデータを取得する

それではさっそくドルストレートのデータを取得してみましょう。
具体的にはEURUSDのデータを取得します。
「EURUSDのデータを取得する」という目的なので、現在表示されている通貨ペアに関係無く「EURUSDのデータ」を取得しなければなりません。

やる事は非常に簡単です、上の例ではSymbol()関数で現在の通貨ペアを取得して設定をしていましたが、
文字列でEURUSDと指定します。

ソースコード:
//+------------------------------------------------------------------+
//|                               Test_GetTimeSeries_OtherSymbol.mq4 |
//|                                                             yuki |
//|                                      https://yukifx.web.fc2.com/ |
//+------------------------------------------------------------------+
#property copyright "yuki"
#property link      "https://yukifx.web.fc2.com/"
#property version   "1.00"
#property strict // strictは絶対に削除しない事

//+------------------------------------------------------------------+
//| スクリプトプログラムスタート
//+------------------------------------------------------------------+
void OnStart()
{
    double get_value = 0;
    
    get_value = iTime(             // 終値を取得
                       "EURUSD",    // 通貨ペア
                       Period(),    // 時間軸
                       0            // シフト
                );
    
    Print( get_value );  // 取得した終値をログ出力

}


結果:
Test_GetTimeSeries_OtherSymbol USDJPY,H4: 1.18279


ちょっと分かりにくいかもしれませんが、USDJPYのチャートでEURUSDの終値を取得しています。


銘柄名についての注意点

異なる通貨ペアを文字列で指定するのですが、
業者によって通貨ペアの名称が異なる場合があるので注意が必要です。
特にCFDは業者によって全然名称が異なります。

例えばある業者のライブ口座では
時系列配列

このように通貨ペア名の末尾に「-a」がついています。
デモ口座ではこれが付いていません。

その為、
デモ口座 :"USDJPY"
ライブ口座:"USDJPY-a"

と、口座毎に名称指定の方法を変える必要があります。
この問題について対策していないと、デモ口座や他業者では動作するのに一部業者のライブ口座だけ動作しないという事が発生します。

まぁ単純に現在表示している通貨ペア名を取得して、通貨ペア名がCFD以外だった場合にStringLen()で文字列の長さを取得して7文字以上なら、 StringSubstr()で余分な部分を取得して、 指定する通貨ペア名に付ける事で対策出来ます。


ソースコード:
#property copyright "yuki"
#property link      "https://yukifx.web.fc2.com/"
#property version   "1.00"
#property strict // strictは絶対に削除しない事

//+------------------------------------------------------------------+
//| スクリプトプログラムスタート
//+------------------------------------------------------------------+
void OnStart()
{
    Print( GetOtherSymbol("EURUSD") );
}

//+------------------------------------------------------------------+
//| 他通貨ペア名を取得
//+------------------------------------------------------------------+
string GetOtherSymbol( string in_symbol ) {
    
    string ret_symbol = in_symbol;
    string now_symbol = Symbol();              // 現在表示の通貨ペア名
    int    str_length = StringLen(now_symbol);   // 文字列数
    
    if ( str_length > 6 ) {                      // 文字列が6文字越えの場合
        string add_str = StringSubstr( now_symbol, 6 , str_length); // 末尾文字列抽出
        ret_symbol += add_str;
    }
    
    printf( "仮引数  :%s" , in_symbol );
    printf( "表示銘柄:%s" , now_symbol );
    printf( "戻り値  :%s" , ret_symbol );
    
    return ret_symbol;
}



結果:
TestProgram USDJPY-a,H4: 仮引数  :EURUSD
TestProgram USDJPY-a,H4: 表示銘柄:USDJPY-a
TestProgram USDJPY-a,H4: 戻り値  :EURUSD-a





スポンサーリンク
検索

↑の検索エンジンが表示されない人は、
↓の古い検索エンジンを使用して下さい。
カスタム検索
MQL4リファレンスツリー
スポンサーリンク


Copyright ©2015 MT4でEA自作しちゃお~ All Rights Reserved.


Top

inserted by FC2 system