Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 66
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
En teoría sé por qué ha ocurrido esto, así que mi pregunta es, ¿podemos hablar brevemente sobre el uso de arrays?
¿Dónde hay que inicializarlos, borrarlos y procesarlos para que funcionen?
P.D.
cuando google lo prohíbe se ve algo así:
¿Por qué crees que es por la matriz?
necesito
1) crearla en algún lugar (en un área global, como función, en onit u ontic?)
2) escribir cada billete en él al enviar un pedido, dándole un número por orden
3) sacarlos de ahí según sea necesario a través del número
4) Al cerrar toda la parrilla, poner a cero los parámetros
No es necesario mantenerlo en la memoria todo el tiempo. Cuando necesites encontrarla, llamas a la función con un array local dentro de ella donde pondrás todos los pedidos/posiciones en el bucle, ordenas el array como necesites, seleccionas los pedidos necesarios de él, haces lo que necesites con ellos, y cuando salgas de la función, te olvidas de ese array local. Y la próxima vez que llames de nuevo a la función, ésta ordenará las órdenes/posiciones que habrá en el momento de dicha llamada, y hará lo mismo con ellas. Y no necesitas una matriz global que tengas que vigilar y controlar constantemente.
No sé cuánto más barato. Cada situación tiene su propia solución. No hay ningún evento OnTradeTransaction() en MQL4, pero tenemos que llevar la cuenta de "nuestras" órdenes de alguna manera... Aquí es donde la matriz de variables globales resulta útil.
Imagina que hay varios Asesores Expertos corriendo en una cuenta, uno de los cuales tiene cálculos pesados, y el otro tiene un gran número de órdenes... ¿Cómo funcionaría con cálculos pesados? ¿Tendrá este EA que buscar una gran cantidad de pedidos? No se puede prescindir de la búsqueda en general, pero hay que minimizar este procedimiento.
¿Y para determinar si el pedido está cerrado o no? ¿Revisar toda la historia? ¿No es demasiado caro?
Nunca he cometido este tipo de error, pero si lo he hecho, me he equivocado, por eso pregunto aquí. Podría hacerlo yo mismo, pero lleva mucho más tiempo.
Como habrás entendido por mi anterior post, yo uso arrays con bastante frecuencia y nunca he tenido problemas con ellos. Una vez escribí un EA que abría más de 2000 órdenes cuyos tickets se almacenaban en un array y no había ningún problema. No puedo creer que los problemas aparezcan por la matriz. Tampoco puedo creer qué error puede haber causado tales problemas.
Me recuerda a la película "No puede ser"... "No es la cerveza la que mata a la gente, es el agua la que mata a la gente"...
No sé cuánto más barato. Cada situación tiene su propia solución. No hay ningún evento OnTradeTransaction() en MQL4, pero tenemos que llevar la cuenta de "nuestras" órdenes de alguna manera... Aquí es donde la matriz de variables globales resulta útil.
Imagina que hay varios Asesores Expertos corriendo en una cuenta, uno de los cuales tiene cálculos pesados, y el otro tiene un gran número de órdenes... ¿Cómo funcionaría con cálculos pesados? ¿Tendrá este EA que buscar una gran cantidad de pedidos? No se puede prescindir de la búsqueda en general, pero debemos minimizar este procedimiento.
¿Cómo comprobar si el pedido se ha cerrado? ¿Revisar toda la historia? ¿No es demasiado caro?
Todo tiene solución.
Por ejemplo, hace tiempo que creé una clase que controla todo esto. Puedes crear/borrar objetos de clase dinámicamente para cada símbolo, magik, marco temporal, o todo para una cuenta o una combinación de ellas - puedes elegir. Cualquier ciclo de búsqueda necesario ya se realiza en una nueva garrapata una vez, y hay todos los datos necesarios. Por supuesto, hay casos en los que es imposible prescindir de un ciclo más, pero es el segundo ciclo adicional por tic. Y no tener un bucle separado en cada función es un terrible desperdicio de recursos.
Todo tiene solución.
Yo, por ejemplo, hace tiempo que hice una clase que se encarga de todo esto. Puedes crear/borrar objetos de clase dinámicamente para cada símbolo, magik, marco temporal, o todo para una cuenta, o combinaciones de ellos - puedes elegir. Cualquier ciclo de búsqueda necesario ya se realiza en una nueva garrapata una vez, y hay todos los datos necesarios. Por supuesto, hay casos en los que es imposible prescindir de un ciclo más, pero es el segundo ciclo adicional por tic. Y no tener un bucle separado en cada función es un terrible desperdicio de recursos.
No es necesario mantenerlo en la memoria todo el tiempo. Cuando necesites encontrarla, deberás llamar a la función con un array local dentro de ella donde pondrás todos los pedidos/posiciones en el bucle, ordenarás el array como necesites, seleccionarás los pedidos necesarios de él, harás lo que necesites con ellos, y cuando salgas de la función, te olvidarás de ese array local. Y la próxima vez que llames de nuevo a la función, ésta ordenará las órdenes/posiciones que habrá en el momento de dicha llamada, y hará lo mismo con ellas. Y no necesitas una matriz global que tengas que supervisar y controlar constantemente.
Bien, esta es una visión simplificada.
Si el array es local, ¿dónde quieres ponerlo? Obviamente no en el ontik.
{
if(FindLastOType()==OP_BUY) //+------ если последний покупка
{
if(Ask<=FindLastOrderOpenPrice()-Step*Point())//+------------если ордер в минус
{
TotalClose();
}
else
if(Ask>=FindLastOrderOpenPrice()+Step*Point())//+------------если ордер в плюс и это 5 ордер в списке
{
ticket=OrderSend(Symbol(),OP_BUY,(лот2 ордера+лот4 ордера),Ask,50,0,0,"",Magic,0,clrAzure);
}
}
}
Bien, esta es una visión simplificada.
Si el array es local, ¿dónde quieres ponerlo? Obviamente no en el ontik.
{
if(FindLastOType()==OP_BUY) //+------ если последний покупка
{
if(Ask<=FindLastOrderOpenPrice()-Step*Point())//+------------если ордер в минус
{
TotalClose();
}
else
if(Ask>=FindLastOrderOpenPrice()+Step*Point())//+------------если ордер в плюс и это 5 ордер в списке
{
ticket=OrderSend(Symbol(),OP_BUY,(лот2 ордера+лот4 ордера),Ask,50,0,0,"",Magic,0,clrAzure);
}
}
}
{
// Receives the number of bytes written to the file. Note that MQL can only pass
// arrays as by-reference parameters to DLLs
int BytesWritten[1]={0};
// Get the length of the string
int szData=StringLen(DataToWrite);
// Do the write
WriteFile(FileHandle,DataToWrite,szData,BytesWritten,0);
// Return true if the number of bytes written matches the expected number
return (BytesWritten[0] == szData);
}
Quiero escribir una línea en el archivo con las traducciones a una nueva línea, pero no funciona, este código es de aquíhttps://www.mql5.com/en/forum/118999
este código escribe una línea con espacios después de cada letra, necesito un reemplazo para FileWrite() pero funciona