
2021-04-22
6 min read
量化交易——发明者平台常用API
热度: loading...
基本策略框架
def onTick():
Log(exchange.GetTicker())
def main():
while True:
onTick()
Sleep(60000)
onTick()
函数中定义操作内容
Sleep()
函数控制访问交易所API接口的频率
行情API
exchange.GetTicker() 获取市场当前行情
{
Info : {...}, // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
High : 1000, // 最高价
Low : 500, // 最低价
Sell : 900, // 卖一价
Buy : 899, // 买一价
Last : 900, // 最后成交价
Volume : 10000000, // 最近成交量
Time : 1567736576000 // 毫秒级别时间戳
}
python下调用方式:
def main():
ticker = exchange.GetTicker()
Log("High:", ticker["High"], "Low:", ticker["Low"], "Sell:", ticker["Sell"], "Buy:", ticker["Buy"], "Last:", ticker["Last"], "Volume:", ticker["Volume"])
exchange.GetRecords() 获取历史行情
{
Time : 1567736576000, // 一个时间戳,精确到毫秒,与Javascript的new Date().getTime()得到的结果格式一样
Open : 1000, // 开盘价
High : 1500, // 最高价
Low : 900, // 最低价
Close : 1200, // 收盘价
Volume : 1000000 // 交易量
}
python下调用方式:
def main():
Log(exchange.GetRecords(60 * 2))
Log(exchange.GetRecords(PERIOD_M5))
参数值:PERIOD_M1
指1分钟,PERIOD_M5
指5分钟,PERIOD_M15
指15分钟,PERIOD_M30
指30分钟,PERIOD_H1
指1小时,PERIOD_D1
指一天,Period参数设置5,即为请求5秒为周期的K线数据。
Record结构体内容:
def main():
records = exchange.GetRecords(PERIOD_H1)
Log("第一根k线数据为,Time:", records[0]["Time"], "Open:", records[0]["Open"], "High:", records[0]["High"])
Log("第二根k线数据为,Time:", records[1]["Time"], "Close:", records[1]["Close"])
Log("当前K线(最新)", records[-1], "上一根K线", records[-2])
exchange.GetAccount() 获取账户信息
{
Info : {...}, // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
Balance : 1000, // 余额(人民币或者美元,在Poloniex交易所里ETC_BTC这样的品种,Balance就指的是BTC的数量,Stocks指的是ETC数量)
FrozenBalance : 0, // 冻结的余额
Stocks : 1, // BTC/LTC数量,数字货币现货为当前可操作币的余额(去掉冻结的币),数字货币期货的话为合约当前可用保证金(传统期货无此属性)
FrozenStocks : 0 // 冻结的BTC/LTC数量(传统期货无此属性)
}
Account结构体:
def main():
account = exchange.GetAccount()
Log("账户信息,Balance", account["Balance"], "FrozenBalance:", account["FrozenBalance"], "Stocks:",
account["Stocks"], "FrozenStocks:", account["FrozenStocks"])
exchange.GetPosition() 获取仓位信息
{
Info : {...}, // 请求交易所接口后,交易所接口应答的原始数据,回测时无此属性
MarginLevel : 10, // 杆杠大小
Amount : 100, // 持仓量,OKEX合约交易所,表示合约的份数(整数且大于1,即合约张数)
FrozenAmount : 0, // 仓位冻结量
Price : 10000, // 持仓均价
Profit : 0, // 持仓浮动盈亏(数据货币单位:BTC/LTC,传统期货单位:RMB,股票不支持此字段,注:OKEX合约全仓情况下指实现盈余,并非持仓盈亏,逐仓下指持仓盈亏)
Type : 0, // PD_LONG为多头仓位(CTP中用closebuy_today平仓),PD_SHORT为空头仓位(CTP用closesell_today)平仓,(CTP期货中)PD_LONG_YD为咋日多头仓位(用closebuy平),PD_SHORT_YD为咋日空头仓位(用closesell平)
ContractType : "quarter", // 商品期货为合约代码,股票为'交易所代码_股票代码',具体参数SetContractType的传入类型
Margin : 1 // 仓位占用的保证金
}
Position结构体:
def main():
exchange.SetContractType("this_week")
exchange.SetMarginLevel(10)
exchange.SetDirection("buy")
exchange.Buy(10000, 2)
position = exchange.GetPosition()
if len(position) > 0:
Log("Amount:", position[0]["Amount"], "FrozenAmount:", position[0]["FrozenAmount"], "Price:",
position[0]["Price"], "Profit:", position[0]["Profit"], "Type:", position[0]["Type"],
"ContractType:", position[0]["ContractType"])
_C(function, args...) 重试函数
exchange.GetTicker()
exchange.GetDepth()
exchange.GetTrades()
exchange.GetRecords()
exchange.GetAccount()
exchange.GetOrders()
exchange.GetOrder()
exchange.GetPosition()
以上函数都通过_C(...)来调用,以防出错
日志API
Log(...) 日志信息
def main():
Log("发明者量化你好 !@")
Sleep(1000 * 5)
Log("微信你好, #ff0000@")
LogProfit(Profit) 记录收益
可以以字符&结尾,实现只绘制收益图表,不打印收益日志:LogProfit(10, '&')
交易APU
exchange.Buy(Price, Amount) 买入
购买市价单
def main():
exchange.Buy(-1, 0.1)
exchange.Sell(Price, Amount) 卖出
卖出市价单
def main():
id = exchange.Sell(-1, 1)
Log("id:", id)
期货交易
exchange.SetPrecision(PricePrecision, AmountPrecision) 设置买卖精度
设置价格与品种下单量的小数位精度,设置后会自动截断,参数值:PricePrecision为number类型,用来控制价格后面的小数点位,AmountPrecision为number类型,用来控制数量后面的小数点位
def main():
exchange.SetPrecision(2, 3)
注意:回测不支持该函数,回测的数值精度会自动处理。
exchange.SetMarginLevel(MarginLevel) 设置杆杠大小。参数值:number 类型
def main():
exchange.SetMarginLevel(10)
exchange.SetDirection(Direction) 设置Buy或者Sell下单类型。参数值:string类型
def main():
// 举例设置为OKEX期货当周合约
exchange.SetContractType("this_week")
// 设置杠杆为5倍
exchange.SetMarginLevel(5)
// 设置下单类型为做多
exchange.SetDirection("buy")
// 以10000的价格,合约数量为2张下单
exchange.Buy(10000, 2)
exchange.SetMarginLevel(5)
exchange.SetDirection("closebuy")
exchange.Sell(1000, 2)
exchange.SetContractType(ContractType),设置合约类型
def main():
exchange.SetContractType("this_week")
有this_week
,next_week
,quarter
三个参数,永续合约为:swap
。

请到客户端“主题--自定义配置--valine”中填入ID和KEY