Takehana Lab

System Trading : MultiCharts, TradingView, Python, R

価格データエクスポートインジケータ

前にブログにアップロードしていたマルチチャートでリアルタイム価格データを指定パスに落とすスクリプトを再度公開します.

MC には QM アプリが付属するため, そちらでも定期的な価格データの更新は可能なのですが, 高頻度のリアルタイムデータを更新することはできないため, このようなスクリプトが必要になります.

コード

コードは以下になります. Git にうpしておきました.

Github

// ---- function: export price data.

input: dir(stringSimple);

// ---- symbol name.

var: strL(""), strR(""), sym("");

sym = getsymbolname;

if category = 12 then
begin
    value1 = InStr(sym, "/");
    value2 = StrLen(sym);
    strL = LeftStr(sym, value1-1);
    strR = RightStr(sym, value2 - value1);
    sym = text(strL, strR);
end;

// ---- time frame.

var: tf_num(""), tf_value(0), tf_type("");

tf_num = numToStr(Barinterval, 0);
tf_value = barType_ex;

switch(tf_value)
begin
    case is = 1:
        tf_type = "Ticks";
    case is = 2:
        tf_type = "Minutes";
    case is = 3:
        tf_type = "Hours";
    case is = 4:
        tf_type = "Days";
    case is = 5:
        tf_type = "Weeks";
    case is = 6:
        tf_type = "Months";
    case is = 7:
        tf_type = "Years";
end;

// ---- init data path.

var: file_name(""), file_path("");

file_name = sym + "-" + tf_type + "-" + 
tf_num + ".txt";
file_path = dir + file_name;

once fileDelete(file_path);

if barNumber = 1 then
begin
    Print(file(file_path), 
    "dttm", ",", 
    "open", ",", 
    "high", ",", 
    "low", ",", 
    "close", ",",
    "volume"
    );
end;

// ---- export price data.

var: adj_date(""), adj_time(""), adj_datetime("");

adj_date = formatDate("yyyy/MM/dd", dateTime);
adj_time = formatTime("HH:mm:ss", dateTime);
adj_datetime = text(adj_date, " ", adj_time);

if barNumber >= 1 then
begin
    Print(file(file_path),
    adj_datetime + ", " +
    NumToStr(Open, Digits) + ", " +
    NumToStr(High, Digits) + ", " +
    NumToStr(Low, Digits) + ", " +
    NumToStr(Close, Digits) + ", " +
    NumToStr(Volume, Digits)
    );
end;

f_datOut = true;

// ---- eof.

使用方法

(2020/7/20 コードを編集しました.)

上記は関数コードです. 使用する場合 PLE の新規作成から function ファイルを指定してコードを入力しないとエラーになります.

関数の返値には truefalse を指定してください.

ファイル名は f_datOut としてください.

次にこの関数を呼び出すインジケータソースコードは以下のようになります.

// ---- data export.

input:
    datOut(true),
    pathDat("yourPath");

if datOut then f_datOut(pathDat);

// ---- eof.

パラメータ pathDat にデータ尾を保存したいフォルダのパスを入力してください.

C:\DataSaveFolder\ の形式で入力する必要があります. エンコードの関係で入力すると \ として表示されますが問題ありあせんのでそのまま実行してください.

このコードは LMAX チャートから為替データを取り出すために作ったので, 他の環境でどのように動作するかは知りませぬ. なにか気になる点などありましたらTwitterの方に連絡ください.

注意点

挿入先のチャートについてですが, このスクリプトは基本的に M1 か H1 または D1 で実行してください.

MC は分足単位か, 日足単位のデータをベースに全てのタイムフレームのレートを計算します. 他の時間足は全てそれらをコンバートして計算されているので, 元となる価格データをソースにしないと時間情報のエラーが発生する可能性があります.

もう一点.

特に 1 分足でこのスクリプトを実行すると MC の動作がかなり重くなることが懸念されます. 主にキャッシュが累積するためで, メモリが足りなくなる可能性があります. できれば 16GB 以上のメモリを積んだマシンで実行してください.