Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 540

 
Mi sistema de trading se basa en el análisis de datos históricos. He construido una función para calcular la señal directamente en el EA. Sin embargo, por lo que entendí, al hacer las pruebas, el Asesor Experto sólo utiliza los datos de la ventana visual (tiene muchas menos barras que en las ventanas estándar con el historial cargado desde el archivo). Necesito al menos varias decenas de miles de barras históricas para calcular la señal. ¿Hay alguna manera de resolver este problema, es decir, permitir que el EA bajo prueba utilice todo el historial, incluso si el período bajo prueba es más pequeño? Estoy usando MT4 y MQL4
 
sannin:

Ayuda si no te importa

para enseñar a un Asesor Experto a operar por el indicador

BS_Living Now ver #1.mq4 https://www.mql5.com/ru/code/11014#50910

UP= iCustom(Symbol(),NULL,"Now",BQuant,0,0);

DOW= iCustom(Symbol(),NULL,"Now",BQuant,1,0);


if(DOW){OrderSend(Symbol(), OP_SELL, Lot, Bid, Slip, 0, 0, "Forex-Robots.ru SELL", Magic, 0,Red);}


if(UP ){OrderSend(Symbol(), OP_BUY, Lot, Ask, Slip, 0, 0, "Forex-Robots.ru BUY", Magic, 0,Blue);}


Comentario

(

"\N - Beneficio: ", UP,

"\N - Beneficio: ", DOW

);

He intentado leer los valores en el comentario pero siempre son estáticos.

El nombre del indicador debe ser "BS_Living Now ver #1"
 

Sí, tengo un indicador con el nombre Now en la carpeta

Pongo los valores en el comentario para ver como cambian los números pero son estáticos tanto en el tester como en directo y no son cero

 
sannin:

Sí, tengo un indicador con el nombre Now en la carpeta

He puesto los valores en el comentario para ver cómo cambian los números y son estáticos, tanto en el probador como en la vida real y no son cero.


Si es similar a un fractal, su valor debe buscarse en el historial, pero no en la barra de cero.

Z.I.: Así es, comienza los cálculos desde la barra #1, no tiene sentido buscar algo en la barra cero...

 

¿Puedes aconsejar cómo añadir a un EA la función de cerrar todas las órdenes si la distancia entre el precio de mercado y el precio de la orden más lejana supera los 1000 pips, por ejemplo?

 
evillive:

Si en principio es similar a los fractales, entonces tiene sentido buscar su valor más adelante en la historia, pero no en la barra cero.

Z.I.: Así es, comienza los cálculos desde la barra 1, no tiene sentido buscar algo en la barra cero...

De la barra #2 por código, Extrim_Detect(s+1);
 
AlexeyVik:

Y en consecuencia la condición

Gracias Alexey. He hecho todo lo que me has recomendado.

extern int    Min_iMA_OpenDistance   = 60;
extern int    Max_iMA_OpenDistance   = 85; 

cambio de la condición de entrada

int GetSignal()
{
  int Signal = 0;

  double iMA_Signal = iMA(Symbol(), 0, iMA_Period, 0, MODE_SMMA, PRICE_CLOSE, 0);
  
  int Ma_Bid_Diff = MathAbs(iMA_Signal - Bid)/vPoint;
  
  if(Ma_Bid_Diff > Min_iMA_OpenDistance && Ma_Bid_Diff < Max_iMA_OpenDistance && Bid > iMA_Signal) Signal = -1;
  if(Ma_Bid_Diff > Min_iMA_OpenDistance && Ma_Bid_Diff < Max_iMA_OpenDistance && Bid < iMA_Signal) Signal = 1;
  
  return(Signal);
}

Sin embargo, después de hacer los cambios el compilador "jura" la siguiente línea

iMA_OpenDistance  *= DcD; 

iMA_OpenDistance' - identificador no declarado - identificador no declarado. He leído el tutorial y la ayuda sobre los identificadores pero nada funciona. ¿Puede decirme en qué me he equivocado y cómo solucionarlo?

 
tatianati:

Gracias Alexey. Hice lo que me recomendaste.

Condición de entrada modificada

Sin embargo, después de hacer los cambios, el compilador "jura" la siguiente línea

iMA_OpenDistance' - identificador no declarado. He leído el tutorial y la ayuda sobre los identificadores, pero nada funciona. ¿Puede decirme en qué me he equivocado y cómo solucionarlo?

Al parecer, tendremos que utilizar los poderes de la telepatía.

Primero sólo existía iMA_OpenDistance, luego se dividió en 2 variables Min_iMA_OpenDistance y Max_iMA_OpenDistance, por lo que la variable iMA_OpenDistance queda sin declarar.

No es necesario cambiar los valores de las variables externas. Es mejor declarar una variable adicional y hacer lo que quieras con ella.

Según entiendo, la variable vPoint es Point*10. En consecuencia, Ma_Bid_Diff es la distancia de la Oferta a la MA en puntos de 4 dígitos. ¿Y qué es DcD? Mis habilidades telepáticas no son suficientes. Pero de todos modos, me parece que iMA_OpenDistance *= DcD; es innecesario. ¿O se trata de una conversión a puntos de 5 dígitos? ¿Para qué?

 
AlexeyVik:

Al parecer, tendremos que usar la telepatía.

Al principio sólo existía iMA_OpenDistance, luego se dividió en 2 variables Min_iMA_OpenDistance y Max_iMA_OpenDistance, por lo que la variable iMA_OpenDistance queda sin declarar.

No es necesario cambiar los valores de las variables externas. Es mejor declarar una variable adicional y hacer lo que quieras con ella.

Según he entendido la variable vPoint es Point*10. En consecuencia, Ma_Bid_Diff es la distancia de la Oferta a la MA en puntos de 4 dígitos. ¿Qué es el DcD? Mis habilidades telepáticas no son suficientes. Pero de todos modos, me parece que iMA_OpenDistance *= DcD; es innecesario. ¿O se trata de una conversión a puntos de 5 dígitos? ¿Para qué?



Alexey, realmente eres un telépata, es realmente una traducción de 5 dígitos. Gracias por la aclaración y cómo no entendí Min_iMA y Max_iMa en lugar de iMa. Gracias de nuevo.

P.D. Si abren un curso de telepatía, seré el primero en apuntarme :-)

 

Tal vez alguien tenga un asesor de este tipo.

1. abre dos órdenes diferentes de compra y venta simultáneamente

2. cuando una de ellas se cierra en beneficio . abre de nuevo dos órdenes de compra y venta diferentes, etc.

Si no hay que hacer nada con las órdenes de pérdida, parece ser bastante sencillo... tal vez alguien pueda escribirlo por ti... ¡te lo agradecería mucho!