[¡Archivo!] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. No puedo ir a ningún sitio sin ti - 4. - página 545

 
Lonely_man:

Buenas tardes. Pueden aconsejarme: la tarea consiste en dibujar líneas verticales cada minuto. Cómo vincular el dibujo no sólo a los minutos, sino al precio de apertura del minuto. La dificultad estriba en que el precio de apertura del minuto debe identificarse en tiempo no estándar, es decir, no en un minuto. He escrito un fragmento de código, pero no entiendo cómo introducir el precio de apertura del minuto, si la variable inducida se establecerá en un tiempo no estándar

new_Minute=TimeMinute(Time[i]) != TimeMinute(Time[i+1]); // new_Minute

Ind_Buffer_0[i]=0

if(new_Minute && Period()<30 ) Ind_Buffer_0[i]=max;

...y luego el dibujo estándar mediante objetos.

Quizá alguien pueda decirme qué se puede hacer, si es que se puede hacer algo.

La línea vertical no tiene coordenadas - precio.
 
paladin80:
En while, debemos establecer una condición que pueda aceptar al menos dos valores, por ejemplo, flag (verdadero o falso). Si se trata de una constante (true) y no de una condición, entonces el while no es necesario. Elimina el while (verdadero) y los paréntesis y obtendrás el mismo resultado.


Si se elimina la sentencia while, ¿cómo funcionará la sentencia continue?

Al fin y al cabo, en caso de error, hay que volver a comprobar las condiciones y abrir las órdenes.

 if (Fun_Error(GetLastError())==1)      // Обработка ошибок
 continue;                              // Повторная попытка
 return;                                // Выход из start()

La sentencia continue transfiere el control al inicio de la sentencia externa while o for más cercana, provocando el inicio de la siguiente iteración.

¿Quizás no entiendo algo?

 

Buenas tardes.

Tengo una estrategia de negociación formada para abrir órdenes pendientes en una penúltima barra ya formada [número 1]. Es decir, abre posiciones (órdenes pendientes de buystop y sellstop) y se activarán si el precio se mueve 20 pips más allá del máximo/mínimo del rango de precios de la 1ª barra (Precio de apertura).

También existe una eliminación automática de las órdenes pendientes que no se han activado, en función de lo siguiente Si se ha formado una nueva barra denominada 1, el precio de apertura de una(s) orden(es) pendiente(s) no coincidirá con el máximo/mayor de la nueva barra actual 1 +/- 20 pips (muy probablemente, porque los máximos/mínimos de dos barras adyacentes raramente coinciden).

Pero por alguna razón sucede que primero abrirá ambas posiciones, pero en unos segundos cerrará una de ellas (aunque la nueva barra bajo el número 1 aún no se ha formado).

Señores expertos, soy un principiante y quizás no estoy teniendo en cuenta algunas sutilezas. Por favor, puede decirme dónde es posible que se produzca el error.

 RefreshRates();
for(int n=1;n<=OrdersTotal();n++)            //цикл перебора всех имеющихся ордеров
{
  if(OrderSelect(n-1,SELECT_BY_POS)==true)   //если найден ордер, то...
  {
    if((OrderType()==4)&& (OrderOpenPrice()!= High[1]+20*Point))                      // проверяем его тип (buystop/sellstop), если его тип buystop и цена покупки не совпадает с максимумом текущего 1-го бара, то..
      {
          OrderDelete(OrderTicket());                                                  // удаляем его
         
       }
    if((OrderType()==5) && (OrderOpenPrice()!= Low[1]-20*Point))                       // если его тип sellstop и цена продажи не совпадает с минимумом текущего 1-го бара, то ...
    {      
           
            OrderDelete(OrderTicket());                                                //удаляем его
         
    }
  }
}
Archivos adjuntos:
 

Cuando se comparan números fraccionarios, deben normalizarse a una cifra significativa.

Al borrar órdenes, cuente desde el final, no desde el principio.

 
... eso es, - y también - prohibir al experto trabajar hasta que se haya formado un nuevo bar.
 
Pacman:


Si se elimina la sentencia while, ¿cómo funcionará la sentencia continue?

Al fin y al cabo, en caso de error, hay que volver a comprobar las condiciones y abrir las órdenes.

La sentencia continue transfiere el control al inicio de la sentencia externa while o for más cercana, provocando el inicio de la siguiente iteración.

¿Quizás no entiendo algo?

No te preocupes, las sentencias while(true) se utilizan muy a menudo cuando no se conoce ni el número de iteraciones, ni las condiciones para la terminación del bucle.

Por eso su terminación, digamos, cuando se cumplen muchas condiciones anidadas en el bucle dado, se termina con el operador break.

O bien, hay búhos (por ejemplo, mcllts) que no trabajan por tic y por lo tanto no con función de inicio, sino de forma continua y en bucle utilizando el operadorwhile(true).

 
Equilibrium:
Hola, buen día, por favor ayúdenme, no puedo depurar mi Asesor Experto (las órdenes de apertura y cierre no funcionan como se espera (por el cruce de un estocástico cada vez), se abren en el estocástico muy raramente y no puedo entender por qué ((((), también todas las órdenes se cierran sólo en stoplo o takeprofit (error de número de billete, también no puede entender donde el error). gracias por cualquier respuesta:

El error de Ticket se debe probablemente a que su variable Ticket se inicializa dos veces: al principio y en la función

Prueba con otro nombre en la función, al menosTicket1 :)

 
¿Puedes decirme cómo averiguar el precio de la línea de tendencia en cada barra?
 
sss2019:
¿Puedes decirme cómo averiguar el precio de la línea de tendencia en cada una de las barras?

ObjectGetValueByShift().
 
Equilibrium:
Buenos días, por favor ayúdenme, no puedo afinar mi Expert Advisor (la apertura y cierre de órdenes no funciona por criterio como debería (cruzando el estocástico cada vez), se abre por estocástico muy raramente y no puedo entender por qué((((), también todas las órdenes se cierran solo por stoplo o takeprofit (error de número de ticket, tampoco puedo entender donde está el error). gracias por cualquier respuesta:


Si una variable es declarada globalmente ya no es necesario pasarla a sus propias funciones, sólo hay que utilizar las variables Ticket y Ans, que serán visibles en las funciones.

Escribes en los comentarios que M_1 y S_1 son la primera barra, y en la función iStochastic() extraes el valor para ellos en la barra cero. Si realmente necesita datos sobre la barra cero, entonces, en primer lugar, compruebe las órdenes de cierre y luego, si va a trabajar con una orden, salga por condición: if(Total > 0) return; y sólo entonces una condición para la apertura de una nueva orden. Si se planea trabajar en TFs grandes, entonces sería mejor reemplazar la condición de salida por la siguiente: si la orden se abre en la barra actual, todavía no se abre nada nuevo en la barra actual. De lo contrario, en H4, una orden puede abrirse en una barra varias veces y activar un stop loss en una condición.

Esto es lo que ocurre en este momento: la barra principal ha cruzado la de señal, por ejemplo, hacia arriba, se abre la orden de compra. En el siguiente tick, la condición se guarda, pero tiene Total más que cero y la condición de cierre trata de dispararse, y trata de usar su función Close_Order_S() para cerrar la posición de Compra al precio de Venta. Hacer una comprobación del tipo de orden y una función para cerrarla, pasar Ask o Bid en parámetros, dependiendo del tipo de orden.