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

 
AlexeyVik:

Ah, y hay otra cosa que no entiendo. Si N es una fecha, entonces D' 19:00 ' es un formato de texto. ¿Se pueden comparar? No. En los casos de comparación de tiempos escribo

D'19:00' es una constante literal de tipo datetime.
 

Quiero pedirles, queridos programadores, que me expliquen en ruso cómo buscar las lecturas pasadas del indicador con el código. Por ejemplo stoploss al vender tengo que poner en 3 High ZigZag de la barra de cero, o sobre el octavo fractal superior. dondequiera que leí - o no que, o escrito no así :)

 
Petiyashaket:

Quiero pedirles, queridos programadores, que me expliquen en ruso cómo buscar las lecturas pasadas del indicador con el código. Por ejemplo stoploss cuando la venta que necesito para poner en 3 ZigZag alta de la barra de cero, o sobre la parte superior octavo fractal. dondequiera que leí - o no que, o escrito no es así :)

El bucle desde la barra cero hasta el principio del gráfico, int x=0. En el bucle, llama al indicador requerido, por ejemplo, fractal. Si el valor no está vacío, añada 1 a x, cuando x alcance el valor deseado - memorice la iteración del bucle y salga del mismo, el valor de la iteración será teóricamente el número de la barra donde se encuentra el fractal deseado. Teóricamente porque mientras el ciclo está en marcha puede aparecer una barra más en M1 y entonces el puntero se mostrará en una barra equivocada )))
 
evillive:
Ciclo desde la barra cero hasta el principio del gráfico, int x=0. En el ciclo llamar al indicador requerido, por ejemplo, fractal. Si el valor no está vacío, añada 1 a x, cuando x alcance el valor requerido - recuerde la iteración del bucle y salga del mismo, el valor de la iteración será teóricamente el número de la barra donde se encuentra el fractal requerido. Teóricamente, porque cuando el bucle se está ejecutando, una nueva barra puede aparecer en M1 y entonces el puntero se mostrará en una barra equivocada))
Hay que ahorrar tiempo. O, mejor aún, utilizar el array donde se almacena el tiempo de formación de los últimos fractales. La velocidad de trabajo se reducirá debido a la eliminación de bucles innecesarios
 
Petiyashaket:

Por favor, explíqueme en ruso cómo buscar las lecturas pasadas del indicador en el código. Por ejemplo stoploss en la venta que necesito para poner en 3 ZigZag alta de la barra de cero, o la parte superior octavo fractal, donde quiera que lea - o no algo, o escrito no es así :)

"Lengua rusa" y "lenguaje de programación" (quiere una explicación en código) no son lo mismo.

Algorítmicamente:

1) Definir qué valor devuelve el ZigZag de interés, si no tiene "punto fractal" - puede ser EMPTY_VALUE o 0.0.

2) Usando iCustom() en el bucle, obtener el valor del indicador de la memoria intermedia correspondiente en la barra que se está comprobando en el bucle, comprobar la diferencia con el "valor vacío" y mantener un contador de esas diferencias. Cuando el contador es igual a 3 en su caso - el número (N) de la barra será la barra deseada;

3) Alto[N]|Bajo[N] - será el nivel requerido.

Para el ZigZag High estándar buscamos algo así:

#define  ZZ_NULL  0.0

    uint li_N = 0, li_Bar = 1;
    double ld_ZZ = 0.;
//----
    while (li_Bar < Bars - 1)
    {
        ld_ZZ = iCustom (_Symbol, _Period, "ZigZag", /* внешние параметры индикатора */, 1, li_Bar);
        if (ld_ZZ != ZZ_NULL)
        {
            li_N++;
            if (li_N >= 3) break;
        }
        li_Bar++;
    }
    double ld_Price = High[li_Bar];

Pero antes de eso, tenemos que cambiar el número de buffers mostrados en el código ZigZag de 1 a 3:

#property indicator_buffers 3
 

Gracias por las respuestas, las retomaré :) ahora el problema es

http://clip2net.com/s/j7xvk9

No consigo entender por qué no modifica la orden, sino que sólo abre nuevas órdenes pendientes

 
Petiyashaket:

Gracias por las respuestas, las retomaré :) ahora el problema es

http://clip2net.com/s/j7xvk9

No consigo entender por qué no modifica la orden, sino que sólo abre nuevas órdenes pendientes

 
evillive: Gracias por mostrarlo :)
  double Up=iFractals(Symbol(),0,MODE_UPPER,3);           //верхний фрактал
  double Down=iFractals(Symbol(),0,MODE_LOWER,3);         //нижний фрактал
//----
  if(Up>0&&Down==0&&Volume[0]<2) //если верхний есть а нижнего нет то:
    {
    if((High[3]+5*Point-Ask)/Point>MarketInfo(Symbol(),MODE_STOPLEVEL)) //если цена позволяет выставить отложенный ордер то:
    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green); // то выставляем байстоп на 5 пунктов выше верхнего фрактала
        {
        for (int pos=0;pos<OrdersTotal();pos++) //     скопировал эту строчку хз откуда ибо не понимаю грёбаный счетчик :) тут видимо и косяк
        OrderSelect(pos,SELECT_BY_POS,MODE_TRADES); // ищем текущие ордера
        if(OrderMagicNumber()==Magic&&OrderSymbol()==Symbol()&&OrderType()==OP_BUYSTOP)// и если все условия совпадают то:
          {
          OrderModify(OrderTicket(),Up+5*Point,Up-sl,Up+tp,0,CLR_NONE);//переносим байстоп на новый верхний фрактал
          }


 
Petiyashaket:
Gracias por mostrarlo :)
¿De qué se queja el registro de modificaciones? "Estúpidamente abre nuevas órdenes pendientes" porque no hay límite, pero hay un OrderSend.
 
Petiyashaket:

1) Cualquier estrategia debe estar definida por el número de órdenes abiertas al mismo tiempo. En consecuencia, antes de abrir la siguiente orden, debemos comprobar cuántas están ya abiertas.

2) En una barra, no puede haber fractales SUPERIORES y INFERIORES al mismo tiempo, respectivamente, el control se clasifica como

    if (Up > 0 && Down == 0)

pertenece a la categoría de la idiotez del programador.

3) Antes de escribir las condiciones para devolver los valores del indicador de la memoria intermedia, es necesario saber exactamente qué valor es "vacío" para ella. ¿Has comprobado que es 0?

4) La construcción.

    if (Volume[0] > 2)

Aunque funcionará (en la mayoría de los casos), pero no es natural, porque es una idea de "libre albedrío" del promotor, y es poco informativa para el comerciante. Una alternativa: el seguimiento de un nuevo bar.

5) Hay que empezar por lo básico, porque esto:

    OrderSend(Symbol(),OP_BUYSTOP,Lot,High[3]+5*Point,20,High[3]-sl,High[3]+tp,NULL,Magic,0,Green); // то выставляем байстоп на 5 пунктов выше верхнего фрактала
        {

Indica que no entiendes nada de lo que escribes.

La mejor manera de entenderlo es estudiar cómo funcionan los códigos de otras personas y modificarlos para tus propios fines. Buena suerte.