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

 
Zhunko:

Hay que formarse a partir de las garrapatas. El conversor de periodos hace el mínimo de minutos.


La de Kovalev es correcta. He resaltado en rojo lo que no tiene.

Lo tengo. Muchas gracias.
 
MauzerVII:

Chicos, ayudadme.

No entiendo por qué la línea

Resultado: 2013.04.12 17 13 Print_v4 EURUSD,M15: SL == 1.3068

da cuatro decimales?

Estoy al tanto deDoubleToStr.



Si eres consciente de ello, cuál es la cuestión, no lo entiendo.

 

Pregunta sobre el código del recolector de garrapatas en kodobase. Algún tipo de comprobación extraña de las condiciones asignadas en la cabecera de las variables booleanas que no cambian más adelante en el código. No entiendo cómo funciona.

//в шапке
           bool tick.time.local        =               false;
           bool tick.chart.update      =                true;
//в init()
   if(tick.chart.update == true)
     {
     if(MT4InternalMsg == 0)  
            {
            MT4InternalMsg = RegisterWindowMessageA("MetaTrader4_Internal_Message"); 
            }   
     }  
//в start()
     if(tick.time.local == true)//где менялось, я вообще не понял
       {
       time = TimeLocal();
       }
       else{
       time = TimeCurrent();
       }
//--------------------------------
       if(tick.chart.update == true)
         {
                   hwnd = WindowHandle(sn, 1);
         if(PostMessageA(hwnd, WM_COMMAND, 0x822c, 0) == false)
           {
           hwnd = 0;
           return;
           }
           PostMessageA(hwnd, MT4InternalMsg, 2, 1);             
           }                 
         } 

El valor de las variables booleanas asignadas no cambia en ninguna parte de las condiciones (y más allá en el código). Además, start() comprueba el valor inverso de la variable asignada en absoluto. Pero funciona. ¿Cómo?

 

¿O se trata de un código no optimizado? GetLastError() se declara en la cabecera

#import "ntdll.dll"
 int RtlGetLastWin32Error();
 int RtlSetLastWin32Error (int dwErrCode);

Y estas funciones NaiveAPI no se utilizan en ninguna otra parte del código...

 

Compañeros programadores, decidme cómo resolver un problema "sencillo".

Por ejemplo, necesito eliminar la segunda línea de un archivo CSV. No he podido encontrar ninguna información sobre cómo hacerlo en la documentación.

Ejemplo:

12:30;1;1.34818;12:32;3;3;100;1.34939;18:45\r\n

14:00;1;1.32219;14:26;6;6;100;0.0000;00:00\r\n

19:00;0;1.35828;19:12;12;6;600;1.37939;19:59\r\n

 
tuner:


Ayudaría, pero no tengo tiempo para pensar en otra cosa, lo siento.

En cuanto a la pregunta sobre dónde se cambian. Supongo que son banderas de depuración, que el programador utilizó al escribir el indicador y dejó en el código para la depuración, si alguien las necesita.

 

La conclusión es sencilla. El swing rápido se cruza con el lento. Entonces el precio vuelve a ser el rápido y entonces el Asesor Experto debe abrir una orden.

Por el momento he escrito la función para fijar el retroceso de la siguiente manera:

//+-------------------------------------------------------------------------------------+
//| Получение значений МА на указанном баре                                             |
//+-------------------------------------------------------------------------------------+
double GetMA(int index, int maPeriod)
{
   return (iMA(NULL, i_TF, maPeriod, 0, MODE_EMA, MODE_CLOSE, index));
}
//+-------------------------------------------------------------------------------------+
//| Имеет ли место отскок?                                                              |
//+-------------------------------------------------------------------------------------+
void IsRebound(int crossDir[], bool& returnSign[])
{
   for (int i = 0; i < 4; i++)
   {
      if (crossDir[i] == CROSS_NO)
         continue;

      returnSign[i] = false;
      double ema = GetMA(1, g_maPeriod[i]);

      if (crossDir[i] == CROSS_UP)
      {
         if (ND(MathAbs(ema - Ask)) <= i_thresholdFromMa * pt) // ..зазор между ценой покупки и машки, <= i_thresholdFromMa..
         {
            returnSign[i] = true;
            Alert("CROSS_UP");
         }
      }
      if (crossDir[i] == CROSS_DN)
      {
         if (ND(MathAbs(ema - Bid)) <= i_thresholdFromMa * pt) // ..зазор между ценой покупки и машки, <= i_thresholdFromMa..
         {
            returnSign[i] = true;
            Alert("CROSS_DN");
         }
      }
   }
}

¿Es esto correcto? ¿O debería hacerse de otra manera?

La matrizcrossDir[] almacena valores sobre la existencia de un cruce. Si lo hay, comprueba la diferencia entre el precio actual de compra o venta y el valor de la máscara. Por alguna razón, la condición no se cumple en absoluto.

Esto es lo que necesito:

retroceder

Después de que cualquier pulsera cruce 365, y tan pronto como el precio vuelva a la pulsera correspondiente que cruzó 365, compre. ¿CÓMO PUEDO LIBERAR ESTO?

 

Dibuja algún tipo de diagrama lógico de lo que quieres. Para ti.

Un año consta de aproximadamente 250 barras diarias.

 
¿Nadie ha implementado esto? No creo que sea muy complicado. Es que aún no tengo mucha experiencia, no entiendo muy bien cómo formalizar este punto...
 
hoz:
Nadie lo ha hecho nunca. No creo que sea muy difícil. Es que todavía no tengo mucha experiencia, no entiendo muy bien cómo formalizar este punto...

Podrías hacerlo en un diagrama de flujo. Se podría hacer otra cosa, pero de forma muy completa y sin ambigüedades. Para que no te pueda dar una patada por la incoherencia de la idea con su descripción.

No lo haré.