
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.
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)
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.
O período de backtesting é de aproximadamente um ano.

Resultados da operação:


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.