音乐播放器
LightHunter
 
Powered by Gridea | Theme: Fog
载入天数...
载入时分秒...

量化交易——发明者平台常用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