富途证券
支持富途牛牛实盘交易、模拟盘交易,需要下载FutuOpenD
软件。
当使用FutuOpenD
接入模拟交易时有些股票代码不支持所以无法交易,但是富途牛牛手机APP是可以模拟交易的。
在发明者量化上配置交易所对象、运行FutuOpenD
软件等操作参看富途证券配置说明文档。
GetOrder
、GetOrders
、GetPositions
、GetAccount
函数默认使用缓存数据,所以不限制调用频率。
当有新数据时FutuOpenD
会自动更新数据,缓存数据也会同步更新。调用exchange.IO("refresh", true)
函数可以禁用缓存,如果禁用缓存则调用频率为每30秒内最多请求10次查询,超过频率限制会报错。
600519.SH
策略代码中使用exchange.SetContractType()
函数设置股票代码,例如:
function main() {
var info = exchange.SetContractType("600519.SH") // 设置为股票600519.SH即贵州茅台,账户即切换到大陆市场
Log(info)
Log(exchange.GetAccount()) // 当前设置的股票为贵州茅台,此时调用GetAccount函数获取账户资产,获取的为大陆市场账户资产
Log(exchange.GetTicker()) // 获取股票贵州茅台当前的价格信息
}
def main():
info = exchange.SetContractType("600519.SH")
Log(info)
Log(exchange.GetAccount())
Log(exchange.GetTicker())
void main() {
auto info = exchange.SetContractType("600519.SH");
Log(info);
Log(exchange.GetAccount());
Log(exchange.GetTicker());
}
设置交易方向的函数exchange.SetDirection
、下单函数exchange.Buy
/exchange.Sell
,
撤单函数exchange.CancelOrder
、查询订单函数exchange.GetOrder
等使用方法均和期货市场相同。
TrdMarket
定义市场,用以区分香港市场
,美国市场
,大陆市场
。摘录自Futu API
文档:
const (
TrdMarket_TrdMarket_Unknown TrdMarket = 0 //未知市场
TrdMarket_TrdMarket_HK TrdMarket = 1 //香港市场
TrdMarket_TrdMarket_US TrdMarket = 2 //美国市场
TrdMarket_TrdMarket_CN TrdMarket = 3 //大陆市场
TrdMarket_TrdMarket_HKCC TrdMarket = 4 //香港A股通市场
TrdMarket_TrdMarket_Futures TrdMarket = 5 //期货市场
)
获取账户信息数据,exchange.GetAccount()
函数返回:
{
"Info": [{
"Header": {
... // 省略
"TrdMarket": 1 // Info原始信息中,市场ID,表示该账户资产用于香港市场交易
},
"Funds": { // 账户在该市场的资产信息
...
}
}, ...],
"Stocks": 0,
"FrozenStocks": 0,
"Balance": 1000000, // 当前市场的资产数值
"FrozenBalance": 0
}
FutuOpenD
根据登录的IP地址作为地区区分
对于非大陆IP地址登录的账户在获取行情数据时有所限制,具体可以查阅FutuOpenD
(富途)官方文档。Futures_Binance
支持币安期货双向持仓模式,可以使用exchange.IO
切换:
function main() {
exchange.IO("dual", true) // 切换为双向持仓
exchange.IO("dual", false) // 切换为单向持仓
}
def main():
exchange.IO("dual", True)
exchange.IO("dual", False)
void main() {
exchange.IO("dual", true);
exchange.IO("dual", false);
}
支持逐仓/全仓切换:
function main() {
exchange.SetContractType("swap")
exchange.IO("cross", true) // 切换为全仓
exchange.IO("cross", false) // 切换为逐仓
}
def main():
exchange.SetContractType("swap")
exchange.IO("cross", True)
exchange.IO("cross", False)
void main() {
exchange.SetContractType("swap");
exchange.IO("cross", true);
exchange.IO("cross", false);
}
支持切换为币安统一账户模式:
function main() {
exchange.IO("unified", true) // 切换为统一账户模式
exchange.IO("unified", false) // 切换为普通模式
}
def main():
exchange.IO("unified", True)
exchange.IO("unified", False)
void main() {
exchange.IO("unified", true);
exchange.IO("unified", false);
}
支持设置币安现货/期货下单的STP模式:
function main() {
// "NONE" 表示禁用STP模式,其它参数有:"EXPIRE_TAKER", "EXPIRE_MAKER", "EXPIRE_BOTH"
exchange.IO("selfTradePreventionMode", "NONE")
}
def main():
exchange.IO("selfTradePreventionMode", "NONE")
void main() {
exchange.IO("selfTradePreventionMode", "NONE");
}
Futures_HuobiDM
exchange.IO("signHost", "")
设置为空字符串即可。
使用exchange.IO("signHost", "https://xxx.xxx.xxx")
切换火币期货参与签名验证的基地址。
使用exchange.IO("base", "https://xxx.xxx.xxx")
或者exchange.SetBase("https://xxx.xxx.xxx")
切换交易所接口的基地址。XXX_USDT
,使用函数exchange.SetContractType("swap")
将合约代码设置为swap
永续合约时,使用exchange.IO("cross", true)
可以切换为USDT
本位永续合约全仓模式。使用exchange.IO("cross", false)
可以切换回逐仓模式,初始默认为逐仓模式。exchange.IO("dual", true)
切换为双向持仓,使用exchange.IO("dual", false)
切换为单向持仓。exchange.IO("unified", true)
切换统一账户;使用exchange.IO("unified", false)
切换回非统一账户。Huobi
LINK*(-3)
,交易所定义的代码为:link3susdt
,在发明者量化交易平台设置该交易对时写作LINK3S_USDT
。
也可以在策略中切换交易对:function main() {
exchange.SetCurrency("LINK3S_USDT")
Log(exchange.GetTicker())
}
def main():
exchange.SetCurrency("LINK3S_USDT")
Log(exchange.GetTicker())
void main() {
exchange.SetCurrency("LINK3S_USDT");
Log(exchange.GetTicker());
}
Futures_OKX(Futures_OKCoin/Futures_OKEX)
exchange.IO("simulate", true)
,即可切换为模拟盘环境。如果想切换为实盘环境使用exchange.IO("simulate", false)
切换为实盘即可,初始默认为实盘环境。exchange.IO("cross", true)
切换为全仓模式,使用exchange.IO("cross", false)
切换为逐仓模式,初始默认为全仓模式。exchange.IO("dual", true)
切换为双向持仓,使用exchange.IO("dual", false)
切换为单向持仓。OKX(OKCoin/OKEX)
exchange.IO("simulate", true)
,即可切换为模拟盘环境。如果想切换为实盘环境使用exchange.IO("simulate", false)
切换为实盘即可,初始默认为实盘环境。Futures_Bibox
exchange.IO("cross", true)
切换为全仓模式,使用exchange.IO("cross", false)
切换为逐仓模式,初始默认为全仓模式。GetOrders
、GetTrades
函数。Futures_Bitget
exchange.IO("cross", true)
切换为全仓模式,使用exchange.IO("cross", false)
切换为逐仓模式。exchange.IO("dual", true)
切换为双向持仓,使用exchange.IO("dual", false)
切换为单向持仓。Futures_MEXC
exchange.IO("cross", true)
切换为全仓模式,使用exchange.IO("cross", false)
切换为逐仓模式。Futures_GateIO
exchange.IO("cross", true)
切换为全仓模式,使用exchange.IO("cross", false)
切换为逐仓模式。exchange.IO("dual", true)
切换为双向持仓,使用exchange.IO("dual", false)
切换为单向持仓。exchange.IO("unified", true)
切换统一账户;使用exchange.IO("unified", false)
切换回非统一账户。GateIO
exchange.IO("unified", true)
切换统一账户;使用exchange.IO("unified", false)
切换回非统一账户。Futures_Bybit
exchange.IO("cross", true)
切换为全仓模式,使用exchange.IO("cross", false)
切换为逐仓模式。exchange.IO("unified", true)
切换为统一保证金接口,使用exchange.IO("unified", false)
切换回普通合约接口。exchange.IO("dual", true)
切换为双向持仓,使用exchange.IO("dual", false)
切换为单向持仓。Futures_Pionex
exchange.IO("cross", true)
切换为全仓模式,使用exchange.IO("cross", false)
切换为逐仓模式。exchange.IO("dual", true)
切换为双向持仓,使用exchange.IO("dual", false)
切换为单向持仓。Futures_BitMEX
exchange.IO("cross", true)
切换为全仓模式,使用exchange.IO("cross", false)
切换为逐仓模式。BitMEX
Bitfinex
Futures_Phemex
exchange.IO("dual", true)
切换为双向持仓,使用exchange.IO("dual", false)
切换为单向持仓。Backpack 支持设置Backpack现货下单的STP模式:
function main() {
// "Allow" 表示允许自成交, "RejectTaker" "RejectMaker" "RejectBoth" "Allow"
exchange.IO("selfTradePreventionMode", "Allow")
}
def main():
exchange.IO("selfTradePreventionMode", "Allow")
void main() {
exchange.IO("selfTradePreventionMode", "Allow");
}
exchange.IO("cross", true)
切换为全仓模式,使用exchange.IO("cross", false)
切换为逐仓模式。xxx
,使用exchange.IO("signingKey", "xxx")
传入,注意signingKey有时效。传入后exchange.IO
函数返回signingKey的公钥。multi-collateral
合约支持全仓、逐仓、杠杆设置。
使用exchange.IO("cross", true)
切换为全仓模式,使用exchange.IO("cross", false)
切换为逐仓模式。accountId
:
使用exchange.IO("accountId", "xxx")
设置accountId。exchange.IO("subAccount", "xxx")
切换子账户。Id
说明:
该交易所订单Id
由实际Id
和订单时间戳组成,时间戳和实际订单Id
使用英文逗号间隔。目的是为了支持exchange.GetOrder(Id)
函数查询订单。鉴于交易所返回的数据中订单时间戳会随订单状态变化,如果本地需要记录订单Id
等信息请分离出实际订单Id
记录。exchange.IO("cross", true)
切换为全仓模式,使用exchange.IO("cross", false)
切换为逐仓模式。exchange.IO("dual", true)
切换为双向持仓,使用exchange.IO("dual", false)
切换为单向持仓。exchange.IO("cross", true)
切换为全仓模式,使用exchange.IO("cross", false)
切换为逐仓模式。exchange.IO("cross", true)
切换为全仓模式,使用exchange.IO("cross", false)
切换为逐仓模式。exchange.IO("source", "b")
切换为测试网环境,使用exchange.IO("source", "a")
切换为主网环境。exchange.IO("source", "b")
切换为测试网环境,使用exchange.IO("source", "a")
切换为主网环境。gateway
基地址
使用exchange.SetBase("https://gateway.prod.vertexprotocol.com")
切换。indexerBase
基地址
使用exchange.IO("indexerBase", "https://archive.prod.vertexprotocol.com")
切换。 function main() {
var strJson = `{
"assetIdSynthetic": "0x4554482d3900000000000000000000",
"assetIdCollateral": "0x2ce625e94458d39dd0bf3b45a843544dd4a14b8169045a3a3d15aa564b936c5",
"assetIdFee": "0x2ce625e94458d39dd0bf3b45a843544dd4a14b8169045a3a3d15aa564b936c5",
"isBuyingSynthetic": true,
"amountSynthetic": 10000000,
"amountCollateral": 13020000,
"amountFee": 6250,
"nonce": 676432751,
"accountID": 601416704693633632,
"expirationTimestamp": 484831
}`
var signature = exchange.IO("calcOrderHashAndSign", strJson)
Log(signature)
}