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)
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.ratio
para 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 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çãominStocks
definido pelo parâmetro.
Desta forma, a estratégia segue as mudanças de preço para comprar os vencedores.
O intervalo de tempo do backtesting é de cerca de um ano.
Resultados de execução:
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.