Estratégias de arbitragem de alta frequência

Autora:Não, não, não, não., Data: 12 de maio de 2020 21:55:43
Tags:

Estratégias

O Bitcoin (BTC) é o símbolo do Bitcoin.

Dados de diferença de preço: BTC Permanente - BTC Quartal (excluindo o teste de integração)

Ciclo de negociação: 1 minuto

头寸匹配:1:1

Tipo de transação: cruzamento da mesma variedade

Termos de abertura de diferença: se a conta atual não tiver ações e o diferencial for < (nível de diferença de longo prazo - limiar), o diferencial é feito. Ou seja: comprar BTC permanentemente, vender BTC trimestralmente.

Condição de desvio de preço: se a conta atual não tiver ativos e o desvio for > (nível de desvio de longo prazo + limite), o desvio de preço será feito; ou seja, vender BTC permanentemente e comprar BTC trimestralmente.

Termos de equilíbrio de diferença de preço: se a conta atual tiver várias ordens de BTC permanentes e tiver uma quantidade de BTC vagas trimestrais e o diferencial > o nível de diferença de preço a longo prazo, a diferença de preço é igual. Ou seja, venda de BTC permanente e compra de BTC trimestral.

Condição de equilíbrio de diferença de preço: se a conta atual tiver BTC em depósito permanente e tiver várias ordens de BTC por trimestre, e o diferencial for < nível de diferença de preço a longo prazo, o diferencial de preço será equilíbrio; ou seja: comprar BTC em depósito permanente e vender BTC por trimestre.

Por exemplo:Suponhamos que o diferencial de preço entre BTC e BTC no período se mantenha em torno de 35 no longo prazo. Se um diferencial de preço chegar a 50 em um determinado dia, esperamos que o diferencial retorne a 35 ou menos em algum momento no futuro. Então podemos vender o BTC no período e comprar BTC no período para eliminar o diferencial.

Informações

:point_right: Se você estiver interessado na estratégia, por favor, +V:Irene11229 (Clique na minha página, eu vou continuar a atualizar mais estratégias e também obter dados de análise de mercado de algumas das principais bolsas)


#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import json
import time

from kumex.client import Trade, Market


class Hf(object):

    def __init__(self):
        # read configuration from json file
        with open('config.json', 'r') as file:
            config = json.load(file)

        self.api_key = config['api_key']
        self.api_secret = config['api_secret']
        self.api_passphrase = config['api_passphrase']
        self.sandbox = config['is_sandbox']
        self.symbol_a = config['symbol_a']
        self.symbol_b = config['symbol_b']
        self.spread_mean = float(config['spread_mean'])
        self.leverage = float(config['leverage'])
        self.size = int(config['size'])
        self.num_param = float(config['num_param'])
        self.trade = Trade(self.api_key, self.api_secret, self.api_passphrase, is_sandbox=self.sandbox)
        self.market = Market(self.api_key, self.api_secret, self.api_passphrase, is_sandbox=self.sandbox)

    def get_symbol_price(self, symbol):
        ticker = self.market.get_ticker(symbol)
        return float(ticker['price'])


if __name__ == '__main__':
    hf = Hf()
    while 1:
        # ticker of symbols
        price_af = hf.get_symbol_price(hf.symbol_a)
        price_bf = hf.get_symbol_price(hf.symbol_b)
        # position of symbols
        position_a = hf.trade.get_position_details(hf.symbol_a)
        position_a_qty = int(position_a['currentQty'])
        position_b = hf.trade.get_position_details(hf.symbol_b)
        position_b_qty = int(position_b['currentQty'])
        # interval of price
        new_spread = price_af - price_bf
        print('new_spread =', new_spread)

        if position_a_qty == position_b_qty == 0 and new_spread < (hf.spread_mean - hf.num_param):
            buy_order = hf.trade.create_limit_order(hf.symbol_a, 'buy', hf.leverage, hf.size, price_af + 1)
            print('buy %s,order id =%s' % (hf.symbol_a, buy_order['orderId']))
            sell_order = hf.trade.create_limit_order(hf.symbol_b, 'sell', hf.leverage, hf.size, price_bf - 1)
            print('sell %s,order id =%s' % (hf.symbol_b, sell_order['orderId']))
        elif position_a_qty == position_b_qty == 0 and new_spread > (hf.spread_mean + hf.num_param):
            buy_order = hf.trade.create_limit_order(hf.symbol_a, 'sell', hf.leverage, hf.size, price_af - 1)
            print('sell %s,order id =%s' % (hf.symbol_a, buy_order['orderId']))
            sell_order = hf.trade.create_limit_order(hf.symbol_b, 'buy', hf.leverage, hf.size, price_bf + 1)
            print('buy %s,order id =%s' % (hf.symbol_b, sell_order['orderId']))
        elif position_a_qty > 0 and position_b_qty < 0 and new_spread > hf.spread_mean:
            buy_order = hf.trade.create_limit_order(hf.symbol_a, 'sell', position_a['realLeverage'],
                                                    position_a_qty, price_af + 1)
            print('sell %s,order id =%s' % (hf.symbol_a, buy_order['orderId']))
            sell_order = hf.trade.create_limit_order(hf.symbol_b, 'buy', position_a['realLeverage'],
                                                     position_a_qty, price_bf - 1)
            print('buy %s,order id =%s' % (hf.symbol_b, sell_order['orderId']))
        elif position_a_qty < 0 and position_b_qty > 0 and new_spread < hf.spread_mean:
            buy_order = hf.trade.create_limit_order(hf.symbol_a, 'buy', position_a['realLeverage'],
                                                    position_a_qty, price_af - 1)
            print('buy %s,order id =%s' % (hf.symbol_a, buy_order['orderId']))
            sell_order = hf.trade.create_limit_order(hf.symbol_b, 'sell', position_a['realLeverage'],
                                                     position_a_qty, price_bf + 1)
            print('sell %s,order id =%s' % (hf.symbol_b, sell_order['orderId']))

        time.sleep(60)

Mais.

tomadorVocê está dizendo o contrário, os preços permanentes são quase o mesmo que os preços de mercado, o preço é maior, deve ser o preço de alta trimestral, como pode ser a compra de trimestre, deve ser a compra de permanente, venda de trimestre.