量化现货合约对冲跟单app系统开发源代码

103 阅读3分钟

量化交易方式简介 按照数学模型的理念,系统开发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)

`        }