Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¿contador?
Llevo tantos meses programando indicadores que soy un poco deficiente en cuanto a expertos, pero tengo la intención de solucionarlo. En el camino necesito un poco de ayuda. En el experto que he montado hago que compruebe al cierre de la barra si hay una condición que justifique el cierre de la operación.
Empiezo con una variable global,
datetime PreviousBar; // record candle/bar time[/CODE]
and set one bool in init()
{
do_this = true;
}
[/CODE]
blah blah boring stuff.... etc, etc
then in the main loop I have:
[CODE]
if(do_this == true)
{
PreviousBar = Time[0];
do_this= false; // so it does this only once only
}
if(NewBar() == true)
{
if(TotalOpenOrders() == blah blah close my order you crazy monkey)
}
and outside the main loop I have:
[CODE]//--- returns true if current bar just formed
bool NewBar()
{
if(PreviousBar<Time[0])
{
PreviousBar = Time[0];
return(true);
}
else
{
return(false);
}
return(false);
}OK, así que está configurado para hacer una vez por barra. Lo que quiero hacer es tener una función que incremente 90 segundos o 60 segundos o lo que sea, entonces establece un bool a verdadero después de que se incrementa ese tiempo. Básicamente quiero comprobar los indicadores cada 60, 90, 120 segundos o lo que sea en lugar de al cierre de la barra. ¿Cómo lo hago?
Gracias por cualquier ayuda,
- nittany1
Llevo tantos meses programando indicadores que soy un poco deficiente en cuanto a expertos, pero tengo la intención de solucionarlo. En el camino necesito un poco de ayuda. En mi experto que armé tengo que comprobar al cierre de la barra si hay una condición que justifique el cierre de la operación.
Empiezo con una variable global,
datetime PreviousBar; // record candle/bar time[/CODE]
and set one bool in init()
{
do_this = true;
}
[/CODE]
blah blah boring stuff.... etc, etc
then in the main loop I have:
[CODE]
if(do_this == true)
{
PreviousBar = Time[0];
do_this= false; // so it does this only once only
}
if(NewBar() == true)
{
if(TotalOpenOrders() == blah blah close my order you crazy monkey)
}
and outside the main loop I have:
[CODE]//--- returns true if current bar just formed
bool NewBar()
{
if(PreviousBar<Time[0])
{
PreviousBar = Time[0];
return(true);
}
else
{
return(false);
}
return(false);
}OK, así que está configurado para hacer una vez por barra. Lo que quiero hacer es tener una función que incremente 90 segundos o 60 segundos o lo que sea, entonces establece un bool a true después de que se incremente ese tiempo. Básicamente quiero comprobar los indicadores cada 60, 90, 120 segundos o lo que sea en lugar de al cierre de la barra. ¿Cómo lo hago?
Gracias por cualquier ayuda,
- nittany1Esto debería hacerlo. Recuerde que MT utiliza la ejecución basada en ticks, por lo que la precisión por segundo no es posible (a menos que usted haga un bucle con todo en el sub. Init()).
if (CallIndicatorsCheck())
{
// su código aquí
}
bool CallIndicatorsCheck()
{
static datetime Oldtime;
int Secs = 90;
bool Bandera;
if (CurrTime() >= Oldtime) {
Oldtime = CurrTime() + Secs;
Flag = true; }
return(Flag);
}
Colocación de comentarios
¿Podría alguien mostrarme el código para colocar un comentario en laesquina superiorderecha de la pantalla, en lugar de la superior izquierda por defecto?
Gracias.
¿Podría alguien mostrarme el código para colocar un comentario en laesquina superior derecha de la pantalla, en lugar de la superior izquierda por defecto? Gracias!
No se puede. Del manual de MQL4:
Si se necesita por muerte se podrían crear objetos.
¿Podría alguien mostrarme el código para colocar un comentario en laesquina superior derecha de la pantalla, en lugar de la superior izquierda por defecto? Gracias!
LinusGuy tiene razón; no hay una forma directa. La solución fácil es rellenar el comentario con espacios --
Comment(" ¡hola mundo!");
desplazará el texto a la derecha.
También puedes poner saltos de línea para bajar la página.
Comment("\Nsu texto");
o combinar los saltos de línea y el espacio para imprimir en la esquina inferior derecha de la pantalla.
mog
LinusGuy tiene razón; no hay una forma directa. La solución más fácil es rellenar el comentario con espacios.
Comentario(" ¡Hola mundo!");
desplazará el texto hacia la derecha.
También puede poner en la línea de alimentación para bajar la página.
Comment("\Nsu texto");
o combinar los saltos de línea y el espacio para imprimir en la esquina inferior derecha de la pantalla.
mogGracias por la ayuda. Lo probaré.
no hay nuevas operaciones durante X barras después de una operación perdedora
hola equipo - espero que alguien pueda ayudar por favor..
¿Cómo puedo evitar que una nueva operación comience durante 10 barras si la última operación fue una pérdida?
saludos
La función de abajo devolverá true mientras el historial de la cuenta tenga una operación con pérdidas que se haya cerrado en o después de la apertura de la 10ª barra pasada (la barra actual es 0),
y devuelve falso en caso contrario.
{
datetime since = Time[ bar+10 ];
for ( int i = OrdersHistoryTotal() - 1; i >= 0; i-- ) {
if ( ! OrderSelect( i, SELECT_BY_POS, MODE_HISTORY )
continue;
if ( OrderProfit() = since )
return( true );
}
return( false );
}
[/PHP]
If you add that function to your EA, then include a statement like the following in the start() function, then Bob's your uncle.
[PHP]if ( postMortem() ) return( 0 );muchas gracias por eso - lo probaré
saludos
Chicos, ¿tenéis el mismo problema?
He codificado un experto. Quiero abrir una posición cuando el precio es el mismo que un indicador. Para ello utilizo la siguiente sentencia
//para comprar
double indicatorpast = icustom(....................,1);
double indicatornow = icustom(....................,0);
if (close[1]indicatornow) OpenBUY();
si (close[1]>indicadorpasado && close[0]<indicadornuevo) OpenSELL();
pero con este satatement, el experto abre posiciones no sólo cuando el precio cruza el indicador, sino que también abre posiciones por encima del indicador. Quiero que el experto abra posiciones SOLO cuando el precio cruce el indicador, así que he probado esto:
//para comprar
double indicatorpast = icustom(....................,1);
double indicatornow = icustom(....................,0);
if (close[1]<indicatorpast && close[0]==indicatornow) OpenBUY();
if (close[1]>indicatorpast && close[0]==indicatornow) OpenSELL();
Pero esta declaración no está realizando.
¿Sabe usted lo que está sucediendo? Porque creo que no hay errores en la declaración.
Saludos.