int start()
{
double Price=Ask+300*Point;
double SL=Price-300*Point;
double TP=Price+150*Point;
bool New_Bar;
if (Time[0]) // если образовался новый бар int Ticket=OrderSend(Symbol(),OP_BUYSTOP,0.1,Price,3,SL,TP ); // выставить отложенный ордерreturn ;
Fun_New_Bar();
if ( New_Bar==true) // если образовался следующий бар
OrderDelete(Ticket); // удалить отложенный ордер//+------------------------------------------------------------------+void Fun_New_Bar(); //НО ПО ОТНОШЕНИЮ К ЭТОЙ СТРОКЕ КОМПИЛЯТОР ПИШЕТ ОШИБКУ '(' - function definition unexpected
{
staticdatetime New_Time=0;
New_Bar=false;
if( New_Time!==Time[0])
New_Time=Time[0];
New_Bar=true;
}
/* lo siento, he cambiado ligeramente el post - para que el Vinin sea legible */
/* lo siento, he cambiado un poco el post - para que el Vinin sea legible */
Esta línea
if (Time[0])
significa: "si el tiempo de la última barra no es cero". Por lo tanto, siempre no es igual a cero.
Además, la variable
bool New_Bar;
se define dentro de la función start(), por lo que no será visible dentro de otras funciones. Además, la función Fun_New_Bar() que intentaste definir dentro del cuerpo de start(), no puedes hacerlo en MQL, todas las funciones deben ser declaradas a nivel de módulo global. La declaración de New_Bar también debería colocarse ahí.
Además, durante una ejecución de la función start() (si no está en bucle), no se puede definir la formación de la barra y luego esperar a la formación de la siguiente barra: start() por definición se llama y termina en cada tick (con matices, pero en general es así).
significa: "si el tiempo de la última barra no es igual a cero". Por lo tanto, siempre no es igual a cero.
Gracias, pero no entiendo dónde está el "NO" en esta línea. La no igualdad se indica con el símbolo !==.
Lo que quería decir es que en cuanto aparece la hora de apertura de una nueva barra, es decir, aparece una nueva barra, se abre la orden.
Y este es efectivamente el código que abre una orden en la apertura de cada cinco barras
int start()
{
double Price=Open[0]+300*Point;
double SL=Price-300*Point;
double TP=Price+150*Point;
if (Time[0])
int Ticket=OrderSend(Symbol(),OP_BUYSTOP,0.1,Price,3,SL,TP );
}
Sí, ¿y qué?
Hay una serie de limitaciones cuando se trabaja en modo de visualización
¿Qué he hecho mal? !!!!
Se me ocurrió esta solución a mi problema
/* lo siento, he cambiado ligeramente el post - para que el Vinin sea legible */
¿Qué he hecho mal? !!!!
Se me ocurrió esta solución a mi problema
/* lo siento, he cambiado un poco el post - para que el Vinin sea legible */
significa: "si el tiempo de la última barra no es cero". Por lo tanto, siempre no es igual a cero.
Además, la variable
bool New_Bar;se define dentro de la función start(), por lo que no será visible dentro de otras funciones. Además, la función Fun_New_Bar() que intentaste definir dentro del cuerpo de start(), no puedes hacerlo en MQL, todas las funciones deben ser declaradas a nivel de módulo global. La declaración de New_Bar también debería colocarse ahí.
Además, durante una ejecución de la función start() (si no está en bucle), no se puede definir la formación de la barra y luego esperar a la formación de la siguiente barra: start() por definición se llama y termina en cada tick (con matices, pero en general es así).
Aconsejo releer la ayuda y eliminar las lagunas en la ejecución del programa MQL, y ver un ejemplo de escritura de un programa en bucle, no en bucle también.
Gracias por su atención. ¿Qué botón debo pulsar para obtener el código en este formato?
SRC----------------------------\|/
--------------------------------------- V
Esta línea
significa: "si el tiempo de la última barra no es igual a cero". Por lo tanto, siempre no es igual a cero.
Gracias, pero no entiendo dónde está el "NO" en esta línea. La no igualdad se indica con el símbolo !==.
Lo que quería decir es que en cuanto aparece la hora de apertura de una nueva barra, es decir, aparece una nueva barra, se abre la orden.
Y este es efectivamente el código que abre una orden en la apertura de cada cinco barras
int start() { double Price=Open[0]+300*Point; double SL=Price-300*Point; double TP=Price+150*Point; if (Time[0]) int Ticket=OrderSend(Symbol(),OP_BUYSTOP,0.1,Price,3,SL,TP ); }Decidí tomar lo que me pareció una ruta más sencilla.
No eliminar la orden pendiente - sino colocar la orden pendiente sólo si la vela de cinco minutos no ha terminado
Es decir, la orden pendiente debe colocarse sólo cuando se cumplan dos condiciones. Si se cumple la primera condición
if (Time[0])- Lo he comprobado, el orden está establecido.
Cómo debo establecer la segunda condición, es decir, establecer una orden pendiente sólo si no han pasado aún 5 minutos. if (---------- && ?????????)