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

 

¿Qué tipo de constantes: MA_TALKING_LONG , MA_TALKING_SHORT ?

¿Cómo se declaran?

 
Vinin:

Tener en cuenta la visibilidad de las variables y las matrices


Los puse en global... El mismo error.

PREGUNTAS Y RESPUESTAS:

¿Qué tipo de constantes: MA_TALKING_LONG , MA_TALKING_SHORT ?

¿Cómo se declaran?

#define MA_TALKING_LONG                         0                             // Машки расположены к покупке
#define MA_TALKING_SHORT                        1                             // Машки расположены к продаже
#define MA_TALKING_FLAT                        -1                             // Машки указывают на флет
 

mostrar la cabecera (declaración) de esta función GetStateMa() - el problema está ahí

cambiarlo por GetStateMa(int signal){} debería arreglarlo

 
FAQ:

mostrar la cabecera (declaración) de esta función GetStateMa() - el problema está ahí

Cambiarlo por GetStateMa(int signal){} debería arreglarlo

En fin, esto es lo esencial. Un profesional aquí ha corregido mi Asesor Experto, funcionó bien. Mi tarea era abrir 1 orden sólo para 4 señales diferentes y cada señal fue generada y calculada por separado. Arregló mi Asesor Experto, pero desordenó su lógica.

Empecé a analizar su código. Su escritura es brutal, he estado investigando por segundo día.

Antes era así:

al principio:

   int signal[4];
   CalcSignals(signal);

   if (!Trade(signal))
      return (0);

Y aquí están las funciones para que quede claro lo que es:

//+-------------------------------------------------------------------------------------+
//| Получение значений МА на двух соседних барах                                        |
//+-------------------------------------------------------------------------------------+
double GetCurAndPrevMA(int maPeriod, double& prevMA)
{
   prevMA = iMA(NULL, i_trading_TF, maPeriod, 0, MODE_EMA, MODE_CLOSE, 1);
   return (iMA(NULL, i_trading_TF, maPeriod, 0, MODE_EMA, MODE_CLOSE, 0));
}
//+-------------------------------------------------------------------------------------+
//| Получение положения машек между собой                                               |
//+-------------------------------------------------------------------------------------+
void CalcSignals(int& signal[])
{
   double ema365_1;
   double ema365_0 = GetCurAndPrevMA(365, ema365_1);

   for (int i = 0; i < 4; i++)
   {
      double ema1;
      double ema0 = GetCurAndPrevMA(g_maPeriod[i], ema1);
      signal[i] = SIGNAL_NO;

      if (ema1 < ema365_1 && ema0 > ema365_0)
         signal[i] = SIGNAL_BUY;
      if (ema1 > ema365_1 && ema0 < ema365_0)
         signal[i] = SIGNAL_SELL;
   }
}

En general, es curioso ver que una función como void no debería devolver nada por definición y sin embargo devuelve el valor de un elemento del array signal[i].

Me pregunto si los programadores experimentados lo utilizan a menudo. ¿O es demasiado?

Ahora estoy tratando de escribir lo que necesito viendo los trucos que están presentes en ese Asesor Experto. Porque ahí no podemos prescindir de las matrices.

 
Тhoz:

En fin, esto es lo esencial. Mi Expert Advisor, que me ha funcionado bien, ha sido corregido por un profesional. Mi tarea era abrir sólo 1 orden por 4 señales diferentes y cada señal fue generada y calculada por separado. Arregló mi Asesor Experto, pero desordenó su lógica.

Así que empecé a analizar su código. Su escritura es brutal, he estado investigando por segundo día.

Antes era así:

al principio:

Y aquí están las funciones para que quede claro lo que es:

En general, es curioso ver que una función como void no debería devolver nada por definición y sin embargo devuelve el valor de un elemento del array signal[i].

Me pregunto si los programadores experimentados lo utilizan a menudo. ¿O es demasiado?

Ahora estoy tratando de escribir lo que necesito viendo los trucos que están presentes en ese Asesor Experto. Porque ahí no podemos prescindir de las matrices.

Utilizado con frecuencia, secreto en int& , double&
 
Mislaid:
Se utiliza a menudo, el secreto enint& ,double&

Ya me lo he imaginado, pero creo que ya es una perversión. ¿Por qué hacer una función nula entonces? No es lógico. Necesitas devolver algo... devolverlo a través de una función de tipo int, double...

 
Se ha producido un error al depurar la impresora:
2013.01.06 21:06:32     2011.11.28 00:20  Base150 EURUSD,M5: not enough stack for parameter

¿Qué hacer?

 
hoz:

Ya me lo he imaginado, pero creo que ya es una perversión. ¿Por qué hacer una función nula entonces? No es lógico.

Es lógico.

Esta función no devuelve nada, realiza operaciones sobre los elementos del array que se le pasa.

 
hoz:

Aquí está mi función de modificar la orden pendiente. Al modificar, establezco un nuevo precio y un nuevo stoploss. La función funciona parcialmente, pero por alguna razón el probador está recibiendo errores 1.

¿Está mi función escrita correctamente?

if((b_mod) && (precioB > Ask)) OrderModify(b_ticket,priceB,priceS,0,0,Brown);
if((s_mod) && (priceS < Bid)) OrderModify(s_ticket,priceS,priceB,0,0,Brown);


Aquí debemos considerar MarketInfo(Symbol(),MODE_STOPLEVEL) es decir

priceB >= Ask+ MarketInfo(Symbol(),MODE_STOPLEVEL)*Point

priceS < =Bid- MarketInfo(Symbol(),MODE_STOPLEVEL)*Point

 
PapaYozh:

Esto tiene sentido.

Esta función no devuelve nada, opera sobre los elementos del array que se le pasa.


Por lo tanto, si se pasan elementos a una función de tipo double oint, ésta también puede realizar las mismas operaciones, pero sin ninguna perversión. ¿Por qué complicarse la vida?