| .. | _main | _trailmove | _tick |
起動されるタイミングは分足情報の設定によって決まります。引数は処理対象となる商品シンボルです。
| mst_symbol.xml (商品シンボル情報) | :target="1" |
| mst_rate.xml (分足情報) | :target="1" 且つ isimpl="1" |
| tst_implparam.xml (実行プラン) | :isimpl="1" |
オープンポジションの評価損益が変動した際に呼び出されます。
| tradeid | :ポジションID |
| trailmove | :トレーリングストップ・リミットを調整するメッソド名 |
市場データが変動した際に呼び出されます。引数は処理対象となる商品シンボルです。
| 商品シンボル情報(mst_symbol.xml) | :target="1" |
| .. | _CDate | _CFile | _Log | _Params | PriceBar | Tag | Trade |
日付や時刻を扱うことが可能な_CDateインスタンスを生成します。
// 引数を省略した場合は現在の日時となります。
var date = new _CDate();
// 引数timeには1970-01-01 00:00:00(UTC)からの秒数を指定します。
var date = new _CDate(946652399);
// 引数dateStringには日付を表す文字列を指定します。
var date = new _CDate("2019");
var date = new _CDate("2019/5/31");
var date = new _CDate("2019-5-31 17:50:10");
// 1970-01-01 00:00:00(UTC)からの秒数を設定または取得します。
date.time = 946652399;
_Print(date.time);
// 現地時刻で年、月、日、時、分、秒、曜日を取得します。全部読み取り専用です。
// 曜日は0(日曜日)~6(土曜日)までの値。月は1(1月)~12(12月)の数値を返します。
_Print("%d-%d-%d %d:%d:%d [%d]", date.year, date.month, date.day, date.hour, date.min, date.sec, date.week);
// dateオブジェクトの秒数と渡された秒数を加算して返します。
_Print(date.addTime(100));
// dateオブジェクトの秒数に渡された秒数を加算します。
date.addinTime(100);
// timeKindに'UTC'(世界標準時)または'LOCAL'(現地時刻)を指定して、1970-01-01 00:00:00からの秒数を設定または取得します。
_Print(date.getTime('UTC'));
_Print(date.getTime('LOCAL'));
date.setTime(946652399, 'UTC');
date.setTime(946652399, 'LOCAL');
// calKindに'UTC'(世界標準時)または'LOCAL'(現地時刻)、formatに書式文字列を指定して、日時を表す文字列を返します。formatの詳細についてはC言語関数strftimeの書式文字列を参考してください。
_Print(date.toString());
_Print(date.toString('UTC'));
_Print(date.toString('LOCAL'));
_Print(date.toString('UTC', '%Y-%m-%d %H:%I:%S'));
_Print(date.toString('LOCAL', '%Y-%m-%d %H:%I:%S'));
ファイル入出力に関する_CFileインスタンスを生成します。
// ファイル名またはパスを指定します。
var file = new _CFile("m5.csv");
// 読み込み
file.open();
var content = file.read();
file.close();
// 1行ずつ読み込み
file.open();
while (line = file.readline()) {
_Print(line);
}
file.close();
// 書き込み
file.open('w');
file.write('Hello!');
file.close();
// 追加書き込み
file.open('a');
file.write('Hello!');
file.close();
ログ出力用の静的クラス
// 4種類の出力レベル("error", "warn", "info", "debug")を設定または取得します。
_Log.level = "error";
_Print(_Log.level);
// "info"レベルで出力します。
_Log.info("open position.");
[キー, 値]を文字列として処理するMapオブジェクトです。
// 'a'と'b'のキーに値をセット・ゲットします。更新しない限り、ずっと保持しているままです。
_Params['a'] = 123.01;
_Params.b = '456';
_Print("%s %d %f %s %s\n", _Params.a, _Params.a, _Params.a, _Params['b']);
↓↓↓ 下記の結果が出力されます。 ↓↓↓
123.01 123 123.010000 456
ヒストリカルデータオブジェクト (読み取り専用)
// ヒストリカルデータオブジェクトを取得して属性を参照します。
var pb = _GetPriceBarByPos("EUR/USD", "m5", 0);
_Print("%s %d %s %f", pb.symbol, pb.startdate, pb.period, pb.askClose);
タグオブジェクト
// タグ名とタグ値を参照します。
var implparam = _GetImplParam("EUR/USD");
_Print("Tag Name:%s, Tag Value:%s", implparam.name, implparam.value);
// タグに該当属性があるかを確認します。
Print(implparam.hasAttr("name") ? "OK" : "NG");
// タグに該当属性の値を取得します。
Print(implparam.getAttr("name"));
// タグの属性を設定します。
implparam.setAttr("name", "order_open");
// 当タグのタグツリーから指定の名前と値と一致する子タグを探します。
var tag = implparam.getTag("method", "");
// 当タグのタグツリーから指定の名前シーケンスと一致する子タグを探します。
var tag = implparam.getTagByNames("method", "property");
// 当タグのタグツリーから指定の名前、属性(キー、値)と一致する子タグを探します。
var tag = implparam.getTagByAttr("property", "periods", "m5");
ポジションオブジェクト (読み取り専用)
// オープンポジションオブジェクトを取得して属性を参照します。
var trade = _GetTrade("70043871");
_Print("%s %s %f %f", trade.symbol, trade.isbuy ? "buy" : "sell", trade.amount, trade.open);
オープンポジションのストップを設定します。
// ポジションIDを指定してストップを設定します。
var ret = _ChangeStopLoss("70043871", 118.9);
_Print(ret == 0 ? "succeeded" : "failed");
オープンポジションのリミットを設定します。
// ポジションIDを指定してリミットを設定します。
var ret = _ChangeTakeProfit("70043871", 120.5);
_Print(ret == 0 ? "succeeded" : "failed");
オープンポジションを全部クローズします。
var count = _CloseAllTrade();
_Print("%d positions were closed.", count);
オープンポジションをクローズします。
// ポジションIDと取引額を指定してポジションをクローズします。
var ret = _CloseTradeById("70043871", 1000);
_Print(ret == 0 ? "succeeded" : "failed");
オープンポジションをクローズします。
// シンボルと注文種類('B':買い, 'S':売り)を指定してポジションをクローズします。
var ret = _CloseTradesBySymbol("EUR/USD", 'S');
_Print(ret == 0 ? "succeeded" : "failed");
ヒストリカルデータの数を取得します。
// シンボルと時間足(m5, m15, m30, H1, H4, D1)を指定してヒストリカルデータの数を取得します。
var count = _GetBarCount("EUR/USD", "m5");
_Print("The number of historical data [%s %s] is %d.", "EUR/USD", "m5", count);
クローズしたポジションリストを取得します。
// シンボルを指定してクローズしたポジションのリストを取得します。
var lst = _GetClosedTradeListBySymbol("EUR/USD");
for (var i = 0; i < lst.length; i++) {
_Print("%s: %f", lst[i].id, lst[i].amount);
}
実行プランオブジェクトを取得します。
// シンボルを指定して実行プランオブジェクトを取得します。
var implparam = _GetImplParam("EUR/USD");
if (implparam !== undefined) {
_Print("Name of implparam is %s.", implparam.getAttr("name"));
}
ローカルからヒストリカルデータを取得します。
// シンボルと時間足を指定して、ローカルから2018/5/1 8:00:00以降のヒストリカルデータを100個取得します。
var pbList = _GetLaterPriceBarFromLocal("EUR/USD", "m5", "2018/5/1 8:00:00", 100);
_Print("%d historical data were returned.", plList.length);
市場クローズ時間(1970-01-01 00:00:00(UTC)からの秒数)を取得します。
// 市場クローズ時間の1時間前に、すべてのポジションをクローズします。
var dtNow = _CDate();
if (dtNow.time >= _GetMarketCloseTime(dtNow.time) - 3600) {
_CloseAllTrade();
}
メッソドオブジェクトを取得します。
// シンボルとメソッド名を指定して、メッソドのプロパティを取得します。
var loadMethod = _GetMethod("EUR/USD", "LoadContext");
if (loadMethod !== undefined) {
_Print("Vaule of property[orderstop_from_wday] is %s.",
loadMethod.getAttr("orderstop_from_wday"));
}
メッソドオブジェクトリストを取得します。
// シンボルを指定して定義されているすべてのメソッドオブジェクトを取得します。
var orderMethodList = _GetMethods("EUR/USD");
if (orderMethodList !== undefined) {
_Print("%d methods were defined.", orderMethodList.length);
}
レート情報を取得します。
// 買値を取得します。
var ask = _GetOffer("EUR/USD", "Ask");
// 売値を取得します。
var bid = _GetOffer("EUR/USD", "Bid");
// 高値を取得します。
var high = _GetOffer("EUR/USD", "High");
// 安値を取得します。
var low = _GetOffer("EUR/USD", "Low");
ポイントサイズを取得します。
// EUR/USDのポイントサイズ(0.0001)を取得します。
var pointsize = _GetPointSize("EUR/USD");
_Print("PointSize of %s is %f.", "EUR/USD", pointsize);
プライスリストを取得します。
// シンボルと時間足を指定して買い始値のリストを取得します。
var askopen = _GetPriceArray("EUR/USD", "m5", "AskOpen");
// シンボルと時間足を指定してローカルからヒストリカルデータを取得します。
// それから取得したヒストリカルデータから買い始値のリストを取得します。
var pbList = _GetLaterPriceBarFromLocal("EUR/USD", "m5", "2018/5/1 8:00:00", 100);
var askopen = _GetPriceArray(pbList, "AskOpen");
// シンボルと時間足を指定して買い終値のリストを取得します。
var askclose = _GetPriceArray("EUR/USD", "m5", "AskClose");
// シンボルと時間足を指定して買い高値のリストを取得します。
var askhigh = _GetPriceArray("EUR/USD", "m5", "AskHigh");
// シンボルと時間足を指定して買い安値のリストを取得します。
var asklow = _GetPriceArray("EUR/USD", "m5", "AskLow");
// シンボルと時間足を指定して売り始値のリストを取得します。
var bidopen = _GetPriceArray("EUR/USD", "m5", "BidOpen");
// シンボルと時間足を指定して売り終値のリストを取得します。
var bidclose = _GetPriceArray("EUR/USD", "m5", "BidClose");
// シンボルと時間足を指定して売り高値のリストを取得します。
var bidhigh = _GetPriceArray("EUR/USD", "m5", "BidHigh");
// シンボルと時間足を指定して売り安値のリストを取得します。
var bidlow = _GetPriceArray("EUR/USD", "m5", "BidLow");
ローカルからヒストリカルデータを取得します。
// シンボルと時間足を指定して、ローカルから2018/5/1 8:00:00以前のヒストリカルデータを100個取得します。
var pbList = _GetPriceBarFromLocal("EUR/USD", "m5", "2018/5/1 8:00:00", 100);
_Print("%d historical data were returned.", plList.length);
スプレッドを取得します。
// EUR/USDのスプレッドを取得します。
var spread = _GetSpread("EUR/USD");
_Print("Spread of %s is %f.", "EUR/USD", spread);
標準時間(1970-01-01 00:00:00(UTC)からの秒数)を取得します。
時間足の秒数を取得します。
// m5の秒数を取得します。
var seconds = _GetTimeByPeriod("m5");
_Print("Seconds of %s is %d.", "m5", seconds);
オープンポジションオブジェクトを取得します。
// ポジションIDを指定してオープンポジションオブジェクトを取得します。
var trade = _GetTrade("70043871");
_Print("%s %s %f %f", trade.symbol, trade.isbuy ? "buy" : "sell", trade.amount, trade.open);
オープンポジションリストを取得します。
// シンボルを指定してオプーンしているポジションのリストを取得します。
var lst = _GetTradeListBySymbol("EUR/USD");
for (var i = 0; i < lst.length; i++) {
_Print("%s: %f", lst[i].id, lst[i].amount);
}
取引メソッド名を取得します。
// 注文IDを指定して取引メソッド名を取得します。
var name = _GetTradeMethodName("50043871");
_Print("Name of TradeMethod is %s.", name);
取引メソッド時間足を取得します。
// 注文IDを指定して取引メソッド時間足を取得します。
var period = _GetTradeMethodPeriod("50043871");
_Print("Period of TradeMethod is %s.", period);
トレーリングムーブ名を取得します。
// 注文IDを指定してトレーリングムーブ名を取得します。
var name = _GetTrailMoveTsName("50043871");
_Print("Name of TrailMove is %s.", name);
データベースから実行プランをロードします。
// パラメータ名を指定して実行プランをロードします。シンボル名を付けてパラメータの値を取得します。
_LoadImplPlan("ImplKbn", "Amount", "OpenMethod1", "OpenMethod2", "OpenMethod3");
_Print("ImplKbn:%s, Amount:%s, OpenMethod1:%s, OpenMethod2:%s, OpenMethod3:%s",
_Params["EUR/USD" + "ImplKbn"], _Params["EUR/USD" + "Amount"],
_Params["EUR/USD" + "OpenMethod1"], _Params["EUR/USD" + "OpenMethod2"],
_Params["EUR/USD" + "OpenMethod3"]);
ディレクトリを作成します。
// 相対パスでディレクトリを作成します。
var out_dir = "dat/USD-JPY";
var ret = _Mkdir(out_dir);
if (ret == -1) {
_Print("Directory [%s] creation failed.\n", out_dir);
}
else if (ret == 0) {
_Print("Directory [%s] creation succeeded.\n", out_dir);
}
else if (ret == 1) {
_Print("Directory [%s] already exists.\n", out_dir);
}
数値を文字列に変換します。
// 数値を文字列に変換します。
var num = 12.54
_Print("%f => %s\n", num, _Num2Str(num));
// 数値配列を文字列配列に変換します。
var num_ary = [12.54, 78.66, 43];
var str_ary = _Num2Str(num_ary);
for (var i = 0; i < num_ary.length; i++) {
_Print("%f => %s\n", num_ary[i], str_ary(i));
}
成行注文を作成します。
// 取引額、ストップ、リミットを指定して買い注文を作成します。
var orderId = _OpenMarketOrder("EUR/USD", "B", 1000, 1.1168, 1.1390);
_Print("Market order [%s] is opened.", orderId);
ヒストリカルデータを標準出力に出力します。
// シンボルと時間足を指定してヒストリカルデータを出力します。
_OutPriceBar("EUR/USD", "m5");
書式文字列に従って標準出力に出力します。
// それぞれ10進数、16進数、8進数の形式で出力します。
_Print("%d %x %o", 123, 123, 123);
// それぞれ[-]dddd.dd、指数の形式で出力します。
_Print("%f %e", 0.0123, 0.0123);
// 文字列として出力します。
_Print("%s\n", "Close a position.");
取引メソッド名を設定します。
// 注文IDを指定して取引メソッド名を設定します。
_SetTradeMethodName("50043871", "MacdCross");
取引メソッド時間足を設定します。
// 注文IDを指定して取引メソッド時間足を設定します。
_SetTradeMethodPeriod("50043871", "m5");
トレーリングムーブ名を設定します。
// 注文IDを指定してトレーリングムーブ名を設定します。
_SetTrailMoveTsName("50043871", "trailmove_eqdiff?40:1:20:10");
ポジションをオープンする際のコンテクスト情報を設定します。[C1-CN]は最大40個まで指定可能です。
// 注文IDを指定してポジションをオープンする際のコンテクスト情報を設定します。
var title = "INDEX_1,SCORE_1,INDEX_2,SCORE_2,INDEX_3,SCORE_3";
var pred = [2, 0.992, 0, 0.005, 1, 0.003];
_SetTsContext("50043871", 'S', "", title, pred);
ポジションをオープンする際のコンテクストトレーリング情報を設定します。
// 注文IDを指定してポジションをオープンする際のコンテクストトレーリング情報を設定します。
_SetTsContextTrail("50043871", 'S', "m5", "MacdCross", "", "", "trailmove_eqdiff?40:1:20:10");
テクニカル指標を作成します。
// シンボルと時間足を指定してSMAを作成します。
var sma = _TA("SMA", "EUR/USD", "m5", "AskClose", 200);
_Print("The number of SMA is %d.", sma.real.length);
// シンボルと時間足を指定してローカルからヒストリカルデータを取得します。
// それから取得したヒストリカルデータによってテクニカル指標を作成します。
var pbList = _GetLaterPriceBarFromLocal("EUR/USD", "m5", "2018/5/1 8:00:00", 360);
var sma = _TA("SMA", pbList, "AskClose", 200);
// シンボルと時間足を指定してMINUS_DMを作成します。
var minus_dm = _TA("MINUS_DM", "EUR/USD", "m5", "AskClose", 14);
_Print("The number of MINUS_DM is %d.", minus_dm.real.length);
// シンボルと時間足を指定してMINUS_DIを作成します。
var minus_di = _TA("MINUS_DI", "EUR/USD", "m5", "AskClose", 14);
_Print("The number of MINUS_DI is %d.", minus_di.real.length);
// シンボルと時間足を指定してPLUS_DMを作成します。
var plus_dm = _TA("PLUS_DM", "EUR/USD", "m5", "AskClose", 14);
_Print("The number of PLUS_DM is %d.", plus_dm.real.length);
// シンボルと時間足を指定してPLUS_DIを作成します。
var plus_di = _TA("PLUS_DI", "EUR/USD", "m5", "AskClose", 14);
_Print("The number of PLUS_DI is %d.", plus_di.real.length);
// シンボルと時間足を指定してDXを作成します。
var dx = _TA("DX", "EUR/USD", "m5", "AskClose", 14);
_Print("The number of DX is %d.", dx.real.length);
// シンボルと時間足を指定してADXを作成します。
var adx = _TA("ADX", "EUR/USD", "m5", "AskClose", 14);
_Print("The number of ADX is %d.", adx.real.length);
// シンボルと時間足を指定してADXRを作成します。
var adxr = _TA("ADXR", "EUR/USD", "m5", "AskClose", 14);
_Print("The number of ADXR is %d.", adxr.real.length);
// シンボルと時間足を指定してEMAを作成します。
var ema = _TA("EMA", "EUR/USD", "m5", "AskClose", 14);
_Print("The number of EMA is %d.", ema.real.length);
// シンボルと時間足を指定してWMAを作成します。
var wma = _TA("WMA", "EUR/USD", "m5", "AskClose", 14);
_Print("The number of WMA is %d.", wma.real.length);
// シンボルと時間足を指定してMACDを作成します。
var macd = _TA("MACD", "EUR/USD", "m5", "AskClose", 12, 26, 9);
_Print("The number of MACD is %d %d %d.", macd.macd.length, macd.signal.length, macd.hist.length);
// シンボルと時間足を指定してRSIを作成します。
var rsi = _TA("RSI", "EUR/USD", "m5", "AskClose", 14);
_Print("The number of RSI is %d.", rsi.real.length);
// シンボルと時間足を指定してCMOを作成します。
var cmo = _TA("CMO", "EUR/USD", "m5", "AskClose", 14);
_Print("The number of CMO is %d.", cmo.real.length);
// シンボルと時間足を指定してSARを作成します。
var sar = _TA("SAR", "EUR/USD", "m5", "AskClose", 0.02, 0.2);
_Print("The number of SAR is %d.", sar.real.length);
// シンボルと時間足を指定してSTOCHを作成します。
// オプション値: [Ask, Bid] [TA_MAType_SMA, TA_MAType_EMA, TA_MAType_WMA]
var stoch = _TA("STOCH", "EUR/USD", "m5", "Ask", 73, 19, "TA_MAType_EMA", 19, "TA_MAType_EMA");
_Print("The number of STOCH is %d %d.", macd.slowk.length, macd.slowd.length);
// シンボルと時間足を指定してBBANDを作成します。
var bband = _TA("BBAND", "EUR/USD", "m5", "AskClose", 14, 2.0, 2.0, "TA_MAType_EMA");
_Print("The number of BBAND is %d.", bband.upperband.length, bband.middleband.length, bband.lowerband.length);
// シンボルと時間足を指定してMINを作成します。
var min = _TA("MIN", "EUR/USD", "m5", "AskClose", 14);
_Print("The number of MIN is %d.", min.real.length);
// シンボルと時間足を指定してMAXを作成します。
var max = _TA("MAX", "EUR/USD", "m5", "AskClose", 14);
_Print("The number of MAX is %d.", max.real.length);
// シンボルと時間足を指定してMOMを作成します。
var mom = _TA("MOM", "EUR/USD", "m5", "AskClose", 14);
_Print("The number of MOM is %d.", mom.real.length);
// シンボルと時間足を指定してROCを作成します。
var roc = _TA("ROC", "EUR/USD", "m5", "AskClose", 14);
_Print("The number of ROC is %d.", roc.real.length);
// シンボルと時間足を指定してROCPを作成します。
var rocp = _TA("ROCP", "EUR/USD", "m5", "AskClose", 14);
_Print("The number of ROCP is %d.", rocp.real.length);
// シンボルと時間足を指定してROCRを作成します。
var rocr = _TA("ROCR", "EUR/USD", "m5", "AskClose", 14);
_Print("The number of ROCR is %d.", rocr.real.length);
// シンボルと時間足を指定してAPOを作成します。
var apo = _TA("APO", "EUR/USD", "m5", "AskClose", 12, 26, "TA_MAType_EMA");
_Print("The number of APO is %d.", apo.real.length);
// シンボルと時間足を指定してPPOを作成します。
var ppo = _TA("PPO", "EUR/USD", "m5", "AskClose", 12, 26, "TA_MAType_EMA");
_Print("The number of PPO is %d.", ppo.real.length);
// シンボルと時間足を指定してSTDDEVを作成します。
var stddev = _TA("STDDEV", "EUR/USD", "m5", "AskClose", 14, 1.5);
_Print("The number of STDDEV is %d.", stddev.real.length);
// シンボルと時間足を指定してATRを作成します。
var atr = _TA("ATR", "EUR/USD", "m5", "AskClose", 14);
_Print("The number of ATR is %d.", atr.real.length);
学習したモデルによって売買シグナルを推論します。
// テクニカル指標によって生成した2次元配列bitmapをCNNモデルに渡して、売買シグナルを推論します。
var pred = _TfClassify("MacdCrossCNN", bitmap, 224, 224, 1, 3);
if (pred) {
for (var i = 0; i < pred.length; i+=2) {
_Print("index:%d score:%f\n", pred[i], pred[i+1]);
}
}
文字列をファイルに出力します。ファイルは./tmpディレクトリに保存されます。
// 新規モードで文字列をファイルに出力します。
_WriteFile("servertime", "2019/5/28 14:05:10", "1");
// 追加モードで文字列をファイルに出力します。
_WriteFile("servertime", "2019/5/28 14:05:10", "2");
PNG形式で画像ファイルを作成します。
// モノクロ画像を作成します。
var image_height = 224;
var image_width = 224;
var canvas = [];
for(var i = 0; i < image_height; i++){
canvas[i] = [];
for(var j = 0; j < image_width; j++){
canvas[i][j] = 0;
}
}
var bitmap = Array.prototype.concat.apply([], canvas);
_WritePng('test.png', bitmap, image_height, image_width, 1);