Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 97

 
Vladon:

La idea es suya, pero no el código. El programador escribió el código, no tú, tú escribiste los TdR.

Imagínese: los usuarios de Windows exigiendo código abierto, ¿no es absurdo?

Según tengo entendido, ¿el código utilizado por los expertos pertenece a MetaQuotes, o a usted personalmente?

Que tiene que ver esto con Windows, en primer lugar los usuarios no tienen derecho a exigirlo porque este producto pertenece a macrosoft, aquí es un poco diferente, macrosoft empezará a pedir el código abierto de su producto a los programadores que lo escribieron, y se retorcerán los dedos y no lo darán.

 
Vladon:

Aah :-=) así que hay fuentes antes de la protección? ¿qué más quieres entonces? Se le ha dicho - nadie dará el código fuente abierto de EA protegido, y yo no lo daría. Y si hubiera queexigir el código fuente de su producto una vez terminado.

Habría rechazado la tarea.

¿Qué más necesitas entonces? El código fuente se encuentra antes de la defensa, por lo que es lo mismo que el asesor con la defensa.

En el transcurso del trabajo del EA, se hicieron modificaciones, se añadieron varias funciones, etc., pero no hay ningún código abierto con estas modificaciones.
 
ComplexFX:
En el proceso de trabajo del Asesor Experto, se hicieron modificaciones, se añadieron varias funciones, etc., pero no hay un código abierto con estas modificaciones.

entonces creo que la verdad está de su lado.

Segúntengo entendido, ¿el código utilizado por los expertos pertenece a MetaQuotes, o a usted personalmente?

Si escribo el código, me pertenece personalmente.MetaQuotes es el propietario del lenguaje de programación.

todo es justo.

 
¿Pueden decirme cómo cerrar una orden abierta en Expert Advisor? Entiendo cómo cerrar una posición utilizando Stop Loss o Take Profit. ¿Cómo lo hago manualmente?
 
pogeon:
¿Pueden decirme cómo cerrar una orden abierta en Expert Advisor? Entiendo cómo cerrar una posición utilizando Stop Loss o Take Profit. ¿Cómo hacerlo manualmente?
En mql5, una posición abierta se cierra con órdenes dirigidas en sentido contrario cuyo volumen total es igual al volumen de una posición cerrada.
 
progeon:
¿Podría aconsejar cómo cerrar una orden abierta en un Asesor Experto? Entiendo cómo se cierra una posición en Stop Loss o Take Profit. ¿Cómo hacerlo manualmente?

O utilizar la clase CTrade, que tiene una función

trade.PositionClose(_Symbol);

algo así como

https://www.mql5.com/ru/docs/standardlibrary/tradeclasses/ctrade/ctradepositionclose

Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / PositionClose
Документация по MQL5: Стандартная библиотека / Торговые классы / CTrade / PositionClose
  • www.mql5.com
Стандартная библиотека / Торговые классы / CTrade / PositionClose - Документация по MQL5
 
Yedelkin: En mql5, una posición abierta se cierra con órdenes dirigidas en sentido contrario, cuyo volumen total es igual al volumen de la posición cerrada.

lazarev-d-m: O utilizar la clase CTrade, hay una función

El método PositionClose() de la clase CTrade también cierra una posición utilizando órdenes opuestas.

 

Por favor, aconséjeme cómo hacer que esta situación se resuelva o por qué. Estoy trabajando en MQL5 no hace mucho tiempo, así que no tengo suficiente experiencia todavía.

He intentado hacer un EA multidivisa sin usar clases. Desgraciadamente, no he encontrado ningún artículo detallado sobre EAs multidivisa.

Escribí el siguiente fragmento de código.

int nomer_instr; // es el número de índice de la moneda en la matriz de nombres de moneda

string Nombre_símbolo[6] = { "AUDUSD", "EURUSD", "GBPUSD", "USDCAD", "USDCHF", "USDJPY" } ; // matriz de texto de nombres de divisas: en [0]-"AUDUSD", 1-"EURUSD", 2-"GBPUSD", 3-"USDCAD", etc.

double Close_buf[], Open_buf[], High_buf[], Low_buf[]; //arreglos base para los parámetros de las velas

datetime Time_buf[]; //array base de la hora de apertura del bar

double Close_H1[6][150], Open_H1[6][150], High_H1[6][150], Low_H1[6][150]; // arrays para los parámetros de las velas del EA multidivisa para el marco temporal H1

// el número de filas de la matriz corresponde al número de monedas analizadas

datetime Time_H1[6][150]; // array de la hora de apertura de la barra

double Close_H4[6][150], Open_H4[6][150], High_H4[6][150], Low_H4[6][150]; // arrays para los parámetros de las velas del Asesor Experto multidivisa para el marco temporal H4

// el número de filas de la matriz corresponde al número de monedas analizadas

datetime Time_H4[6][150]; // array hora de apertura de la barra



int OnInit()

{

}

void OnDeinit(const int reason)
{
//---
ArrayFree(Time_buf);
ArrayFree(Close_buf);
ArrayFree(Open_buf);

ArrayFree(High_buf);

ArrayFree(Low_buf);

}


void OnTick()

{

//------------------------------------------------------------------------------

aquí hay un trozo de código para determinar el momento en que se abre una nueva barra Nev_Time[0]

y el número de serie de la barra que se está procesando en el proceso de prueba o comercio

//------------------------------------------------------------------------------------------------------------------------

ArraySetAsSeries(Close_buf, true); //establecer la indexación de la matriz close_array como en timeseries
ArraySetAsSeries(Open_buf, true); //configuración de la indexación del array open_array como en timeseries
ArraySetAsSeries(High_buf, true); //configuración de la indexación del array high_array como en timeseries
ArraySetAsSeries(Low_buf, true); //configuración de la indexación del array low_array como en timeseries

ArraySetAsSeries(Time_buf, true); //configuración de la indexación del array time_array como en timeseries


for( nomer_instr=0; nomer_instr<=5; nomer_instr++ )
{


//========================================================================
CopyTime( Nombre_símbolo[nomer_instr], PERIOD_H1,0,160,Time_buf); // copiar los datos históricos de tiempo de cada barra al buffer
CopyClose( Nombre_símbolo[nomer_instr], PERIOD_H1,0,160,Close_buf); // copia los datos históricos de cierre de cada barra al buffer
CopyOpen( Nombre_símbolo[nomer_instr], PERIOD_H1,0,160,Open_buf); // copiar los datos históricos abiertos para cada barra al buffer
CopyHigh( Nombre_símbolo[nomer_instr], PERIOD_H1,0,160,high_buf); // copia los datos históricos altos de cada barra al buffer
CopyLow( Nombre_símbolo[nomer_instr], PERIOD_H1,0,160,low_buf); // copia los datos históricos bajos de cada barra al buffer
//========================================================================

for( i=1; i<=145; i++ )
{
Time_H1[nomer_instr][i]=Time_buf[i];
Close_H1[nomer_instr][i]=Close_buf[i];
Open_H1[nomer_instr][i]=Open_buf[i];
High_H1[nomer_instr][i]=High_buf[i];
Low_H1[nomer_instr][i]=Low_buf[i];
}

//======================================================================================
// comprueba el desplazamiento temporal de los datos de las velas generadas de un marco temporal de una hora

if( Schetchik_svech > 8 && Schetchik_svech < 15 )
{
if( nomer_instr == 5 )
{
Alert("================================================");
Alert(" número de barra = ",Schetchik_svech,", hora de apertura de la barra Nev_Time[0]=",Nev_Time[0]);
Alerta(" número de instrumento: nomer_instr=",nomer_instr,", instrumento: Nombre_símbolo[nomer_instr]=",Nombre_símbolo[nomer_instr]);
Alert("---------------------------------------------------------");
for( i=1; i<=5; i++ )
{
Alert("i=",i,", Time_H1[nomer_instr][i]=",Time_H1[nomer_instr][i],", Close_H1[nomer_instr][i]=",Close_H1[nomer_instr][i]);
}
}
}
//======================================================================================

} // fin del bucle para las divisas utilizadas en el marco temporal H1


//##############################################

aquí está la misma pieza del gráfico para el marco de tiempo H4

//############################################


} // fin de la función OnTick()


Al comprobar el rendimiento de este programa informático obtuve un resultado inesperado:

- Para el caso de H1, cuando la salida de los parámetros de barras para el gráfico, en el que se encuentra el Asesor Experto, tenemos una hora de diferencia entre la apertura de la barra cero y la primera barra.

Por ejemplo, el Asesor Experto está en el gráfico EURUSD y la hora de apertura de la barra cero es Nev_Time[0]=2011.01.03 13:00:00, entonces la hora de apertura de la primera barra Time_H1[1][1]=2011.01.03 12:00:00

El resultado es coherente con el sentido común.

- Ahora el Asesor Experto está en el mismo gráfico y analizamos los datos de cualquier otra divisa, por ejemplo, AUDUSD:

hora de apertura de la barra cero Nev_Time[0]=2011.01.03 13:00:00, luego la hora de apertura de la primera barra Time_H1[1][1]=2011.01.03 11:00:00

Este resultado es sencillamente inaceptable, pero no he encontrado ninguna razón para este efecto en los artículos.

Por favor, aconsejar cómo deshacerse de esta molestia, no puedo escribir un Asesor Experto para cada moneda.

Gracias por sus comentarios.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
Boris.45: hora de apertura de la barra cero Time_H1[1][1]=2011.01.03 13:00:00, luego la hora de apertura de la primera barra Time_H1[1][1]=2011.01.03 11:00:00
¿Y qué devuelve Time_H1[1][0]?
 
Yedelkin:

¿Qué devuelve Time_H1[1][0]?

No utilizo este elemento del array, porque voy a pasar directamente al algoritmo de búsqueda de fractales en las últimas 5 barras. Y Time_H1[1][0] es el tiempo de apertura de la barra cero en la que aún no se han formado los parámetros de esta barra. Puede que me equivoque, pero por experiencia propia, sé que utilizar los parámetros de una barra cero para formar series de tiempo conduce a su distorsión.