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

 
-Aleks-:
Dos años - en probador :) Bueno, ha estado funcionando durante un año en la demo... Un montón de errores allí, cuando tuve que conectarlo debido a las clases externas... Y ahora hay un error de este tipo, que no sé cómo arreglar - sólo aumentaré el tamaño del array en un dígito, por ahora. ¿Por qué no hay un tamaño automático, como para un buffer gráfico, o lo hay?

Pruébalo así.

Inicializar la matriz OrderBU[1].

Primero aumenta el tamaño del array ( ArrayResize(OrderBU,NorderBU+1) ), luego OrderBU[NorderBU]=OrderTicket();NorderBU++;

 
new-rena:

Pruébalo así.

Inicializar la matriz OrderBU[1].

Primero aumenta el tamaño del array ( ArrayResize(OrderBU,NorderBU+1) ), luego OrderBU[NorderBU]=OrderTicket();NorderBU++;

Gracias, experimentaré con tranquilidad.
 
Por favor, aconseja cómo implementar lo siguiente en el código.
Hay una variable base A, si es menor que cero, entonces utilizamos cinco variables más - los valores se asignan desde la función de llamada al indicador - iCustom.
Una vez recibidos los valores, debemos clasificarlos - encontrar valores por encima y por debajo de la variable A y definir de los dos grupos - valor máximo, mínimo, medio.
Creo que es necesario utilizar un array, pero no entiendo muy bien cómo.
 

¿Podría aconsejarnos sobre este punto?

Por ejemplo, tenemos un indicador Williams Percent Range (%R) en un gráfico y arrastramos el indicador On Balance Volume (OBV) a su ventana desde el navegador.

https://charts.mql5.com/8/675/xauusd-h4-metaquotes-software-corp.png

El %R funciona en el rango 0 -100%, el OBV no tiene una vinculación específica.

Cuando el OBV está en la ventana de %R, vemos visualmente que va más allá de -20 o -80%.

¿Cómo podemos conseguir que el OBV esté por encima del -20% o por debajo del -80% en nuestro EA?

¿Cómo se vincula el OBV en el indicador personalizado al rango de 0 -100%? ¿Normalizarlo a él (rango)? ¿Cómo se puede hacer esto?

Entiendo que no es necesario normalizar OBV a %R (la imagen será diferente).

Tal vez sea elemental, pero no me lo he encontrado.

 
-Aleks-:
Por favor, aconseja cómo implementar lo siguiente en el código.
Hay una variable base A, si es menor que cero, entonces utilizamos cinco variables más - los valores se asignan desde la función de llamada al indicador - iCustom.
Una vez recibidos los valores, debemos clasificarlos - encontrar valores por encima y por debajo de la variable A y definir de los dos grupos - valor máximo, mínimo, medio.
Creo que hay que utilizar el array pero no entiendo muy bien cómo.

si (p1>p2&&p1>p3) , si (p2>p1&&p2>p3) , si (p3>p2&&p3>p1)

Yo lo hago así,

 

Necesito un parámetro de lote flotante, el primer lote lo fija el usuario, luego este parámetro no se maneja más, y el EA funciona solo y en caso de pérdida se eleva por el lote máximo especificado en el programa (o una variable externa), en caso de ganancia se reduce por la cantidad especificada .

Si escribo el parámetro en el "Init ", el EA dejará de acceder al lote de variables externas?

¿o cómo lo hago?

esta es una expresión aproximada .

 
Hola. ¿Pueden decirme cómo utilizar los datos de las noticias en mi EA? ¿Necesito un indicador para esto, o puede el EA encontrar noticias importantes por sí mismo?
 
Leanid Aladzyeu:

si (p1>p2&&p1>p3) , si (p2>p1&&p2>p3) , si (p3>p2&&p3>p1)

Lo hago,

No es conveniente, especialmente con un gran número de parámetros...

La solución vía array es interesante. Especialmente interesante es la forma de encontrar el valor más cercano de una variable al promediar el número total de valores.

 
first_may:

Buenas noches. Tratando de escribir un simple EA en el cruce de tenkan y kinjun. Aquí está el código:

void OnTick()

void OnTick()

{

TradeSignal_20();

}


int SeñalDeComercio_20()

{

int sig=0;


if(h_ich==INVALID_HANDLE)

{

h_ich=iIchimoku(Symbol(),Period(),IKHtenkansen,IKHkijunsen,IKHsenkouspanb);

return(0);

}

si no

{

if (CopyBuffer(h_ich,0,0,3,ich1_buffer)<2) return(0); // TENKANSEN_LINE

if (CopyBuffer(h_ich,1,0,3,ich2_buffer)<2) return(0); // KIJUNSEN_LINE

if (!ArraySetAsSeries(ich1_buffer,true)) return(0);

if (!ArraySetAsSeries(ich2_buffer,true)) return(0);

}

//--- comprobar la condición y establecer el valor de sig

if(ich1_buffer[1]>ich2_buffer[1]) sig=1;

else if(ich1_buffer[1]<ich2_buffer[1]) sig=-1;

Si no, sig=0;

if (ich1_buffer[1]>ich2_buffer[1])

if (ich1_buffer[2]<ich2_buffer[2])

Alert(Symbol()+": compra");

if (ich1_buffer[1]<ich2_buffer[1])

if (ich1_buffer[2]>ich2_buffer[2])

Alert(Symbol()+": venta");

//--- devolver la señal de comercio

retorno (sig);

}

//+------------------------------------------------------------------+

¿Cómo puedo hacer que la alerta se llame sólo una vez y no constantemente?

No lo ejecute cada vez que lo necesite, sino cuando lo necesite.
 
Vasiliy Smirnov:
No se ejecuta cada vez que se hace, sino cuando es necesario.
¿Y cómo debería ser? Cuando se abra un nuevo bar - entonces haz una comprobación para un nuevo bar...
Razón de la queja: