Funciones útiles de KimIV - página 80

 
zennon писал(а) >>
La función MovingInWL() sólo recorre todas las posiciones abiertas, independientemente de los filtros sy,op,mn. Esto también es cierto para el ejemplo adjunto EA (página 55).

Andrei, ¡gracias! Corregido...

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 23.04.2009                                                     |
//|  Описание : Перенос уровня стопа в безубыток                               |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   ( ""  - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   ( -1  - любая позиция)                  |
//|    mn - MagicNumber                ( -1  - любой магик)                    |
//+----------------------------------------------------------------------------+
void MovingInWL(string sy="", int op=-1, int mn=-1) {
  double po, pp;
  int    i, k=OrdersTotal();

  if ( sy=="0") sy=Symbol();
  for ( i=0; i< k; i++) {
    if (OrderSelect( i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()== sy || sy=="") && ( op<0 || OrderType()== op)) {
        if ( mn<0 || OrderMagicNumber()== mn) {
          po=MarketInfo(OrderSymbol(), MODE_POINT);
          if (OrderType()==OP_BUY) {
            if (OrderStopLoss()-OrderOpenPrice()< LevelWLoss* po) {
              pp=MarketInfo(OrderSymbol(), MODE_BID);
              if ( pp-OrderOpenPrice()> LevelProfit* po) {
                ModifyOrder(-1, OrderOpenPrice()+ LevelWLoss* po, -1);
              }
            }
          }
          if (OrderType()==OP_SELL) {
            if (OrderStopLoss()==0 || OrderOpenPrice()-OrderStopLoss()< LevelWLoss* po) {
              pp=MarketInfo(OrderSymbol(), MODE_ASK);
              if (OrderOpenPrice()- pp> LevelProfit* po) {
                ModifyOrder(-1, OrderOpenPrice()- LevelWLoss* po, -1);
              }
            }
          }
        }
      }
    }
  }
}
El e-MovingInWL2.mq4 también está arreglado.
 

¡Buenas tardes Igor!

Gracias por dedicar tanto tiempo al foro. Igor, ¿conoces alguna posibilidad de obtener información sobre las solicitudes de compra/venta entrantes - "profundidad de mercado".

 
Alex30 писал(а) >>
Igor, ¿conoces alguna posibilidad de obtener información sobre las solicitudes de compra/venta entrantes - "profundidad de mercado".

no

 
Pregunta a los experimentados: alguien puede decir por qué mi indicador de demostración xMeterMTF.mq4 muestra todo normal, y en el real euro vacío (ya sea por el hecho de que en el real eur / usd- se enumeran como eur / usddpro) si es así se puede corregir
Archivos adjuntos:
xmetermtf.mq4  8 kb
xmeter.rar  34 kb
 

La función isTradeTimeString().

Esta función devuelve la bandera que permite negociar por tiempo. En realidad, comprueba si la hora actual del servidor comercial se encuentra dentro de algún período de tiempo. Si está dentro, la función isTradeTimeString() devuelve true, en caso contrario devuelve false. La peculiaridad de esta función es la posibilidad de especificar el intervalo de tiempo tanto dentro como fuera de un día. Esto se mostrará en detalle en los ejemplos de uso. La función isTradeTimeString() acepta los siguientes parámetros opcionales:

  • TimeBegin - Cadena en el formato "HH:MM", establece la hora de inicio de la operación. El valor por defecto es "00:00".
  • TimeEnd - Cadena en el formato "HH:MM", especifica la hora de finalización de la operación. El valor por defecto es "00:00".
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 29.04.2009                                                     |
//|  Описание : Возвращает флаг разрешения торговли по времени.                |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    TimeBegin - время начала торговли         (ЧЧ:ММ)                       |
//|    TimeEnd   - время окончания торговли      (ЧЧ:ММ)                       |
//+----------------------------------------------------------------------------+
bool isTradeTimeString(string TimeBegin="00:00", string TimeEnd="00:00") {
  datetime dtBegin, dtEnd;        // Время начала и окончания работы
  int      hc, he;                // Часы текущего времени и окончания работы

  dtBegin=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+ TimeBegin);
  dtEnd  =StrToTime(TimeToStr(TimeCurrent(), TIME_DATE)+" "+ TimeEnd);
  hc     =TimeHour(TimeCurrent());
  he     =TimeHour( dtEnd);
  if ( dtBegin>= dtEnd) {
    if ( hc>= he) dtEnd+=24*60*60; else dtBegin-=24*60*60;
  }

  if (TimeCurrent()>= dtBegin && TimeCurrent()<= dtEnd) return( True);
  else return( False);
}
 

Ejemplos de uso de isTradeTimeString().

  1. Periodo de tiempo dentro de un día. Hora actual del servidor de comercio dentro de un periodo y que sea "07:50".
    if (isTradeTimeString("06:00", "09:30")) Message("Торгуем...");
    else Message("Отдыхаем...");
  2. Plazo de tiempo dentro del día. Hora actual del servidor de comercio fuera del segmento y que sea igual a "07:50".
    if (isTradeTimeString("12:00", "16:30")) Message("Торгуем...");
    else Message("Отдыхаем...");
  3. La franja horaria incluye el límite del día. Hora actual del servidor de comercio dentro del segmento y que sea igual a "07:50".
    if (isTradeTimeString("21:15", "09:30")) Message("Торгуем...");
    else Message("Отдыхаем...");
  4. La franja horaria incluye un límite de día. La hora actual del servidor de comercio fuera del segmento y que sea "07:50".
    if (isTradeTimeString("22:00", "05:30")) Message("Торгуем...");
    else Message("Отдыхаем...");

SZY. Se adjunta un script para probar la función isTradeTimeString().

Archivos adjuntos:
 
KimIV >> :

Igor, el indicador de i-Sessions tiene ocasionalmente fallos: aparecen y desaparecen zonas de sesiones aún no abiertas...

 
DR12CED >> :

Igor, el indicador de i-Sessions tiene ocasionalmente fallos: aparecen y desaparecen zonas de sesiones que aún no se han abierto...

Oops... Retiro lo dicho... También serán útiles para esperar los eventos... Perdóneme... por favor...

 
KimIV >> :

La función isTradeTimeString().

Esta función devuelve la bandera que permite negociar por tiempo. En realidad, comprueba si la hora actual del servidor comercial se encuentra dentro de algún periodo de tiempo. Si está dentro, la función isTradeTimeString() devuelve true, en caso contrario devuelve false. La peculiaridad de esta función es la posibilidad de especificar el intervalo de tiempo tanto dentro como fuera de un día. Esto se mostrará en detalle en los ejemplos de uso. La función isTradeTimeString() acepta los siguientes parámetros opcionales:

  • TimeBegin - Cadena en el formato "HH:MM", establece la hora de inicio de la operación. El valor por defecto es "00:00".
  • TimeEnd - Cadena en el formato "HH:MM", especifica la hora de finalización de la operación. Valor por defecto - "00:00".

También es posible configurar las variables para que no sean "string", sino "int". ¿Para buscar en el probador?

>> Gracias de antemano.

 
vasilyt писал(а) >>
¿Puedes hacer que las variables no sean "string" sino "int"? ¿Para poder buscar en el probador?

En la página 76...