Comenzando con el lenguaje M
¿Qué es el lenguaje M? El llamado lenguaje M es un conjunto de funciones programáticas que se extienden desde los primeros indicadores técnicos del comercio de acciones. Encapsulando el algoritmo en una sola función, el usuario solo necesita llamar a una determinada función como
Adopta el modo de construcción de "pequeña gramática, gran función", lo que mejora enormemente la eficiencia de programación. La escritura de estrategias de más de 100 oraciones en otros idiomas se puede compilar con solo unas pocas líneas en lenguajes M. La biblioteca de funciones estadísticas financieras y la estructura de datos junto con la herramienta FMZ Quant también pueden admitir alguna lógica comercial compleja.
Para ayudarle a comprender rápidamente los conocimientos clave de esta sección, antes de introducir el lenguaje FMZ Quant M, primero tengamos una comprensión preliminar del concepto de nombre de esta sección.
Posición larga abierta: Si actualmente no existe una posición y el precio de cierre es mayor que el promedio móvil a corto plazo, y el precio de cierre es mayor que el promedio móvil a largo plazo, y el promedio móvil a corto plazo es mayor que el promedio móvil a largo plazo, y el promedio móvil a largo plazo está aumentando.
Posición corta abierta: Si actualmente no existe una posición, y el precio de cierre es inferior a la media móvil a corto plazo, y el precio de cierre es inferior a la media móvil a largo plazo, y la media móvil a corto plazo es inferior a la media móvil a largo plazo, y la media móvil a largo plazo está disminuyendo.
Cierre de posición larga: Si actualmente mantiene una posición larga y el precio de cierre es inferior a la media móvil a largo plazo, o la media móvil a corto plazo es inferior a la media móvil a largo plazo, o la media móvil a largo plazo está disminuyendo.
Posición corta cerrada: Si la posición corta actual se mantiene y el precio de cierre es mayor que el promedio móvil a largo plazo, o el promedio móvil a corto plazo es mayor que el promedio móvil a largo plazo, o el promedio móvil a largo plazo está aumentando.
Si lo escribe en lenguaje M, será:
MA10:=MA(CLOSE,10); // Get the 10-cycle moving average of the latest K-line and save the result in variable MA10
MA50:=MA(CLOSE,50); // Get the 50-cycle moving average of the latest K-line and save the result in variable MA50
MA10_1:=REF(MA10,1); //Get the 10-cycle moving average of the pervious K line and save the result to variable MA10_1
MA50_1:=REF(MA50,1); //Get the 50-cycle moving average of the pervious K line and save the result to variable MA50_1
MA10_2:=REF(MA10,2); //Get the 10-cycle moving average of the latest K line and save the result to variable MA10_2
MA50_2:=REF(MA50,2); //Get the 50-cycle moving average of the latest K line and save the result to variable MA50_2
MA50_ISUP:=MA50>MA50_1 AND MA50_1>MA50_2; //Determine whether the current 50-line moving average of the K line is rising
MA50_ISDOWN:=MA50<MA50_1 AND MA50_1<MA50_2; //Determine whether the current 50-line moving average of the K line is falling
CLOSE>MA10 AND CLOSE>MA50 AND MA10>MA50 AND MA50_ISUP,BK; //open long position
CLOSE<MA10 AND CLOSE<MA50 AND MA10<MA50 AND MA50_ISUP,SK; //open short position
CLOSE<MA50 OR MA10<MA50,SP;//close long position
CLOSE>MA50 OR MA10>MA50,BP;//close short position
Para escribir una estrategia comercial completa, necesitará: adquisición de datos, cálculo de datos, cálculo lógico y colocación de pedidos. Como se muestra anteriormente, en todo el código, solo se utiliza una API para obtener los datos básicos, que es la "CLOSE" en la primera y segunda líneas; luego la primera a la novena línea son las partes de cálculo de datos; Las líneas 11 a 14 son cálculos lógicos y la parte de colocación de pedidos.
Tenga en cuenta que el MA10, MA50, MA10_1, MA50_1, MA10_2, y MA50_2 son variables; en las primeras a novenas líneas, el " := " es un signo de asignación, y los datos a la derecha del signo de asignación se asignan a la variable a la izquierda del signo de asignación; el
Los datos básicos (precio de apertura, precio más alto, precio más bajo, precio de cierre, volumen) son una parte indispensable del comercio cuantitativo. Para obtener los últimos datos básicos en la estrategia, solo necesita llamar a la API del FMZ Quant. Si desea obtener los datos básicos del precio histórico, puede usar " REF ", como: REF (CLOSE, 1) es para obtener el precio de cierre de ayer.
Los nombres de variables pueden ser cambiados. El nombre de una variable puede ser entendido como un nombre de código. Su nombre es soportado por letras, números y líneas en inglés. Sin embargo, la longitud debe ser controlada dentro de 31 caracteres. Los nombres de variables no se pueden repetir con otro, no se pueden duplicar con nombres de parámetros, no se pueden repetir con nombres de funciones (API ), y cada declaración debe terminar con un punto y coma. Escribir comentarios después del " // ". Como se muestra a continuación:
INT:=2; //Integer type
FLOAT:=3.1; //Floating point
ISTRUE:=CLOSE>OPEN; //Boolean type
La asignación de variables significa que el valor a la derecha del signo de asignación se da a la variable de la izquierda. Hay cuatro tipos de asignaciones, que pueden controlar si el valor se muestra en el gráfico o la posición de la pantalla. Son " : ", " := ", " ^^ ", "... ", y los comentarios de código a continuación explican su significado en detalle.
CC1: C; //Assign the closing price to the variable CC1 and display it in the sub-chart
CC2:=C; //Assign the closing price to variable CC2, but not display in the status bar and chart
CC3^^C; //Assign the closing price to the variable CC3 and display it in the main chart
CC4..0; //Assign the closing price to the variable CC4 and display it in the status bar, but not in the chart
Hay varios tipos de datos en el lenguaje M, los más comunes de los cuales son tipos numéricos, tipos de cadena y tipos booleanos. El tipo numérico son números, incluyendo enteros, decimales, números positivos y negativos, etc., como: 1, 2, 3, 1.1234, 2.23456...; el tipo de cadena puede entenderse como texto, chino, inglés, los números también pueden ser cadenas, como:
Los operadores relacionales, como su nombre indica, son operadores utilizados para comparar la relación de dos valores. Son iguales a, mayores que, menores que, mayores que o iguales a, menores que o iguales a, no iguales a, como se muestra a continuación:
CLOSE = OPEN; //when closing price equals to opening price, return 1 (true), otherwise return 0 (false)
CLOSE > OPEN; //when closing price greater than opening price, return 1 (true), otherwise return 0 (false)
CLOSE < OPEN; //when closing price less than opening price, return 1 (true), otherwise return 0 (false)
CLOSE >= OPEN; //when closing price greater than or equal to opening price, return 1 (true), otherwise return 0 (false)
CLOSE <= OPEN; //when closing price less than or equal to opening price, return 1 (true), otherwise return 0 (false)
CLOSE <> OPEN; //when closing price is not equal to opening price, return 1 (true), otherwise return 0 (false)
Las operaciones lógicas pueden unir instrucciones de tipo booleano separadas en el todo, las más comunes que se utilizan son "Y" y "OR". Supongamos que hay dos valores de tipo booleano,
AA:=2>1; //return true
BB:=4>3; //return true
CC:=6>5; //return true
DD:=1>2; //return false
Por favor, presta atención:
" AND " es cuando todas las condiciones son
"O" significa en todas las condiciones, siempre que cualquiera de las condiciones sea
"Y" se puede escribir como "&&", y "OR" se puede escribir como "ᄇ".
No hay diferencia entre los operadores aritméticos (" +
AA:=1+1; //the result is 2
BB:=2-1; //the result is 1
CC:=2*1; //the result is 2
DD:=2/1; //the result is 2
Si hay una expresión 100*(10-1)/(10+5, ¿qué paso es el programa calculado primero?
1, si se trata del mismo nivel de funcionamiento, se calcula generalmente de izquierda a derecha. 2, Si hay adiciones y sustracciones, y multiplicación y división, primero calcular la multiplicación y división, luego adiciones y sustracciones. 3, Si hay corchetes, primero calcule el interior de los corchetes. 4, Si se cumple la ley de la facilidad de operación, se puede utilizar la ley para el cálculo.
Lo mismo ocurre con el lenguaje M, como se muestra a continuación:
100*(10-1)/(10+5) //the result is 60
1>2 AND (2>3 OR 3<5) //the result is false
1>2 AND 2>3 OR 3<5 //the result is true
En el lenguaje M de la herramienta FMZ Quant, hay dos modos de ejecución del programa, a saber, el modo de precio de cierre y el modo de precio en tiempo real.
Si se trata de una estrategia de negociación intradiaria, debe utilizar la función de tiempo " TIME " cuando necesite cerrar la posición al final. Esta función está por encima del segundo ciclo y por debajo del ciclo del día, mostrada en forma de cuatro dígitos: HHMM (1450 - 14: 50). Nota: Usando la función TIME como condición para cerrar la posición al final de la sesión, se recomienda que las condiciones de la posición de apertura estén sujetas al límite de tiempo correspondiente. Como se muestra a continuación:
CLOSE>OPEN && TIME<1450,BK; //if it is a positive k-line and the time is less than 14:50, opening position.
TIME>=1450,CLOSEOUT; //if the time is beyond 14:50, closing all position.
Hay dos tipos de clasificación de modelos en el lenguaje M: modelo sin filtrar y modelo de filtrado. Esto se entiende muy bien: el modelo sin filtrar permite señales de apertura o cierre continuas, que se pueden usar para agregar y reducir posiciones. El modelo de filtrado no permite señales de apertura o cierre continuas, es decir, cuando aparece la señal de apertura, la siguiente señal de apertura se filtrará hasta que aparezca la señal de cierre. El orden del modelo sin filtrar es: posición abierta - posición cerrada - posición abierta - posición cerrada - posición abierta...
Lo anterior es el contenido del inicio rápido del lenguaje M, ahora puede programar su propia estrategia comercial ahora. Si necesita escribir una más compleja, puede consultar la documentación de la API de lenguaje M de la plataforma FMZ Quant, o consultar directamente al servicio oficial de atención al cliente para escribirlo para usted.
El trading intradiario es también un modo de trading popular. Este método no mantiene la posición durante la noche. Por lo tanto, está sujeto a un bajo riesgo de volatilidad del mercado. Una vez que ocurren condiciones desfavorables del mercado, se puede ajustar a tiempo.