3.3 Cómo implementar estrategias en lenguaje M

El autor:La bondad, Creado: 2019-06-25 12:08:47, Actualizado: 2023-11-11 17:01:30

img

Cómo implementar estrategias en lenguaje M

Resumen de las actividades

En el artículo anterior, explicamos la premisa de la realización de la estrategia de negociación desde los aspectos de la introducción del lenguaje M, la gramática básica, el método de ejecución del modelo y la clasificación del modelo.

Módulo de estrategia

img

Piense en ello, ¿cómo se construye un robot con piezas de Lego? No siempre se puede de arriba a abajo o de abajo a arriba, juntar pieza por pieza. Las personas con un poco de sentido común saben que deben unir sus cabezas, brazos, piernas, alas, etc., y luego combinarlos en un robot completo. Lo mismo es cierto para escribir programas, escribir las funciones requeridas en un solo módulo de estrategia, y luego combinar estos módulos de estrategia individuales en una estrategia comercial completa. A continuación voy a enumerar algunos módulos de estrategia comunes:

img

Aumento de las etapas

El incremento de etapa es el cálculo del porcentaje del precio de cierre de la línea K actual comparado con N períodos anteriores de diferencia de precio de cierre.

CLOSE_0:=CLOSE; //get the current K-line's closing price, and save the results to variable CLOSE_0. 
CLOSE_10:=REF(CLOSE,10); //get the pervious 10 K-lines' closing price, and save the results to variable CLOSE_10

(CLOSE_0-CLOSE_10)/CLOSE_10*100;//calculating the percentage of current K line's closing price compare with previous N periods of closing price's difference.

Nuevo precio alto

El nuevo precio más alto se calcula por si la línea actual K es mayor que el precio más alto de N ciclos.

HHV_10:=HHV(HIGH,10); //Get the highest price of latest 10 K-lines, which includes the current K-line.
HIGH>REF(HHV_10,1); //Judge whether the current K-line's highest price is greater than pervious K-lines' HHV_10 value.

Aumento de precios con aumento masivo del volumen de operaciones

Por ejemplo: Si el precio de cierre de la línea K actual es 1,5 veces el precio de cierre de las 10 líneas K anteriores, lo que significa que en 10 días, el precio ha aumentado un 50%; y el volumen de negociación también aumentó más de 5 veces las 10 líneas K anteriores. se puede escribir:

CLOSE_10:=REF(CLOSE,10); //get the 10th K-line closing price
IS_CLOSE:=CLOSE/CLOSE_10>1.5; //Judging whether the current K Line closing price is 1.5 times greater than the value of CLOSE_10 

VOL_MA_10:=MA(VOL,10); //get the latest 10 K-lines' average trading volume
IS_VOL:=VOL>VOL_MA_10*5; //Judging whether the current K-line's trading volume is 5 times greater than the value of VOL_MA_10

IS_CLOSE AND IS_VOL; //Judging whether the condition of IS_CLOSE and IS_VOL are both true.

Mercado de choque de precios estrecho

Por ejemplo: Si el precio más alto en 10 ciclos menos el precio más bajo en 10 ciclos, el resultado dividido por el precio de cierre actual de la línea K es menor a 0.05.

HHV_10:=HHV(CLOSE,10); //Get the highest price in 10 cycles(including current K-line)
LLV_10:=LLV(CLOSE,10); //Get the lowest price in 10 cycles(including current K-line)

(HHV_10-LLV_10)/CLOSE<0.05; //Judging whether the difference between HHV_10 and LLV_10 divided by current k-line's closing price is less than 0.05.

La media móvil indica un mercado alcista

El promedio móvil indica la dirección larga y corta, la línea K apoyada o resistida por la línea promedio móvil 5,10,20,30,60, el promedio móvil indica mercado alcista o mercado bajista. se puede escribir:

MA_5:=MA(CLOSE,5);  //get the moving average of 5 cycle closing price.
MA_10:=MA(CLOSE,10);//get the moving average of 10 cycle closing price.
MA_20:=MA(CLOSE,20);//get the moving average of 20 cycle closing price.
MA_30:=MA(CLOSE,30);//get the moving average of 30 cycle closing price.

MA_5>MA_10 AND MA_10>MA_20 AND MA_20>MA_30; //determine wether the MA_5 is greater than MA_10, and MA_10 is greater than MA_20, and MA_20 is greater than MA_30.

Precio elevado anterior y su ubicación

Para obtener la ubicación del precio más alto anterior y su ubicación, puede usar FMZ Quant API directamente. se puede escribir:

HHV_20:=HHV(HIGH,20); //get the highest price of 20 cycle(including current K line)
HHVBARS_20:=HHVBARS(HIGH,20); //get the number of cycles from the highest price in 20 cycles to current K line
HHV_60_40:REF(HHV_20,40); //get the highest price between 60 cycles and 40 cycles.

Salto de la brecha de precios

La brecha de precios es el caso en que los precios más altos y más bajos de las dos líneas K no están conectados. Consiste en dos líneas K, y la brecha de precios es el precio de referencia de los puntos de apoyo y presión en el movimiento de precios futuro. Cuando ocurre una brecha de precios, se puede asumir que ha comenzado una aceleración a lo largo de la tendencia con la dirección original. se puede escribir:

HHV_1:=REF(H,1); //get the pervious K line's highest price
LLV_1:=REF(L,1); //get the pervious K line's lowest price
HH:=L>HHV_1; //judging wether the current K line's lowest price is greater than pervious K line's highest price (jump up)
LL:=H<LLV_1; //judging wether the current K line's highest price is greater than pervious K line's lowest price (jump down)
HHH:=L/REF(H,1)>1.001; //adding additional condition, the bigger of the price gap, the stronger the signal (jump up)  
LLL:=H/REF(L.1)<0.999; //adding additional condition, the bigger of the price gap, the stronger the signal (jump down)  
JUMP_UP:HH AND HHH; //judging the overall condition, whether it is a jump up
JUMP_DOWN:LL AND LLL; //judging the overall condition, whether it is a jump down

Indicadores técnicos comunes

Promedio móvil

img

Desde un punto de vista estadístico, el promedio móvil es el promedio aritmético del precio diario, que es una trayectoria de precios de tendencia. El sistema de promedio móvil es una herramienta técnica común utilizada por la mayoría de los analistas. Desde un punto de vista técnico, es un factor que afecta el precio psicológico de los analistas técnicos.

MA_DEMO:MA(CLOSE,5);   // get the moving average of 5 cycle
MA_DEMO:EMA(CLOSE,15); // get the smooth moving average of 15 cycle
MA_DEMO:EMA2(CLOSE,10);// get the linear weighted moving average of 10 cycle
MA_DEMO:EMAWH(CLOSE,50); // get the exponentially weighted moving average of 50 cycle
MA_DEMO:DMA(CLOSE,100);  // get the dynamic moving average of 100 cycle
MA_DEMO:SMA(CLOSE,10,3); // get the fixed weight of 3 moving average of closing price in 10 cycle
MA_DEMO:ADMA(CLOSE,9,2,30); // get the fast-line 2 and slow-line 30 Kaufman moving average of closing price in 9 cycle.

Las bandas de Bollinger

img

Las bandas de Bollinger también se basan en el principio estadístico. El ferrocarril medio se calcula de acuerdo con el promedio móvil de N días, y los ferrocarriles superior e inferior se calculan de acuerdo con la desviación estándar. Cuando el canal BOLL comienza a cambiar de ancho a estrecho, lo que significa que el precio volverá gradualmente a la media. Cuando el canal BOLL está cambiando de estrecho a ancho, significa que el mercado comenzará a cambiar. Si el precio está arriba a través del ferrocarril superior, significa que el poder adquisitivo se mejora. Si el precio baja a través del ferrocarril inferior, indica que el poder de venta se mejora.

Entre todos los indicadores técnicos, el método de cálculo de bandas de Bollinger es uno de los más complicados, que introduce el concepto de desviación estándar en las estadísticas, que involucra la trayectoria media (MB ), la trayectoria superior (UP) y la trayectoria inferior (DN).

MID:MA(CLOSE,100); //calculating moving average of 100 cycle, call it Bollinger Bands middle trajectory   
TMP2:=STD(CLOSE,100); //calculating standard deviation of closing price of 100 cycle.
TOP:MID+2*TMP2; //calculating middle trajectory plus 2 times of standard deviation, call it upper trajectory
BOTTOM:MID-2*TMP2; //calculating middle trajectory plus 2 times of standard deviation, call it lower trajectory

Indicador MACD

img

El indicador MACD es una operación de doble suavizado que utiliza promedios móviles rápidos (a corto plazo) y lentos (a largo plazo) y su agregación y separación. El MACD desarrollado de acuerdo con el principio de promedios móviles elimina el defecto de que el promedio móvil emite frecuentemente señales falsas, y también retiene el efecto del otro aspecto bueno. Por lo tanto, el indicador MACD tiene la tendencia y la estabilidad del promedio móvil.

DIFF:EMA(CLOSE,10)-EMA(CLOSE,50); //First calculating the difference between short-term moving average and long-term moving average.
DEA:EMA(DIFF,10); //Then calculating average of the difference.

El siguiente es el módulo de estrategia comúnmente utilizado en el desarrollo de estrategias de negociación cuantitativas. Además, hay mucho más que eso. A través de los ejemplos de módulos anteriores, también puede implementar varios módulos de negociación que utiliza con mayor frecuencia en el comercio subjetivo. Los métodos son los mismos. A continuación, comenzamos a escribir una estrategia de negociación intradiaria viable.

Escribir estrategias

En el mercado spot de Forex, hay una estrategia conocida llamada HANS123. Su lógica es básicamente juzgar si el precio rompe a través del precio más alto o más bajo del número de líneas K después de la apertura del mercado

La lógica de la estrategia

  • Listo para entrar en el mercado después de 30 minutos de apertura;

  • El carril superior = 30 minutos de altura después de la apertura;

  • El carril inferior = 30 minutos después de la apertura;

  • Cuando el precio se rompa por encima del límite superior, comprar y abrir la posición;

  • Cuando el precio cae por debajo de la barrera inferior, el vendedor abre la posición.

  • estrategia de negociación intradiaria, cierre antes del cierre;

Código de estrategia

// Data Calculation
Q:=BARSLAST(DATA<>REF(DATA,1))+1; //Calculating the number of period from 
the first K line of the current trading day to current k line, and assign the results to N 
HH:=VALUEWHEN(TIME=0930,HHV(H,Q)); //when time is 9:30, get the highest price of N cycles, and assign the results to HH
LL:=VALUEWHEN(TIME=0930,LLV(L,Q)); //When time is 9:30, get the lowest price of N cycles, and assign the results to LL

//Placing Orders
TIME>0930 AND TIME<1445 AND C>HH,BK; //If the time is greater than 9:30 and lesser than 14:45, and the closing price is greater than HH, opening long position.
TIME>0930 AND TIME<1445 AND C<LL,SK; //If the time is greater than 9:30 and lesser than 14:45, and the closing price is lesser than LL, opening short position.
TIME>=1445,CLOSEOUT; //If the time is greater or equal to 14:45, close all position.

//Filtering the signals
AUTOFILTER;  //opening the filtering the signals mechanism

En resumen

A través de varios casos de módulos de estrategia comúnmente utilizados, tuvimos una idea general de las herramientas de programación FMZ Quant, se puede decir que aprender a escribir módulos de estrategia y mejorar el pensamiento lógico de programación es un paso clave en el comercio cuantitativo avanzado.

Notificación de la siguiente sección

Tal vez todavía haya cierta confusión para algunas personas, principalmente debido a la parte de codificación. No se preocupe, ya hemos pensado en eso para usted. En la plataforma FMZ Quant, hay otra herramienta de programación aún más fácil para principiantes. Es la programación visual, vamos a aprenderlo pronto!

Ejercicios extraescolares

  1. Trate de implementar varios módulos de negociación que utiliza con mayor frecuencia en el comercio subjetivo.

  2. Trate de implementar el algoritmo de índice KDJ utilizando el lenguaje M en la plataforma FMZ Quant.


Más.