
Las estrategias de tendencia generalmente utilizan varios indicadores para determinar la dirección del mercado y utilizan los resultados de la comparación numérica de varios indicadores como señales comerciales. Esto conducirá inevitablemente al uso de parámetros y al cálculo de indicadores. Dado que se utilizan parámetros, habrá ajuste. La estrategia funciona muy bien en determinadas condiciones de mercado, pero si usted tiene mala suerte y la tendencia del mercado es muy hostil a los parámetros actuales, la estrategia puede funcionar muy mal. Por lo tanto, en mi opinión, el diseño de la estrategia debe ser lo más simple posible, y dicha estrategia será más robusta. Hoy compartiremos una estrategia de tendencia que no utiliza indicadores. El código de estrategia es muy simple, solo 40 líneas.
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)
El principio de la estrategia es muy simple. No utiliza ningún indicador, sino que solo utiliza el precio actual como base para los desencadenantes comerciales, y solo hay un parámetro principal.ratioControla la activación de la apertura de una posición.
Gatillo largo:
if ticker.Last - basePrice > 0 and (ticker.Last - basePrice) / basePrice > ratio
Utilice el precio actual para comparar con el precio base. Cuando el precio actual es mayor que el precio base y el precio excederatio * 100 %, se activa la orden pendiente y se coloca una orden larga.
Después de realizar un pedido, el precio base se actualiza al precio actual.
Activador de orden corta:
if ticker.Last - basePrice < 0 and (basePrice - ticker.Last) / basePrice > ratio
El principio de la venta en corto es el mismo. Utilice el precio actual para comparar con el precio base. Cuando el precio actual es menor que el precio base y el precio excederatio * 100 %, se activa la orden pendiente y se coloca una orden corta.
Después de realizar un pedido, el precio base se actualiza al precio actual.
El volumen de pedido para cada pedido es el valor de los fondos disponibles.ratio * 100 %。
A menos que el volumen de orden calculado sea menor que el volumen mínimo de transacción establecido en los parámetrosminStocks, de lo contrario realizar un pedido.
Esto permite que la estrategia siga los cambios de precios y persiga máximos y venda mínimos.
El período de backtesting es de aproximadamente un año.

Resultados de la operación:


Recientemente, algunos usuarios dijeron que hay relativamente pocas estrategias de Python. Compartiré más estrategias escritas en Python en el futuro. El código de estrategia también es muy simple, lo que resulta muy adecuado para que lo aprendan los principiantes. Dirección de estrategia: https://www.fmz.com/strategy/181185
La estrategia es solo de referencia, para realizar pruebas retrospectivas y pruebas. Si te interesa, puedes optimizarla y actualizarla.