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

 
hoz:

Cuántas veces he utilizado el punto automático, pero la primera vez no funciona.

Aquí está Init()

Lo pongo en cualquier lugar del programa (en este caso, incluso en el inicio para el experimento):

La función vuelve al registro:

¿Dónde está la lógica?

VladislavVG me dijo:Porque en la función init() no se garantiza la carga de los datos del instrumento financiero.
 
GaNDarM:
VladislavVG me lo ha sugerido:Porque en la fase de la función init() no se garantiza la carga de datos del instrumento financiero.

Por lo tanto, el valor de la variable Point sin Init() debería devolver lo mismo...
 
hoz:
¿Por qué habría un sinsentido si la función devuelve un nombre de objeto específicamente?
¿Y estás 100% seguro de que esta función siempre y en todo momento funcionará correctamente, no tendrá un fallo en alguna parte o se atascará con algún nombre de objeto complicado, o tú mismo no deslizarás accidentalmente el número de un objeto inexistente en él, de repente? Y el resultado devuelto por la función no puede utilizarse para juzgar si ha funcionado correctamente o no. Esto es lo que dice la documentación. La única forma correcta es obtener el código de error y luego solucionarlo. Así es como te proteges de tus propios errores (o de los de otros).
 
hoz:

Cuántas veces he utilizado el autopunto, pero la primera vez no funciona.


¿Dónde está la lógica?

Pruébalo así:

int init()
{
   if (Digits == 2 || Digits == 4)
     pt = MarketInfo(Symbol(), MODE_POINT);
   if (Digits == 1 || Digits == 3 || Digits == 5)
     pt = MarketInfo(Symbol(), MODE_POINT) * 10;
 
  return (0);
}

Ni siquiera así, sino así:

int init()
{
   int MyDigits = MarketInfo(Symbol(), MODE_DIGITS)
   if (MyDigits == 2 || MyDigits == 4)
     pt = MarketInfo(Symbol(), MODE_POINT);
   if (MyDigits == 1 || MyDigits == 3 || MyDigits == 5)
     pt = MarketInfo(Symbol(), MODE_POINT) * 10;
 
  return (0);
}

Porque Dígitos es una variable interna, al igual que Piont.

Eso debería funcionar :)



 
hoz:

Así que el valor de la variable Point sin Init() debería devolver lo mismo...

No es un hecho... Point es una variable interna del procesador MQL y requiere un tiempo y algunas acciones de inicialización para actualizarla. Todo esto suele ocurrir sólo antes de que el procesador llame a start() y en la fase de init() los valores de las variables internas del procesador pueden no estar establecidos.
 
GaNDarM:


"Llorando" por ello:

y aquí está el registro:

18:25:09 IndikatorZZ GBPJPY,Daily: F_CYF INIT: DownL = 0 UpL = 0


¿Las variables no son int por casualidad?


Me he sorprendido así un par de veces

 
ilunga:

¿Variables por casualidad int?


Me he sorprendido haciendo eso un par de veces


No, doble. Me pregunto qué le pasa a int.
 
¡Hola! Una situación ocurrió el día anterior. El 19.03.2013 alrededor de las 17-00 GMT puse una orden para colocar un Sell stop. El precio de apertura fue 1,2903, Stop loss 1,2913, trailing stop 15 pips, M15, lote -0,5. Como muestra el historial de la cuenta, la posición se abrió a 17-49. La posición se cerró a las 21:15 de nuevo por GMT con el beneficio menos 90. Cuando vi la historia, me surgieron muchas preguntas. Por ejemplo, por qué se cerró la posición en la parte superior de la espiga (ver imagen). Por qué no se activó el trailing stop, porque si funcionara, el beneficio sería positivo, ya que el movimiento del precio fue correcto. Después del trailing stop, un stop loss no sería de 90 USD. Y de nuevo - por qué la posición se cerró en la parte superior de la subida. Punto a punto. No me he puesto en contacto con el centro de tramitación por esta cuestión. Probablemente no responderán. Me he acordado de este foro y espero que los profesionales puedan explicar el motivo de esta anomalía en un lenguaje sencillo. Empecé a operar en MT4 no hace mucho tiempo. Todavía estoy oliendo y mirando alrededor.
 
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?
 

¡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, 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 );//ордер открыть
  }                                  

   }
Razón de la queja: