La estrategia de tendencia generalmente utiliza varios indicadores para juzgar la dirección del mercado, y utiliza los resultados de comparación de varios indicadores como señales comerciales. De esta manera, es inevitable usar parámetros y calcular indicadores. Ahora que se usan los parámetros, habrá una situación adecuada. En algunos mercados, la estrategia funciona muy bien, pero si no tienes suerte y la tendencia del mercado es muy hostil a los parámetros actuales, la estrategia puede funcionar muy mal. Por lo tanto, considero que cuanto más simple sea el diseño de la estrategia, mejor. Esta estrategia será más robusta. Hoy compartiremos una estrategia de tendencia sin indicadores. El código de estrategia es muy simple, solo 40 líneas.
Código de estrategia:
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)
El principio de la estrategia es muy simple. No utiliza ningún indicador, sólo utiliza el precio actual como la base de activación de la transacción.ratio
para controlar el disparador de la posición de apertura.
El gatillo está encendido.
if ticker.Last - basePrice > 0 and (ticker.Last - basePrice) / basePrice > ratio
Cuando el precio actual es mayor que el precio de base y el precio excede el precio de base, el precio de base es igual al precio de base.ratio * 100%
, desencadenar una orden y esperar órdenes largas.
Después de realizar la orden, el precio base se actualiza al precio actual.
Activador de la orden corta:
if ticker.Last - basePrice < 0 and (basePrice - ticker.Last) / basePrice > ratio
El principio de la dirección corta es el mismo. El precio actual se utiliza para comparar el precio base. Cuando el precio actual es menor que el precio base y el precio excede el ratio * 100%'
La cantidad de pedido de cada pedido esratio * 100%
del valor del fondo disponible.
Poner una orden a menos que la cantidad calculada de la orden sea inferior a la cantidad mínima de negociaciónminStocks
establecido por el parámetro.
De esta manera, la estrategia sigue los cambios de precio para comprar a los ganadores.
El intervalo de tiempo de backtesting es de aproximadamente un año.
Resultados de ejecución:
Recientemente, algunos usuarios dijeron que hay pocas estrategias de Python. Más tarde, compartiré más estrategias escritas en Python. El código de estrategia también es muy simple, lo que es muy adecuado para que los principiantes cuantitativos aprendan. Dirección estratégica:https://www.fmz.com/strategy/181185
La estrategia es para referencia, aprendizaje y backtesting sólo. Si usted está interesado, puede optimizar y actualizar.