Red de conocimiento de divisas - Preguntas y respuestas sobre Forex - El nuevo compilador OnCalculate, lo escribí así, ¿entiendes?

El nuevo compilador OnCalculate, lo escribí así, ¿entiendes?

OnCalculate

La función OnCalculate() solo se llama en indicadores personalizados y es necesario calcular el valor del indicador. Suele ocurrir cuando se recibe un nuevo número de orden para el símbolo para el cual se calcula el índice. No es necesario adjuntar el indicador al gráfico de precios del símbolo.

El valor de retorno de la función OnCalculate() es int. Hay dos definiciones posibles. No puede haber dos versiones de funciones en un indicador.

Uno es un índice utilizado para cálculos en un único búfer de datos. Por ejemplo, un indicador de media móvil personalizado.

int on calcular(const int rate_total, //El tamaño de la matriz precio[].

Const int prev_calculated, //La columna procesada por la última llamada.

Const int start, //Datos válidos posición inicial

const double & amp precio[] //Matriz de cálculo

);

En precio Se pueden transferir [] matrices, series temporales y algunos búferes de índice calculados. La función ArrayGetAsSeries() determina la dirección del índice de la matriz price[]. Para no depender de los valores predeterminados, debe llamar incondicionalmente a la función ArraySetAsSeries() para la matriz de trabajo.

En la matriz precio[], seleccione la serie temporal o el indicador apropiado cuando se lance el indicador en la pestaña Parámetros. Por lo tanto, debe especificar los elementos necesarios en la lista desplegable del campo "Aplicar a".

Seleccionar series temporales para calcular indicadores

Para recibir valores de indicadores personalizados de otros programas mql5, debe utilizar la función iCustom() para volver al controlador de indicadores integrado. Puede especificar la matriz de precio[] adecuada u otro controlador de indicador. Este parámetro finalmente se transfiere a la lista de variables de entrada del indicador personalizado.

Ejemplo:

void OnStart()

{

// -

cadena TERMINAL _ PATH = TERMINAL info string(STATUS _ TERMINAL _ PATH);

int handle _ customMA = iCustom(Symbol(), PERIOD_CURRENT, "Promedio móvil personalizado", 13, 0, MODE_EMA, PRICE _ TYPICAL

if(handle_customMA>0)

Imprimir("handle_customMA = ",handle_customMA);

Otro

Imprimir("No se puede abrir o no no es un archivo EX5' "+terminal _ path+" \ \ MQL5 \ \ Indicators \ \ "+" Media móvil personalizada EX5 ' ");

}

En este ejemplo, el último parámetro pasado es el valor PRICE_TYPICAL (a partir del recuento ENUM_APPLIED_PRICE), lo que significa que se puede establecer un indicador personalizado utilizando el precio típico obtenido (precio alto + precio bajo + cierre)/3. Si no se determina este parámetro, el indicador se establece en base al valor de PRICE_CLOSE, como por ejemplo el precio de cierre de cada columna.

Otro ejemplo muestra cómo pasar un controlador de indicador basado en el último parámetro de la matriz price[] especificada, que se describe mediante la función iCustom().

Otro formulario está diseñado para calcular más series temporales para todos los demás indicadores.

int oncalcular(const int rate_total, //Ingrese el tamaño de la serie temporal.

Const int prev_calculated, //La columna procesada por la última llamada.

Fecha, hora y hora constantes. Time[], //Time

const double & ampOpen[], //Precio de apertura

const double & ampHigh[], //Precio más alto

const double & amp low[], //precio más bajo

const double & amp close[], //precio de cierre

const long & ampTick_volume[], //volumen de transacción de pedido

const long & amp volumen[], //volumen de operaciones real

const int & ampexpand[] //expandir

);

p >

Los parámetros precio de apertura [], precio más alto [], precio más bajo [] y precio de cierre [] se componen de la matriz de precio de apertura, precio más alto, precio más bajo y precio de cierre de la tabla detallada actual. El parámetro de tiempo[] contiene una matriz con el valor de la hora de inicio y el parámetro de extensión[] tiene una matriz que incluye el historial de extensiones (si se proporcionan extensiones para la seguridad de la transacción). Los parámetros volume[] y tick_volume[] incluyen el historial de transacciones y volumen respectivamente.

Determine el momento [], el precio de apertura [], el precio más alto [], el precio más bajo [], el precio de cierre [], el volumen de operaciones [], el volumen de operaciones [], el aumento [], la dirección del indicador Es necesario llamar a la función ArrayGetAsSeries(). Si no desea confiar en el valor predeterminado, debe llamar incondicionalmente a la función ArraySetAsSeries() de la matriz de trabajo.

En primer lugar, el parámetro rate_total incluye el número de columnas que se pueden utilizar para calcular el indicador, de forma coherente con el número de columnas existente en el gráfico.

Preste atención a la conexión entre el valor de retorno de OnCalculate() y el segundo parámetro de entrada prev_calculated. Al llamar a la función, el parámetro prev_calculated incluye el valor devuelto por OnCalculate() en la última llamada. Esto permite calcular índices definidos por el usuario mediante algoritmos económicos y evita el doble conteo.

Es suficiente devolver el valor del parámetro rate_total, incluido el número de columnas de la función actualmente llamada. Si los datos del precio han cambiado desde la última llamada a la función OnCalculate() (descargando el historial de profundidad o llenando los vacíos del historial), el terminal establece el valor del parámetro de entrada prev_calculated en cero.

Nota: Si OnCalculate devuelve cero, el valor del indicador no se puede mostrar en la ventana de datos del cliente.

Para una mejor comprensión, es útil iniciar el indicador utilizando el siguiente código.

Ejemplo de indicador:

#Atributo indicador_chart_window

#Atributo indicador_buffer 1

#Indicador inmobiliario _Plot 1

//-La línea del gráfico

# Indicador de propiedad _label1 "línea"

# indicador de propiedad _ tipo 1 DIBUJO _ LÍNEA

# indicador de propiedad _ color 1 clr azul oscuro

#Indicador de propiedad _ ESTILO 1 ESTILO _ SOLIDO

# Indicador de propiedad_ancho1 1

//-Búfer de indicador

Búfer de doble línea[];

//+ - +

//|Función de inicialización del indicador definido por el usuario |

//+ - +

int OnInit()

{

//- Dibujo del buffer del indicador

SetIndexBuffer(0, LineBuffer, INDICATOR _ DATA);

// -

Retorno (INIT _ exitoso

}

//+ - +

//|Función de repetición de indicador personalizado|

//+ - +

int OnCalculate(const int rate_total,

const int prev_calculated,

const fecha, hora y hora[],

const double & open[],

p>

const double & amp high[],

const doble y amp low[],

const double y amp close[],

const long y amptick_volume[],

const long y ampvolume[ ],

const int & ampspread[])

{

//-Obtenga el número de columnas válidas para la variedad comercial actual y el período del gráfico.

int bars=Bars(Symbol(), 0);

Print("Barras = ",Barras", tarifas_total = ", tarifas_total", prev_calculado = ", anterior _ calculado);

Imprimir("tiempo[0] = ", tiempo[0]," tiempo[tasas_total-1] = ", tiempo[tasas _ total-1]);

//-Devuelve el valor prev_calculated para la siguiente llamada.

retorno(rates_total);

}

//+ - +

上篇: ¿Para qué sirve el certificado de cualificación docente? 下篇: ¿La princesa de Mónaco fue asesinada por su marido?
Artículos populares