Versión civil del modelo comercial cuantitativo de media móvil

9ed652ecafddb79b47a3e5f10a1196ae.gif

Prefacio

2021 es fugaz. Echemos un vistazo a los fondos en los que hemos invertido en Ant. En 2022, cuando la crisis financiera esté a punto de llegar, compartiré una versión perezosa de una estrategia de gestión financiera. Deseo que todos puedan ganar mucho dinero. en el nuevo año y que tengas un feliz día de Año Nuevo.

Fondo de inversión fija

Mi estrategia es muy simple: invierto una pequeña cantidad cada mes sin pensar, espero a que salga el tema del "negociación de acciones nacionales" y luego liquido mi posición en el momento adecuado. Generalmente hay un punto de operación cada 2-3 años y cada ventana de operación dura unos meses, si lo pierdes, tendrás que empezar de nuevo. El punto de venta no afecta la operación de compra y el ciclo se repite.

623c28fd578babfa318c60fdff4bf867.png

¿Por qué elegir el fondo?

  • Operar una o varias veces al mes no afecta su trabajo y el trabajo complicado se deja a la máquina.

  • El fondo puede evitar eventos de cisne negro en la industria o empresa correspondiente de una sola acción. Por ejemplo, el “regreso de LeTV a China la próxima semana” o el impacto de la “doble reducción” en toda la industria educativa.

  • En comparación con las acciones, los fondos son más "sostenibles" y se ven menos perturbados por suspensiones de operaciones, ST o emisiones adicionales.

  • En un mercado de valores que cambia rápidamente, la influencia de las políticas y los métodos para captar la opinión pública aún son inmaduros. Los fondos pueden simplificar enormemente el modelo de inversión para la gente corriente.

Por qué elegir fondos indexados

  • Los gestores de fondos públicos cometen el "pecado original del rendimiento", que es perseguir a toda costa altos márgenes de beneficio, porque sólo así pueden ocupar un lugar destacado y ser "vistos" por los inversores. Bajo este mecanismo de incentivo, los comerciantes prefieren un estilo de inversión arriesgado. Si ganan la apuesta, ganarán mucho dinero por los gastos de gestión. Si pierden la apuesta, simplemente cambiarán el código del fondo y empezarán todo de nuevo.

  • Las estrategias de los administradores de fondos pueden confundirse con nuestras propias estrategias, no se pueden atribuir, no se pueden probar ni mejorar, y los fondos indexados reducen la concentración del riesgo "personal".

¿Por qué elegir una estrategia de inversión fija?

  • El modelo relativo simplifica una variable.

  • Las pequeñas transacciones regulares permiten una mejor prueba y error en pequeños pasos y la acumulación de datos de series temporales.

  • Las características de las acciones A de "los bajistas están en largo y los alcistas en corto " , lo que significa que los puntos de inversión espaciados uniformemente probablemente caerán en los mínimos del mercado bajista, lo que reducirá los costos.

Acerca del comercio de alta frecuencia

  • Para los inversores comunes, las tarifas de gestión de las estrategias comerciales de alta frecuencia son relativamente altas y las reservas de conocimientos de los profesionales no financieros son insuficientes.

  • El T+1 de las acciones A también restringe relativamente las operaciones comerciales sobre acciones individuales (si la cantidad de fondos es grande, T puede usarse para mejorar este problema, pero también enfrenta el fenómeno del impacto del capital).

  • Como ETF de una cesta de acciones, el fondo no es adecuado para operaciones frecuentes, aquellos que sean capaces pueden elegir acciones líderes en industrias de alto crecimiento para operaciones de alta frecuencia.

Desventajas

  • El ciclo de inversión es muy largo y generalmente se calcula anualmente;

  • La tasa de rendimiento es promedio (anualizada es de alrededor del 8%), muy inferior a la de los inversores profesionales, y mucho menos a la del círculo monetario;

  • La liquidez del capital es escasa, los mercados bajistas a largo plazo son la norma y la ventana para vender es muy corta;

  • El estilo de inversión es muy conservador y está más centrado en la gestión financiera que en la inversión.

ventaja

  • Es una inversión completamente pasiva y requiere poco de qué preocuparse;

  • No hay altibajos ni pruebas de la naturaleza humana, y puedes dormir tranquilo todos los días;

  • El mercado bajista "siembra semillas" para salvar a las empresas de la crisis, y el mercado alcista "distribuye dividendos" para compartir la prosperidad, la corrección política y la energía positiva de los tiempos prósperos.

Plataforma de negociación cuantitativa

En Alipay se pueden operar fácilmente inversiones fijas ordinarias o estrategias de inversión fija inteligentes simples. Como programadores, definitivamente queremos ser más independientes y controlables. Aquí hay más plataformas comerciales cuantitativas para elegir:

  • vnpy de código abiertohttps://github.com/vnpy/vnpy

  • jukuánhttps://www.joinquant.com/

  • canasta de arrozhttps://www.ricequant.com/

  • excelente miohttps://uqer.datayes.com/

La mayoría de ellos usan Python como lenguaje de desarrollo, que es muy amigable para los amigos que están acostumbrados a usar el aprendizaje automático para el análisis de datos. Aquí tomamos a Jukuan como ejemplo. Registre una cuenta en el sitio web oficial y cree una nueva computadora portátil para ejecutarla en línea. Para la versión fuera de línea, debe solicitar una prueba gratuita adicional de 6 meses. Consulte la documentación de la API para obtener más detalles.

https://www.joinquant.com/help/api/help#api:API文档

inicialización

Elija el CSI 300 como base, invierta 10.000 yuanes cada mes e invierta al menos 10 meses cada vez antes del reembolso, con una tasa de rendimiento objetivo del 20%.

# 导入函数库
from jqdata import *

# 初始化函数,设定基准等等
def initialize(context):
    # 设定沪深300作为基准
    set_benchmark('000300.XSHG')
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    # 输出内容到日志 log.info()
    log.info('初始函数开始运行且全局只运行一次')
    # 过滤掉order系列API产生的比error级别低的log
    # log.set_level('order', 'error')

    ### 股票相关设定 ###
    # 股票类每笔交易时的手续费是:买入时佣金万分之三,卖出时佣金万分之三加千分之一印花税, 每笔交易佣金最低扣5块钱
    set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
    
    # 要操作的基金:(g.为全局变量)
    g.security = '510300.XSHG'
    # 预期目标
    g.goal = 1.2
    # 均值窗口期
    g.during = 500
    # 定投基本值
    g.base_order_value = 10000
    # 卖出锁定周期
    g.sell_period = 10
    g.sell_timestamp = context.current_dt
    
    run_monthly(market_open, monthday=1, reference_security='000300.XSHG')

estrategia de media móvil

Agregue una pequeña estrategia a su inversión mensual sin sentido:

Compre menos en posiciones altas

c838e438b35b50a3a70a907f48f0a2c2.png b990b896b2c4bf9cb8b6be875babb402.png
# 高位买入    
def high_buy(security, base_order_value, cash, ratio):
    # 默认扣款率
    pay_ratio = 1
    
    if ratio < 0.15:
        pay_ratio = 0.9
    elif ratio < 0.50:
        pay_ratio = 0.8
    elif ratio < 1:
        pay_ratio = 0.7
    else:
        pay_ratio = 0.6
    
    # 需买入的金额
    order_value_cash = base_order_value*pay_ratio
    log.info("%s: %f, cash: %d, ratio: %f"%(security, pay_ratio, cash, ratio))
    
    if cash < order_value_cash:
        log.info("现金 %d 不足, 买入失败 %s: %d " % (cash, security, order_value_cash))
        return False
    
    log.info("高位买入 %s: %d" % (security, order_value_cash))
    order_value(security, order_value_cash)
    
    return True

Compre más a precios bajos

b1a5cdb0e2142269b96d029728ac04da.png 2bec703ffc61d9e0838ef540965f0342.png
# 低位买入    
def low_buy(security, base_order_value, cash, ratio):
    # 默认扣款率
    pay_ratio = 1
    
    # 近10天的最高价和最低价
    value_range = get_bars(security, count=10, unit='1d', fields=['high','low'])
    max_value = max(value_range['high'])
    min_value = min(value_range['low'])
    
    if (max_value - min_value)/max_value > 0.05:
        # 大幅度震荡,持续下跌通道中
        if ratio < 0.05:
            pay_ratio = 0.6
        elif ratio < 0.10:
            pay_ratio = 0.7
        elif ratio < 0.20:
            pay_ratio = 0.8
        elif ratio < 0.30:
            pay_ratio = 0.9
        elif ratio < 0.40:
            pay_ratio = 1
        else:
            pay_ratio = 1.1
    else:
        # 小幅度震荡,形成底部加大购买量
        if ratio < 0.5:
            pay_ratio = 1.6
        elif ratio < 0.10:
            pay_ratio = 1.7
        elif ratio < 0.20:
            pay_ratio = 1.8
        elif ratio < 0.30:
            pay_ratio = 1.9
        elif ratio < 0.40:
            pay_ratio = 2
        else:
            pay_ratio = 2.1       
    
    # 需买入的金额
    order_value_cash = base_order_value*pay_ratio
    
    if cash < order_value_cash:
        log.info("现金 %d 不足, 买入失败 %s: %d " % (cash, security, order_value_cash))
        return False
    
    log.info("低位买入 %s: %d" % (security, order_value_cash))
    order_value(security, order_value_cash)
    
    return True

Toma de ganancias esperada

Para facilitar el backtesting, no podemos "escuchar las noticias" para juzgar: primero debemos alcanzar el objetivo de ingresos esperado para detener las ganancias.

# 卖出    
def sell(security, current_price, MA, sell_timestamp):
    log.info("sell: %f, MA: %f" %(current_price, MA))
    
    if current_price/MA < g.goal:
        return False
        
    if (sell_timestamp - g.sell_timestamp).days/30 < g.sell_period:
        return False
    
    # 卖出所有股票,使这只股票的最终持有量为0
    log.info("%s, %s, %d" % (sell_timestamp, g.sell_timestamp, (sell_timestamp - g.sell_timestamp).days))
    log.info("达到预期目标, 卖出 %s" % (security))
    order_target(security, 0)
    # 更新卖出时间戳
    g.sell_timestamp = sell_timestamp
    return True

Ejecutar estrategia

Todo está listo, combinemos las funciones anteriores y ejecútelas para ver el efecto.

## 开盘时运行函数
def market_open(context):
    log.info('函数运行时间(market_open):'+str(context.current_dt.time()))
    security = g.security
    
    # 平均值窗口期
    during = g.during
    
    # 获取股票的收盘价
    close_data = get_bars(security, count=during, unit='1d', fields=['close'])
    # 取得过去500天的平均价格
    MA = close_data['close'].mean()
    # 取得上一时间点价格
    current_price = close_data['close'][-1]
    # 取得当前的现金
    cash = context.portfolio.available_cash
    # 定投金额
    base_order_value = g.base_order_value
    
    if (current_price > MA):
        # 高位卖出
        sell(security, current_price, MA, context.current_dt)
        
        # 高位少买 
        high_buy(security, base_order_value, cash, (current_price-MA)/MA)
    else:
        # 低位多买
        low_buy(security, base_order_value, cash, (MA-current_price)/MA)

    #得到本次所有成交记录
    trades = get_trades()
    for _trade in trades.values():
        log.info('成交记录:'+str(_trade))
    log.info('本轮结束')
    log.info('##############################################################')
364c7def4ef34dae0b3a98b636fee7c7.png

Elegí de 2015 a 2021 para realizar pruebas retrospectivas. Parece bastante bueno. Hay muchos puntos de compra. Excepto en algunas ocasiones esporádicas en las que se agotan los fondos, hay transacciones casi todos los meses. Solo hay 4 puntos de venta. Este aspecto está limitado por El "ciclo de bloqueo de ventas", por otro lado, también refleja el fenómeno de un mercado bajista a largo plazo en las acciones A.

8aa5294e33c69a8b1c280ac299f43431.png

El rendimiento anualizado es del 9,85%. El período para establecer una posición para pequeñas inversiones aquí es relativamente largo, por lo que la tasa relativa de utilización del capital no es lo suficientemente alta. La posición aquí puede entenderse simplemente como la escala máxima de inversión. En la operación real, se pueden utilizar ingresos fijos como inversión de capital y se pueden utilizar grandes cantidades de fondos para otras inversiones para ampliar la tasa de rendimiento.

Elija algunos períodos más a largo plazo, como desde 2017 hasta el presente o desde 2019 hasta el presente. Los rendimientos no son tan buenos como los del mercado alcista, pero pueden escapar de la crisis del mercado de valores y la tasa de rendimiento puede permanecer estable y positiva. la mayor parte del tiempo.

37b73d781b501c36949ae2186e0f20c9.png
Análisis de posición

Transacción real

  • Conéctese directamente con instituciones de valores

  • Comercio simulado, operación manual.

    f44415996488e70dfabc038732d19405.png
    comercio simulado

Dado que no tenemos muchas operaciones de compra y venta, podemos utilizar la estrategia preparada para enviar señales de compra y venta a través de mensajes de WeChat mediante operaciones simuladas y luego realizar operaciones de fondos en función de la situación real.

# 给微信发送消息(添加模拟交易,并绑定微信生效)
send_message("买入 %s: %d" % (security, order_value_cash))

Resumir

Al ver esto, creo que los amigos que participan en el aprendizaje profundo definitivamente querrán probar varios modelos de sincronización. Para empezar, a juzgar por mi propia experiencia y las lecciones aprendidas de amigos que realizan operaciones cuantitativas a mi alrededor, un modelo único es básicamente inútil en las acciones A.

a2ce0f1c6319a21602a35b39128580d0.png

Las principales razones son las siguientes:

  • El modelo de series de tiempo es reproducible basándose en tendencias históricas: la historia no se repetirá simplemente, sino que sólo volverá en circunstancias diferentes.

  • Numerosas instituciones cuantitativas han hecho que las estrategias originales de "puntos estratégicos de bajo riesgo" sean fugaces y parasitarias.

  • Las acciones A son un mercado con políticas sólidas y los factores financieros representan una pequeña proporción.

  • La proporción de inversores minoristas es muy alta y el sentimiento del mercado tiene un mayor impacto.

Además, lo anterior es sólo un intercambio técnico y una experiencia personal, no un consejo de inversión. Más estrategias comerciales esperan la orientación de los profesionales financieros. También hay operaciones más interesantes de palabras clave de análisis de opinión pública de PNL para aumentar el límite diario. Abra su imaginación en el área de comentarios.

Con el autocultivo de un puerro, el gran caballero se apoderará del país.

Oye, prometí actualizar todos los lunes en 2021 y siento que tengo muchas deudas. Hay series Hongmeng, series Raspberry Pi, series OCR y series Knowledge Graph. Hay demasiados manuscritos y no estoy de humor para ordenarlos lentamente. Espero completarlos el próximo año.

c236136f3b35f2c1976e1e0f8f077963.png

d76f842a9da4aa9e9d1ff1ec02d82809.gif

Supongo que te gusta

Origin blog.csdn.net/weixin_47479625/article/details/122273060
Recomendado
Clasificación