| .. | _main | _trailmove | _tick |
启动时机取决于K线分时周期信息的设置。参数是要处理的商品代码。
| mst_symbol.xml (货币代码信息) | :target="1" |
| mst_rate.xml (K线分时周期信息) | :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(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(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);
// 返回"100"和date对象的秒数的和。
_Print(date.addTime(100));
// 将"100"加到date对象的秒数上。
date.addinTime(100);
// 在timeKind中指定'UTC'(世界标准时间)或'LOCAL'(本地时间),设置或获取从1970-01-01 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();
// 依次读入文件每行内容
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"));
}
从本地取得历史数据。
// 指定商品和周期,从本地获取100个2018/5/1 8:00以后的历史数据。
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");
从本地获取历史数据。
// 指定商品和周期,从本地获取100个2018/5/1 8:00以前的历史数据。
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");
根据格式字符串输出到标准输出。
// 分别输出十进制数值、十六进制数和八进制数值。
_Print("%d %x %o", 123, 123, 123);
// 分别以浮点、指数的形式输出。
_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);
根据训练好的交易模型来推论买卖信号。
// 把由技术指标生成的二维阵列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);