Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 1668

 
artem artem #:

SanAlex, sí, miré el probador del actual de este año, todo bien) Los resultados son buenos, en un futuro próximo intentaré ejecutarlo en una cuenta real

¿Cuál es el nombre del Asesor Experto? ¿Lo has descargado de kodobase? Necesito ver cómo el autor lo ha implementado en la función

//+------------------------------------------------------------------+
// Permission to trade in this day                                   |
//+------------------------------------------------------------------+
bool TradingDay(int hmin, int hmax) // Определение времени и дня разрешения торговли
  {
   bool dtrade = false;
   switch(DayOfWeek())
     {
      case 1: // Monday
         if(Monday == 1)
            dtrade = true;
         break;
      case 2: // Tuesday
         if(Tuesday == 1)
            dtrade = true;
         break;
      case 3: // Wednesday
         if(Wednesday == 1)
            dtrade = true;
         break;
      case 4: // Thursday
         if(Thursday == 1)
            dtrade = true;
         break;
      case 5: // Friday
         if(Friday == 1)
            dtrade = true;
         break;
      default: //
         dtrade = false;
         break;
     }
   if(dtrade && !(Hour() >= hmin && Hour() <= hmax))
      dtrade = true;
   return dtrade;
  }
//+------------------------------------------------------------------+

Nos falta algo - añadir la condición al ontik

 
SanAlex #:

¿Cómo se llama el experto? ¿Lo has descargado de kodobase? Necesito ver cómo el autor lo ha implementado en la función

Falta algo - añadir una condición al ontik

Sasha, el trabajo de sincronización no ha sido incluido. Sólo se han añadido algunas características para conectar durante el desarrollo)
 
MakarFX #:
Sasha, el trabajo de sincronización no ha sido incluido. Sólo se han añadido algunas características para conectar durante el desarrollo)

Voy a rehacerlo a mi manera.

 
artem artem #:

SanAlex, sí, miré el probador del actual de este año, todo bien) Los resultados son buenos, en un futuro próximo intentaré ejecutarlo en una cuenta real

Este y el tiempo funcionarán - He cambiado la función

//---
input string   s0 = "Баланс";                  // 1
input string   Template       = "ADX";         // Имя шаблона(without '.tpl')
input double   TargetProfit   = 1000000;       // Баланс + Прибыль(прибавить к балансу)
input double   TargetLoss     = 0;             // Баланс - Убыток(отнять от баланса)
input string   s2 = "Trading options";         // 2
input double   Lots           = 0.1;           // Lots
input double   MaximumRisk    = 0.02;          // MaximumRisk
input double   DecreaseFactor = 3;             // DecreaseFactor
input double   InpSLoss       = 4000;          // стоплосс
input double   InpTProfit     = 2000;          // тейкпрофит
input string   s3 = "TP SL";                   // 3
input double   InpTakeProfit  = 2000;          // Exchange TP
input double   InpStopLoss    = 4000;          // Exchange SL
input string   s4 = "Индикатор MA";            // 4
input int      MovingPeriodLw = 13;            // MovingPeriodLw
input int      MovingPeriodS1 = 55;            // MovingPeriodS1
input int      MovingPeriodS2 = 89;            // MovingPeriodS2
input string   s5 = "Индикатор MACD";          // 5
input int      InpFastEMA     = 12;            // Fast EMA Period
input int      InpSlowEMA     = 26;            // Slow EMA Period
input int      InpSignalSMA   = 9;             // Signal SMA Period
input string   s6 = "Start Stop";              // 6
input datetime HoursFrom      = D'1970.01.02'; // 1 Время: старт
input datetime HoursTo        = D'1970.01.01'; // Время: стоп
input datetime HoursFrom2     = D'1970.01.01'; // 2 Время: старт
input string   s7 = "Time:Start Stop";         // 7
input int      HoursFrom1     = 0;             // Время: старт
input int      HoursTo1       = 24;            // Время: стоп
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Закрыть Общий профит или профит на паре
   if(ProfitTarget())
     {
      return;
     }
//--- Закрыть профит BUY или SELL на паре
   ProfitOnTick();
//---
   if((HoursFrom<HoursTo && TimeLocal()>=HoursFrom && TimeLocal()<HoursTo) ||
      (HoursFrom>HoursTo && (TimeLocal()<HoursTo || TimeLocal()>=HoursFrom)) ||
      (HoursFrom2<HoursTo2 && TimeLocal()>=HoursFrom2 && TimeLocal()<HoursTo2) ||
      (HoursFrom2>HoursTo2 && (TimeLocal()<HoursTo2 || TimeLocal()>=HoursFrom2)))
     {
      MqlDateTime currTime;
      TimeLocal(currTime);
      int hour0 = currTime.hour;
      if((HoursFrom1 < HoursTo1 && hour0 >= HoursFrom1 && hour0 < HoursTo1) ||
         (HoursFrom1 > HoursTo1 && (hour0 < HoursTo1 || hour0 >= HoursFrom1)))
        {
         // Определение направления пересечения мувингов
         if(Init)
            InitMetod();
         // Ожидание нового бара на графике
         if(timeprev == Time[0])
            return;
         timeprev = Time[0];
         // Открытие ордера по методу Пуриа
         CheckForOpen();
        }
     }
  }
//+------------------------------------------------------------------+

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

La función Tiempo en mt4 y en mt5 funciona

Archivos adjuntos:
 
MakarFX #:
¿No quieres librarte de las clases?

Hace poco que los descubrí. No sé, es una cosa muy útil. ¿Qué sugieres? ¿Poner todo en funciones? Si eso resolviera el problema.

Tengo dos objetos globales (bar, db_last) de una clase Bar, el primero se inicializa con los parámetros de cada nueva barra (barra habitual en el gráfico), y el segundo guarda una barra correspondiente a todas las condiciones. De hecho, en otro objeto local de la clase Orden se realizan todos los cálculos a partir de los parámetros db_last para abrir una orden. Los parámetros db_last y bar se utilizan en muchos lugares, pero sólo para la lectura, la inicialización y la asignación se producen en un solo lugar, en OnTick (), por lo que los cambios inesperados en los objetos no deben ser.

void OnTick()
{
  last_time = iTime(NULL, 0, 0);
  BreakevenActivate();

  if(last_time > bar.time_open){
    bar.Initialize();
    TrawlOnFractals();

    if(BarRelativeMA() == "bear"){
      n_arrow_down++;
      db_last = bar;
      if(db_last.IsBearishDB() == true) OpenOrder("bear");
      ArrowCreate(OBJ_ARROW_DOWN,0,"ArrowDown"+IntegerToString(n_arrow_down,4,'0'),
                  0, iTime(NULL,0,1),AnchorPrise("bear"),ANCHOR_BOTTOM);
    }

    if(BarRelativeMA() == "bull"){
      n_arrow_up++;
      db_last = bar;
      if(db_last.IsBullishDB() == true) OpenOrder("bull");
      ArrowCreate(OBJ_ARROW_UP,0,"ArrowUp"+IntegerToString(n_arrow_down++,4,'0'),
                  0, iTime(NULL,0,1),AnchorPrise("bull"),ANCHOR_TOP);
    }

    bar.time_open = last_time;
  }
   
}
 
Nerd Trader #:

Hace poco que los descubrí. No sé, es una cosa muy útil. ¿Qué sugieres? ¿Poner todo en funciones? Si eso resolviera el problema.

Tengo dos objetos globales (bar, db_last) de una clase Bar, el primero se inicializa con los parámetros de cada nueva barra (barra habitual en el gráfico), y el segundo guarda una barra correspondiente a todas las condiciones. De hecho, en otro objeto local de la clase Orden se realizan todos los cálculos a partir de los parámetros db_last para abrir una orden. Los parámetros db_last y bar se utilizan en muchos lugares, pero sólo para la lectura, la inicialización y la asignación ocurren en un solo lugar, en OnTick (), por lo que no deberían ocurrir cambios inesperados en los objetos.

Yo lo probaría, no cuesta dinero).

Pero hay errores, especialmente errores con la simple normalización

¿Puedes enviarme el archivo en un mensaje privado? Le echaré un vistazo.
 
SanAlex #:

¿Cómo se llama el experto? ¿Lo has descargado de kodobase? Necesito ver cómo el autor lo ha implementado en la función

Me he perdido algo - para añadir la condición al ontik

SanAlex, he adjuntado la versión descargada en este mensaje - tiene Puria + trailing stop + nivel de equilibrio + watchdog trading. Yo probaría el comercio con el reloj, pero aún no me he puesto a ello)

Archivos adjuntos:
 
MakarFX #:

La falta de historial afecta a las lecturas de los indicadores al principio de la prueba

MakarFX, yo también pensé en eso, así que debería funcionar como es debido

 
artem artem #:

SanAlex, adjunto la versión que he descargado en este post - es Puria + trailing stop + nivel de equilibrio + reloj de comercio. Yo probaría el comercio con el reloj, pero aún no me he puesto a ello).

Encontré esto en kodobase https://www.mql5.com/ru/code/12654

- No he visto tu objetivo, ¿qué querías cambiar en él?

Советник по методу Пуриа
Советник по методу Пуриа
  • www.mql5.com
Советник открывает позиции по алгоритму метода Пуриа.
 
SanAlex #:

Encontré esto en kodobase https://www.mql5.com/ru/code/12654

- No he visto tu objetivo, ¿qué querías cambiar en él?

Qué adiciones quería hacer:

1. Para ello, que la apertura de un acuerdo y la comprobación de todas las condiciones de los indicadores(el cruce de un rápido (5) dos lentos (75) (85) y la apertura de la barra de MACD en la misma dirección con un rápido (5) ) se realizó sólo en el precio de apertura de una nueva vela (el primer tick de cada vela de 30 minutos);
  1. Crear condiciones para la "puesta a cero" de los indicadores. Por ejemplo, para un movimiento rápido (5) Si es más alta que la lenta, es una señal de compra. Si luego baja y toca uno de ellos, o se encuentra entre los lentos (75) y (85)- entonces la señal del indicador de movimiento rápido" se pone a cero", por así decirlo, y permanecerá en esta posición" cero" mientras toque o permanezca entre los lentos. Si después la rápida cruza ambas lentas hacia un lado(incluso si vuelve al lado del que venía antes de tocar las lentas)- entonces será una señal de este indicador. Con el MACD la situación es similar- Sólo el MACD=0 se considerará como" puesta a cero" (si en la primera vela el MACD, por ejemplo, abrió con 0,0043, y en la segunda vela con -0,0010, significa que el MACD en la segunda vela se ha" puesto a cero" y ha dado una nueva señal). Sin embargo, hay un momento en que el rápido (5) y el MACD deben estar como "en igualdad de condiciones" - si (5) no cambia su posición en relación con el lento, y el MACD ha abierto en la vela anterior en la zona equivocada (sin entrada), y en la siguiente - en la misma zona que el rápido, entonces todas las condiciones han convergido y se debe hacer una entrada a la orden. Tenga en cuenta que todo esto debe ser sólo en los precios de apertura de las velas - sólo en esta garrapata;
  1. Y la última, hacer que el Asesor Experto espere 4 aperturas de velas consecutivas:

    1. 1er precio de apertura - (5) por encima de (75) y (85) + barra MACD abierta por encima de 0- 1 de 4 confirmaciones;
    2.2. El precio de apertura de la 2ª vela - (5) sobre (75) y (85) + barra MACD abierta sobre 0- 2 de 4 confirmaciones es;
    3. El precio de apertura de la 3ª vela - (5) sobre (75) y (85) + barra MACD abierta sobre 0- 3 de 4 confirmaciones es;
    4.Precio de apertura de la 4ª vela - (5) por encima de (75) y (85) + barra MACD abierta por encima de 0- 4 de 4 confirmaciones- Abrir operación de compra en la misma vela (4ª).
La misma situación con las órdenes de venta, sólo que en la otra dirección deben abrirse los indicadores. Y hay un punto importante- si en, digamos, cualquier etapa de la 1 ª vela a la 4 ª, los indicadores cambian su posición(por ejemplo, en la 3 ª vela de apertura, la barra de MACD se abre por debajo de 0, o = 0)- entonces todo se restablece, porque las señales no se verificaron en la apertura de 4 ª vela en una fila.
Razón de la queja: