Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 6. - página 1109

 
LRA:
La pregunta es pertinente, por ejemplo, para un sistema de formación. Para obtener la distribución, instale MT4 en una unidad flash. O copie la carpeta del terminal en una unidad flash. Luego, esta carpeta puede copiarse en cualquier número de ordenadores, cualquier número de veces. Dicha distribución es útil para realizar copias de seguridad, backups, restauraciones... Mejor inicie la terminal con el interruptor /portable, de lo contrario creará carpetas inútiles inconvenientes en su computadora. Esta cuestión se trata con más detalle en otro hilo en el siguiente enlace

¿Cómo se configura?

El instalador que descargo no instala nada de internet.

 

Cuando inicio el instalador, aparece una ventana con un indicador de descarga de archivos.

A continuación, aparece otra ventana

El instalador me pide que especifique la configuración del proxy, que no tengo.

 
 
polpolpol:

Cuando inicio el instalador, aparece una ventana con un indicador de descarga de archivos.

A continuación, aparece otra ventana

El instalador me pide que especifique la configuración del proxy, que no tengo.

Tengo que desactivar el antivirus y reiniciarlo desde la memoria.
 

Hola. ¿Será correcta la siguiente entrada? La función, cuando se llama, debe eliminar todas las órdenes pendientes.

void DeletedOrders()
         {
         for (int i=0; i<=OrdersTotal(), i++)
             {
             if (OrderSelect(i,SELECT_BY_POS))
                type=OrderType();
             if (type==2 || type==3 || type==4 || type==5)
                OrderDelete(i,clrNONE);
             }
         return();
         }  
 
bobrush:

Hola. ¿Será correcta la siguiente entrada? La función debe eliminar todas las órdenes pendientes cuando se llama.

No, por supuesto que no. Debemos especificar el ticket, no el número de pedido en el bucle:OrderDelete(OrderTicket(),clrNONE);

Y la condición es suficiente:if(type>1).

También te recomiendo que imprimas el código de error más a menudo, eso ayuda.

Ah, sí, las funciones de tipo "void" no deben devolver nada, no necesitamos return() en la ejecución normal, sólo cuando la salida prematura de la función viene dada por alguna condición.

 
bobrush:

Hola. ¿Será correcta la siguiente entrada? La función, cuando se llama, debe eliminar todas las órdenes pendientes.

Hay que tener en cuenta que todavía hay tipos de órdenes no documentadas con type=6 y con type=7 respectivamente para operaciones sobre saldo y sobre crédito de cuenta.

En lugar de i<=OrdersTotal(), sería mejor i<OrdersTotal(), sin llamar innecesariamente a OrderSelect

Y el bucle debe pasar del final al principio, de lo contrario, si la matriz de órdenes tiene tiempo de actualizarse después de que se haya eliminado el i-ésimo elemento en ella, se saltará el anterior i+1º elemento en el i-ésimo lugar. Es mejor empezar por el final.

Si tenemos en cuenta que los desarrolladores no garantizan ningún tipo de orden en el array de pedidos, no podemos garantizar que la secuencia de pedidos en su array siga siendo la misma después de eliminar uno de ellos. Esto sería bastante fiable. Hacemos un bucle hasta que se detecte la orden pendiente. El bucle se termina. Eliminar el orden que hemos encontrado. Esperamos a que Sleep (100) actualice la matriz de órdenes. Luego volvemos al bucle para encontrar la orden pendiente pero con un nuevo array de órdenes. Realizamos una búsqueda completa, pero no retomando el bucle anterior. Y tenemos que hacerlo por triplicado (bucle para encontrar, eliminar una orden, esperar a que se actualice el array) hasta que no se encuentre la orden pendiente.

 
evillive:

No, claro que no. Se debe especificar el ticket, no el número de pedido en el bucle:OrderDelete(OrderTicket(),clrNONE);

Y la condición es suficiente:if(type>1).

También te recomiendo que imprimas el código de error más a menudo, eso ayuda.

Ah, sí, las funciones de tipo "void" no deben devolver nada, no necesitamos return() en la ejecución normal, sólo cuando la salida prematura de la función viene dada por alguna condición.


Gracias.
 
Vlad143:

Tenga en cuenta que todavía hay tipos de órdenes no documentadas con type=6 y con type=7 respectivamente para las transacciones por encima del saldo y por encima del crédito de la cuenta.

En lugar de i<=OrdersTotal(), sería mejor i<OrdersTotal(), sin llamar innecesariamente a OrderSelect

Y el bucle debe pasar del final al principio, de lo contrario, si la matriz de órdenes tiene tiempo de actualizarse después de que se haya eliminado el i-ésimo elemento en ella, se saltará el anterior i+1º elemento en el i-ésimo lugar. Es mejor empezar por el final.

Si tenemos en cuenta que los desarrolladores no garantizan ningún tipo de orden en el array de pedidos, no podemos garantizar que la secuencia de pedidos en su array siga siendo la misma después de eliminar uno de ellos. Esto sería bastante fiable. Hacemos un bucle hasta que se detecte la orden pendiente. El bucle se termina. Eliminar el orden que hemos encontrado. Esperamos a que Sleep (100) actualice la matriz de órdenes. Luego volvemos al bucle para encontrar la orden pendiente pero con un nuevo array de órdenes. Realizamos una búsqueda completa, pero no retomando el bucle anterior. Y lo haremos en tres pasos (bucle para encontrar, eliminar una orden, esperar a que se actualice el array) hasta que la orden pendiente ya no se encuentre.


Es decir, for(OrdersTotal()-1,i=0,i--) y al final del bucle, sleep y break?
 
Vlad143: Esperamos a que Sleep (100) refresque la matriz de órdenes.
IMHO, mi opinión personal en lugar de Sleep (100) es mejor while(!RefreshRates()); punto y coma al final.