O recurso está a ser carregado... Carregamento...

Estratégia para comprar os vencedores da versão Python

Autora:FMZ~Lydia, Criado: 2022-12-22 22:04:41, Atualizado: 2023-09-20 09:22:41

img

Estratégia para comprar os vencedores da versão Python

A estratégia de tendência geralmente usa vários indicadores para julgar a direção do mercado e usa os resultados de comparação de vários indicadores como sinais de negociação. Desta forma, é inevitável usar parâmetros e calcular indicadores. Agora que os parâmetros são usados, haverá uma situação adequada. Em alguns mercados, a estratégia funciona muito bem, mas se você tiver azar e a tendência do mercado for muito hostil aos parâmetros atuais, a estratégia pode funcionar muito mal. Portanto, considero que quanto mais simples for o design da estratégia, melhor. Esta estratégia será mais robusta. Hoje vamos compartilhar uma estratégia de tendência sem 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:", ticker, "\n", "Account information:", acc)
        Sleep(500)

Análise simples da estratégia

O princípio da estratégia é muito simples. Ele não usa quaisquer indicadores, ele só usa o preço atual como a base de desencadeamento da transação.ratiopara controlar o gatilho da posição de abertura.

A disparar:

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

Quando o preço atual é maior que o preço de base e o preço excede o preço de base, o preço de base é o preço de base.ratio * 100%, desencadear uma ordem e aguardar ordens longas. Após a realização da encomenda, o preço de base é actualizado para o preço corrente.

Trigger de ordem curta:

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

O princípio de direção de curto prazo é o mesmo. O preço atual é usado para comparar o preço de base. Quando o preço atual é menor que o preço de base e o preço excede o ratio * 100%', a ordem pendente é acionada e a ordem vazia é listada. Após a realização da encomenda, o preço de base é actualizado para o preço corrente.

A quantidade de encomenda de cada encomenda ératio * 100%do valor do fundo disponível. Realizar uma ordem, a menos que a quantidade calculada da ordem seja inferior à quantidade mínima de negociaçãominStocksdefinido pelo parâmetro.

Desta forma, a estratégia segue as mudanças de preço para comprar os vencedores.

Teste de retrocesso

O intervalo de tempo do backtesting é de cerca de um ano.

img

Resultados de execução:

img img img

Recentemente, alguns usuários disseram que há poucas estratégias Python. Mais tarde, vou compartilhar mais estratégias escritas em Python. O código da estratégia também é muito simples, o que é muito adequado para iniciantes quantitativos aprenderem. Endereço estratégico:https://www.fmz.com/strategy/181185

A estratégia é para referência, aprendizagem e backtesting apenas.


Relacionados

Mais.