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
#Orden de los objetos
He creado 3 Objetos y esos objetos se cruzan entre sí.
#1 Línea horizontal, #2 Línea vertical, #3 Línea de tendencia
Necesito establecer sus posiciones z.
¿Cómo puedo darles el valor de las posiciones z?
Gracias.
Bueno, puede dibujar todas las líneas en OnInit() y luego dibujar nuevas siempre que el tiempo de apertura de la última barra cambie, sabrá que hubo una nueva barra.
Pero no estoy seguro de lo que quieres hacer exactamente.
DE ACUERDO. Voy a probar algo. Luego volveré por aquí.
Gracias.
@Marco vd Heijden
Antes de empezar a investigar sobre eso. Realmente necesito preguntar, ¿es la función start() la que ralentiza el gráfico (/ Plataformas MT4)?
p.s. Puse todos los códigos en la función especial start( ) , ese código funciona para las líneas de período- H1, H4, D1, W1, MN1.
Que tengan un buen fin de semana y gracias de antemano.
Gracias por su comentario. (después de su comentario decidí que voy a cambiar algo todo en mis indicadores - porque casi hice todos mis indicadores en start ( )función).
Puse el código de abajo en la función start( ), así que puedes ayudarme a qué manera es buena para mi indicador?
En realidad no tengo ninguna idea de cómo puedo editar el código de abajo para dejar de actualizar continuamente (sin todos los códigos de start() puestos en la función init()).
int _cnt_MN1 = 11; // 12 lines for a year 24 for two years and etc.
for ( int i_MN = 0; i_MN < _cnt_MN1; i_MN++ )
{
if ( _Period < PERIOD_MN1 )
{
//---time convert
datetime _tltpMN1 = TimeToString( iTime( Symbol(), PERIOD_MN1, i_MN ), TIME_DATE );
datetime _time = iTime( Symbol(), PERIOD_MN1, i_MN );// + PeriodSeconds( PERIOD_MN1 );
//---name
string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
ObjectCreate ( 0, _vlineName_MN, OBJ_VLINE , 0, _time, 0 );
ObjectSetString ( 0, _vlineName_MN, OBJPROP_TOOLTIP , _tltpMN1 );
ObjectSetInteger ( 0, _vlineName_MN, OBJPROP_COLOR , C'180,160,080' );
ObjectSet ( _vlineName_MN, OBJPROP_BACK , true );
ObjectSet ( _vlineName_MN, OBJPROP_HIDDEN , true );
ObjectSet ( _vlineName_MN, OBJPROP_SELECTABLE , false );
ObjectSet ( _vlineName_MN, OBJPROP_STYLE , STYLE_SOLID );
} //---if Close
} //---for Close
¡Gracias!
Realmente necesito ayuda, por favor que alguien responda a mi pregunta.
Gracias.
No estoy de acuerdo con hacer una función de nueva barra, porque sólo se puede llamar una vez por tick. Una variable puede ser probado varias veces.
static datetime BOMcur=0; dateTime BOMpre = BOMcur;
BOMcur = iTime( _Symbol, PERIOD_MN1, 0); bool isNewMonth = BOMcur != BOMpre;
if(isNewMonth){
DO_UPDATE(); ...
}
string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
Por favor, póngalo en un experto en lugar de un indicador, esto permite un uso más fácil en el futuro cuando quiera añadir su estrategia de negociación.
Para el tema de las barras, almacene la hora de apertura de la barra en una variable datetime y simplemente compare la hora registrada con la hora real, entonces cada vez que surja una nueva barra se activará.
Aquí hay un ejemplo:
int OnInit()
{
//--- create timer
EventSetMillisecondTimer(250);
//--- create some things
CreateLines(); // Function that creates time lines
//--- load open times
M1=iTime(Symbol(),PERIOD_M1,0);
M5=iTime(Symbol(),PERIOD_M5,0);
M15=iTime(Symbol(),PERIOD_M15,0);
M30=iTime(Symbol(),PERIOD_M30,0);
H1=iTime(Symbol(),PERIOD_H1,0);
H4=iTime(Symbol(),PERIOD_H4,0);
D1=iTime(Symbol(),PERIOD_D1,0);
W1=iTime(Symbol(),PERIOD_W1,0);
MN1=iTime(Symbol(),PERIOD_MN1,0);
//--- set timelines
ObjectMove(0,"Time-M1",0,M1,0);
ObjectMove(0,"Time-M5",0,M5,0);
ObjectMove(0,"Time-M15",0,M15,0);
ObjectMove(0,"Time-M30",0,M30,0);
ObjectMove(0,"Time-H1",0,H1,0);
ObjectMove(0,"Time-H4",0,H4,0);
ObjectMove(0,"Time-D1",0,D1,0);
ObjectMove(0,"Time-W1",0,W1,0);
ObjectMove(0,"Time-MN1",0,MN1,0);
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
void OnTimer()
{
if(M1!=iTime(Symbol(),PERIOD_M1,0))
{
M1=iTime(Symbol(),PERIOD_M1,0); // overwrite old value with new value
//Alert("New Bar on M1! ",TimeToString(M1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M1",0,M1,0);
}
if(M5!=iTime(Symbol(),PERIOD_M5,0))
{
M5=iTime(Symbol(),PERIOD_M5,0);
//Alert("New Bar on M5! ",TimeToString(M5,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M5",0,M5,0);
}
if(M15!=iTime(Symbol(),PERIOD_M15,0))
{
M15=iTime(Symbol(),PERIOD_M15,0);
//Alert("New Bar on M15! ",TimeToString(M15,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M15",0,M15,0);
}
if(M30!=iTime(Symbol(),PERIOD_M30,0))
{
M30=iTime(Symbol(),PERIOD_M30,0);
//Alert("New Bar on M30! ",TimeToString(M30,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-M30",0,M30,0);
}
if(H1!=iTime(Symbol(),PERIOD_H1,0))
{
H1=iTime(Symbol(),PERIOD_H1,0);
//Alert("New Bar on H1! ",TimeToString(H1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-H1",0,H1,0);
}
if(H4!=iTime(Symbol(),PERIOD_H4,0))
{
H4=iTime(Symbol(),PERIOD_H4,0);
//Alert("New Bar on H4! ",TimeToString(H4,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-H4",0,H4,0);
}
if(D1!=iTime(Symbol(),PERIOD_D1,0))
{
D1=iTime(Symbol(),PERIOD_D1,0);
//Alert("New Bar on D1! ",TimeToString(D1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-D1",0,D1,0);
}
if(W1!=iTime(Symbol(),PERIOD_W1,0))
{
W1=iTime(Symbol(),PERIOD_W1,0);
//Alert("New Bar on W1! ",TimeToString(W1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-W1",0,W1,0);
}
if(MN1!=iTime(Symbol(),PERIOD_MN1,0))
{
MN1=iTime(Symbol(),PERIOD_MN1,0);
//Alert("New Bar on MN1! ",TimeToString(MN1,TIME_SECONDS));
// do something...
//ObjectMove(0,"Time-MN1",0,MN1,0);
}
}
//+------------------------------------------------------------------+
static datetime BOMcur=0; dateTime BOMpre = BOMcur;
BOMcur = iTime( _Symbol, PERIOD_MN1, 0); bool isNewMonth = BOMcur != BOMpre;
if(isNewMonth){
DO_UPDATE(); ...
}
string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
Gracias por su comentario.
Desde tu comentario me puse a intentar investigar tu comentario. (porque nunca he utilizado 'Void OnTick()' función)
De todos modos, el Sr. William su comentario realmente me dio la idea y también me enseñan algo.
(p.s si estoy pensando mal por favor hágamelo saber)
Antes del build 600 (3 de febrerode 2014) sólo había start(). Ahora hay OnTick (EAs,) OnCalculate (indicadores,) y OnStart (scripts.) Olvidé que estabas hablando de un indicador.
Comience a utilizar las nuevas funciones de manejo de eventos - Funciones - Fundamentos del lenguaje - Referencia MQL4. Ver Cómo hacer sus lookbacks correctamente.