Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 2

 
gyfto:


Tengo la siguiente pregunta. Hay un bloque en init(), que cuelga el terminal (que es lo que quiero transferir a la dll). Naturalmente, el registro no se puede ver - el terminal sólo se cierra con Ctrl+Alt+Suprimir. Desimprimir para rastrear (y para medir el tiempo de lapso de los bucles que entran en el bloque) no ayuda - la impresora no escribe nada, el registro ni siquiera se crea. Intento utilizar FileOpen/FileWrite con el mismo propósito - el archivo se acaba de crear (0 Kb), y el silencio. Puse FileWrite después de FileOpen, en la siguiente línea - sin efecto. ¿Por dónde debo cavar?

Intenta usar esto. Si no sirve de nada, para buscar errores, puedes poner temporalmente el mencionado bloque de inicialización en el arranque por única vez a través de la bandera y tratar de "sacar" los registros de él.
 
gyfto:


El tema se cerró... Hombre malo.

Tengo la siguiente pregunta. Hay un bloque en init(), que cuelga el terminal (que es lo que quiero transferir a la dll). Naturalmente, el registro no se puede ver - el terminal sólo se cierra con Ctrl+Alt+Suprimir. Desimprimir para rastrear (y para medir el tiempo de lapso de los bucles que entran en el bloque) no ayuda - la impresora no escribe nada, el registro ni siquiera se crea. Intento utilizar FileOpen/FileWrite con el mismo propósito - el archivo se acaba de crear (0 Kb), y el silencio. Puse FileWrite después de FileOpen, en la siguiente línea - sin efecto. ¿En qué dirección hay que cavar?


Mira, ¿no hay nada oculto en los atributos?


No lo es.
 
TarasBY:
Intenta usar esto. Si eso no ayuda, para buscar errores, puede tomar temporalmente el bloque de inicialización mencionado en el inicio para un inicio único a través de una bandera y tratar de "tirar" los registros de la misma.


No funciona ni el arranque único en start ni en ininit - ni Print ni FileWrite. Adjunto este trozo de código (no veo otra salida), no lo voy a publicar aquí, porque es demasiado largo. He eliminado todas las declaraciones del buffer y he descrito todas las llamadas de los indicadores técnicos incorporados allí. Ya he pensado en el desbordamiento de la memoria con los arrays, he calculado que el array más grande más todos los demás arrays tiene cincuenta metros y medio. Bueno, si no se imprime ni siquiera en la primera línea, al entrar en el bloque... - eso es lo que me preocupa. La versión adjunta es verdadera con FileWrite.
Archivos adjuntos:
eflfcaj.mq4  10 kb
 
gyfto:

No funciona ni el lanzamiento único en el inicio ni en el ininit - ni Print ni FileWrite. Adjunto este trozo de código (no veo otra salida), no lo pego aquí porque es muy largo. He eliminado todas las declaraciones del buffer y he descrito todas las llamadas de los indicadores técnicos incorporados allí. Ya he pensado en el desbordamiento de memoria con los arrays, he calculado que el array más grande más todos los demás arrays es de cincuenta y pico. Bueno, si no se imprime ni siquiera en la primera línea, al entrar en el bloque... - eso es lo que me preocupa. La versión adjunta es verdadera con FileWrite.

El estilo del código no lo descarta. Sin espacios, paréntesis a distintos niveles, varias operaciones seguidas, sin comentarios... ¡Pesadilla! :-))

¿Lo entiendes tú mismo?

 
Ayudar a resolver un problema con MT4. Cuando se llama a un indicador personalizado, sus parámetros de entrada y colores no se muestran en la ventana (parpadean rápidamente y desaparecen). ¿Cómo solucionarlo? Reinstalé MT4, no ayudó.
 
gyfto:


Cerró el tema... No es un buen hombre.


= :)
 
gyfto:

No funciona ni el arranque único ni el arranque inicial, ni Print, ni FileWrite. Adjunto este trozo de código (no veo otra salida), no lo pego aquí porque es muy largo. He eliminado todas las declaraciones del buffer y he descrito todas las llamadas de los indicadores técnicos incorporados allí. Ya he pensado en el desbordamiento de la memoria con los arrays, he calculado que el array más grande más todos los demás arrays tiene cincuenta metros y medio. Bueno, si no se imprime ni siquiera en la primera línea, al entrar en el bloque... - eso es lo que me preocupa. La versión adjunta es verdadera con FileWrite.

Estoy de acuerdo con Vadim: el código es difícil de leer. Intenta descomponer este código en bloques funcionales, en cada bloque imprime o escribe en un archivo. Y ejecutarlo en una estructura que "ralentice" la ejecución del código, por ejemplo, así:

void SteppingThrough()
{
    int  li_Time = TimeLocal(), li_N = 0;
    bool lb_work = true, lb_break = false;
    while (IsStopped() == false)
    {
        if (lb_work)
        {
            switch (li_N)
            {
                case 0:
                    //---- Block 1
                    lb_work = false;
                    li_N++;
                    break;
                case 1:
                    //---- Block 2
                    lb_work = false;
                    li_N++;
                    break;
                case N:
                    //---- Block N
                    lb_break = true;
                    li_N++;
                    break;
            }
            if (lb_break) break;
        }
        if (TimeLocal() > li_Time) {li_Time = TimeLocal(); lb_work = true;}
    }
}

Retrasa la ejecución del siguiente bloque 1 segundo. - El terminal debería tener tiempo suficiente para imprimir el registro.

 
 

Hay 2 funciones muy similares en la bandera de cierre de la última posición de Kim por STOP y la otra por TAKE.

aquí está el código

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по стопу.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, osl;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(OrderSymbol(), MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    osl=NormalizeDouble(OrderStopLoss(), dg);
    if (ocp==osl) return(True);
  }
  return(False);
}
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.05.2008                                                     |
//|  Описание : Возвращает флаг закрытия последней позиции по тейку.           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
bool isCloseLastPosByTake(string sy="", int op=-1, int mn=-1) {
  datetime t;
  double   ocp, otp;
  int      dg, i, j=-1, k=OrdersHistoryTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t<OrderCloseTime()) {
                t=OrderCloseTime();
                j=i;
              }
            }
          }
        }
      }
    }
  }
  if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(OrderSymbol(), MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    otp=NormalizeDouble(OrderTakeProfit(), dg);
    if (ocp==otp) return(True);
  }
  return(False);
}

Como puede ver, son muy similares.

Pero, por alguna razón, sólo me funciona el cierre mediante STOP.

SL=  isCloseLastPosByStop("", -1, -1);
TP=  isCloseLastPosByTake("", -1, -1);

Print(SL,"_",TP); 

Funciona, pero mi Asesor Experto no imprime UNIT, sino que sigue imprimiendo NULL.

Pero el cierre en STOP imprime correctamente: si stop = 1, si no stop =0....

ayúdame por favor....

 
lottamer:

Hay 2 funciones muy similares en la bandera de cierre de la última posición de Kim por STOP y la otra por TAKE.

aquí está el código

Como puede ver, son muy similares.

Pero, por alguna razón, sólo me funciona el cierre mediante STOP.

Abro posición manualmente, pongo TAKE corto. funciona - pero EA no imprime UNIT, sino que sigue imprimiendo NULL.

Pero el cierre en STOP imprime correctamente: si stop = 1, si no stop =0....

ayúdame a entender esto por favor....


Fíjese bien en qué precio tenía la orden de stop en la posición abierta y a qué precio se cerró exactamente. La función de Igor compara estos precios exactos pero no tiene en cuenta el deslizamiento.