Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 191

 
Vitaly Muzichenko:

Prueba a comentar la línea, haz que una función funcione


interesante si sabes cómo)
 
Rustam Bikbulatov:

interesante si sabes cómo)
no necesitas saber nada, lo mostré en el código //
 
Rustam Bikbulatov:

Hola de nuevo. Me pueden decir cómo cambiar el código de un programador conocido. Por el momento, este búho cierra aproximadamente una operación por segundo. Me gustaría cambiarlo para que cerrara las operaciones al instante al cruzar un determinado beneficio independientemente de las operaciones positivas o negativas.

¿Se escribe algún mensaje de error en el registro?

Puede reducir el retraso dentro de ClosePosBySelect a valores más razonables. Para cada pedido hay varios intentos de cerrarlo, y cada vez que se consigue el sueño en caso de fracaso.

Por cierto, la recuperación de errores se puede hacer de una manera mejor (desde el momento de la creación de estas funciones, MT ha aprendido a generar un código diferente a ERR_CONTEXT_BUSY).

 
Rustam Bikbulatov:

Es interesante si sabes cómo)
Puedes sustituir esos dos por este, a mí me funciona bien, pero depende mucho de la rapidez con la que tu CC ejecute las órdenes.
 
Maxim Kuznetsov:

¿Se registra algún mensaje de error?

Puede reducir los retrasos dentro de ClosePosBySelect a valores más razonables. Hay varios intentos de cerrar cada orden y cada vez, si no se logra, se muestra el sueño.

Por cierto, la recuperación de errores se puede hacer de una manera mejor (desde el momento de la creación de estas funciones, MT ha aprendido a generar un código diferente a ERR_CONTEXT_BUSY).

Traté de eliminar el sueño por completo, pero es diferente.
 
Vitaly Muzichenko:
Puedes sustituir esos dos por este, a mí me funciona bien, pero depende mucho de la rapidez con la que tu empresa de corretaje ejecute las órdenes.

¿Es un búho completo o parte del código de algo?
 

Señores expertos, ¡¡¡ayuda!!! Llevo tres días trabajando en este problema. Utilicé la función estándar de mi Asesor Experto (la he visto en todas partes) para leer un archivo de Internet utilizando wininet.dll para su posterior análisis:


string ReadHTML()

{

if(!IsDllsAllowed())

{

Alert("Tiene que permitir las DLL en la configuración;)

return(");

}

int rv = InternetAttemptConnect(0);

if(rv != 0)

{

Alert("Error al llamar a InternetAttemptConnect()");

return(");

}

int hInternetSession = InternetOpenW("Microsoft Internet Explorer", 0, "", "", 0);

if(hInternetSession <= 0)

{

Alert("Error al llamar a InternetOpenW()");

return(");

}

int hURL = InternetOpenUrlW(hInternetSession,URL, "", 0, 0, 0);

if(hURL <= 0)

{

Alert("Error al llamar a InternetOpenUrlW();

InternetCloseHandle(hInternetSession);

return("");

}

int cBuffer[256];

int dwBytesRead[1];

cadena TXT = "";

while(!IsStopped())

{

bool bResultado = InternetReadFile(hURL, cBuffer, 1024, dwBytesRead);

if(dwBytesRead[0] == 0)

romper;

cadena de texto = "";

string text0= "";

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

{

text0= CharToStr((char)(cBuffer[i] & 0x000000FF));

if (text0!="\r") text = text + text0;

si no dwBytesRead[0]--;

if(StringLen(text) == dwBytesRead[0]) break;

text0= CharToStr((char)(cBuffer[i] >> (8 & 0x000000FF));

if (text0!="\r") text = text + text0;

si no dwBytesRead[0]--;

if(StringLen(text) == dwBytesRead[0]) break;

text0= CharToStr((char)(cBuffer[i] >> (16 & 0x000000FF));

if (text0!="\r") text = text + text0;

si no dwBytesRead[0]--;

if(StringLen(text) == dwBytesRead[0]) break;


text0= CharToStr((char)(cBuffer[i] >> (24 & 0x000000FF));

if (text0!="\r") text = text + text0;

si no dwBytesRead[0]--;

if(StringLen(text) == dwBytesRead[0]) break;

}

TXT = TXT + texto;

Dormir(1);

}

InternetCloseHandle(hURL);

InternetCloseHandle(hInternetSession);

return(TXT);

}


Todo bien, sólo una vez leído el sitio, que se actualiza posteriormente, en las llamadas posteriores a esta función (con un período de 1 minuto o menos, aunque el sitio se actualiza más a menudo) da el mismo sitio sin cambios (como se leyó la primera vez). Reiniciar el Asesor Experto no ayuda, ya que el archivo fue leído la primera vez después de iniciar el terminal, por lo que parece. La única manera de actualizar es abrir manualmente el Internet Explorer con el sitio requerido (respectivamente, con la información actualizada) y la función comienza a leer la información actualizada y luego se congela esta configuración del sitio, o al reiniciar el terminal MT4 (y también cuando se lee por primera vez después de reiniciar el terminal, por lo que sigue saliendo). Sospecho que tiene algo que ver con los parámetros InternetOpenW o InternetOpenUrlW, yo tengo ceros en todas partes por defecto pero no encuentro ninguna descripción clara de ello y de alguna manera funciona con otros EAs (lo tomé de Asesores Expertos que retransmiten noticias de sitios a la terminal). Sí, en la configuración del terminal "Permitir WebRequest para..." para el sitio requerido.

 

Buenas tardes.

Ya mi RAM está echando humo: Ha surgido un problema en el EA, después de tomar un TP o SL, ¡abre una orden de nuevo!

No puedo pensar en una condición en la que el EA estaría vinculado sólo a la segunda barra después de la señal del indicador

o si se dispara un TP o SL, esperaría una nueva señal, pero sólo cuando la señal del indicador cambie.


void OnTick()

{

uptr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 0, n), 4);

dntr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 1, n), 4);

if(DN_Trend()==true)

{

if(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr)

{

ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red);

si (billete > 0)

{

SL = NormalizeDouble(Bid + StopLoss*Point, Digits);

TP = NormalizeDouble(Oferta - TakeProfit*Punto, Dígitos);

if (OrderSelect(ticket, SELECT_BY_TICKET))

if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))

Print("Error en la venta");

}

}

 
d1w4m3:

Buenas tardes.

Ya mi RAM está echando humo: Ha surgido un problema en el EA, después de tomar un TP o SL, ¡abre una orden de nuevo!

No puedo pensar en una condición en la que el EA estaría vinculado sólo a la segunda barra después de la señal del indicador

O bien, si un TP o SL se dispara, el Asesor Experto esperaría una nueva señal, pero sólo cuando la señal del indicador cambie.

Si la última posición cerrada es del mismo tipo que la señal y si esta posición se cerró con una de las órdenes de stop, entonces no abra una posición.
 
Artyom Trishkin:
Si la última posición cerrada es del mismo tipo que la señal recibida, y si esta posición se cerró con una de las órdenes de stop, entonces no abra la posición.


Gracias por la respuesta, pero recién empiezo a aprender desde hace un par de semanas, como implementar esto en código, o decirme donde leer por favor. ¿O según Igor Kim?

Y sin embargo, abrirá una posición, no de acuerdo con el sistema, cuando acaba de comenzar su trabajo, su condición no evita este problema.

Razón de la queja: