avatar of 发明者量化-小小梦 发明者量化-小小梦
Seguir Mensajes Privados
4
Seguir
1271
Seguidores

Versión en Python de la estrategia de perseguir al alza y vender a la baja

Creado el: 2020-01-11 14:49:08, Actualizado el: 2024-12-12 20:57:43
comments   6
hits   7100

Versión en Python de la estrategia de perseguir al alza y vender a la baja

Versión en Python de la estrategia de perseguir al alza y vender a la baja

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.

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, "\n", "账户信息:", acc)
        Sleep(500)

Análisis simple de la estrategia

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.

Prueba retrospectiva

El período de backtesting es de aproximadamente un año. Versión en Python de la estrategia de perseguir al alza y vender a la baja

Resultados de la operación: Versión en Python de la estrategia de perseguir al alza y vender a la baja

Versión en Python de la estrategia de perseguir al alza y vender a la baja

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.