.. | _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);