量化交易方式简介 按照数学模型的理念,系统开发I34-案例I633-演示53I9,和对计算机技术的利用方式,量化交易可以细分为自动化交易、量化投资、程序化交易、算法交易以及高频交易。不同量化交易方式的侧重点各有不同,是量化交易技术发展到不同阶段的产物,也是不同量化交易用户群的不同交易方式。
自动化交易 自动化交易是指将技术分析投资方式固化成计算机可以理解的模型、技术指标,计算机程序根据市场变化自动生成投资决策并付诸执行的交易方式。自动化交易是技术分析投资方式的自动化,可以避免投资人的心理变化和情绪波动,严格执行既定策略,是基本的量化交易方式。
程序化交易 程序化交易是利用程序进行交的易,交易时机、交易仓位、止损止盈获利标准可以包含在程序内,也可以独立于程序外,程序本身只是执行的方式。
算法交易 算法交易是指交易决定是根据一条或多条算法 (algorithm) 进行的,算法是交易的基础。算法交易的执行可以是手工的,也可以是自动化的。如果利用交易程序来执行,是程序化算法交易。
高频交易 高频交易是每次交易从开仓到平仓只有很短的时间间隔,一般从十几分钟到几微秒不等。高频交易主要目的是通过市场短暂的价格波动而获利。无论是趋势追随交易还是交易,只要频率达到,都可以被称为高频交易。人工达到高频交易的标准很难,所以一般都通过程序交易:设置好算法、策略后由下单软件执行。
策略交易 在投资领域中,一般习惯把买入持有、价值投资、成长投资等称为战略,而把惯性、反转、趋势、支撑阻力等等叫做策略。由于策略以技术分析为主,而在交易决策分析的计算机化历史中,技术分析走得比较早,所以Strategy Trading习惯上多指策略交易。通常,将交易策略称为策略,将系统交易称为策略交易。
``function computePoolPrice(decimals0, decimals1, sqrtPriceX96) {`
``[decimals0, decimals1, sqrtPriceX96] = [decimals0, decimals1, sqrtPriceX96].map(BigInt);
``const TWO = BigInt(``2``);
``const TEN = BigInt(``10``);
``const SIX_TENTH = BigInt(``1000000``);
``const Q192 = (TWO ** BigInt(``96``)) ** TWO;
``return (
``Number((sqrtPriceX96 ** TWO * TEN ** decimals0 * SIX_TENTH) / (Q192 * TEN ** decimals1)) /
``Number(SIX_TENTH)
``);
}
function toAmount(s, decimals) {
``return Number((BigDecimal(BigInt(s))/BigDecimal(Math.pow(``10``, decimals))).toString())
}
function toInnerAmount(n, decimals) {
``return (BigDecimal(n)*BigDecimal(Math.pow(``10``,decimals))).toFixed(``0``)
}
$.NewUniswapV3 = function(e) {
``e = e || exchange
``if (e.GetName() !== ``'Web3'``) {
``panic(``"only support Web3 exchange"``)
``}
``let self = {
``tokenInfo: {},
``walletAddress: e.IO(``"address"``),
``pool: {}
``}
``// register
``e.IO(``"abi"``, ContractV3Factory, ABI_Factory)
``e.IO(``"abi"``, ContractV3SwapRouterV2, ABI_Route)
``self.addToken = function(name, address) {
``let ret = e.IO(``"api"``, address, ``"decimals"``)
``if (!ret) {
``throw "get token decimals failed"
``}
``let decimals = Number(ret)
``self.tokenInfo[name] = {
``name: name,
``decimals: decimals,
``address: address
``}
``}
``self.waitMined = function(tx) {
``while (``true``) {
``Sleep(``1000``)
``let info = e.IO(``"api"``, ``"eth"``, ``"eth_getTransactionReceipt"``, tx)
``if (info && info.gasUsed) {
``return true
``}
``Log(``'Transaction not yet mined'``, tx)
` }