[ARCHIVO]Cualquier pregunta de novato, para no saturar el foro. Profesionales, no lo dejéis pasar. No puedo ir a ningún sitio sin ti - 5. - página 113

 
r772ra:

Recorrido por las posiciones

¡Muchas gracias, voy a probar todo ahora! ¡Gracias!
 
r772ra:

Recorrido por las posiciones

Lo intenté, pero no funcionó. Así que sí, puedo encontrarlo. Pero el problema es que se me presenta la siguiente situación:

Por ejemplo, el 01.01 abrí una posición, pero la condición se activó sólo el 02.01. Es decir, desde el precio de apertura de la orden en el lado negativo, el precio ha pasado 50 pips en el segundo día. Si la condición se cumple, la acción se ejecutará. Y la acción consiste en reducir la operación en 1/3. Es decir, reducir el volumen de la operación en un factor de tres. Pero la acción funcionará hasta que el lote se cierre por completo. Si b=0, la acción está en marcha. Y al final de la acción b=1. Si no anulamos la bandera al final del día, la operación se ejecutará una vez y eso es todo cuando la probamos por el historial. Si ponemos a cero la bandera, en cuanto la bandera se ponga a cero, la acción comenzará de nuevo a reducir las órdenes hasta cerrarla por completo. Pensé que sería posible comparar el volumen de la operación abierta inicialmente y el volumen cambiado, pero siempre serán los mismos al comparar. Si disminuimos el volumen de lote, el volumen de fondos en la cuenta también disminuirá, por lo que se recalculará el volumen inicial. Es decir, tampoco es eso, creo que para el tercer día. No tengo ni idea, ¿tienes alguna otra idea?

 
Boneshapper:

¡Buenas tardes!

Estimados profesionales, podrían aconsejarme por favor.

Si el precio supera en 50 pips el precio de apertura de esta orden, la orden tiene que ser modificada.

OrderSelect(0, SELECT_BY_POS,MODE_TRADES);

double OPEN = OrderOpenPrice();
double maximus = OPEN + 0.00500;
Alerta ("maximus = ",maximus);
double minimus = OPEN - 0.00500;
RefreshRates();//Refrescar los datos.
timecur = TimeToStr(TimeCurrent(),TIME_SECONDS); //Calcular la hora actual en formato HH:MM.
if ((timecur > "00:00:00") && (timecur < "22:58:00") && (Deal_s == 1) && (Deal_bb == 0)&& (Bid > maximus))
{
OrderSelect(0, SELECT_BY_POS,MODE_TRADES);
Lootup = OrderLots () * 0,34;
Lootdown = OrderLots () * 0.34;
OrderClose(OrderTicket(), Lootdown, Ask, 10, CLR_NONE);
Alerta (GetLastError());
Deal_bb = 1;
}

Si ocurre durante el día, soy capaz de hacerlo. Por favor, aconsejar, ¿cómo comprobar si el precio de apertura + 50 P es controlado por el precio de cada lote, hasta que se cierra en pocos días?

¡¡¡¡Se cronometra una cuerda y luego se mide por cuerdas - original!!!!
No hace falta inventar nada: primero se comprueba la resolución temporal y luego sólo se arrastran las órdenes. Se pueden encontrar soluciones probadas para ambos casos aquí y aquí.

 
Boneshapper:

Lo intenté, pero no funcionó. Sí funciona, pero el problema es que no lo encuentro. Pero el problema es que se me presenta la siguiente situación:

Por ejemplo, 01.01 abrí una operación, pero la condición se activa sólo 02.01. Es decir, desde el precio de apertura de la orden en el lado negativo el precio ha pasado 50 pips en el segundo día. Si la condición se cumple, la acción se ejecutará. Y la acción consiste en reducir la operación en 1/3. Es decir, reducir el volumen de la operación en un factor de tres. Pero la acción funcionará hasta que el lote se cierre por completo. Si b=0, entonces hay una acción. Y al final de la acción b=1. Si no anulamos la bandera al final del día, la operación se ejecutará una vez y eso es todo cuando la probamos por el historial. Si ponemos a cero la bandera, en cuanto la bandera se ponga a cero, la acción comenzará de nuevo a reducir las órdenes hasta cerrarla por completo. Pensé que sería posible comparar el volumen de la operación abierta inicialmente y el volumen cambiado, pero siempre serán los mismos al comparar. Si disminuimos el volumen de lote, el volumen de fondos en la cuenta también disminuirá, por lo que se recalculará el volumen inicial. Es decir, tampoco es eso, creo que para el tercer día. No tengo ni idea, ¿tienes alguna otra idea?

¿Qué tienen que ver los días? Sólo tienes que escribir lo que quieres y te avisarán del algoritmo. Me parece que no hay que comprobar los días, sino comprobar el beneficio/pérdida de la orden y luego elegir entre 50 (o lo que sea) pips...

 
TarasBY:

Pones el tiempo en una cuerda, y luego lo mides con cuerdas, ¡eso es original!
No hay que inventar nada: primero se comprueba la resolución horaria, y luego simplemente se siguen las órdenes. Se pueden encontrar soluciones probadas para ambos casos aquí y aquí.

Muchas gracias por tu respuesta, me has dado un enlace con lo que necesito exactamente. Lo probaré ahora, pero creo que funcionará.

Siento los fallos, pero soy nuevo en la programación y no se me da muy bien todavía.

 
artmedia70:

¿Qué tienen que ver los días? Sólo tienes que escribir lo que quieres y ellos te dirán el algoritmo. Me parece que no deberías comprobar los días, sino comprobar el beneficio/pérdida de una orden y depender de ello, porque 50 (o los que sean) puntos son importantes para ti...

Sí, tienes razón. Mi beneficio/pérdida es lo que estoy confiando. TarasBY señaló exactamente lo que necesitaba. Lo investigaré ahora.

Gracias por su amable atención.

 

Por favor, dígame, hay una función kim para buscar fractales

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 07.10.2006                                                     |
//|  Описание : Возвращает экстремум ЗигЗага по его номеру.                    |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (NULL или "" - текущий символ)          |
//|    tf - таймфрейм                  (      0     - текущий ТФ)              |
//|    ne - номер экстремума           (      0     - последний)               |
//|    dp - ExtDepth                                                           |
//|    dv - ExtDeviation                                                       |
//|    bs - ExtBackstep                                                        |
//+----------------------------------------------------------------------------+
double GetExtremumZZPrice(string sy="", int tf=0, int ne=0, int dp=12, int dv=5, int bs=3) {
  if (sy=="" || sy=="0") sy=Symbol();
  double zz;
  int    i, k=iBars(sy, tf), ke=0;

  for (i=1; i<k; i++) {
    zz=iCustom(sy, tf, "ZigZag", dp, dv, bs, 0, i);
    if (zz!=0) {
      ke++;
      if (ke>ne) return(zz);
    }
  }
  Print("GetExtremumZZPrice(): Экстремум ЗигЗага номер ",ne," не найден");
  return(0);
}
¿Cómo puedo escribir la misma función que cuenta el número de fractales en un período determinado?
 
berezhnuy:

¿Puedes decirme si existe una función kim para encontrar fractales?

¿Cómo escribir la misma función que cuenta el número de fractales en un periodo determinado?

Es algo así:

void fGet_ExtremumsZZPrice (string fs_Symbol,           // инструмент
                            int fi_TF,                  // таймфрейм
                            datetime fdt_TimeControl,   // время, до которого ищем экстремумы
                            int fi_ExtDepth = 12,       // ExtDepth         
                            int fi_ExtDeviation = 5,    // ExtDeviation
                            int fi_ExtBackstep = 3)     // ExtBackstep
{
    double ld_Value, lda_Extremum[];
    int    li_size = iBarShift (fs_Symbol, fi_TF, fdt_TimeControl), li_IND = 0;
//---- 
    for (int li_Bar = 1; li_Bar < li_size; li_Bar++)
    {
        ld_Value = iCustom (fs_Symbol, fi_TF, "ZigZag", fi_ExtDepth, fi_ExtDeviation, fi_ExtBackstep, 0, li_Bar);
        if (ld_Value != 0.)
        {
            ArrayResize (lda_Extremum, li_IND + 1);
            lda_Extremum[li_IND] = ld_Value;
            li_IND++;
        }
    }
//---- 
}

Los extremos del ZigZag desde la hora actual hasta Time_Control se recogen en un array.

 
¿Puede sugerir una función para comprobar el nuevo fractal o el antiguo?
 
berezhnuy:
¿Puede sugerir una función para comprobar el nuevo fractal o el antiguo?

Aquí, fui al tema "Funciones útiles" y te lo traje "en bandeja de plata":

//+----------------------------------------------------------------------------+
//| Автор    : Ким Игорь В. 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);
}
¡Vive y úsalo con salud! Los hay de todo tipo. No tienes que pedirlo, no tienes que esperar, ¡sólo tienes que cogerlo y usarlo!
Razón de la queja: