![MQL5 - Lenguaje de estrategias comerciales para el terminal de cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
¿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
Una cosa más
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;
}
}
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
Buy_Limit y Buy_Stop
¿Cuál es la diferencia entre una orden de Límite y una orden de Stop?
Gracias
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?![](https://c.mql5.com/forextsd/smiles/frown.png)
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);
¿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)