¿Cómo codificar? - página 115

 
matrixebiz:
¿No estoy haciendo lo mismo al hacer esto?;

if (Hour() 17) TradeHour = false;

Es decir, si la hora está entre 12 y 17 TradeHour=true , ¿correcto?

(Añadiendo && TradeHour en mi declaración de compra/venta)

Negando la siguiente declaración:

if(Hour()>=12 && Hour()<17)

TradingEnabled=true;

[/CODE]

is

[CODE]

if(Hour()=17)

TradingEnabled=false;

 

Una cosa más ¿cómo puedo añadir un retraso de reentrada en el código de modo que si un comercio se acaba de abrir y cerrar, para esperar como 60 min, a continuación, comprobar de nuevo si las condiciones comerciales se cumplen todavía.

Gracias

 
matrixebiz:
Una cosa más ¿cómo puedo añadir un retraso de reentrada en el código para que si un comercio se acaba de abrir y cerrar, para esperar como 60 minutos, a continuación, comprobar de nuevo si las condiciones comerciales se cumplen todavía. Gracias

No está claro cuál es su petición.

¿Quiere esperar 60 minutos entre la comprobación de una condición comercial y la siguiente?

Si esta es su petición, puede que esto funcione:

// Global variable

bool TradingEnabled = true; // flag to enable/disabled trading logic

bool TradingCheckDone = false; // flag to know if a a check was just done

datetime LastCheckTime = 0; // Time when the last check was done

.... somewhere in EA start() function ....

if( !TradingCheckDone )

{

// Default: We assume that trading logic must run ...

TradingEnabled = true;

// ... but only between 12:00:00 and 16:59:59

if(Hour()=17)

TradingEnabled=false;

// We must remember a check was just done

TradingCheckDone = true;

// We must even know when it was done

LastCheckTime = TimeCurrent();

} else

{

// if a hour has passed since the last check, it's time to retry

if( TimeCurrent() - LastCheckTime >= 3600 )

{

TradingCheckDone = false;

}

}

 
gorgoroth:
No está claro cuál es su petición.

¿Quiere esperar 60 minutos entre una comprobación de las condiciones comerciales y la siguiente?

Si esta es su petición, puede que esto funcione:

// Global variable

bool TradingEnabled = true; // flag to enable/disabled trading logic

bool TradingCheckDone = false; // flag to know if a a check was just done

datetime LastCheckTime = 0; // Time when the last check was done

.... somewhere in EA start() function ....

if( !TradingCheckDone )

{

// Default: We assume that trading logic must run ...

TradingEnabled = true;

// ... but only between 12:00:00 and 16:59:59

if(Hour()=17)

TradingEnabled=false;

// We must remember a check was just done

TradingCheckDone = true;

// We must even know when it was done

LastCheckTime = TimeCurrent();

} else

{

// if a hour has passed since the last check, it's time to retry

if( TimeCurrent() - LastCheckTime >= 3600 )

{

TradingCheckDone = false;

}

}

No, sólo si una operación acaba de ocurrir y se ha cerrado, entonces quiero que el EA espere una hora y luego compruebe si las condiciones de la operación se siguen cumpliendo, si es así, entonces está bien, vuelve a operar, pero si no es así. ¿Este código hará lo que quiero entonces? ¿Funcionará en el probador debido a la comprobación de TimeCurrent?

EDIT: no cada hora hacer la comprobación justo después de un comercio se cierra a continuación, esperar una hora para una comprobación de la condición y eso es todo. Luego, si en un día se genera y se cierra otra operación, entonces se espera de nuevo una hora y si no hay señal, entonces eso es todo, no hay más comprobaciones de espera hasta la próxima apertura y cierre de la operación.

Gracias

Adjunto un pequeño EA por si pudieras modificarlo con las configuraciones correctas que he mencionado. Gracias

Archivos adjuntos:
ozfx_method.mq4  11 kb
 

Buy_Limit y Buy_Stop

¿Cuál es la diferencia entre una orden de Límite y una orden de Stop?

Gracias

 
gorgoroth:
Hola a todos,

He desarrollado un conjunto de funciones para gestionar los ajustes de configuración de un EA.

Esas funciones son exportadas por una DLL de c++ y cada una de las funciones exportadas tiene la conveción de llamada __stdcall solicitada por mi MQL4.

Mi problema surge cuando una función necesita devolver una cadena al EA.

Naturalmente la función no puede

- devolver un puntero a una variabile local (la variable sale del ámbito)

- devolver un puntero a una variable global dll (problemas de acceso concurrente)

- devolver un puntero a una cadena asignada a la pila (necesita funciones para liberar memoria para ser llamada desde el EA: no me gusta este enfoque)

Así que resolví pasar una cadena y el tamaño de la cadena desde el EA. Es:

string buffer;

GetString( buffer, 30 );

[/CODE]

and from the c++ dll, something like this

void __stdcall GetString( LPTSTR buffer, int BufSize )

{

// Read a string from a some source

....

// -1 to take into account the terminating null character

StringCchCopy( buffer, BufSize-1, ReadStringFromASource );

}

[/CODE]

Here starts the weird behaviour of MQL managing strings returned from a DLL.

using the following code:

string buffer;

GetString( buffer, 30 );

the first time buffer contains the right string. A first question arises: buffer is not initialized but after calling GetString it contains the string returned. I have to suppose that MQL allocates space for a string variable when it's declared.

Next time GetString() is called the string returned seems to be truncated to the length-1 of the previous string length and not resetted as expected because of the 'string buffer;' statement.

Tried even:

[CODE]

string buffer = " "; // 'allocate' 30 blank characters

GetString( buffer, StringLen(buffer) );

but after the first time, when the execution returns to this code, the assignment of buffer does not work any more and buffer still contains the previous read string, and it seems it can only contains the number of characters of his content.

At first I have thought that the null character is not handled very well by MQL and modified the c++ code like this ...

[CODE]

CopyMemory( buffer, ReadStringFromASource, min(BufferSize,ReadStringFromASourceLength) );

y no añadir el carácter nulo de terminación.

Pero cuando se llama desde MQL, ninguna cadena en absoluto está regresando.

¿Tiene alguien una respuesta?

¿Nadie tiene problemas para devolver una cadena desde una DLL?

 

Necesito ayuda..

¿Puede alguien mostrarme un código? para adjuntar a mi EA ..

Una orden por la señal.. porque a veces tengo 3 causa de la señal de diferentes TF.. quiero toda la señal para abrir..

o un código que tome una orden por barra pero cada Timeframe adjuntar a una EA.. no quiero abrir un montón de gráfico..

 

¿Qué ocurre con mi BuyStop?

ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Distance*Point,Slippage,Bid-Distance-StopLoss*Point,Ask+Distance+TakeProfit*Point,"",MagicNumber,0,Blue);

 
matrixebiz:
¿Qué pasa con mi BuyStop?

ticket=OrderSend(Symbol(),OP_BUYSTOP,Lots,Ask+Distance*Point,Slippage,Bid-Distance-StopLoss*Point,Ask+Distance+TakeProfit*Point,"",MagicNumber,0,Blue);

su Stop lose y Take profit..

también deberías añadir *punto a tu distancia antes de añadirla..

O

Oferta-((Distancia-StopLoss)*Punto),Oferta+((Distancia+TakeProfit)*Punto)