[TOC]
El lenguaje My es un lenguaje de transacción de programación compatible y mejorado para Mac. El lenguaje My cuantificado por FMZ se somete a rigurosas revisiones gramaticales, por ejemplo, cuando se usa un refuerzo de lenguaje para incrustar código de lenguaje JavaScript en%%
El error se produce cuando el operador es seguido por más de un espacio.
Contratos de monedas digitales
Contratos de monedas digitales
this_week 数字货币期货当周合约
next_week 数字货币期货次周合约
month 数字货币期货月度合约
quarter 数字货币期货季度合约
next_quarter 数字货币期货次季度合约
third_quarter 数字货币期货第三季度合约
last_quarter 最后季度合约
XBTUSD BITMEX永续合约
swap 除BITMEX交易所以外数字货币期货永续合约
具体可以参看JavaScript/Python/C++文档的exchange.SetContractType()函数部分
Una variable es un espacio abierto en la memoria del ordenador para almacenar datos, o simplemente para guardarlos.
Abre la primera variable
// 将1赋值给变量a
a:=1;
existir麦语言
Desde el数据量
Las diferencias son simples:
0
、1
、’abc’
。Close
(Precio de cierre), aquíClose
Contienen
Precio de cierre de un ciclo[ 10.1 , 10.2 , 10.3 , 10.4 , 10. 5 ...]
Se distingue de las variantes de la variante de la variante de la variante
''
Los paquetes, los tipos de cadenas no se permiten para su uso directo, y requieren que las funciones de acompañamiento se produzcan en la vista.INFO(CLSOE>OPEN,'OK!');
// 整数
int:=2;
// 小数
float:=3.1;
A:=1>0;
El código se ejecutó y el usuario se encontró con un error.A
El valor de 1 ≠ 1.// 当前周期收盘价大于-999,你会发现,每个周期的返回值都是1,代表true,因为收盘价几乎不可能为负数
is_true:=Close>-999;
VARIABLE:VALUE1:10; // 声明一个全局变量,赋值为10,只执行一次。
La respuesta debe ser:
VARIABLE:NX:0; // 初始一个全局变量NX为0
NX..NX+1; // 每次累加1
INFO(1,NX); // 每次打印NX
El comienzoINFO
La frase está impresa en101
¿Qué es lo que está ocurriendo?0
¿Qué fue eso?
La razón es que la línea K inicial tenía 100 raíces en el momento de la retrotracción, y ya se han ejecutado 100 líneas K, acumulando 100 veces.
El disco duro depende de la cantidad de líneas K obtenidas inicialmente.
En la mayoría de los sistemas, la denominación de variables no permite el uso de casillas de sistema para reservar caracteres (nombre de variable incorporado, nombre de función).Close
、C
Además, no se permiten números puros o números iniciales. No se permiten finales muy largos, ya que los límites de longitud varían según el sistema.
De hecho, no tienes que preocuparte por la eficiencia de los sistemas dominantes en el procesamiento de la lengua china, y confía en que el lenguaje de Guami es muy amigable con el chino.
1. Nombre chino
// 优雅的输出
五日均线:=MA(C,5);
2. Inglés con el subíndice
// 输出
move_avg_5:=MA(C,5);
Si prefieres el inglés, haz que la gente entienda lo que quieres decir con tu variante.A1
,AAA
,BBB
… este tipo de denominación. Y confío en que cuando vuelvas a revisar tu código indicador después de un tiempo, estarás muy triste por la falta de memoria. Igualmente, cuando exportas el código a otros, la mentalidad de los lectores debe de ser un colapso.
Así que desde ahora, abraza el lenguaje de la harina de maíz con afecto, y que sea una herramienta poderosa para tu análisis y toma de decisiones.
El tipo de datos es un concepto básico, en la programación, cuando asignamos un valor de datos definido a una variable, esta también se convierte en el tipo de los datos mismos.
1、2、3、1.1234、2.23456 ...
'1' 、'2' 、'3' ,字符串类型必须用 '' 包裹
一系列单值数据构成的数据集合
Utilizado1
El representantetrue
,0
El representantefalse
。
Ejemplo
// 声明一个数值类型的变量
var_int := 1;
// 声明一个序列数据的变量
var_arr := Close;
// 字符串类型不能单独声明,需要结合函数
INFO(C>O, '阳线');
Los símbolos utilizados para ejecutar las operaciones y los cálculos de los códigos de indicadores son, en pocas palabras, los símbolos que participan en las operaciones.
Se utiliza para asignar un valor a una variable.
- 1. `:`
`:`, representa la asignación de valores y se exporta a la gráfica (subgráfica) <unk>.
```
Close1:Close; // 将Close赋值给变量Close1,并且输出到图中
```
- 2. `:=`
`:=`, representa la asignación de valores, pero no se exporta a los gráficos (gráfico principal, subgráfico...) y no se muestra en las tablas de estado.
```
Close2:=Close; // 将Close赋值给变量Close2
```
- 3. `^^`
`^^`¿Qué es eso?`^`El símbolo representa la asignación de un valor a una variable y es exportado a la gráfica (la gráfica principal).
```
lastPrice^^C;
```
- 4. `..`
`..`¿Qué es eso?`.`Los símbolos representan asignaciones, asignan valores a las variables y muestran el nombre y el valor de las variables en la tabla, pero no dibujan el gráfico en la tabla (gráfico principal, subgráfico, etc.).
```
openPrice..O
```
El operador de relación es un operador binario que se usa en las expresiones condicionales para determinar la relación entre dos datos.
Devuelve el valor: tipo Boole, notrue
(1) es decir,false
(0)。
- 1. Más que`>`
```
// 将2>1的运算结果赋值给rv1变量,此时rv1=1
rv1:=2>1;
```
- 2. Menos de`<`
```
// 返回false,也就是0,因为2大于1
rv3:=2<1;
```
- 3. Más grande es igual a`>=`
```
x:=Close;
// 将收盘价大于等于10的运算的结果赋值给变量rv2
// 注意,由于close是一个序列数据,当进行close>=10运算的时候,本质是每个周期都进行运算,所以每个周期都会有一个1、0的返回值
rv2:=Close>=10;
```
- 4. Menos es igual a`<=`
```
此处省略
```
- 5. igual`=`
```
A:=O=C; // 判断开盘价是不是等于收盘价。
```
- 6. No es igual a`<>`
```
1<>2 // 判断1是否不等于2,返回值为1(true)
```
Devuelve el valor: tipo Boole, notrue
(1) es decir,false
(0)。
1. La lógica y`&&`Se puede usar.`and`Por otra parte, la conexión debe ser simultánea con ambos lados de la conexión.
// 判断 cond_a,cond_b,cond_c 是否同时成立
cond_a:=2>1;
cond_b:=4>3;
cond_c:=6>5;
cond_a && cond_b and cond_c; // 返回值为1,成立
2. No es lógico.`||`Se puede usar.`or`La sustitución o enlace a la izquierda y a la izquierda, se establece en un lado como true, y se establece en su conjunto como true (devuelve el valor true).
cond_a:=1>2;
cond_b:=4>3;
cond_c:=5>6;
cond_a || cond_b or cond_c; // 返回值为1,成立
3. `()`El operador, calcula primero la expresión dentro de los paréntesis.
1>2 AND (2>3 OR 3<5) // 运算结果为假
1>2 AND 2>3 OR 3<5 // 运算结果为真
返回值:数值类型
El operador aritmético es el símbolo que se usa para completar las operaciones aritméticas básicas (operadores aritméticos), es decir, los símbolos utilizados para procesar las cuatro operaciones.
- **Más y más.**
```
A:=1+1; // 返回 2
```
- **Se ha reducido.**
```
A:=2-1; // 返回 1
```
- **¿Qué es esto?***
```
A:=2*2; // 返回 4
```
- **No lo sé.**
```
A:=4/2; // 返回 2
```
En el mundo de la programación, el código de la función de unidad es un fragmento de código que realiza una función determinada. Se puede utilizar para otras funciones, como:
function(param1,param2,...)
- Se compone de:
Nombre de la función ((párrafo 1, párrafo 2, ...), puede no tener ningún parámetro o tener varios parámetros. Por ejemplo:`MA(x,n);`El regreso de los delegados`n`Dentro del ciclo`x`La media móvil simple es la media móvil de las medias móviles simples.`MA()`Es una función.`x`y`n`Es el parámetro de la función.
Cuando usamos una función, necesitamos saber cuáles son las definiciones básicas de la función, es decir, qué datos se obtienen cuando se llama a la función. Por lo general, las funciones tienen parámetros, y cuando introducimos los parámetros, necesitamos asegurarnos de que el tipo de datos introducido es compatible.`MA(x,n);`La explicación es:
```
返回简单移动平均
用法:
AVG:=MA(X,N): X的N日简单移动平均,算法(X1+X2+X3+...+Xn)/N,N支持变量
```
Esto no es muy amigable para los principiantes. A continuación hacemos un análisis exhaustivo de las funciones, tratando de encontrar una manera de aprenderlas y usarlas rápidamente.
Para aprender las funciones rápidamente, primero necesitamos entender un concepto llamado “valor de retorno”.RegresóA pesar de su significado, es “volver”. Si el valor significa “valor numérico específico”, entonces el valor de retorno significa: los datos que se pueden obtener.
// 因为后面的代码中会用到,所以用变量 return_value 接收、保存 function()的返回值
// retrun_value := function(param1,param2);
// 例如:
AVG:=MA(C,10); // AVG即retrun_value,function函数即:MA函数,param1参数:C即收盘价序列数据,param2参数:10。
El segundo concepto importante de la función secundaria es el de los parámetros, ya que los diferentes parámetros que se transmiten pueden obtener diferentes valores de retorno.
// 变量ma5接收5日收盘价移动平均值
ma5:=MA(C,5);
// 变量ma10接收10日收盘价移动平均值
ma10:=MA(C,10);
Las variables mencionadasma5
、ma10
El primer parámetroX
AmbosC
(Precio de cierre), en realidadC
También es una función que retorna la secuencia de precios de cierre de la apertura hasta la fecha, pero no tiene ningún parámetro. El segundo parámetro es 5, 10 que se utiliza para indicarMA()
La función, la cual obtendremos como media móvil de los días de cierre, se vuelve más flexible con los parámetros.
MA(x,n)
, si no se sabe el parámetrox
、n
El tipo de datos que se utiliza para obtener el valor de la respuesta es el tipo de datos que se utiliza para obtener el valor de la respuesta.La introducción y el uso de las siguientes funciones se basan en los tres principios mencionados anteriormente.
麦语言
yJavaScript
Programación mixta de lenguajes %%
// 这里面可以调用发明者量化的任何API
scope.TEST = function(obj) {
return obj.val * 100;
}
%%
收盘价:C;
收盘价放大100倍:TEST(C);
上一个收盘价放大100倍:TEST(REF(C, 1)); // 鼠标移动到回测的K线上就会提示变量值
- `scope`Objeto
`scope`El objeto puede agregar una propiedad y asignar una función anónima a la propiedad, en la parte del código del lenguaje Mac que se puede llamar a la función anónima que hace referencia a esta propiedad.
- `scope.getRefs(obj)`función
existir`JavaScript`En el bloque de código, la llamada`scope.getRefs(obj)`La función devuelve la entrada`obj`Datos del objeto.
A continuación`%% %%`Envuelto en símbolos`JavaScript`En el código se obtiene el código de lenguaje de Mac`TEST(C)`Lo que se transmite cuando se llama a la función`C`El precio de cierre.
`scope.getRefs`La función devuelve todos los valores de cierre de esta línea K.`throw "stop"`Interrumpe el procedimiento.`arr`Sólo contiene el precio de cierre de la primera barra.`throw "stop"`Se ejecutará.`JavaScript`El último código.`return`, devuelve todos los datos de la recompra.
```
%%
scope.TEST = function(obj){
var arr = scope.getRefs(obj)
Log("arr:", arr)
throw "stop"
return
}
%%
TEST(C);
```
- scope.bars
existir`JavaScript`Acceso a todas las K-linesbars en el bloque de código.
`TEST`La función devuelve un valor: 1 es el sentido negativo y 0 es el sentido positivo.
```
%%
scope.TEST = function(){
var bars = scope.bars
return bars[bars.length - 1].Open > bars[bars.length - 1].Close ? 1 : 0 // 只能返回数值
}
%%
arr:TEST;
```
```
# 注意:
# TEST接收的匿名函数,返回值必须是数值。
# 如果匿名函数没有参数,在调用TEST的时候直接写VAR:=TEST;写VAR:=TEST();会报错。
# scope.TEST中的TEST必须是大写。
```
- scope.bar
existir`JavaScript`En el bloque de código, acceda a la barra actual.
Calcula el promedio de precios de cosecha altos y bajos.
```
%%
scope.TEST = function(){
var bar = scope.bar
var ret = (bar.Open + bar.Close + bar.High + bar.Low) / 4
return ret
}
%%
avg^^TEST;
```
- scope.depth
Acceso a datos de profundidad del mercado ((la orden es débil) <unk>
```
%%
scope.TEST = function(){
Log(scope.depth)
throw "stop" // 打印一次深度数据后就抛出异常,暂停
}
%%
TEST;
```
- scope.symbol
Obtenga la cadena de nombres de la pareja de operaciones actual.
```
%%
scope.TEST = function(){
Log(scope.symbol)
throw "stop"
}
%%
TEST;
```
- scope.barPos
Obtenga la posición de la línea K Bar.
```
%%
scope.TEST = function(){
Log(scope.barPos)
throw "stop"
}
%%
TEST;
```
- scope.get_locals('name')
Esta función se utiliza para obtener las variables en la parte del código de la lengua de programación Mac.
```
V:10;
%%
scope.TEST = function(obj){
return scope.get_locals('V')
}
%%
GET_V:TEST(C);
```
```
# 注意:
# 如果某个变量,由于周期不足的时候计算不出数据,这个时候在JavaScript代码中调用scope.get_locals函数
# 获取这个变量时,会报错:line:XX - undefined locals某个变量名undefined
```
- scope.canTrade
`canTrade`Si la marca de atributo es actualmente negociable (¿La barra actual es la última raíz?)
Por ejemplo, para determinar si la estrategia está en condiciones de negociar órdenes de imprimir datos de la situación
```
%%
scope.LOGTICKER = function() {
if(exchange.IO("status") && scope.canTrade){
var ticker = exchange.GetTicker();
if(ticker){
Log("ticker:", ticker);
return ticker.Last;
}
}
}
%%
LASTPRICE..LOGTICKER;
```
%%
scope.TEST = function(a){
if (a.val) {
throw "stop"
}
}
%%
O>C,BK;
C>O,SP;
TEST(ISLASTSP);
Una estrategia de suspensión después de abrir y cerrar una posición.
El sistema automáticamente selecciona un período de línea K de base adecuado y utiliza este período de línea K de base para sintetizar todos los datos de línea K referidos, asegurando la precisión de los datos.
#EXPORT 公式名 ... #END
Crear una fórmula. Si no se hace el cálculo de la fórmula solo para obtener datos de diferentes períodos, también se puede escribir una fórmula vacía.La fórmula vacía es:
#EXPORT TEST
NOP;
#END // 结束
#IMPORT [MIN,周期,公式名] AS 变量值
Cita la fórmula para obtener los datos de los períodos establecidos (precio de cierre, precio de apertura, etc., obtenidos a través de los valores de las variables) IMPORT
En la orden.MIN
¿Qué quiere decir?Grados por minuto◦ El inventor de la plataforma de cuantificación de la lengua MacIMPORT
Solo soportado en el comandoMIN
Nivel ◦ Ahora se admite el ciclo no estándar, por ejemplo,#IMPORT [MIN,240,TEST] AS VAR240
Importación de datos como el K-line en el período de 240 minutos (<= 4 horas).
Ejemplo de código:
// 本代码演示如何引用不同周期的公式在同一代码里
// #EXPORT扩展语法,以#END结束标记为一个公式,可以声明多个
#EXPORT TEST
均值1:EMA(C, 20);
均值2:EMA(C, 10);
#END // 结束
#IMPORT [MIN,15,TEST] AS VAR15 // 引用公式,K线周期用15分钟
#IMPORT [MIN,30,TEST] AS VAR30 // 引用公式,K线周期用30分钟
CROSSUP(VAR15.均值1, VAR30.均值1),BPK;
CROSSDOWN(VAR15.均值2, VAR30.均值2),SPK;
十五分最高价:VAR15.HIGH;
三十分最高价:VAR30.HIGH;
AUTOFILTER;
REF
、LLV
、HHV
Las instrucciones de referencia de datos son necesarias (*backtest
start: 2021-08-05 00:00:00
end: 2021-08-05 00:15:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_OKCoin","currency":"ETH_USD"}]
args: [["TradeAmount",100,126961],["ContractType","swap",126961]]
*)
%%
scope.PRINTTIME = function() {
var bars = scope.bars;
return _D(bars[bars.length - 1].Time);
}
%%
BARTIME:PRINTTIME;
#EXPORT TEST
REF1C:REF(C,1);
REF1L:REF(L,1);
#END // 结束
#IMPORT [MIN,5,TEST] AS MIN5
INFO(1, 'C:', C, 'MIN5.REF1C:', MIN5.REF1C, 'REF(MIN5.C, 1):', REF(MIN5.C, 1), '触发BAR时间:', BARTIME, '#FF0000');
INFO(1, 'L:', L, 'MIN5.REF1L:', MIN5.REF1L, 'REF(MIN5.L, 1):', REF(MIN5.L, 1), '触发BAR时间:', BARTIME, '#32CD32');
AUTOFILTER;
ComparaciónMIN5.REF1C
yREF(MIN5.C, 1)
Las diferencias se pueden ver en:
MIN5.REF1C
Es el valor de cierre de la segunda BAR invertida en el momento actual de los datos de la línea K de 5 minutos.
REF(MIN5.C, 1)
Es el ciclo de línea K del modelo actual. El ciclo de retroalimentación del código anterior se establece en 1 minuto, es decir,period: 1m
), el precio de cierre de un ciclo de 5 minutos en el que el segundo BAR invertido en el momento actual.
Las dos definiciones son diferentes y se pueden usar según sea necesario.
En el modelo se escribeAUTOFILTER
La función controla y realiza un filtro de señal de apertura uniforme. Cuando se cumplen las condiciones de varias señales de apertura, se toma la primera señal como señal válida, y la misma señal en la línea k posterior se filtra.
Las instrucciones soportadas por el modelo de filtrado son: BK, BP, BPK, SK, SP, SPK, CLOSEOUT, no soportan instrucciones con números de reloj como BK ((5)).
Por ejemplo:
MA1:MA(CLOSE,5);
MA2:MA(CLOSE,10);
CROSSUP(C,MA1),BK;
CROSSUP(MA1,MA2),BK;
C>BKPRICE+10||C<BKPRICE-5,SP;
AUTOFILTER;
理解:
如上范例,没有设置 AUTOFILTER 时,第三行BK 和第四行BK 第五行SP,依次触发,每根K线触发一次信号。开仓后,再到平仓,即重置模型状态。
如果设置 AUTOFILTER , 触发BK后,只能触发SP,其它的BK 信号被忽略,每根K线触发一次信号。
No incluido en el modeloAUTOFILTER
Función que permite una serie de señales de apertura de posición o una serie de señales de salida de posición baja, que permite aumentar o disminuir la posición.
Las instrucciones soportadas son: BK (N), BP (N), SK (N), SP (N), CLOSEOUT (BPK (N), SP (N) y no soportan instrucciones de apertura de posición sin el número de orden. (1) Apoyo a la agrupación de instrucciones. (2) Cuando se cumplen varias condiciones de la instrucción al mismo tiempo, la señal se ejecuta en el orden anterior y posterior escrito en la declaración de la condición. Por ejemplo:
MA1:MA(CLOSE,5);
MA2:MA(CLOSE,10);
CROSSUP(C,MA1),BK(1);
CROSSUP(MA1,MA2),BK(1);
C>BKPRICE+10||C<BKPRICE-5,SP(BKVOL);
usarTRADE\_AGAIN
Se puede hacer que la misma instrucción emita varias señales consecutivas.
理解:
以上例子,逐个信号执行,执行后的信号不再触发。平仓后重置模型状态。一个K线触发一次信号。
Independientemente de si la línea k se ha agotado, se calcula la señal para realizar un pedido en tiempo real, es decir, la línea K no ha agotado el pedido anterior; La revisión al final de la línea K, si la dirección de la posición no coincide con la dirección de la señal al final de la línea k, la posición se sincronizará automáticamente.
Por ejemplo:
MA1:MA(CLOSE,5);
MA2:MA(CLOSE,10);
CROSSUP(MA1,MA2),BPK; // 5周期均线上穿10周期均线做多。
CROSSDOWN(MA1,MA2),SPK; // 5周期均线下穿10周期均线做空。
AUTOFILTER;
Modelo mediante el uso demultsig
Para el control y la realización de una K-linea de salida de múltiples señales.
La orden se realiza en tiempo real, independientemente de si la línea k se agota o no.
La dirección de la señal siempre coincide con la dirección de la posición.
Una línea K puede ejecutarse repetidamente si se cumplen varias condiciones de señal.
例如:
MA1:MA(CLOSE,5);
MA2:MA(CLOSE,10);
CROSSUP(MA1,MA2),BK;
C>BKPRICE+10||C<BKPRICE-5,SP;
AUTOFILTER;
MULTSIG(0,0,2,0);
MULTSIG
Se pueden ejecutar varias instrucciones diferentes en una línea K.
Una línea de comandos sólo emite una señal.
O<C,BK; // 这些条件在一个K线Bar内,可能都执行,但是每行只出一次信号
10+O<C,BK; // 策略加上TRADE_AGAIN(10);可以使每行出多次信号
20+O<C,BK;
40+O<C,BK;
MULTSIG(1,1,10);
Y añade:
1 , el modelo de subida y bajada de la posición, dos formas de una señal de la línea k: la orden de cierre y la orden de precio de la instrucción, son compatibles.
El modelo de acumulación y reducción de almacenamiento, también soporta una línea k de múltiples órdenes de señales.
El modelo de acumulación y descomposición, por ejemplo.multsig
La función, que se realiza en una línea k varias veces de aumento de la carga, o varias veces de disminución de la carga.
El modelo de precio de cierre se ejecuta al final del BAR actual, ejecutando la operación cuando comienza el BAR subyacente.
El modelo de precios en tiempo real se refiere a que se ejecuta un modelo cada vez que el precio cambia, y se negocia inmediatamente cuando hay una señal. Los modelos de precios en tiempo real ignoran las señales del día anterior (las señales del día anterior se ejecutan inmediatamente el día anterior), los modelos de precios en tiempo real solo miran los datos de la situación actual para determinar si se activa la señal.
Utiliza el operador
^^
, Al asignar un valor a una variable, el indicador de configuración se muestra en el gráfico principal.
MA60^^MA(C, 60); // 计算参数为60的均线指标
Utiliza el operador:
Los indicadores de configuración se muestran en el subdiagrama mientras se asigna un valor a la variable.
ATR:MA(MAX(MAX((HIGH-LOW),ABS(REF(CLOSE,1)-HIGH)),ABS(REF(CLOSE,1)-LOW)),26); // 给ATR变量赋值,":"符号后为计算ATR的公式
Si no desea que se muestre en el gráfico principal o en el gráfico secundario, utilice el operador “..”.
MA60..MA(C, 60); // 计算参数为60的均线指标
Se puede usarDOT
、COLORRED
La configuración de la línea, el tipo de línea, el color, etc., se ajusta a los hábitos de los usuarios familiarizados con el lenguaje Mac.
Introducción a los problemas que se encuentran comúnmente en la redacción de los indicadoresLas preguntasPor lo general, los puntos a tener en cuenta cuando se escribe son: (continúa complementando)
Cuidado con las puntuaciones;
El final.
Tenga en cuenta que las palabras clave del sistema no pueden ser declaradas como variables.
Cuidado con el uso de cadenasNúmero de comillas,Por ejemplo:'开仓'
Esta es la secuencia de caracteres.
Las notas
- `// 注释内容`(Entrada en inglés en el modo de entrada), que significa que el código no se compila durante la ejecución, es decir, no se ejecuta`//`El siguiente contenido, que generalmente usamos para marcar el significado del código, puede ser fácilmente entendido y recordado cuando se revisa el código.
- `{ 注释内容 }`Las notas.
```
A:=MA(C,10);
{上一行代码是计算均线。}
```
- `(* 注释内容 *)`Las notas.
```
A:=MA(C,10);
(*上一行代码是计算均线。*)
```
Cuando se escribe el código, a menudo se producen errores de símbolo debido a la conmutación entre el inglés y el inglés en la forma de entrada. Los más comunes son los siguientes::
El final.;
Comillas,
En paréntesis()
Por ejemplo, los diferentes caracteres en el estado chino-inglés requieren atención.
Si utilizas Google, Baidu o Bing, puedes hacer clic en el botón de la tecla de inicio de la aplicación.
shift
La clave para cambiar rápidamente de chino a inglés.
>=
。<=
。En la estrategia de futuros, si antes del inicio del robot de la estrategia, se abren manualmente posiciones en posiciones mantenidas, el robot detecta la información de la posición cuando se inicia y se sincroniza con el estado real de la posición.
Se puede usar en la estrategia.SP
, BP
,CLOSEOUT
Se ordenó el cese de las operaciones.
%%
if (!scope.init) {
var ticker = exchange.GetTicker();
exchange.Buy(ticker.Sell+10, 1);
scope.init = true;
}
%%
C>0, CLOSEOUT;
El lenguaje Mac no soporta el mismo contrato y al mismo tiempo tiene varias posiciones vacías.
El precio de apertura para obtener un gráfico de línea K.
Precio de apertura
Función: OPEN, abreviado O
Parámetros: Ninguno
Explicación: Regresa al precio de apertura del ciclo
Datos de la secuencia
OPEN取得K线图的开盘价。
注:
1、可简写为O。
例1:
OO:=O; //定义OO为开盘价;注意O与0的区别。
例2:
NN:=BARSLAST(DATE<>REF(DATE,1));
OO:=REF(O,NN); //取的当日的开盘价
例3:
MA5:=MA(O,5); //定义开盘价的5周期均线(O为OPEN简写)。
El precio más alto para obtener un mapa de K.
El precio más alto
Función: HIGH, abreviado H
Parámetros: Ninguno
Explicación: Vuelve al precio más alto del ciclo
Datos de la secuencia
HIGH取得K线图的最高价。
注:
1、可简写为H。
例1:
HH:=H; // 定义HH为最高价
例2:
HH:=HHV(H,5); // 取的5个周期内最高价的最大值
例3:
REF(H,1); // 取的前一根K线的最高价
El precio mínimo para obtener un mapa de K.
El precio más bajo
Función: LOW, abreviado como L
Parámetros: Ninguno
Explicación: Regresar al precio más bajo del ciclo
Datos de la secuencia
LOW取得K线图的最低价。
注:
1、可简写为L。
例1:
LL:=L; // 定义LL为最低价
例2:
LL:=LLV(L,5); // 取得5个周期内最低价的最小值
例3:
REF(L,1); // 取得前一根K线的最低价
Obtener el precio de cierre de la gráfica K.
Precio de cierre
Función: CLOSE, abreviado C
Parámetros: Ninguno
Explicación: Regreso al cierre del ciclo
Datos de la secuencia
CLOSE取得K线图的收盘价
注:
1、当盘中k线没有走完的时候,取得最新价。
2、可简写为C。
例1:
A:=CLOSE; //定义变量A为收盘价(盘中k线没有走完的时候A为最新价)
例2:
MA5:=MA(C,5); //定义收盘价的5周期均线(C为CLOSE简写)
例3:
A:=REF(C,1); //取得前一根k线的收盘价
Obtener el volumen de transacciones de la gráfica K.
Cantidad entregada
Función: VOL, abreviado V
Parámetros: Ninguno
Explicación: Volver a la cantidad de transacciones en “el ciclo”
Datos de la secuencia
VOL取得K线图的成交量。
注:
可简写为V。
该函数在当根TICK上的返回值为当天所有TICK成交量的累计值。
例1:
VV:=V; // 定义VV为成交量
例2:
REF(V,1); // 表示前一个周期的成交量
例3:
V>=REF(V,1); // 成交量大于前一个周期的成交量,表示成交量增加(V为VOL的简写)
Tomar el total de las posiciones en el mercado de futuros (contratos) en el momento.
OpenInterest:OPI;
Se refiere a:
引用X在N个周期前的值。
注:
1、当N为有效值,但当前的k线数不足N根,返回空值;
2、N为0时返回当前X值;
3、N为空值时返回空值。
4、N可以为变量
例1:
REF(CLOSE,5);表示引用当前周期前第5个周期的收盘价
例2:
AA:=IFELSE(BARSBK>=1,REF(C,BARSBK),C);//取最近一次买开仓信号K线的收盘价
// 1)发出BK信号的当根k线BARSBK返回空值,则发出BK信号的当根k线REF(C,BARSBK)返回
空值;
// 2)发出BK信号的当根k线BARSBK返回空值,不满足BARSBK>=1,则当根k线的收盘价。
// 3)发出BK信号之后的k线BARSBK返回买开仓的K线距离当前K线的周期数,REF(C,BARSBK)
返回开仓k线的收盘价。
// 4)例:1、2、3 三根k线,1 K线为开仓信号的当根k线,则返回当根k线的收盘价,2、3
K线返回 1 K线的收盘价。
Unidad de negociación de un contrato de datos.
取数据合约的交易单位。
用法:
UNIT 取加载数据合约的交易单位。
Dinero digital en efectivo
El valor de UNIT es 1.
Futuros de criptomonedas
El valor de la UNIT está relacionado con la moneda del contrato.
OKEX期货币本位合约:BTC合约1张代表100美元,其它币种的1张合约代表10美元
El precio mínimo de variación del contrato de datos.
取数据合约的最小变动价位。
用法:
MINPRICE; 取加载数据合约的最小变动价位。
El precio mínimo de variación del contrato de negociación.
取交易合约的最小变动价位。
用法:
MINPRICE1; 取交易合约的最小变动价位。
Toma la posición de la línea K.
BARPOS,返回从第一根K线开始到当前的周期数。
注:
1、BARPOS返回本地已有的K线根数,从本机上存在的数据开始算起。
2、本机已有的第一根K线上返回值为1。
例1:LLV(L,BARPOS); // 求本地已有数据的最小值。
例2:IFELSE(BARPOS=1,H,0); // 当前K线是本机已有的第一根K线取最高值,否则取0。
DAYBARPOS como raíz K BAR es la raíz número K del día BAR。
El valor de ciclo es el número de minutos.
1, 3, 5, 15, 30, 60, 1440
La fechaLa función DATE, obtiene la fecha del año desde 1900 en el ciclo.
例1:
AA..DATE; // 测试时AA的值为220218,表示2022年2月18日
Es hora de tomar la línea K.
TIME,取K线时间。
注:
1、该函数在盘中实时返回,在K线走完后返回K线的起始时间。
2、该函数返回的是交易所数据接收时间,也就是交易所时间。
3、TIME函数在秒周期使用时返回六位数的形式,即:HHMMSS,在其他周期上显示为四位数的形式,即:HHMM.
4、TIME函数只能加载在日周期以下的周期中,在日周期及日周期以上的周期中该函数返回值始终为1500。
5、使用TIME函数进行尾盘平仓的操作需要注意
(1)尾盘平仓设置的时间建议设置为K线返回值中实际可以取到的时间(如:螺纹指数 5分钟周期 最后一根K线返回时间为1455,尾盘平仓设置为TIME>=1458,CLOSEOUT;则效果测试中不能出现尾盘平仓的信号)
(2)使用TIME函数作为尾盘平仓的条件的,建议开仓条件也要做相应的时间限制(如设置尾盘平仓条件为TIME>=1458,CLOSEOUT;则相应的开仓条件中需要添加条件TIME<1458;避免平仓后再次开仓的情况)
例1:
C>O&&TIME<1450,BK;
C<O&&TIME<1450,SK;
TIME>=1450,SP;
TIME>=1450,BP;
AUTOFILTER;
// 在14:50后平仓。
例2:
ISLASTSK=0&&C>O&&TIME>=0915,SK;
El año.
YEAR,取得年份。
注:
YEAR的取值范围为1970—2033。
例1:
N:=BARSLAST(YEAR<>REF(YEAR,1))+1;
HH:=REF(HHV(H,N),N);
LL:=REF(LLV(L,N),N);
OO:=REF(VALUEWHEN(N=1,O),N);
CC:=REF(C,N); // 取上一年的最高价,最低价,开盘价,收盘价
例2:
NN:=IFELSE(YEAR>=2000 AND MONTH>=1,0,1);
El mes.
MONTH,返回某个周期的月份。
注:
MONTH的取值范围为1—12.
例1:
VALUEWHEN(MONTH=3&&DAY=1,C); // 在K线日期为三月一日时取其收盘价
例2:
C>=VALUEWHEN(MONTH<REF(MONTH,1),O),SP;
Número de días de un ciclo
DAY,返回某一周期的日数。
注:
DAY取值范围为1-31。
例1:
DAY=3&&TIME=0915,BK; // 当日起为3日,时间为9点15分时,买开
例2:
N:=BARSLAST(DATE<>REF(DATE,1))+1;
CC:=IFELSE(DAY=1,VALUEWHEN(N=1,O),0); // 当日期为1时,取开盘价,否则取值为0
Las horas.
HOUR,返回某周期的小时数。
注:
HOUR的取值范围为0—23
例1:
HOUR=10; // 在10:00的K线上返回值为1,其余K线上返回值为0
Minutos después.
MINUTE,返回某个周期的分钟数。
注:
1:MINUTE的取值范围为0—59
2:该函数只能加载在分钟周期上,返回当根K线开始的分钟数。
例1:
MINUTE=0; // 在整点时刻的分钟K线上返回值为1,其余K线返回值为0
例2:
TIME>1400&&MINUTE=50,SP; // 在14:50的时候卖平仓
Número de semanas
WEEKDAY,取得星期数。
注:
1:WEEKDAY的取值范围是0—6。(星期日 ~ 星期六)
例1:
N:=BARSLAST(MONTH<>REF(MONTH,1))+1;
COUNT(WEEKDAY=5,N)=3&&TIME>=1450,BP;
COUNT(WEEKDAY=5,N)=3&&TIME>=1450,SP;
AUTOFILTER; // 每个月交割日尾盘自动平仓
例2:
C>VALUEWHEN(WEEKDAY<REF(WEEKDAY,1),O)+10,BK;
AUTOFILTER;
Regresa al estado de posición del ciclo actual.
BARSTATUS 返回当前周期的位置状态。
注:
该函数返回1表示当前周期是第一个周期,返回2表示是最后一个周期,返回0表示当前周期处于中间位置。
例:
A:=IFELSE(BARSTATUS=1,H,0); // 如果当前K线是第一个周期,变量A返回K线最高值,否则取0
¿Qué es lo que está sucediendo?
BETWEEN(X,Y,Z) 表示X是否处于Y和Z之间,成立返回1(Yes),否则返回0(No)。
注:
1、其中若X=Y、X=Z、或X=Y且Y=Z时函数返回值为1(Yse)。
例1:
BETWEEN(CLOSE,MA5,MA10); // 表示收盘价介于5日均线与10日均线之间
BARSLASTCOUNT ((COND) Cálculo hacia adelante desde el ciclo actual, para calcular el número de ciclos consecutivos que cumplen con la condición.
注:
1、返回值为从当前周期计算COND连续不为0的周期数
2、条件第一次成立的当根k线上BARSLASTCOUNT(COND)的返回值为1
例:
BARSLASTCOUNT(CLOSE>OPEN);
//计算当根K线在内连续为阳线的周期数
La función de cruzamiento ≠
CROSS(A,B) 表示A从下方向上穿过B,成立返回1(Yes),否则返回0(No)
注:
1、满足穿越的条件必须上根k线满足A<=B,当根k线满足A>B才被认定为穿越。
例1:
CROSS(CLOSE,MA(CLOSE,5)); // 表示收盘线从下方向上穿过5周期均线
Cruzar hacia abajo
CROSSDOWN(A,B):表示当A从上方向下穿B,成立返回1(Yes),否则返回0(No)
注:
1、CROSSDOWN(A,B)等同于CROSS(B,A),CROSSDOWN(A,B)编写更利于理解
例1:
MA5:=MA(C,5);
MA10:=MA(C,10);
CROSSDOWN(MA5,MA10),SK; // MA5下穿MA10卖开仓
// CROSSDOWN(MA5,MA10),SK;与CROSSDOWN(MA5,MA10)=1,SK;表达同等意义
El camino hacia arriba.
CROSSUP(A,B)表当A从下方向上穿过B,成立返回1(Yes),否则返回0(No)
注:
1、CROSSUP(A,B)等同于CROSS(A,B),CROSSUP(A,B)编写更利于理解。
例1:
MA5:=MA(C,5);
MA10:=MA(C,10);
CROSSUP(MA5,MA10),BK; // MA5上穿MA10,买开仓
// CROSSUP(MA5,MA10),BK;与CROSSUP(MA5,MA10)=1,BK;表达同等意义
El proceso de evaluación de la satisfacción continua.
EVERY(COND,N),判断N周期内是否一直满足COND条件。若满足函数返回值为1,不满足函数返回值为0。
注:
1、N包含当前k线。
2、若N是有效数值,但前面没有那么多K线,或者N为空值,代表条件不满足,函数返回值为0。
3、N可以是变量。
例1:
EVERY(CLOSE>OPEN,5); // 表示5个周期内一直是阳线
例2:
MA5:=MA(C,5); // 定义5周期均线
MA10:=MA(C,10); // 定义10周期均线
EVERY(MA5>MA10,4),BK; // 4个周期内MA5都大于MA10,则买开仓
// EVERY(MA5>MA10,4),BK;与EVERY(MA5>MA10,4)=1,BK;表达同等意义
Para determinar si hay satisfacción.
EXIST(COND,N)判断N个周期内是否有满足COND的条件。
注:
1、N包含当前k线。
2、N可以是变量。
3、若N是有效数值,但前面没有那么多K线,按实际周期数计算。
例1:
EXIST(CLOSE>REF(HIGH,1),10); // 表示10个周期中是否存在收盘价大于前一个周期的最高价,存在返回1,不存在则返回0
例2:
N:=BARSLAST(DATE<>REF(DATE,1))+1;
EXIST(C>MA(C,5),N); // 表示当天是否有满足收盘价大于5周期均线的k线,存在返回1,不存在返回0
Función condicional
IF(COND,A,B)若COND条件成立,则返回A,否则返回B。
注:
1、COND是判断条件;A、B可以是条件,也可以是数值。
2、该函数支持变量循环引用前一周期自身变量,即支持下面这样的写法Y:IF(CON,X,REF(Y,1))。
例1:
IF(ISUP,H,L); // k线为阳线,取最高价,否则取最低价
例2:
A:=IF(MA5>MA10,CROSS(DIFF,DEA),IF(CROSS(D,K),2,0)); // 当MA5>MA10时,取是否满足DIFF上穿DEA,否则(MA5不大于MA10),当K,D死叉时,令A赋值为2,若上述条件都不满足,A赋值为0
A=1,BPK; // 当MA5>MA10,以DIFF上穿DEA作为开多仓条件
A=2,SPK; // 当MA5不大于MA10,以K、D死叉作为开空仓条件
Función condicional
IFELSE(COND,A,B) 若COND条件成立,则返回A,否则返回B。
注:
1、COND是判断条件;A、B可以是条件,也可以是数值。
2、该函数支持变量循环引用前一周期自身变量,即支持下面这样的写法Y: IFELSE(CON,X,REF(Y,1));
例1:
IFELSE(ISUP,H,L); // k线为阳线,取最高价,否则取最低价
例2:
A:=IFELSE(MA5>MA10,CROSS(DIFF,DEA),IFELSE(CROSS(D,K),2,0)); // 当MA5>MA10时,取是否满足DIFF上穿DEA,否则(MA5不大于MA10),当K,D死叉时,令A赋值为2,若上述条件都不满足,A赋值为0
A=1,BPK; // 当MA5>MA10,以DIFF上穿DEA作为开多仓条件
A=2,SPK; // 当MA5不大于MA10,以K、D死叉作为开空仓条件
Si se trata de un contrato designado.
ISCONTRACT(CODE)当前是否为指定的合约。
用法:ISCONTRACT(CODE);是当前合约返回1,不是当前合约返回0。
注:
1、判断是否为指定合约时,CODE可以为合约的交易代码。
例:
ISCONTRACT('this_week'); // 数字货币OKEX期货合约
ISCONTRACT('XBTUSD'); // 数字货币BITMEX期货合约
Apoyo a las expresiones regulares.
El juicio del contrato
ISCONTRACT('this_week'); // 判断当前合约是否为OKEX期货 this_week(当周)合约
Juzga el nombre de la bolsa
ISCONTRACT('@Futures_(Binance|FTX)'); // 判断当前交易所对象是否为Binance期货或者FTX期货
ISCONTRACT('@(OKEX|Bitfinex)'); // 判断交易所,需要在开头加@字符
¿Qué es lo que está sucediendo?
ISDOWN判断该周期是否收阴。
注:
1、ISDOWN等同于C<O
例:
ISDOWN=1&&C<REF(C,1),SK; // 当根k线收阴并且收盘价小于前一周期收盘价,则开空
// ISDOWN=1&&C<REF(C,1),SK;与ISDOWN&&C<REF(C,1),SK; 表达同等意义
¿Qué es un disco?
ISEQUAL判断该周期是否平盘。
注:
1、ISEQUAL等同于C=O
例1:
EVERY(ISEQUAL=1,2),CLOSEOUT; // 持续2根k线都是平盘,则全平
Determine si el ciclo es la última línea K ≠
ISLASTBAR判断该周期是否为最后一根k线。
例1:
VALUEWHEN(ISLASTBAR=1,REF(H,1)); // 当前k线是最后一根k线,则取前一周期的最高价
El juicio es nulo.
ISNULL判断空值。
用法:ISNULL(N);如果N为空值,函数返回1;如果N为非空值,函数返回0。
例:MA5:=IFELSE(ISNULL(MA(C,5))=1,C,MA(C,5)); // 定义五周期均线,K线数量不足五根时,返回当根K线的收盘价
La luz del sol.
ISUP判断该周期是否收阳。
注:
1、ISUP等同于C>O。
例:
ISUP=1&&C>REF(C,1),BK; // 若当根k线收阳并且收盘价大于前一周期收盘价,则开多
// ISUP=1&&C>REF(C,1),BK; 与 ISUP&&C>REF(C,1),BK
// 表达同等意义
Funciones de juicio.
LAST(COND,N1,N2)判断过去N1到N2周期内,是否一直满足COND条件。
注:
1、若N1与N2只相差一个周期(如N1=3,N2=2),则函数判断距离当前K线最近的那个周期上是否满足条件(即判断过去N2个周期的那根K线上是否满足条件)。
2、当N1/N2为有效值,但当前的k线数不足N1/N2根,或者N1/N2空值的情况下,代表不成立,该函数返回0。
3、N1、N2不可以是变量。
例1:
LAST(CLOSE>OPEN,10,5); // 表示从过去第10个周期到第5个周期内一直是阳线
例2:
MA5:=MA(C,5);
LAST(C>MA5,4,3); // 判断距离当前k线3个周期的那根k线上是否满足C大于MA5
Mantenimiento de la función de cruzamiento.
LONGCROSS(A,B,N)表示A在N个周期内都小于B,本周期A从下向上穿越B。
注:
1、当N为有效值,但当前的k线数不足N根时,LONGCROSS函数返回空值。
2、N不支持变量。
例1:
LONGCROSS(CLOSE,MA(CLOSE,10),20); // 表示收盘线在10日均线之下持续20周期后从下向上穿过10日均线
No es así.
NOT(X):取非。当X=0时返回1,否则返回0。
例1:
NOT(ISLASTBK);如果上一个信号不是BK信号,则NOT(ISLASTBK)返回值为1;上一个信号是BK信号,则NOT(ISLASTBK)返回值为0。
例2:
NOT(BARSBK>=1)=1; // BK信号发出的当根K线上满足条件
// NOT(BARSBK>=1)=1与NOT(BARSBK>=1)表达同等意义
Regresa a cero.
返回空值
用法:
MA5:=MA(C,5);
MA10:=MA(C,10);
A:=IFELSE(MA5>MA10,MA5,NULL),COLORRED; // 当MA5>MA10时,画五日均线MA5,不满足MA5>MA10时,返回空值,不画线
¿Qué es el valor?
”` VALUEWHEN(COND,X)当COND条件成立时,取X的当前值。如COND条件不成立,则取上一次COND条件成立时X的值。
注: X可以是数值也可以是条件。
例1 VALUEWHEN(HIGH>REF(HHV(HIGH,5),1),HIGH); // 表示当前最高价大于前五个周期最高价的最大值时返回当前最高价 例2: VALUEWHEN(DATE<>REF(DATE,1),O); // 表示取当天第一根k线的开盘价(即当