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
¿Cómo puedo codificar esto?
Si el mercado toca (X.XX50 o X.XX00)
entonces compre. ¿Cómo identificar los dos últimos números?
Gracias.Esto debería hacerlo:
if ( Point == 0.01 ) {xPrice = Close - MathMod(Close,0.50) ; }
else { xPrice = Close - ( MathMod(100*Close,0.50)*0.01 ) ; }
P1Buffer = xPrice + Point*50;
P2Buffer = xPrice ;
P3Buffer = xPrice - Point*50;
[/CODE]
When MathMod(Close,0.50) = 0 then the price ends in 00 or 50.
Here's my indicator to identify 00 lines:
[CODE]
//+------------------------------------------------------------------+
//| _TRO_00_Lines |
//| |
//| |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 LightGray
#property indicator_color2 LightGray
#property indicator_color3 LightGray
// indicators parameters
//---- buffers
double P1Buffer[];
double P2Buffer[];
double P3Buffer[];
double xPrice ;
int myStyle = 2 ;
int myWingDing = 250 ;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
SetIndexBuffer(0, P1Buffer);
SetIndexBuffer(1, P2Buffer);
SetIndexBuffer(2, P3Buffer);
SetIndexArrow(0, myWingDing);
SetIndexArrow(1, myWingDing);
SetIndexArrow(2, myWingDing);
SetIndexStyle(0, DRAW_ARROW, myStyle, 1);
SetIndexStyle(1, DRAW_ARROW, myStyle, 1);
SetIndexStyle(2, DRAW_ARROW, myStyle, 1);
SetIndexEmptyValue(0,0);
SetIndexEmptyValue(1,0);
SetIndexEmptyValue(2,0);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int i, dayi, counted_bars = IndicatorCounted();
//---- check for possible errors
if(counted_bars < 0)
return(-1);
//---- last counted bar will be recounted
if(counted_bars > 0)
counted_bars--;
int limit = Bars - counted_bars;
//----
for(i = limit - 1; i >= 0; i--)
{
if ( Point == 0.01 ) {xPrice = Close - MathMod(Close,1.00) ; }
else { xPrice = Close - ( MathMod(100*Close,1.00)*0.01 ) ; }
P1Buffer = xPrice + Point*100;
P2Buffer = xPrice ;
P3Buffer = xPrice - Point*100;
} // for
return(0);
} // startSin embargo, ¡lo necesito para un EA!
Codificadores por favor ayuda
¿Qué cambiar en el código para mover más puntos arriba y abajo de las velas?
Alguien podría ayudarte si publicas el código.
Lux
Aquí está el indicador
Indicador que puede cambiar el código para mover los puntos arriba y abajo
uso adecuado de Time[]
Soy un programador justo pero nuevo en mql4. Estoy trabajando en un asesor experto en box trade (aka breakout trade). Esencialmente debe encontrar los valores más altos y más bajos para un marco de tiempo específico, y cuando una vela se cierra fuera de esa caja coloco un comercio.
Esencialmente hay tres estados, puedo empezar mi EA en
1) después del cierre del día anterior, y antes de la hora de inicio de la caja.
2) después del inicio de la caja, pero antes del final de la caja.
3) después del final de la caja.
Lo que encuentro confuso es el array Time[] porque el índice va cambiando. Supongamos que entro en el estado 2. En la función init iba a establecer una variable global que diera la posición del inicio de la caja. A medida que entran las comillas se llama constantemente a la función start, y una vez alcanzado el tiempo de finalización de la caja tendría las posiciones de inicio y final. Por supuesto que no es el caso, ya que el índice en el array Time sigue avanzando.
En el mejor de los casos puedo seguir incrementando la posición del índice de inicio de la caja, pero eso no parece una forma muy limpia de hacer las cosas.
Si usted tiene una sugerencia sobre cómo debo cambiar mi pensamiento lejos tradicional c / c + + a mql4 me encantaría escucharlo.
Además, cuando termine, obviamente me beneficiaría mucho una revisión del código por parte de un programador más veterano. ¿Alguien quiere ofrecerse para eso?
Gracias por vuestro tiempo,
Markus
Soy un programador justo pero nuevo en mql4. Estoy trabajando en una caja de comercio (aka breakout trade) asesor experto. Esencialmente debería encontrar los valores más altos y más bajos para un marco de tiempo específico, y cuando una vela se cierra fuera de esa caja coloco un comercio.
Esencialmente hay tres estados en los que puedo iniciar mi EA
1) después del cierre del día anterior, y antes de la hora de inicio de la caja.
2) después del inicio de la caja, pero antes del final de la caja.
3) después del final de la caja.
Lo que encuentro confuso es el array Time[] porque el índice va cambiando. Supongamos que entro en el estado 2. En la función init iba a establecer una variable global que diera la posición del inicio de la caja. A medida que entran las comillas se llama constantemente a la función start, y una vez alcanzado el tiempo de finalización de la caja tendría las posiciones de inicio y final. Por supuesto que no es el caso, ya que el índice en el array Time sigue avanzando.
En el mejor de los casos puedo seguir incrementando la posición del índice de inicio de la caja, pero eso no parece una forma muy limpia de hacer las cosas.
Si usted tiene una sugerencia sobre cómo debo cambiar mi pensamiento lejos tradicional c / c + + a mql4 me encantaría escucharlo.
Además, cuando termine, obviamente me beneficiaría mucho una revisión del código por parte de un programador más veterano. ¿Alguien quiere ofrecerse para eso?
Gracias por su tiempo,
MarkusHola. La función Time[] no cambia - sólo al final de la barra del gráfico actual cambia. En cambio, TimeCurrent() devuelve un valor que cambia continuamente (aunque con una resolución de 1 segundo).
También puede obtener la hora exacta de cualquier barra y marco de tiempo utilizando iTime(). Hay bastantes maneras de hacerlo...
abrir dos órdenes al mismo tiempo (problema...)
Hola, no sé por qué en algunas oportunidades el script abre dos órdenes al mismo tiempo.
alguien puede ayudarme con esto, por favor
if(UseStopLoss)
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,EAName, MagicNo, 0,Green);
si no
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,EAName, MagicNo, 0,Green);
if(ticket>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("Orden de COMPRA abierta : ",OrderOpenPrice());
}
else Print("Error al abrir la orden de COMPRA : ",GetLastError());
gracias
Ayuda para el código
Hola a todos,
Me gustaría codificar un indicador para calcular el valor de cierre que crea una inversión de un indicador como HMA. Para ello necesito crear una función para calcular un valor de HMA con una pestaña de valores de cierre donde modifique el valor actual en un bucle de dicotomía para encontrar el valor que crea la inversión.
¿Alguien puede ayudarme con mi función ComputeHull?
Aquí mi código, sin reseña de dicotomía es solo un simple indicador HMA con la función computeHull, el indicador se muestra pero se desplaza hacia abajo
Saludos
//#property indicator_separate_window
#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Azul
//---- parámetros de entrada
extern int HullAntPeriod=12;
//---- buffers
double TempBuf1[];
double TempBuf2[];
double HullAntBuf[];
//Variable
int HalfHullAntPeriod;
int SqrtHullAntPeriod;
//+------------------------------------------------------------------+
//| Funciones específicas ||Se trata de una función específica.
//+------------------------------------------------------------------+
double ComputeHull(int ActualBar)
{
double CloseTemp[];
double Temp[];
double Temp1, Temp2;
double resultado = -1;
int i;
/Copiar los valores de cierre a CloseTemp
ArrayResize(CloseTemp, HullAntPeriod+SqrtHullAntPeriod);
ArrayCopy(CloseTemp, Close, 0, ActualBar, HullAntPeriod+SqrtHullAntPeriod);
ArraySetAsSeries(CloseTemp, true);
ArrayResize(Temp, SqrtHullAntPeriod);
//Cálculo del valor del HMA
for(i=0; i<SqrtHullAntPeriod; i++)
{
Temp1 = iMAOnArray(CloseTemp, 0, HalfHullAntPeriod, 0, MODE_LWMA, i);
Temp2 = iMAOnArray(CloseTemp, 0, HullAntPeriod, 0, MODE_LWMA, i);
Temp = 2*Temp1-Temp2;
}
ArraySetAsSeries(Temp, true);
result = iMAOnArray(Temp, 0, SqrtHullAntPeriod, 0, MODE_LWMA, 0);
//---- hecho
return(resultado);
}
//+------------------------------------------------------------------+
//| Función de inicialización del indicador personalizada ||.
//+------------------------------------------------------------------+
int init()
{
//---- 1 buffers adicionales se utilizan para los datos temporales.
IndicatorBuffers(3);
//---- ajustes de dibujo
SetIndexStyle(0,DRAW_LINE);
SetIndexStyle(1,DRAW_NONE);
//---- Asignación de 2 buffers de indicadores
SetIndexBuffer(0,HullAntBuf);
SetIndexBuffer(1,TempBuf1);
SetIndexBuffer(2,TempBuf2);
//---- nombre para la etiqueta de la DataWindow y la subventana del indicador
IndicatorShortName("HULL ANTICIP("+HullAntPeriod+")";
SetIndexLabel(0, "HULL ANTICIPATION");
SetIndexLabel(1,NULL);
SetIndexLabel(2,NULL);
//---- Inicialización del indicador específico
HalfHullAntPeriod = MathFloor(HullAntPeriod/2);
SqrtHullAntPeriod = MathFloor(MathSqrt(HullAntPeriod));
//---- inicialización realizada
return(0);
}
//+------------------------------------------------------------------+
//| Función de desinicialización del indicador personalizado ||.
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Función de iteración del indicador personalizada ||
//+------------------------------------------------------------------+
int inicio()
{
int bar, limit, i;
int barras_contadas=IndicadorContado();
if(counted_bars<0) return(-1);
if(counted_bars>0) counted_bars--;
limit=Barras_contadas;
for(i=0; i<limit; i++)
HullAntBuf=ComputeHull(i);
//----
return(0);
}
//+------------------------------------------------------------------+
¿Por qué no funciona?
double Place;
int Start()
{
Highest=iHighest(Symbol(),0,MODE_HIGH,1,0);Place=iHigh(Symbol(),0,Highest);
if(Gate==0){
if(iClose(Symbol(),0,0)>=Place){
OrderModify(ticket3,Ask,Ask-TrailingStop*Point-Spread,0,0,Green);
Gate=1;}
return(0);
}Me da errores. ¡¡¡¡¡¡¡No puedo hacer un simple trailing stop!!!!!!!