[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 22

 
skyjet:

Hola! Mi objetivo es transferir el indicador mediante la creación de una función en el EA.

El primer paso, que es la creación de la función, está hecho. Pero la siguiente, la de las pruebas, no funciona.

El indicador dibuja canales. Tiene 4 buffers y muchas variables. Lo he colocado todo en la función.

Pero al crear un Asesor Experto de prueba para asegurarse de que funciona exactamente comparando el indicador y mi función, no puedo lograr la compilación.

Han aparecido errores constantes de variables externas, que no estaban cuando creé la función, en el EA.

Por favor, dame algún consejo o un enlace a un ejemplo. He utilizado los artículos de GODZILLA, pero sus ejemplos son diferentes a los míos.

El esquema es más o menos el siguiente:

  • transferir todo lo que estaba en el indicador init() a una función separada, por ejemplo, fInit_Indicator() y escribirlo en init() del EA, recordando al mismo tiempo eliminar del código todo lo que concierne a la inicialización de los buffers del indicador.
  • copiar todas las variables globales del indicador y colocarlas en las variables globales del EA. No olvide definir el tamaño de los buffers de los indicadores cuando se declaren en el EA. Algo así como gd_Buf1[100], gd_Buf2[100] etc. Creo que 100 valores serán suficientes para ti.
  • cambiar el nombre de la función start() del indicador, por ejemplo, fMyIndicator() y colocarlo en la función start() del EA antes del código de apertura de la orden (para tomar una decisión).
  • Además, no hay que olvidar que la memoria intermedia de los indicadores es diferente de la memoria intermedia de los "no indicadores". Hay varias soluciones para esto:
  • cuando llega una nueva barra, se desplazan todos los datos del array "no indicador", liberando el índice 0, donde se coloca el nuevo valor calculado.
  • De nuevo, cuando llegue una nueva barra, recalcula toda la "matriz de no indicadores".

Pruébalo, no es difícil.

 
999666:
Ayúdame a escribir una condición que haga que el EA multiplique el lote por dos después de abrir n órdenes
if (MyOrders >= n) Lots *= 2;
 

¡Buenas tardes!

Todavía estoy averiguando cosas con las matrices.

Necesito cargar los valores del número de puntos en el array en cada nuevo tick.

Eltamaño de la matriz será diferente cada vez. ¿Qué debo hacer en este caso, utilizar ArreyResize en cada iteración del bucle?

 

Buenas tardes, sobre el tema de las matrices.

hay una célula de este tipo

12345,p,fgh,2011-01-01,55,66

¿cómo puedo obtener 55 de él?

Gracias.

 

Si el array es heterogéneo, probablemente deba convertir todos los elementos a tipo cadena y luego buscar el requerido utilizando

StringFinde(https://www.mql5.com/ru/forum/138609/page22#613148). Corrígeme si me equivoco.

 
TarasBY:

No es útil: Si no es difícil tener dos condiciones si (LotConst_o_no) gd_200 = Lot;

si no gd_200 = AccountBalance() * RiskPercent / 100.0 / 10000.0;

Sustitúyalo por un Asesor Experto que no calcule el saldo sino el número de órdenes abiertas.

La respuesta sería muy apreciada.

 
TarasBY: No es útil: Si no es difícil tener dos condiciones si (LotConst_o_no) gd_200 = Lot;

si no gd_200 = AccountBalance() * RiskPercent / 100.0 / 10000.0;

Sustitúyalo por un Asesor Experto que no calcule el saldo sino el número de órdenes abiertas.

La respuesta sería muy apreciada.


 
Snegovik:

Buenas tardes, sobre el tema de las matrices.

hay una célula de este tipo

12345,p,fgh,2011-01-01,55,66

¿cómo puedo obtener 55 de él?

Gracias.


https://book.mql4.com/ru/variables/arrays
 
999666:
Ayúdame a escribir una condición que haga que el EA multiplique el lote por dos después de que se abran n órdenes
Si quieres abrir las siguientes (4, etc) órdenes con 3 ya abiertas con 2 x lote, entonces:
int Opened_pos=0;
for (int i=OrdersTotal()-1; i>=0; i--)
{ if (OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
  { if (OrderSymbol()==Symbol() && (OrderType()==OP_BUY || OrderType()==OP_SELL))
    { Opened_pos++;
} } }
if (Opened_pos>=4) double lot=lot*2;
 
Fox_RM:

¡Buenas tardes!

Todavía estoy averiguando cosas con las matrices.

Necesito cargar los valores del número de puntos en el array en cada nuevo tick.

El tamaño de la matriz será diferente cada vez. ¿Qué debo hacer en este caso, utilizar ArreyResize en cada iteración del bucle?

1-Item: tu filosofía de cambiar el tamaño de la matriz es defectuosa desde el principio, en 99 de cada 100 casos puedes usar sólo 10 celdas para manejar las lecturas de los indicadores;

2.: recalcular estas lecturas en cada tic es un capricho de cerebro mal informado.