策略框架与API函数
在JavaScript
、Python
、C++
语言编写的策略中需要在策略主循环中调用Sleep()
函数。回测时用于控制回溯的速度,实盘时用于控制策略轮询的时间间隔,从而控制访问交易所API接口的请求频率。
function onTick(){
//在这里写策略逻辑,将会不断调用,例如打印行情信息
Log(exchange.GetTicker())
}
function main(){
while(true){
onTick()
// Sleep函数主要用于数字货币策略的轮询频率控制,防止访问交易所API接口过于频繁
Sleep(60000)
}
}
def onTick():
Log(exchange.GetTicker())
def main():
while True:
onTick()
Sleep(60000)
void onTick() {
Log(exchange.GetTicker());
}
void main() {
while(true) {
onTick();
Sleep(60000);
}
}
加密货币策略基本框架范例:
function onTick(){
// 这个仅仅是例子,回测或者实盘会很快把资金全部用于下单,实盘请勿使用
exchange.Buy(100, 1)
}
function main(){
while(true){
onTick()
// 暂停多久可自定义,单位为毫秒,1秒等于1000毫秒
Sleep(1000)
}
}
def onTick():
exchange.Buy(100, 1)
def main():
while True:
onTick()
Sleep(1000)
void onTick() {
exchange.Buy(100, 1);
}
void main() {
while(true) {
onTick();
Sleep(1000);
}
}
举个最简单的例子,如果我想每隔1秒种就在交易所挂一个价格为100,数量为1的买单可以这样写:
function onTick() {
Log("K线更新,新BAR产生")
}
function main() {
var exName = exchange.GetName()
if (exName.includes("Futures_")) {
exchange.SetContractType("swap")
}
var lastTs = 0
while (true) {
var r = _C(exchange.GetRecords)
if (r.length > 0 && r[r.length - 1].Time != lastTs) {
onTick()
lastTs = r[r.length - 1].Time
}
Sleep(1000)
}
}
def onTick():
Log("K线更新,新BAR产生")
def main():
exName = exchange.GetName()
if "Futures_" in exName:
exchange.SetContractType("swap")
lastTs = 0
while True:
r = _C(exchange.GetRecords)
if len(r) > 0 and r[-1]["Time"] != lastTs:
onTick()
lastTs = r[-1].Time
Sleep(1000)
void onTick() {
Log("K线更新,新BAR产生");
}
void main() {
auto exName = exchange.GetName();
if (exName.find("Futures_") != std::string::npos) {
exchange.SetContractType("swap");
}
Record lastBar;
lastBar.Time = 0;
while (true) {
auto r = _C(exchange.GetRecords);
if (r.size() > 0 && r[r.size() - 1].Time != lastBar.Time) {
onTick();
lastBar.Time = r[r.size() - 1].Time;
}
Sleep(1000);
}
}
设计一个On Bar架构的策略
以下展示所有API接口的速查表,详细的API描述请参考:发明者量化交易平台API手册。
全局函数
函数名称 |
简介 |
Version |
返回系统当前版本号 |
Sleep |
休眠函数,参数为暂停的毫秒数值 |
IsVirtual |
判断执行环境,返回为真值表示是回测环境 |
Mail |
发送邮件 |
Mail_Go |
Mail 函数的异步版本 |
SetErrorFilter |
过滤错误日志,参数为正则表达式字符串,被此正则表达式匹配的错误日志将不上传到日志系统 |
GetPid |
获取实盘进程Id |
GetLastError |
获取最近一次出错信息 |
GetCommand |
获取策略交互命令,策略交互控件设置可查询:交互控件 |
GetMeta |
获取生成策略注册码时写入的Meta的值 |
Dial |
用于原始的Socket访问 |
HttpQuery |
发送Http请求 |
HttpQuery_Go |
HttpQuery 函数的异步版本 |
Encode |
数据编码函数 |
UnixNano |
获取纳秒级时间戳 |
Unix |
获取秒级别时间戳 |
GetOS |
获取系统信息 |
MD5 |
计算MD5 |
DBExec |
数据库函数,可以用于执行SQL语句,进行数据库操作 |
UUID |
生成UUID |
EventLoop |
监听事件,在有任意websocket可读或者exchange.Go 、HttpQuery_Go 等并发的任务完成以后返回,该函数仅适用于实盘 |
_G |
持久化保存数据,该函数实现了一个可保存的全局字典功能。数据结构为KV表,永久保存在托管者本地数据库文件 |
_D |
时间戳处理函数,将毫秒时间戳或者Date对象转换为时间字符串 |
_N |
格式化浮点数,例如_N(3.1415, 2) 将删除3.1415小数点两位以后的值,函数返回3.14 |
_C |
重试函数,用于接口容错。注意,例如对exchange.GetTicker 函数容错,是_C(exchange.GetTicker) 并不是_C(exchange.GetTicker()) |
_Cross |
交叉判断函数,_Cross() 函数的返回值是正数表示上穿的周期,负数表示下穿的周期,0指当前价格一样 |
JSONParse |
解析JSON,可以正确解析包含有较大数值的JSON字符串,会将较大的数值解析为字符串类型。回测系统中不支持JSONParse() 函数 |
日志函数
行情函数
交易函数
期货函数
网络函数
JavaScript多线程
发明者量化交易平台从系统底层真正支持JavaScript
语言策略的多线程功能,实现了以下对象:
对象 |
说明 |
备注 |
threading |
多线程全局对象 |
成员函数:Thread 、getThread 、mainThread 等。 |
Thread |
线程对象 |
成员函数:peekMessage 、postMessage 、join 等。 |
ThreadLock |
线程锁对象 |
成员函数:acquire 、release 。可作为线程执行函数的参数传入线程环境。 |
ThreadEvent |
事件对象 |
成员函数:set 、clear 、wait 、isSet 。可作为线程执行函数的参数传入线程环境。 |
ThreadCondition |
条件对象 |
成员函数:notify 、notifyAll 、wait 、acquire 、release 。可作为线程执行函数的参数传入线程环境。 |
ThreadDict |
字典对象 |
成员函数:get 、set 。可作为线程执行函数的参数传入线程环境。 |
发明者量化交易平台语法手册:JavaScript多线程
Web3
TA指标库
talib指标库
talib指标库有众多交易指标,例如:talib.CDL2CROWS。可以具体跳转到语法手册查询。
策略入口函数
模板类库