[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 234

 
deyron:
Hola. ¿Puede decirme, por favor, si un EA está unido a varias ventanas de pares de divisas a la vez, entonces los cambios en el EA de una ventana afectan al EA de otra ventana? es decir, ¿las variables locales cambian o no?


Si cambia el magik para el mismo EA, entonces los EAs trabajarán por separado cada uno en su propia ventana.

 

¡¡¡REALMENTE NECESITO AYUDA PARA REDISEÑAR MI EA!!!

Estoy contento con todo lo que tiene, sólo me gustaría poder.... Si no puede traducir una operación hasta el punto de equilibrio o cerrarla en el take profit, entonces ciérrela al contrario de una nueva señal de apertura sin cambiar la estrategia de negociación. Por ejemplo, si la operación de venta se dio vuelta y los búhos no la transfirieron al punto de equilibrio, comienza una nueva vela para abrir una operación de venta con volumen creciente esperando un retroceso, y quiero que siga trabajando como si cerrara la operación en el Stop Loss/Take... si el precio se invierte, abre la compra, y cierra esa, aunque con un gran minus.... Así

/*descompilado borrado*/

 
deyron:
Hola. ¿Puede usted por favor aconsejar si un EA se adjunta a varias ventanas de los pares de divisas, a continuación, los cambios en el EA en una ventana afectan a la EA en otra ventana??? es decir, las variables locales cambiar o no???
No, no se afectan entre sí. La misma magia de posición sólo puede ser perjudicial cuando el EA determina el cierre de la posición sólo por magia.
 

Buenos días a todos. Por favor, ayúdenme a entender las variables globales. El problema es algo así: tengo una variable bool línea_1=false; cambia a Es cierto; al alcanzar un precio y hacer niveles de alcance que serán otras acciones y bool línea_1 vuelve a ser falso; necesito reiniciar el sistema o los parámetros no se alcanzarán el viernes por la noche, los valores de esta variable se pierden y afectarán al resultado de la negociación, según tengo entendido necesito hacerlas variables bool globales. aún no he hecho nada al respecto y necesito su consejo si creo que voy a hacer correcciones en el código, por favor dígame si hay que corregir algo, gracias.

bool line_1=GlobalVariableGet(false);

if(macd_2<0&&macd_1>0) {line_1=GlobalVariableSet(true);}

if(macd_2>0&&macd_1<0) {line_1=GlobalVariableSet(false);}

Si el código se construye de esta manera, entonces al reiniciar el terminal, ¿la variable dejará su valor anterior en el momento de reiniciar o se restablecerá al estado declarado al principio del programa? Gracias de nuevo.

 
paladin80:
No, no se afectan entre sí. La misma magia de posición sólo puede ser perjudicial cuando el EA determina el cierre de la posición sólo por magia.

Sí, por supuesto que se puede filtrar de forma diferente. Por ejemplo, por símbolo, etc. He dicho la opción más sencilla.
 
laveosa:

Buenos días a todos. Por favor, ayúdenme a entender las variables globales. el problema es algo así: tengo una variable bool línea_1=false; cambia a Es cierto; al alcanzar un precio y hacer niveles de alcance que serán otras acciones y bool línea_1 vuelve a ser falso; necesito reiniciar el sistema o los parámetros no se alcanzarán el viernes por la noche, los valores de esta variable se pierden y afectarán al resultado de la negociación, según tengo entendido necesito hacerlas variables bool globales. aún no he hecho nada al respecto y necesito su consejo si creo que voy a hacer correcciones en el código, por favor dígame si hay que corregir algo, gracias.

bool line_1=GlobalVariableGet(false);

if(macd_2<0&&macd_1>0) {line_1=GlobalVariableSet(true);}

if(macd_2>0&&macd_1<0) {line_1=GlobalVariableSet(false);}

Si el código se construye de esta manera, ¿dejará la variable su valor anterior en el momento de reiniciar el terminal, o se restablecerá al estado declarado al principio del programa? Gracias de nuevo.

En primer lugar, lee sobre GlobalVariableSet() - te faltan parámetros y lo utilizas incorrectamente.

Y la secuencia de operaciones es la siguiente: cuando el valor de la variable que se quiere guardar cambia, este valor se pasa a la variable global apropiada del terminal usando esta función. Y al reiniciar el EA en init(), se pasa su valor a la variable a través de la función GlobalVariableGet().

 

¡Caballeros, por favor, denme una pista!

Estoy intentando poner en práctica una idea sencilla que se describe en los comentarios del programa.

El programa abre órdenes en el TESTER a un precio que no coincide con los especificados en el código.

Por ejemplo, la orden se abre al precio de 0,86084, mientras que el valor más cercano en la matriz es 0,85375.

La diferencia es positiva mientras que el código especifica abrir órdenes si la diferencia es < 0,00000, es decir, negativa.


Por favor, indíquenos dónde se encuentra el error.

Gracias.

int start()
{
 double Price=iOpen (Symbol (),0,0);        
 double SL=NormalizeDouble (Price-3000*Point, Digits);         
 double TP=NormalizeDouble (Price+100*Point, Digits);    
 #include <MASSIV.mqh> //объявление массива типа double (неповторяющиеся значения цены с пятью знаками после точки)
 double value =  Bid ;//параметру value функции ArrayBsearch присваивается значение  цены последнего тика

 int S = ArrayBsearch(  massiv,  value, WHOLE_ARRAY,  0, MODE_ASCEND);//функция возвращает индекс значения цены макс. близкой к цене последнего тика 
 if( (NormalizeDouble (Bid-massiv[S],Digits) <=0))//если разница между значением массива возвращенным на последнем тике и ценой последнего тика отрицательная или = 0.00000


{
                        
 OrderSend(Symbol(),OP_BUY,0.1,Ask,1,SL,TP,"jfh",123 );//ордер открыть
 
solnce600:

¡Caballeros, por favor, denme una pista!

Estoy tratando de poner en práctica una idea simple, que se describe en los comentarios del programa.

El programa abre órdenes en el TESTER a un precio que no coincide con el especificado en el código.

Por ejemplo, la orden se abre al precio de 0,86084 con el valor más cercano 0,85375 en la matriz.

La diferencia es positiva, mientras que el código especifica que se abran órdenes si la diferencia es < 0,00000, es decir, negativa.

Por favor, indíquenos dónde se encuentra el error.

Gracias.

La mejor manera de encontrar el error es recorrer cada línea de abajo hacia arriba y ver cómo se corresponde con lo que se quiere obtener y lo que está escrito.

if ((NormalizeDouble (Bid-massiv[S],Digits) <=0))
//если разница между значением массива возвращенным на последнем тике и ценой последнего тика отрицательная или = 0.00000
Esta condición presupone que... - ¿Es esto lo que pretendías? (1 - 1000000 <= 0) - satisface???

Te di una solución y la "pasaste por alto"...

 
TarasBY:

La forma de encontrar los errores: recorre cada línea de abajo hacia arriba y date cuenta de la correspondencia entre lo que querías y lo que está escrito.

Esta condición supone que... - ¿Es esto lo que pretendía? (1 - 1000000 <= 0) - ¿se cumple?

Te di una solución y la "pasaste por alto"...

Muchas gracias, incluso he copiado tu pista para mí .... Sólo que no la he entendido del todo ..... disculpa mi estupidez .... Me devanaré los sesos y trataré de averiguarlo.

No entiendo por qué toma el valor de la variable Bid (precio del último tick) como 1. Supongo que es un valor de 6 dígitos con un punto decimal después del primero... y el valor de

Por favor, dígame qué es lo que he entendido mal.

He estudiado cuidadosamente su código.

double ld_Delta = 10. * Punto;
if (NormalizeDouble (MathAbs (Bid - Price), Digits) <= ld_Delta)//
y este precio es el precio de apertura de una nueva barra
{OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123);}//abrela orden


Pero no entiendo

-¿Por qué sugiere utilizar la variable Precio en lugar de la variable massiv[S] ? Contiene el precio de apertura de la última barra.

Mi idea es que una de las condiciones necesarias para la apertura de una orden es la coincidencia de su precio de apertura con uno de los valores del array más cercano al precio del último tick.

Mi estrategia completa es la siguiente

ABRIR ORDEN si se cumplen 2 condiciones al mismo tiempo

-El precio de apertura de la última vela

al precio más cercano a uno de los valores de la matriz (valores de la matriz: unos 2.000 valores de precio de oferta no repetidos quevan en orden aleatorio)

Te agradeceré mucho la ayuda y la pista - pero he estado desconcertando por segundo día ..... y todo en vano.


	          
 
solnce600:

Muchas gracias, incluso copié ese consejo tuyo.... sólo que no lo entendí del todo..... perdón por la estupidez .... Me devanaré los sesos y trataré de averiguarlo.

No entiendo por qué toma el valor de la variable Bid (precio del último tick) como 1. Supongo que es un valor de 6 dígitos con un punto decimal después del primero... y el valor de

Por favor, díganme qué puedo entender mal.

He estudiado cuidadosamente su código.

double ld_Delta = 10. * Punto;
if (NormalizeDouble (MathAbs (Bid - Price), Digits) <= ld_Delta)//
y este precio es el precio de apertura de una nueva barra
{OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123);}//abrela orden

Pero no entiendo

-¿Por qué sugiere utilizar la variable Precio en lugar de la variable massiv[S] ? Contiene el precio de apertura de la última barra.

Mi idea principal es que una de las condiciones necesarias para la apertura de una orden es la coincidencia de su precio de apertura con uno de los valores del array más cercano al precio del último tick.

Mi estrategia completa es la siguiente

ABRIR ORDEN si se cumplen 2 condiciones al mismo tiempo

-El precio de apertura de la última vela

al precio más cercano a uno de los valores de la matriz (valores de la matriz: unos 2.000 valores de precio de oferta no repetidos quevan en orden aleatorio)

Os agradeceré mucho la ayuda y las pistas - Llevo dos días dándole vueltas a ....., pero no surte efecto.

Para entender lo que está pasando, tengo que sacar los cálculos a la impresora:

    //если разница между значением массива возвращенным на последнем тике 
    // и ценой последнего тика отрицательная или = 0.00000
    if ((NormalizeDouble (Bid-massiv[S], Digits) <= 0))
    {
        Print ("massiv[", S , "] = ", massiv[S], " | massiv[", S - 1, "] = ", massiv[S-1], " | massiv[", S + 1, "] = ", massiv[S+1], " | Bid = ", Bid);
        OrderSend(Symbol(),OP_BUY,0.1,Ask,1,SL,TP,"jfh",123 );//ордер открыт
    }
y analizar los resultados.