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

 
Hedin:

Estimados programadores,
Por favor, indique por qué los operadores no se ejecutan cuando la condición es verdadera, o más bien se ejecutan, pero de forma aleatoria (por ejemplo, repetidamente). No hay errores en los registros.


Por favor, corrija su código:

if ( MathAbs( ord_sl - (ord_open+First_sell_limit_SL*Point) ) < Point / 2.0 && ...

Y nunca comparar variables de tipo double para la igualdad.

 
PapaYozh:


Corrija su código:

Y nunca comparar variables de tipo double para la igualdad.


¿Por qué no se pueden comparar variables de tipo double para la igualdad?
 
Hedin:

¿Por qué las variables como double no pueden ser comparadas para la igualdad?
¿Y la búsqueda ya no funciona?
 
Hedin:

¿Por qué las variables de tipo double no se pueden comparar para la igualdad?
Echaun vistazo aquí.
 
Necron:
En deinit, escribe en una variable global y en init, lee el valor de esa variable, ¿cuál es el problema?

Tengo entendido que una variable global es una variable declarada fuera de todas las funciones. Las variables globales se inicializan una vez antes de iniciar las funciones especiales.

Es decir, las variables globales se declaran al principio del programa antes de la función de inicio, incluyendo la que quiero pasar al programa en el siguiente inicio. Entonces, según tu sugerencia, en deinit fijo el valor de esta variable. Entiendo que al inicio del programa, antes de que se ejecute la función init, todas las variables globales, que se describen al principio del programa, incluyendo la variable que me interesa, serán reiniciadas. ¡Y cuando llegue la función init, mi variable, registrada anteriormente, se perderá! ¿O me equivoco?

 
No, se refería a la GlobalVariable, que se almacena en el archivo.
 
ikatsko:

Tengo entendido que una variable global es una variable declarada fuera de todas las funciones. Las variables globales se inicializan una vez antes de iniciar las funciones especiales.

Es decir, las variables globales se declaran al principio del programa antes de la función de inicio, incluyendo la que quiero pasar al programa en el siguiente inicio. Entonces, según tu sugerencia, en deinit fijo el valor de esta variable. Entiendo que al inicio del programa, antes de que se ejecute la función init, todas las variables globales, que se describen al principio del programa, incluyendo la variable que me interesa, serán reiniciadas. ¡Y cuando llegue la función init, mi variable, registrada anteriormente, se perderá! ¿O me equivoco?

Hay dos tipos de variables globales: las variables globales de tu programa, sobre las que escribes, y las variables globales de tu terminal,
que se almacenan separadas de tu programa durante quince días si no se accede a ellas, si la memoria no me falla...
se utilizan, por ejemplo, para transferir datos entre diferentes EAs que trabajan simultáneamente en el mismo terminal, etc.
Lo que necesitas son las variables globales del terminal.
 
Roger:
No, se refería a la GlobalVariable, que se almacena en el archivo.
Sí, me refería a las variables globales de la terminal. Ya hubo esta pregunta en un mensaje privado, la respondí.
 
Necron:
Sí, me refería a las variables globales del terminal. Ya ha habido esta pregunta en el mensaje privado, la he contestado.
Ya lo he descubierto. Sucede que... no lo hizo bien... Lo siento :)
 
вот, собственно код моментума стандартного из МТ4 - ии??? я не вижу тут 
double iMA(string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)
//+------------------------------------------------------------------+
//|                                                     Momentum.mq4 |
//|                      Copyright © 2004, MetaQuotes Software Corp. |
//|                                       http://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2004, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 DodgerBlue
//---- input parameters
extern int MomPeriod=14;
 
//---- buffers
double MomBuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   string short_name;
//---- indicator line
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,MomBuffer);
//---- name for DataWindow and indicator subwindow label
   short_name="Mom("+MomPeriod+")";
   IndicatorShortName(short_name);
   SetIndexLabel(0,short_name);
//----
   SetIndexDrawBegin(0,MomPeriod);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Momentum                                                         |
//+------------------------------------------------------------------+
int start()
  {
   int i,counted_bars=IndicatorCounted();
   
//----
   if(Bars<=MomPeriod) return(0);
//---- initial zero
   if(counted_bars<1)
      for(i=1;i<=MomPeriod;i++) MomBuffer[Bars-i]=0.0;
      
//----
   
   i=Bars-MomPeriod-1;
   if(counted_bars>=MomPeriod) i=Bars-counted_bars-1;
   while(i>=0)
     {
      MomBuffer[i]=Close[i]*100/Close[i+MomPeriod];
      i--;
     }
   return(0);
  }
//+------------------------------------------------------------------+
Roger:

Has buscado extrañamente

doble iMA(

string symbol, int timeframe, int period, int ma_shift, int ma_method, int applied_price, int shift)

El primer elemento.