[¡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 634

 
artmedia70:

Una cosa más...

Al hacer la prueba, eliminé de la ventana del gráfico todas las indulgencias que se cargan automáticamente desde la plantilla (la plantilla tiene el nombre de un EA y se carga automáticamente al hacer la prueba).

En el diario del probador se escribe constantemente sobre la carga exitosa de una indulgencia personalizada e inmediatamente sigue con un registro de su eliminación. Y así continúa durante toda la prueba...

¿Es normal o es algo malo?

¿Cómo puedo solucionarlo?


Puede que llegue tarde a la respuesta, pero yo mismo me he enfrentado a una situación así. No es bueno :)

Tengo esos registros en el cargador, al llamar a un indicador personalizado a través de iCustom(), olvidé pasar uno de los parámetros por error. El compilador no rastrea estos errores, incluso durante la prueba ya que el nombre del indicador es correcto, MT escribe que todo se carga con éxito, pero no se comprueba el número de parámetros, y como los parámetros se especifican incorrectamente, se produce un error en el indicador y se descarga inmediatamente. He notado que la prueba se ejecuta lentamente y el registro es el mismo:

01:11:13 2000.01.03 02:00 EMMA_Update_2 EURUSD,M15: cargado con éxito

01:11:13 2000.01.03 02:00 EMMA_Update_2 EURUSD,M15: eliminado

01:11:13 2000.01.03 02:01 EMMA_Update_2 EURUSD,M15: cargado con éxito

01:11:13 2000.01.03 02:01 EMMA_Update_2 EURUSD,M15: eliminado

Me puse a investigar y encontré tal problema por mi falta de atención, intenté poner/quitar indicador del mismo "sobre la marcha", no vi ninguna "animación" en el registro en esta ocasión, el problema fue con iCustom(), así que revísalo por si acaso :)

 

ToLik_SRGV:

todo el problema era con iCustom(), así que comprueba por si acaso :)

Así es. Se debe a un número incorrecto de argumentos.
 

Aconsejar sobre cómo establecer la fecha de vencimiento de una orden pendiente.

Por alguna razón parece que no quiere funcionar para mí, y no hay mucha información al respecto en el manual.

Si puedes darme un ejemplo.

Gracias de antemano.

 
ToLik_SRGV:

Respuesta tardía, probablemente, pero yo también me he encontrado con esto. Esto no es bueno :)

Tengo esos registros en el diario, cuando llamando a un indicador personalizado a través de iCustom(), me olvidé de pasar uno de los parámetros por error. El compilador no rastrea estos errores, incluso durante la prueba ya que el nombre del indicador es correcto, MT escribe que todo se carga con éxito, pero no se comprueba el número de parámetros, y como los parámetros se especifican incorrectamente, se produce un error en el indicador y se descarga inmediatamente. He notado que la prueba se ejecuta lentamente y el registro es el mismo:

01:11:13 2000.01.03 02:00 EMMA_Update_2 EURUSD,M15: cargado con éxito

01:11:13 2000.01.03 02:00 EMMA_Update_2 EURUSD,M15: eliminado

01:11:13 2000.01.03 02:01 EMMA_Update_2 EURUSD,M15: cargado con éxito

01:11:13 2000.01.03 02:01 EMMA_Update_2 EURUSD,M15: eliminado

Me puse a investigar y encontré tal problema por mi falta de atención, intenté poner/quitar indicador del mismo "al vuelo", no vi ninguna "animación" en el registro en esta ocasión, el problema era con iCustom(), así que revísalo por si acaso :)

No, no es demasiado tarde... Muy bien, gracias.
 
kwadrad:

Aconsejar sobre cómo establecer la fecha de vencimiento de una orden pendiente.

Por alguna razón no parece querer funcionar para mí, y no hay mucha información al respecto en el manual.

Si puedes darme un ejemplo.

Gracias de antemano.

Aquí. Eso es lo que hago...

   double   tp,PriceOpn,PriceTake;
   string   sy=Symbol();
   double pa=MarketInfo(sy, MODE_ASK);
   double pb=MarketInfo(sy, MODE_BID);
   double po=MarketInfo(sy, MODE_POINT);

   Magic=511;
   Lots_New=NormalizeLot(Lots/2, False, NULL);
         
   PriceOpn  = NormalizePrice(pa+DistORD*po, NULL);
   PriceTake = NormalizePrice(pa+(DistORD+tp)*po, NULL);
 //------------------------------------------------------------------
   SetOrder(NULL, OP_BUYSTOP, Lots_New, PriceOpn, 0, PriceTake, Magic, TimeCurrent()+12*60); // 12 часов срок его жизни...
 //------------------------------------------------------------------
//==============================================================================================

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 02.08.2008                                                     |
//|  Описание : Установка ордера.                                              |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    op - операция                                                           |
//|    ll - лот                                                                |
//|    pp - цена                                                               |
//|    sl - уровень стоп                                                       |
//|    tp - уровень тейк                                                       |
//|    mn - Magic Number                                                       |
//|    co - комментарий                                                        |
//|    ex - Срок истечения                                                     |
//+----------------------------------------------------------------------------+
void SetOrder(string sy, int op, double ll, double pp,
              double sl=0, double tp=0, int mn=0, string co="", datetime ex=0) {
  color    cl=IIFc(op==OP_BUYLIMIT || op==OP_BUYSTOP, clOpenBuy, clOpenSell);
  datetime ot;
  double   pa, pb, mp;
  int      err, it, ticket, msl;

  if (sy=="" || sy=="0") sy=Symbol();
  msl=MarketInfo(sy, MODE_STOPLEVEL);
  if (co=="") co=WindowExpertName()+" "+GetNameTF(Period());
  if (ex>0 && ex<TimeCurrent()) ex=0;
  for (it=1; it<=NumberOfTry; it++) {
    if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) {
      Print("SetOrder(): Остановка работы функции");
      break;
    }
    while (!IsTradeAllowed()) Sleep(5000);
    RefreshRates();
    ot=TimeCurrent();
    ticket=OrderSend(sy, op, ll, pp, Slippage, sl, tp, co, mn, ex, cl);
    if (ticket>0) {
      if (UseSound) PlaySound(SoundSuccess); break;
    } else {
      err=GetLastError();
      if (err==128 || err==142 || err==143) {
        Sleep(1000*66);
        if (ExistOrders(sy, op, mn, ot)) {
          if (UseSound) PlaySound(SoundSuccess); break;
        }
        Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
        continue;
      }
      if (UseSound) PlaySound(SoundError);
      mp=MarketInfo(sy, MODE_POINT);
      pa=MarketInfo(sy, MODE_ASK);
      pb=MarketInfo(sy, MODE_BID);
      if (pa==0 && pb==0) Message("SetOrder(): Проверьте в обзоре рынка наличие символа "+sy);
      Print("Error(",err,") set order: ",ErrorDescription(err),", try ",it);
      Print("Ask=",pa,"  Bid=",pb,"  sy=",sy,"  ll=",ll,"  op=",GetNameOP(op),
            "  pp=",pp,"  sl=",sl,"  tp=",tp,"  mn=",mn);
      // Неправильные стопы
      if (err==130) {
        // Корректировка ценовых уровней
        if (modeSetOrders==1) {
          Sleep(1000*5.3);
          switch (op) {
            case OP_BUYLIMIT:
              if (pp>pa-msl*mp) pp=pa-msl*mp;
              if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
              if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
              break;
            case OP_BUYSTOP:
              if (pp<pa+(msl+1)*mp) pp=pa+(msl+1)*mp;
              if (sl>pp-(msl+1)*mp) sl=pp-(msl+1)*mp;
              if (tp>0 && tp<pp+(msl+1)*mp) tp=pp+(msl+1)*mp;
              break;
            case OP_SELLLIMIT:
              if (pp<pb+msl*mp) pp=pb+msl*mp;
              if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
              if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
              break;
            case OP_SELLSTOP:
              if (pp>pb-msl*mp) pp=pb-msl*mp;
              if (sl>0 && sl<pp+(msl+1)*mp) sl=pp+(msl+1)*mp;
              if (tp>pp-(msl+1)*mp) tp=pp-(msl+1)*mp;
              break;
          }
          Print("SetOrder(): Скорректированы ценовые уровни");
          continue;
        }
        // Вход по текущим ценам
        if (modeSetOrders==2) {
          Print("SetOrder(): Вход по текущим ценам");
          if (op==OP_BUYLIMIT || op==OP_BUYSTOP) OpenPosition(sy, OP_BUY, ll, sl, tp, mn, co);
          if (op==OP_SELLLIMIT || op==OP_SELLSTOP) OpenPosition(sy, OP_SELL, ll, sl, tp, mn, co);
          break;
        }
      }
      // Блокировка работы советника
      if (err==2 || err==64 || err==65 || err==133) {
        gbDisabled=True; break;
      }
      // Длительная пауза
      if (err==4 || err==131 || err==132) {
        Sleep(1000*300); break;
      }
      // Слишком частые запросы (8) или слишком много запросов (141)
      if (err==8 || err==141) Sleep(1000*100);
      if (err==139 || err==140 || err==148) break;
      // Ожидание освобождения подсистемы торговли
      if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
      // Обнуление даты истечения
      if (err==147) {
        ex=0; continue;
      }
      if (err!=135 && err!=138) Sleep(1000*7.7);
    }
  }
}
 
artmedia70:

Aquí. Eso es lo que hago...




О. Gracias.

Tienes que entender que este es el marco de tiempo en minutos desde la apertura...

 
kwadrad:


О. Gracias.

¿Debo entender que este es el tiempo en minutos desde la apertura?

Sí, en el ejemplo de las 12 horas de vida... 12*60 minutos
 

Sé que puede parecer OffTop, pero para mí, como recién llegado a la escritura de expertos (y a la programación en general, sin tener en cuenta mi experiencia de programación en ensamblador para Spectrum hace veinte años), mi pregunta, pero más bien.... Vamos, sólo una pregunta, estaría bien:

Mientras probaba el EA en un historial de dos años, me di cuenta de los meses en los que hay un drawdown muy fuerte. Esta es una pregunta para los veteranos: ¿qué métodos de tratar con las detracciones están disponibles como tal, lo que puede aconsejar en su opinión el más eficaz.

Desde mi punto de vista, veo dos métodos hasta ahora:

1. Congele todas las operaciones cuando la reducción de la renta variable supere un determinado número de porcentaje y
1.1 para cada posición. Después de su punto de equilibrio, conecte un trailing stop y fije el stop a una pequeña distancia del Ask/Bid, asegurando así un pequeño beneficio y luego tire de los stops después del precio, cerrando parcialmente las posiciones (para liberar fondos) cuando se gane un determinado número de puntos.
1.2. Después de que el patrimonio haya subido un determinado porcentaje, empieza a operar lentamente...

2. Por el contrario, habiendo desactivado la operación principal, tenemos que utilizar el medio lote, pero con una gran cantidad de órdenes, siguiendo estrictamente la tendencia con un pequeño trailing stop después del punto de equilibrio.

Creo que la primera forma evitará una mayor disminución de la equidad, pero hay que esperar mucho tiempo para que el mercado se acerque a las órdenes
la segunda forma se comerá el margen, pero en el caso de las posiciones a corto plazo se puede añadir rápidamente algo al dinero...

Hasta ahora sólo veo dos caminos tan opuestos.

¿Qué aconsejáis, compañeros? Todas, incluso las más, a primera vista "disparatadas" reflexiones y sugerencias son bienvenidas...

Gracias de antemano :)

 
¿El probador no permite hacer pruebas en más de un día?
 
artmedia70:
¿El probador no le permite hacer pruebas en más de un día?


Ы

¿Está preparando un EA para el interbancario?