[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 419

 

Forexman77:
¿Cómo puedo hacer que el programa dé el nivel EMA como precio? Supongamos que la EMA1 con período (1), la EMA2 con período (0), la EMA1 es igual a 1,3321, mientras que la EMA2 es 1,3200 para el período actual. El resultado de la expresión (EMA1 a EMA2) debe ser 0,0121. Al ejecutar el script, la alerta muestra cero, mientras que nosotros necesitamos "0,0121". ¿Cómo resolver este problema?

double delta = iMA(NULL,0,1,0,MODE_EMA,PRICE_CLOSE,0) - iMA(NULL,0,0,0,MODE_EMA,PRICE_CLOSE,0);

if (delta == 0.0121) Alert("Delta=0.0121"); 
 
Forexman77:
¿Cómo hacer que el programa emita el nivel de EMA como el precio? Supongamos que EMA1 con período (1), EMA2 con período (0), EMA1 es igual a 1,3321, EMA2 para el período actual 1,3200. El resultado de la expresión (EMA1 a EMA2) debe ser 0,0121. Cuando ejecuto el script, la alerta muestra cero, mientras que yo necesito "0,0121". ¿Cómo resolver este problema?

¿Es posible ver el propio guión? - Es de suponer que tienes un tipo de datos incorrecto, por ejemplo, interger en lugar de double (por lo que redondea a cero), o algo más que provoca el cero: es difícil de entender sin el código.

Por cierto, si compruebas lo que has escrito antes con el script, el error puede estar o bien en el propio script (presumiblemente escrito sólo para comprobar tu indicador), o bien en el código del propio indicador.

 
TarasBY:
Si has filtrado correctamente tus órdenes, cosa que te sugerí que hicieras, y si incluyes la comisión y los swaps en tus cálculos, entonces todo funciona correctamente.


Debe haber dado un camino muy complicado.

no me funciona.


Estúpidamente inserté lo siguiente en su muestra:

ld_Profit = fGet_ProfitLastCloseOrd (12);    
Print (ld_Profit);

Da alguna cifra, pero está muy lejos de la realidad.

¿Podría mostrarme dónde tengo que introducir el número 12 para que funcione? Porque no conozco el "filtrado de órdenes" en todo....

 
lottamer:


Debe haber dado una forma muy complicada.

no me funciona.


Estúpidamente inserté lo siguiente en su muestra:

Da alguna cifra, pero está muy lejos de la realidad.

¿Podría mostrarme dónde tengo que introducir el número 12 para que funcione? Porque no conozco el "filtrado de pedidos" en todo....

He realizado todos los cálculos intermedios en el gráfico para tener un mejor control del funcionamiento.

Sólo te queda escribir el código.

Tienes dos caminos: o entenderlo tú mismo (con ejemplos - te he dado un guión de trabajo), o encontrar a alguien que lo haga por ti.

P.D. Si de repente quieres entenderlo, puedes empezar por aquí.

Archivos adjuntos:
 
Chiripaha:

¿Es posible ver el propio guión? - Es de suponer que tienes un tipo de datos incorrecto, por ejemplo, interger en lugar de double (por lo que redondea a cero), o algo más que provoca el cero: es difícil de entender sin el código.

Por cierto, si el script que has escrito antes, el error puede estar en el propio script (presumiblemente escrito para probar tu indicador) o en el código del propio indicador.


Tienes razón, he quitado EMA de int a double y todo está como debería.
 
TarasBY:

Para un control total de la función, todos los cálculos intermedios se muestran en el gráfico.

Sólo te queda escribir el código.

Hay dos maneras: o bien puedes resolverlo tú mismo (utilizando ejemplos - te he dado un guión que funciona), o puedes encontrar a alguien que lo haga por ti.

P.D. Si de repente quieres descubrirlo, puedes empezar desde aquí.


Gracias, definitivamente trataré de averiguarlo
 
Forexman77:
¿Cómo puedo hacer que el programa emita el nivel de la EMA como precio? Supongamos que EMA1 con período (1), EMA2 con período (0), EMA1 es 1,3321 y EMA2 es 1,3200 para el período actual. El resultado de la expresión (EMA1 a EMA2) debe ser 0,0121. Cuando ejecuto el script, la alerta muestra cero, mientras que yo necesito "0,0121". ¿Cómo resolver este problema?

Utilizar variables de tipo double en lugar de int en los cálculos;

utilice NormalizeDouble(number1-number2, la precisión deseada) al calcular el resultado de la expresión;

utilice DoubleToStr(el resultado obtenido, la precisión deseada) para mostrar el resultado en la pantalla (en el diario);

No hay nada más que sugerir sin su código...

 
Forexman77:
Tienes razón, he quitado el EMA de int a double y todo está como debería.

Aquí, ya lo hemos encontrado... De todos modos, tenga en cuenta que para evitar errores ocultos e inexactitudes, utilice la normalización cuando compare y calcule datos de tipo double
 
Chiripaha:

Conclusión: Por supuesto, podría, por interés, pedirle que describa las condiciones con más detalle, ya que sólo ha proporcionado una descripción general: cuándo se fijaron las órdenes del robot (con antelación o no; manualmente alrededor de la misma hora que el robot o no, etc.). Pero de todos modos, incluso en este caso sólo tendrá que tratar con su corredor, porque él tiene su propio hilo que probablemente pone en cola las operaciones. Supongamos que, si la orden pendiente manual fue colocada primero, entonces el tiempo de su ejecución será diferente (incluyendo la cola de otros clientes), por lo que el precio puede ser diferente. Si el robot ha colocado las órdenes dentro del periodo de señales formadas, entonces la llegada de órdenes a la cola no es evidente, de ahí el posible sesgo en el precio de ejecución. Además, puede verse afectado por el tamaño de las posiciones sobre las que no se escribe nada... etc...

Pero... De todos modos, esto sólo se puede aclarar con un corredor (DC). Y supongo que encontrará un montón de razones que no he mencionado. - Y el consejo era correcto: el registro en sus manos y al corredor, a menos que, por supuesto, usted todavía piensa que sus órdenes pendientes se han movido. Pero no hay que confundir 2 conceptos diferentes: una Orden Pendiente y una Transacción sobre esta Orden Pendiente. La orden de límite es una instrucción para entrar en el mercado a cualquier precio más cercano con el volumen declarado. Y el Deal - es el precio al que fue posible ejecutar su orden por el volumen de dinero declarado (lote). - Y es probable que los precios de estos pedidos sean diferentes (especialmente en el mercado rápido, al que se ha referido). Para las órdenes limitadas, el precio de la orden y el precio de ejecución son iguales (por definición).

¡Y el hecho de que la demo y el broker real no se diferencien entre sí es bueno! - Eso demuestra que el broker no falsea las operaciones para atraer clientes (por sus palabras). - En este caso no se aprecia ninguna discrepancia.


Gracias por una respuesta tan detallada, todo queda claro. Si utilizamos el sistema de ejecución instantánea, ¿se resolverá este problema?

¿Y las condiciones que no he mencionado?

El robot hizo los pedidos antes que los realizados manualmente, pero se modificaron antes de la noticia.

El volumen de operaciones fue el mismo, las distancias aproximadamente las mismas

en general las condiciones eran casi exactamente las mismas.

 
TarasBY:
El día actual comienza al principio de la barra D1 actual (iTime (NULL, PERIOD_D1, 0)), pero no está buscando formas fáciles... :)))


Este es el problema.

Todo funciona, pero sólo una vez. Por ejemplo, si establezco el período (iTime (NULL, PERIOD_D1, 0)) de un día, no funciona el día siguiente.

escribió un código de prueba para comprobar

GetProfitFromDateInCurrency (Symbol(), -1, -1, iTime (NULL, PERIOD_M1, 0));  

if  (GetProfitFromDateInCurrency()<1 && GetProfitFromDateInCurrency()>-1)
    { My_buy ();  My_close(); }
поставил период МИНУТКИ, так чтобы за минуту слить доллар на спреде и остановиться, ДО НАЧАЛА ВТОРОЙ МИНУТЫ. И он льет и останавливается. А вот почему на второй минуте он не открывает сделок?