avatar of 发明者量化-小小梦 发明者量化-小小梦
focar em Mensagem privada
4
focar em
1271
Seguidores

Versão Python da estratégia de perseguir e vender para baixo

Criado em: 2020-01-11 14:49:08, atualizado em: 2024-12-12 20:57:43
comments   6
hits   7100

Versão Python da estratégia de perseguir e vender para baixo

Versão Python da estratégia de perseguir e vender para baixo

As estratégias de tendência geralmente usam vários indicadores para determinar a direção do mercado e usam os resultados da comparação numérica de vários indicadores como sinais de negociação. Isso levará inevitavelmente ao uso de parâmetros e ao cálculo de indicadores. Como parâmetros são usados, haverá ajuste. A estratégia tem um desempenho muito bom em certas condições de mercado, mas se você não tiver sorte e a tendência do mercado for muito desfavorável aos parâmetros atuais, a estratégia pode ter um desempenho muito ruim. Portanto, na minha opinião, o desenho da estratégia deve ser o mais simples possível, e tal estratégia será mais robusta. Hoje compartilharemos uma estratégia de tendências que não usa indicadores. O código da estratégia é muito simples, apenas 40 linhas.

Código de estratégia:

import time

basePrice = -1
ratio = 0.05
acc = _C(exchange.GetAccount)
lastCancelAll = 0
minStocks = 0.01

def CancelAll():
    while True : 
        orders = _C(exchange.GetOrders)
        for i in range(len(orders)) :
            exchange.CancelOrder(orders[i]["Id"], orders[i])
        if len(orders) == 0 :
            break
        Sleep(1000)

def main():
    global basePrice, acc, lastCancelAll
    exchange.SetPrecision(2, 3)
    while True:
        ticker = _C(exchange.GetTicker)
        if basePrice == -1 :
            basePrice = ticker.Last
        if ticker.Last - basePrice > 0 and (ticker.Last - basePrice) / basePrice > ratio :
            acc = _C(exchange.GetAccount)
            if acc.Balance * ratio / ticker.Last > minStocks :
                exchange.Buy(ticker.Last, acc.Balance * ratio / ticker.Last)
                basePrice = ticker.Last
        if ticker.Last - basePrice < 0 and (basePrice - ticker.Last) / basePrice > ratio : 
            acc = _C(exchange.GetAccount)
            if acc.Stocks * ratio > minStocks :
                exchange.Sell(ticker.Last, acc.Stocks * ratio)
                basePrice = ticker.Last
        ts = time.time()
        if ts - lastCancelAll > 60 * 5 :
            CancelAll()
            lastCancelAll = ts 
        LogStatus(_D(), "\n", "行情信息:", ticker, "\n", "账户信息:", acc)
        Sleep(500)

Análise simples da estratégia

O princípio da estratégia é muito simples. Ela não usa nenhum indicador, mas usa apenas o preço atual como base para gatilhos de negociação, e há apenas um parâmetro principalratioControla o acionamento da abertura de uma posição.

Gatilho longo:

if ticker.Last - basePrice > 0 and (ticker.Last - basePrice) / basePrice > ratio

Use o preço atual para comparar com o preço base. Quando o preço atual é maior que o preço base, e o preço excederatio * 100 %, a ordem pendente é acionada e uma ordem longa é colocada. Após fazer um pedido, o preço base é atualizado para o preço atual.

Gatilho de ordem curta:

if ticker.Last - basePrice < 0 and (basePrice - ticker.Last) / basePrice > ratio

O princípio da venda a descoberto é o mesmo. Use o preço atual para comparar com o preço base. Quando o preço atual é menor que o preço base e o preço excederatio * 100 %, a ordem pendente é acionada e uma ordem curta é colocada. Após fazer um pedido, o preço base é atualizado para o preço atual.

O volume de cada pedido é o valor dos fundos disponíveis.ratio * 100 %。 A menos que o volume do pedido calculado seja menor que o volume mínimo de transação definido nos parâmetrosminStocks, caso contrário, faça um pedido.

Isso permite que a estratégia acompanhe as mudanças de preço, busque máximas e venda mínimas.

Testes retrospectivos

O período de backtesting é de aproximadamente um ano. Versão Python da estratégia de perseguir e vender para baixo

Resultados da operação: Versão Python da estratégia de perseguir e vender para baixo

Versão Python da estratégia de perseguir e vender para baixo

Recentemente, alguns usuários disseram que há relativamente poucas estratégias em Python. Compartilharei mais estratégias escritas em Python no futuro. O código de estratégia também é muito simples, o que é muito adequado para iniciantes aprenderem. Endereço estratégico: https://www.fmz.com/strategy/181185

A estratégia é apenas para referência, backtesting e teste. Se você estiver interessado, pode otimizá-la e atualizá-la.