Funciones útiles de KimIV - página 37

 
KimIV писал (а) >>

La función isLossLastPos().

Esta función devuelve el indicador de pérdida de la última posición cerrada. Bandera arriba - Verdadero - la última posición se cerró con pérdidas. Banderas abajo - Falso - la última posición se cerró a cero, o con beneficio. Esta función no tiene en cuenta los intercambios y las comisiones. La selección de las posiciones se define mediante parámetros externos:

  • sy - Nombre del instrumento de mercado. Si especifica este parámetro, la función sólo tendrá en cuenta las posiciones del instrumento especificado. El valor por defecto "" significa cualquier instrumento de mercado. NULL significa el instrumento actual.
  • op - Operación comercial, tipo de posición. Valores válidos: OP_BUY, OP_SELL o -1. El valor por defecto -1 significa cualquier posición.
  • mn - Identificador de posición, MagicNumber. El valor por defecto de -1 significa cualquier identificador.
P.D. Se adjunta un script para probar la función isLossLastPos().

Para no multiplicar el número de funciones relacionadas con la última posición cerrada, sugiero la siguiente variante:

int LastClosePos(string sy="", int op=-1, int mn=-1) {
  datetime t;
  int      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=OrderTicket();              }
              else
                return(j);
            }
          }
        }
      }
    }
  }
  return(-1);
}

Esta función define el número de ticket de la última posición cerrada...

Las acciones posteriores con número de ticket son a discreción del programador, en función de un problema a resolver...

 

Función FindNearFractal().

Esta función busca el fractal más cercano y devuelve su nivel de precio. La función acepta los siguientes parámetros opcionales:

  • sy - Nombre del instrumento. "" o NULL - símbolo actual. El valor por defecto es NULL.
  • tf - Marco temporal. Valor por defecto 0 - símbolo actual.
  • modo - Tipo de fractal. Se permiten MODE_LOWER y MODE_UPPER. El valor por defecto es MODE_LOWER.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.10.2006                                                     |
//|  Описание : Поиск ближайшего фрактала. Возвращает ценовой уровень.         |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy   - наименование инструмента      ("" или NULL - текущий символ)     |
//|    tf   - таймфрейм                     (    0       - текущий ТФ)         |
//|    mode - тип фрактала                  (MODE_LOWER|MODE_UPPER)            |
//+----------------------------------------------------------------------------+
double FindNearFractal(string sy="0", int tf=0, int mode=MODE_LOWER) {
  if (sy=="" || sy=="0") sy=Symbol();
  double f=0;
  int    d=MarketInfo(sy, MODE_DIGITS), s;
  if (d==0) if (StringFind(sy, "JPY")<0) d=4; else d=2;

  for (s=2; s<100; s++) {
    f=iFractals(sy, tf, mode, s);
    if (f!=0) return(NormalizeDouble(f, d));
  }
  Print("FindNearFractal(): Фрактал не найден");
  return(0);
}
 

Ejemplos de uso de FindNearFractal().

  • El precio del fractal inferior más cercano en el gráfico actual.
    Message(FindNearFractal());
  • Precio del fractal superior más cercano en el gráfico H4 del símbolo actual.
    Message(FindNearFractal(NULL, PERIOD_H4, MODE_UPPER));
  • Precio del fractal inferior más cercano en el gráfico del GBPUSD M30.
    Message(FindNearFractal("GBPUSD", PERIOD_M30, MODE_LOWER));
    

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

Archivos adjuntos:
 
KimIV писал (а) >>

Примеры использования функции SetVLine().

  1. Голубая сплошная вертикальная линия на текущем баре.
  2. Сиреневая толстая линия на восьмом баре.
  3. Сетка пунктирных линий на барах 14:00.

ЗЫ. Во вложении скрипт для тестирования функции SetVLine().

KimIV
писал (а)
>>

Ejemplos de cómo utilizar SetVLine().

  1. Línea vertical sólida azul en la barra actual.
  2. Línea gruesa lila en la octava barra.
  3. Una cuadrícula de líneas de puntos en las barras 14:00.

ZS. Se adjunta un script para probar la función SetVLine().

Hola Igor,
Podría mostrarme un ejemplo de cómo se puede utilizar dicha función en un indicador.
Estoy intentando mejorar el indicador PreviousiHighsvAndhLows0 y añadirle una marca por tiempo.

Utilizar el ejemplo de SetVLine() y dibujar la marca en la apertura de la barra con un tiempo determinado...
Hasta ahora, mi versión ha dibujado algunas tonterías.
Ya he pedido ayuda en el foro, pero aquí no se mima a los principiantes...

Gracias de todos modos, sus funciones son muy útiles para el aprendizaje paso a paso, pero por supuesto sería bueno si hubiera muchas más pistas o ejemplos

Archivos adjuntos:
 
obabuev писал (а) >>
Podría mostrarme un ejemplo de cómo se puede utilizar dicha función en un indicador.
Estoy intentando mejorar el indicador y añadirle un dibujo de la hora.
Utilizar el ejemplo de SetVLine() y dibujar una marca en la apertura de la barra con un tiempo determinado...

Muestre en la ilustración las marcas que desea dibujar.

 

Función GetExtremumZZZBar().

Esta función busca un extremo del indicador ZigZag estándar personalizado y devuelve el número de barra. La función acepta los siguientes parámetros opcionales:

  • sy - Nombre del instrumento. "" o NULL - el símbolo actual. El valor por defecto es NULL.
  • tf - Marco temporal. El valor por defecto es 0 - el marco temporal actual.
  • ne - Número extremo. 0 - último, 1 - anterior, 2 - anterior, etc.
  • dp, dv, bs - Parámetros ZigZaga: ExtDepth, ExtDeviation, ExtBackstep respectivamente.
//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.10.2006                                                     |
//|  Описание : Возвращает номер бара экстремума ЗигЗага по его номеру.        |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    tf - таймфрейм                  (      0     - текущий ТФ)              |
//|    ne - номер экстремума           (      0     - последний)               |
//|    dp - ExtDepth                                                           |
//|    dv - ExtDeviation                                                       |
//|    bs - ExtBackstep                                                        |
//+----------------------------------------------------------------------------+
int GetExtremumZZBar(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bc=3) {
  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=0; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", dp, dv, bc, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(i);
    }
  }
  Print("GetExtremumZZBar(): Экстремум ЗигЗага номер ",ne," не найден");
  return(-1);
}
 

Ejemplos de uso de la función GetExtremumZZZBar().

  • El número de la barra con el último extremo del ZigZag en el gráfico actual.
    Message(GetExtremumZZBar());
  • El número de la barra con el penúltimo extremo del ZigZag en el gráfico H4 del símbolo actual.
    Message(GetExtremumZZBar(NULL, PERIOD_H4, 1));
  • Encuentre la última ruptura de ZigZag en el gráfico actual y dibuje una línea vertical a través de ella.
    int n=GetExtremumZZBar(NULL, 0, 1);
    SetVLine(Magenta, "", Time[n]);

ZS. Se adjunta un script para probar la función GetExtremumZZZBar().

Archivos adjuntos:
 
KimIV писал (а) >>

Muestre en la ilustración las marcas que desea dibujar.

Gracias, Igor, por responder,
Me llevó dos días, pero hice la marca.
Ahora estoy intentando hacer otro.
Lo necesito para las pruebas
Usando su indicador i-AnyRange, quiero hacer
El indicador procesará el tiempo con una desviación aleatoria.
Por ejemplo...
el indicador tiene
tiempo1=10:05;
tiempo2=15:35;
y en el propio indicador para los cálculos de las líneas del indicador utiliza
T1=tiempo1(+/-aleatorio)
T2=tiempo2(+/-aleatorio)
pero también necesitamos establecer los límites máximos de desviación, por ejemplo
max random =5min;
El dilema es cómo limitar la aleatoriedad a 5 minutos.
Probablemente tenga ejemplos similares

Archivos adjuntos:
 
obabuev писал (а) >>

pero también hay que establecer los límites máximos de desviación, por ejemplo
max random =5min;
El problema es cómo limitar la aleatoriedad a 5 minutos.
Debe tener ejemplos similares.

5 minutos son 300 segundos:

void init() {
  MathSrand(TimeLocal());
}

void start() {
  double a=MathRand()/32767.0*300;
  int b=MathFloor(a);
  Comment(b);
}
 
KimIV писал (а) >>

Cinco minutos son 300 segundos:

Gracias, por supuesto, pero no responde del todo a las preguntas,
Cómo añadir int b a la cadena Tiempo2 minutos ahora o cómo hacer más menos al azar

>> Lo investigaré, por supuesto, pero lo tengo difícil.