¿Cómo codificar? - página 232

 

Idea

OK chicos y chicas

He estado jugando con la idea de crear un CUF (funciones de uso común) - de todo lo que he leído no se puede llamar a las secuencias de comandos desde dentro de un EA.

No obstante - pensando en una solución porque no me gusta ser obligado a rediseñar la rueda cada vez aswell como estoy seguro de que haría las cosas funcionan mejor de esta manera.

Los scripts, como todo el mundo sabe, se cargan y no se vuelven a cargar, excepto si se pulsan las teclas de acceso directo.

Este es un gran problema que veo con todos los EA es que parecen quedarse atascados esperando alguna condición de tiempo o alguna condición de "sueño" para pasar antes de continuar. Esto hace que cancelar y vender en una fracción de segundo sea poco probable, lo que es un gran fallo en condiciones extremadamente volátiles de las que podrías hacer una fortuna en unos pocos segundos.

¿La solución? ¿Hacer un indicador CUFF que trabaje en variables globales? ¿Alguien ha probado esto? El indicador hace un ciclo con cada tick, así que es perfecto.

 

¿Cómo codificar una alerta que envíe un sonido o un correo electrónico cuando se cumplan las condiciones de varios indicadores y barras?

 

Hola,

siendo un novato me gustaría preguntar si la función incorporada metastock : ref() y stochmomentum() son implementados por algunas funciones en metatrader

thnx

 

Darian vea mi ejemplo anterior de globales. encuentre un script que envíe correos electrónicos/silbidos/haga lo que usted quiere y codifíquelo en él. tenga en cuenta que no se activarán todos al mismo tiempo, así que tendrá que poner un retraso de algunos segundos/minutos antes de restablecer las variables a 0.

 

con Global

¿puedo añadir un GlobalVarible a un indicador como este?

if ( trend[2]0 && Volume[0]>1 && !UpTrendAlert)

{

GlobalVariableSet("trend "+Símbolo(),1);

// Print("UP" + GlobalVariableGet("trend "+Symbol()));

Mensaje = " Compra "+Símbolo()+" M "+Periodo()+": Señal de COMPRA";

if ( AlertMode>0 ) Alert (Message);

UpTrendAlert=true; DownTrendAlert=false;

luego llamar a esa GlobalVariable en un EA con

int init() {

GlobalVariableDel("tendencia "+Símbolo());

trend = GlobalVariableGet("trend "+Symbol());

Comprar = (trend == 1);

Vender = (trend == 2);

se agradece toda la ayuda

 

Sin embargo, si usted negocia más de una moneda, no funcionará.

 

Problemas con los Arrays, ¡necesito ayuda!

Hola,

Estoy tratando de hacer una función que determine si alguna orden abierta está perdiendo más dinero que un punto de corte (digamos, $-1000).

La función se supone que almacena el OrderTicket() y el OrderProfit() en dos arrays separados, y sale con el retorno (1) para significar que se ha alcanzado el punto de corte.

Antes de almacenar los valores en esas matrices, debería comprobar la matriz OrderTicket() para ver si esta orden ya está archivada.

Si el número de OrderTicket ya está almacenado en la matriz, se supone que debe determinar si la orden ha perdido $1000 ADICIONALES, y si es así: reemplazar el valor en la matriz OrderProfit() con un valor fresco, y salir con return(1) para significar que se ha alcanzado un NUEVO punto de corte. Si la orden no ha perdido $1000 adicionales (llamado Cutoff) entonces debería devolver(0) para significar que ninguna orden ha perdido $1000 adicionales.

Creo que más o menos lo tengo funcionando (no estoy seguro??), pero por alguna razón el array se llena con un montón de valores '0' junto con los valores legítimos. La salida del array es la siguiente:

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 431 ResumeArrayPrices[k] = -3042

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 425 ResumeArrayPrices[k] = -3042

ResumeArrayTickets[k] = 386 ResumeArrayPrices[k] = -1008

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 371 ResumeArrayPrices[k] = -12933

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 320 ResumeArrayPrices[k] = -6057

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 249 ResumeArrayPrices[k] = -5076

ResumeArrayTickets[k] = 241 ResumeArrayPrices[k] = -1017

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 230 ResumeArrayPrices[k] = -13122

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

ResumeArrayTickets[k] = 186 ResumeArrayPrices[k] = -4068

ResumeArrayTickets[k] = 128 ResumeArrayPrices[k] = -1008

ResumeArrayTickets[k] = 0 ResumeArrayPrices[k] = 0

[/code]

The following is my actual code:

[code]

int CheckForResume()

{

ResumeCheck = TimeLocal()+(PERIOD_M1*60)*5;

}

int arraycount1 =1;

int arraycount2 =1;

bool found = false;

int k;

for (int i = 0; i<OrdersTotal();i++)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if ((OrderType() == OP_BUY) || (OrderType() == OP_SELL))

{

if (OrderProfit()< Cutoff)

{

for (k=0; k<ArraySize(ResumeArrayTickets); k++)

{

if ((ResumeArrayTickets[k] == OrderTicket()) && ResumeArrayTickets[k] !=0)

{

found = true;

if (ResumeArrayPrices[k] + Cutoff < OrderProfit())

{

return (0);

}

else

{

Print ("ELSE");

arraycount1 = ArrayResize(ResumeArrayTickets,ArraySize(ResumeArrayTickets) + 1);

arraycount2 = ArrayResize(ResumeArrayPrices,ArraySize(ResumeArrayPrices) + 1);

ResumeArrayTickets[k] = OrderTicket();

ResumeArrayPrices[k] = OrderProfit();

return (1);

}

}

}

if (found == false)

{

arraycount1 = ArrayResize(ResumeArrayTickets,ArraySize(ResumeArrayTickets) + 1)'

arraycount2 = ArrayResize(ResumeArrayPrices,ArraySize(ResumeArrayPrices) + 1);

ResumeArrayTickets[k] = OrderTicket();

ResumeArrayPrices[k] = OrderProfit();

return (1);

}

}

}

return (0);

}

}

 

Refrescar un EA una vez por barra

Hola, ¿hay alguna manera de refrescar un EA para que reaccione como la primera vez que se inicializa? (Como un reinicio) Es necesario que se haga una vez por barra. Por ejemplo, una vez cada 30 minutos.

RefreshRates() y WindowRedraw() no lo hacen correctamente.

También me gustaría conservar algunas variables y no perder los datos.

¿Hay alguna forma de hacerlo?

También me gustaría poder hacer esto para un indicador.

Muchas gracias.

 

Ayuda a la programación

Hola a todos,

Estoy trabajando en la modificación de un medidor de fuerza de la moneda para mostrar la fuerza de la moneda basada en el tiempo del gráfico. Actualmente, el código utilizado es:

aHigh = MarketInfo(mySymbol,MODE_HIGH); // set a high today

aLow = MarketInfo(mySymbol,MODE_LOW); // set a low today

aBid = MarketInfo(mySymbol,MODE_BID); // set a last bid

aAsk = MarketInfo(mySymbol,MODE_ASK);

Entiendo que MODE_HIGH y MODE_LOW obtienen los máximos y mínimos del día actual. ¿Cómo podría obtener el máximo y el mínimo del marco de tiempo actual de los gráficos?

Gracias.

P.D. No soy un programador, así que use palabras pequeñas por favor:)

 

Busca en el manual de ayuda las funciones iHigh y iLow.

buena suerte

Lux