¿Cómo codificar? - página 62

 
Dan7974:
¿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);

} // start
 

Sin 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?

Archivos adjuntos:
diagram.gif  18 kb
 

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

Archivos adjuntos:
 

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

 
mweltin:
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,

Markus

Hola. 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?

int Highest;

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!!!!!!!