Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 180

 
Igor Makanu:

Sí, soy de la misma opinión, pero no sólo la historia y el número de búferes de indicadores - es decir, de nuevo en la asignación de memoria, si MT4 ha engullido toda la memoria, entonces se está desacelerando - aparentemente comienza a liberar áreas de memoria

Definitivamente, los desarrolladores pueden responder, pero estamos hablando de MetaTrader 4, y aquí ...

 
Alexander Fedosov:

¿Por qué hacer cálculos en el código?

No hagas cálculos - el tema no era inteligente, y me interesaba comprobar lo que hace el optimizador, así que redacté el código

Puedes añadirlo a tu código de esta manera:

int handle=INVALID_HANDLE;
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   handle=FileOpen("tst.txt",FILE_READ|FILE_WRITE|FILE_TXT);
   FileSeek(handle,0,SEEK_END);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   if(handle!=INVALID_HANDLE)
     {
      FileWriteString(handle,DoubleToString(Value1),DoubleToString(Value2)+"\n");
      FileClose(handle);
     }
  }
//+------------------------------------------------------------------+
void OnTick()
  {
  }

es decir, sólo escribir los parámetros de optimización en el archivo, si se cuelga, en el archivo se puede leer el último pase lo que los parámetros eran y el tiempo de archivo será el tiempo de "último aliento" del probador

 
Artyom Trishkin:

Los desarrolladores podrán responder de forma inequívoca, pero estamos hablando de MetaTrader 4, y hay ...

Y aquí... nada va a cambiar. Usamos lo que tenemos.

 

Hola, me pueden aconsejar, el sistema de trading solo abre una posición cuando se abre una nueva barra horaria bajo ciertas condiciones. Necesito asegurarme de que si cierro la posición usando un stop loss en la barra actual, la operación no se abrirá de nuevo. Lo implementé de esta manera:

if (OrdersTotal()==0 && ticket!=-1) // no hay lotes abiertos pero el ticket existe

{

if (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // hora de cierre del pedido

datetime tob=iTime(NULL,PERIOD_H1,0); // Hora de apertura de la barra actual

if (tob>tct) // no permite abrir una nueva orden si la operación se cerró en la misma vela que se abrió

{

FUNCIÓN PARA ABRIR UNA POSICIÓN

}


En el probador de estrategias, las posiciones reabiertas ya no se abren, pero cuando se opera en vivo, se abre una posición. ¿Puedes decirme qué pasa?)

 
kmerlin:

Hola, ¿podríais decirme si el sistema de trading abre una posición sólo en la apertura de una nueva barra horaria bajo ciertas condiciones? Necesito asegurarme de que si cierro la posición usando un stop loss en la barra actual, la operación no se abrirá de nuevo. Lo implementé de esta manera:

if (OrdersTotal()==0 && ticket!=-1) // no hay lotes abiertos pero el ticket existe

{

if (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // hora de cierre del pedido

datetime tob=iTime(NULL,PERIOD_H1,0); // Hora de apertura de la barra actual

if (tob>tct) // no permite abrir una nueva orden si la operación se ha cerrado en la misma barra en la que se abrió

{

FUNCIÓN PARA ABRIR UNA POSICIÓN

}


En el probador de estrategias, las posiciones reabiertas ya no se abren, pero cuando se opera en vivo, se abre una posición. ¿Puede decirme qué pasa?)

¿Lo es?

 
Alexander Fedosov:

¿Lo es?


No es así. ¡¿Qué pasa con mi variante? la condición principal es no poder volver a entrar en la vela horaria actual! Es una condición bastante simple, ¿qué tiene de malo y por qué no funciona?

 
kmerlin:

No es así. ¿Qué pasa con mi variante? ¡La condición principal es que no es posible volver a entrar en la vela actual! Es una condición bastante simple, ¿qué tiene de malo y por qué no funciona?

if (OrdersTotal()==0 && ticket!=-1) // Открытых лотов нет но тикет существует

{

if (OrderSelect(ticket,SELECT_BY_TICKET)==true)

{

datetime tct=OrderCloseTime(); // Время закрытия ордера

datetime tob=iTime(NULL,PERIOD_H1,0); // Время открытия бара текущего

if (tob>tct) // Не дает открыть повторный ордер если сделка закрылась на той же свече что и открылась

{

ФУНКЦИЯ ОТКРЫТИЯ ПОЗИЦИИ

}

¿Y qué billete ha elegido en OrderSelect?

 
Alexander Fedosov:

¿Qué billete ha seleccionado en OrderSelect?

El billete se envía en último lugar... Cuando una orden está abierta, no se pueden abrir nuevas órdenes en el sistema y no se pueden colocar órdenes pendientes. Así que la última entrada es la última orden de parada o de beneficio.
 
kmerlin:
El billete se pasa a la última orden. Cuando una orden está abierta, la apertura de nuevas órdenes es imposible dentro del sistema, y las órdenes pendientes tampoco pueden tener lugar. Por lo tanto, el último billete es la última orden en la parada o el beneficio.

¿Cómo se pasa el ticket del último pedido?

Y OrdersTotal() pasa el número total de órdenes abiertas y pendientes.

Aquí está la nueva barra del marco temporal actual.

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool IsNewBar()
  {
   static datetime prevtime=0;
   if(prevtime==Time[0])
      return(false);
   else
     {
      prevtime=Time[0];
      return(true);
     }
  }
 
Alexander Fedosov:

¿Cómo se pasa el ticket del último pedido?

Y OrdersTotal() pasa el número total de órdenes abiertas y pendientes.

Aquí está la nueva barra del marco temporal actual.

El ticket se declara como una variable global. Se pasa un billete para comprar o vender. En mi sistema no se pueden abrir varias órdenes, sólo se puede abrir una, y tampoco puede haber ninguna pendiente. Por lo tanto, la última entrada, según entiendo, es una orden cerrada en beneficio o stop.

ok, mi cabeza está zumbando... mañana me replantearé tu consejo

Razón de la queja: