[TOC]
在量化交易领域,简单易用的量化交易工具一直是实现财富增长和风险管理的关键之一。然而,随着市场的竞争愈加激烈,传统的交易工具已不再足以应对快速变化的市场需求。为了广大量化交易者在这个不断演进的数字资产世界中保持竞争优势,FMZ手机APP上新增了一项重大功能:交易终端。这一功能不仅将提高您的交易效率,还将赋能您通过自定义插件程序来辅助交易,为您的交易生涯注入新的活力。
在FMZ量化交易平台,手机APP下载页面可以下载FMZ量化手机APP。下载安装之后打开FMZ手机APP,登录FMZ账号。
需要注意FMZ量化分为FMZ.COM国际站、FMZ.CN国内站(支持的市场不同),在此登录时需要选择对应的站点,不同的站点账户是独立的,并不通用。
FMZ量化交易平台手机APP交易终端,是一个把各大交易所API封装集中后的量化交易工具。可以在各个交易所快速切换,依托于FMZ平台的各种功能可以实现数据抓取分析,实时数据监控,程序化辅助交易,半自动、手动交易等操作。
FMZ量化手机APP登录以后,可以看到主界面上的「交易终端」功能,点击即可进入交易终端界面。
在FMZ推出手机APP交易终端之前,FMZ的web端很早就上线了交易终端这个功能,不论是web端的交易终端,还是手机APP端的交易终端,都必须至少部署一个托管者程序。 因为所有实际发送到交易所的交互请求都是从托管者上执行的,并不是在手机APP上,更加安全。并且也避免了API KEY绑定IP地址,手机IP变动就无法使用的痛点。
1、交易终端主界面:
打开交易终端之后,可以看到交易终端的主要界面,点击红框区域可以打开「托管者」、「交易所」、「交易对」配置界面。
2、交易区:
交易区域显示市场深度数据; 交易控件可以设置下单价格、下单数量、下单方向、杠杆等设置。
主界面底部分标签显示「订单」、「持仓」、「资产」等信息,使您的资金、仓位、订单一目了然。
3、K线图表:
如果在下单操作的时候还希望看一下K线图表,这里很贴心的设计了一个折叠展示控件,用来展开当前品种的迷你K线图表。
如果希望有更大的区域显示K线图表,显示市场成交记录、深度等信息,可以点击这个K线图标跳转到专业K线图表页面。
专业K线图表界面:
专业K线图表界面还可以横屏展示:
交易终端插件可以做什么?
使用哪些编程语言和工具来开发插件?
可以GET到什么?
在FMZ社区,用户提出了一个这样的需求:
使用js遍历币安交易所所有的U合约币种,并且每个币种都开仓10u(开多),请问这个代码怎么写。
这个需求场景其实完全就可以用交易终端插件实现,并且交易终端运行插件策略是不计费的,相对于长期运行的实盘策略交易终端插件辅助交易无疑是一个很好的选择。
我们来看如何设计实现用户提出的这一需求。
首先需要创建一个交易终端插件,给这个插件策略添加3个参数:
然后开始编写插件程序:
function main() {
let exName = exchange.GetName()
if (exName != "Futures_Binance") {
return "not support!"
}
let apiBase = "https://fapi.binance.com"
if (isSimulate) {
apiBase = "https://testnet.binancefuture.com"
Log("切换基地址:", apiBase)
}
exchange.SetBase(apiBase)
try {
var obj = JSON.parse(HttpQuery(apiBase + "/fapi/v1/exchangeInfo"))
} catch (e) {
Log(e)
}
let pairs = []
for (var i in obj.symbols) {
if (obj.symbols[i]["status"] !== "TRADING" || obj.symbols[i]["quoteAsset"] !== "USDT") {
continue
}
let = pair = obj.symbols[i]["baseAsset"] + "_" + obj.symbols[i]["quoteAsset"]
pairs.push(pair)
}
let markets = _C(exchange.GetMarkets)
for (var i in pairs) {
// /*
// 这里为了测试,只开仓10个品种,如果要全品种,这段注释内容可以删除
if (i >= 9) {
break
}
// */
let pair = pairs[i]
exchange.SetCurrency(pair)
exchange.SetContractType("swap")
let ticker = exchange.GetTicker()
if (!ticker) {
continue
}
let = amountPrecision = markets[pair + ".swap"]["AmountPrecision"]
exchange.SetDirection("buy")
let amount = _N(qty / ticker.Last, amountPrecision)
if (amount > 0) {
exchange.Buy(-1, amount)
}
Sleep(100)
}
// 获取所有持仓
let pos = exchange.IO("api", "GET", "/fapi/v2/positionRisk")
if (!pos) {
return
}
// 查看持仓
return pos.filter(item => Number(item.positionAmt) != 0)
}
交易终端插件编写完成之后,就可以测试了:
在手机APP的交易终端里,点击「…」按钮即可打开交易终端插件列表,在当前FMZ账号策略库中的交易终端插件都会显示在这个列表里,选择就可以使用。
在手机APP上操作完成后,我们使用以下代码查询一下币安模拟盘的持仓:
function main() {
let apiBase = "https://testnet.binancefuture.com"
exchange.SetBase(apiBase)
let pos = exchange.IO("api", "GET", "/fapi/v2/positionRisk")
if (!pos) {
return
}
// 查看持仓
return pos.filter(item => Number(item.positionAmt) != 0)
}
查询到数据:
[{
"symbol": "ETCUSDT",
"entryPrice": "16.17",
"unRealizedProfit": "0.08567881",
"positionSide": "LONG",
"updateTime": 1698420908103,
"isolated": false,
"breakEvenPrice": "16.176468",
"leverage": "20",
"adlQuantile": 3,
"positionAmt": "0.65",
"markPrice": "16.30181356",
"liquidationPrice": "0",
"maxNotionalValue": "400000",
"marginType": "cross",
"notional": "10.59617881",
"isolatedMargin": "0.00000000",
"isAutoAddMargin": "false",
"isolatedWallet": "0"
}, {
"positionAmt": "105",
"markPrice": "0.09371526",
"liquidationPrice": "0",
"leverage": "20",
"maxNotionalValue": "90000",
"positionSide": "LONG",
"isolatedWallet": "0",
"symbol": "TRXUSDT",
"updateTime": 1698420906668,
"breakEvenPrice": "0.094497784",
"isolatedMargin": "0.00000000",
"isolated": false,
"entryPrice": "0.09446",
"adlQuantile": 1,
"unRealizedProfit": "-0.07819770",
"isAutoAddMargin": "false",
"notional": "9.84010230",
"marginType": "cross"
}, {
"unRealizedProfit": "-0.00974456",
"isAutoAddMargin": "false",
"notional": "9.97449543",
"isolatedWallet": "0.50309216",
"updateTime": 1698420905377,
"markPrice": "67.85371047",
"isolatedMargin": "0.49334760",
"adlQuantile": 2,
"symbol": "LTCUSDT",
"entryPrice": "67.92",
"liquidationPrice": "64.91958163",
"maxNotionalValue": "250000",
"positionSide": "LONG",
"isolated": true,
"positionAmt": "0.147",
"breakEvenPrice": "67.947168",
"leverage": "20",
"marginType": "isolated"
}, {
"liquidationPrice": "1613.23261508",
"marginType": "isolated",
"isolated": true,
"symbol": "ETHUSDT",
"entryPrice": "1784.27",
"markPrice": "1783.35661952",
"isAutoAddMargin": "false",
"positionSide": "LONG",
"notional": "8.91678309",
"leverage": "10",
"maxNotionalValue": "30000000",
"isolatedWallet": "0.89551774",
"adlQuantile": 1,
"positionAmt": "0.005",
"breakEvenPrice": "1784.983708",
"unRealizedProfit": "-0.00456690",
"isolatedMargin": "0.89095084",
"updateTime": 1698420900362
}, {
"positionAmt": "17.1",
"marginType": "cross",
"isolatedWallet": "0",
"adlQuantile": 2,
"liquidationPrice": "0",
"maxNotionalValue": "250000",
"positionSide": "LONG",
"isolated": false,
"symbol": "EOSUSDT",
"breakEvenPrice": "0.6432572",
"updateTime": 1698420904257,
"isolatedMargin": "0.00000000",
"isAutoAddMargin": "false",
"notional": "10.34550000",
"entryPrice": "0.643",
"markPrice": "0.60500000",
"unRealizedProfit": "-0.64980000",
"leverage": "20"
}, {
"isolated": false,
"adlQuantile": 1,
"liquidationPrice": "0",
"maxNotionalValue": "10000000",
"notional": "9.73993328",
"leverage": "20",
"updateTime": 1698420901638,
"symbol": "BCHUSDT",
"entryPrice": "250.0",
"markPrice": "243.49833219",
"isAutoAddMargin": "false",
"positionSide": "LONG",
"positionAmt": "0.040",
"breakEvenPrice": "250.1",
"isolatedMargin": "0.00000000",
"unRealizedProfit": "-0.26006671",
"marginType": "cross",
"isolatedWallet": "0"
}]
可以看到开出了6个仓位,是因为实际下单时由于是模拟盘,很容易触发限价;另外由于是10U的金额下单很容易触发交易对的最小下单金额限制;所以有几个交易对没有下单成功。 如果实际使用需要考虑更多的实际情况,从而优化这个插件以便于更好的使用,这里这个代码仅用作教学交流。
FMZ量化交易平台手机APP交易终端还有很多有趣的插件,快来一起探索吧!
/upload/asset/16b436307a4ce5c246c2.mp4
FMZ手机APP的新交易终端功能将成为您在数字资产市场中的得力助手,让您能够更灵活地应对市场波动和机会。不再局限于传统交易策略,通过自定义插件程序,您可以创造出更智能、更高效、更适应市场的交易策略。让我们一起开启这个令人兴奋的量化交易新篇章,提升您的交易技能和收益。
weix1ao 梦总nb,移动端真方便
发明者量化-小小梦 感谢支持,平台开发工程师都很厉害,后续还会增加更多实用功能,用户有需求可以尽管提。