Documentación

Aplicaciones

Última actualización el 20. 11. 2021 por clonex / Ivan Hudec

Simulación de medias móviles de acciones

En este tutorial le mostraremos cómo crear y simular el control de curvas de equidad en What If Crosscheck .

Los escenarios Y si... en StrategyQuantx es la herramienta que le permite probar varias hipótesis de negociación de su estrategia.

La función de simulación de control de renta variable permite simular la activación y desactivación de una estrategia en función de la curva de renta variable. El supuesto se basa en la hipótesis de que es mejor negociar la estrategia si su rendimiento está por encima de su media. Se puede leer un buen artículo dedicado a este tema aquí.

Fragmento finalizado que puede descargar aquí.

Paso 1 - Cree un nuevo fragmento de suposición Y si...

Abra CodeEditor, haga clic en Crear nuevo y elija la opción de columna Lista de operaciones. EquityMATrading.

Esto creará un nuevo fragmento EquityMATrading.java en carpeta Usuario/Snippets/SQ/Whatif

 

Paso 2 - Definir los parámetros del fragmento

Como queremos calcular la media de la renta variable, tenemos que incluir un parámetro - MAPeriod  que nos permite especificar un periodo de la media móvil.

La creación de un parámetro significa que será ajustable en la pestaña Whatif en EquityMATrading en las comprobaciones cruzadas.

 

@ClassConfig(name="() Equity MA Trading", display="Equity MA(#MAPeriod#) Trading ")
@Help("Texto de ayuda")
public clase EquityMATrading extends WhatIf {
    public static final Logger Log = LoggerFactory.getLogger(EquityMATrading.class);
    

    @Parameter(name="MAPeriod", defaultValue="10", minValue=2, maxValue=100000, step=1)
    public int MAPeriod;

Paso 3 - Implementar el método filter(OrdersList orders)

 

El filtro(Lista de pedidos orders) se utiliza para filtrar la lista original de órdenes de la estrategia. Lista de pedidos  es una clase que almacena la lista de operaciones de una estrategia y proporciona métodos para manipular la lista de operaciones. Puedes hacer un bucle con Lista de pedidos  y obtener datos para muy Pida  utilizando el método consiga(int índice).

Aquí debe prestar atención a la forma en que realiza el bucle a través de la lista de pedidos. En nuestro ejemplo, estamos utilizando el clásico bucle for, por lo que no podemos manipular la lista de pedidos durante el bucle.

En su lugar, creamos un Lista de pedidos ol donde almacenamos las operaciones que han cumplido nuestras condiciones. Copiamos esta lista de órdenes al final del fragmento en la lista de órdenes principal

 

Paso 4 - Uso del fragmento Whatif EquityMATrading

 

Para añadir un fragmento en Crosschecks puede utilizar este fragmento para simular lo que ocurriría si operara con su estrategia si su curva de renta variable está por encima de su media móvil.

Código completo comentado del fragmento

paquete SQ.WhatIf;

import org.slf4j.Logger;
importar org.slf4j.LoggerFactory;

import com.strategyquant.lib.SQTime;
import com.strategyquant.tradinglib.ClassConfig;
import com.strategyquant.tradinglib.Help;
import com.strategyquant.tradinglib.Order;
import com.strategyquant.tradinglib.OrdersList;
import com.strategyquant.tradinglib.Parameter;
import com.strategyquant.tradinglib.WhatIf;
import com.strategyquant.tradinglib.results.stats.comparator.OrderComparatorByOpenTime;

import it.unimi.dsi.fastutil.objects.ObjectListIterator;

@ClassConfig(name="() Equity MA Trading", display="Equity MA Trading (#MAPeriod#)")
@Help("Texto de ayuda")
public clase EquityMATrading extends WhatIf {
    public static final Logger Log = LoggerFactory.getLogger(EquityMATrading.class);
    
    
    @Parameter(name="MAPeriod", defaultValue="10", minValue=2, maxValue=100000, step=1)
    public int MAPeriod;

    @Override
    public void filter(OrdersList orders) lanza Excepción {

        // Nueva instancia de OrdersList en la que almacenamos las operaciones que están por encima de la media móvil
        OrdersList newOL = new OrdersList("AboveMovingAverage");
        
        // Recorremos toda la OrdersList de órdenes para calcular la Media Móvil
        for(int i = MAPeriod;i < orders.size();i++){

            // En la última orden actual estamos decidiendo si pasamos o no a newOL
            Orden = orders.get(i);
    
            // obtener saldo de la orden
            double saldo = pedido.SaldoCuenta;
            
            // filtrar pedidos con saldo
            if(order.isBalanceOrder()) continue;

                double suma = 0;
                // calcular la media móvil de la renta variable
                for(int k =1;k media de equidad
                if(ultimoOrden.SaldoCuenta>avg) {
                    // añadimos orden.get(i) a nuevoOL
                    newOL.add(orden);
                }
                avg =0; // restablecemos variable media
                sum =0; // restablecemos la variable sum
            }
            // ordenar newOL por posiciones hora de apertura
            newOL.sort(new OrderComparatorByOpenTime()); //// ordenar ordenes por tiempo de apertura
            // estamos reemplazando OrdersList orders por OrdersList newOL y solo recibimos operaciones por encima de la media movil
            orders.replaceWithList(newOL);
        }

}

 

¿Le ha resultado útil este artículo? El artículo era útil El artículo no era útil

Suscríbase a
Notificar a
1 Comentario
Más antiguo
Más reciente Más votados
Feedbacks de Inline
Ver todos los comentarios
Emmanuel
20. 12. 2021 8:11 pm

muy bueno 🙂 .