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
Hice una DLL en Delphi, la llamo desde MT4. Todo funciona excepto los parámetros simples pasados por referencia. En Delphi, declarado como sigue:
procedure Test2(var i: integer); stdcall;
begin
if addr(i) = nil then ShowMessage('What the hell?');
end;
stop to call it as
#import "DLL1.dll"
void Test2(int& i);
Llamo a
int init() {
int x = 5;
Test2(x);
return(x);
}
cuando se llama, una referencia a la variable integer debería estar en la pila, pero null está ahí
así que ¿cómo pasar un parámetro int por referencia?
Al pasar arrays, el valor del array se pasa por referencia
usando
MetaEditor 4.00 build 183
MetaTrader 4.00 build 186
una pregunta más: si paso una cadena como referencia, ¿cuál es el tamaño del buffer de la cadena?
una pregunta más:
Si paso una cadena como resultado de una función, ¿dónde debe asignarse el área de memoria para la cadena? ¿Debo pasar un puntero a una variable global en la DLL? En este caso, ¿puedo estar seguro de que la DLL no será llamada desde diferentes hilos simultáneamente en cualquier modo de metatrader?
Gracias de antemano
al comienzo del día establecer dos órdenes pendientes
Una vez que uno (cualquier) disparó - el segundo se elimina
Cinco minutos antes del cierre de la barra (digamos un diario) para cerrar el disparado (si no se cerró por SL o TP)
Si no se disparó ninguna orden pendiente, cinco minutos antes de cerrar la barra eliminar ambos
Muchas gracias
2) Si paso la cadena como resultado de una función, ¿dónde debe asignarse el área de memoria para la cadena? ¿Debo pasar un puntero a una variable global en la DLL? En este caso, ¿puedo estar seguro de que la DLL no será llamada desde diferentes hilos simultáneamente en cualquier modo del metatrader?
Gracias de antemano
Cuando uno (cualquier) desencadenado - el segundo se elimina
Cinco minutos antes del cierre de la barra (digamos un diario) para cerrar el desencadenado (si no se cerró por SL o TP)
Si no hay orden pendiente desencadenado, cinco minutos antes de cerrar la barra de eliminar ambos
Gracias de antemano
Se establecen las órdenes pendientes en el momento adecuado (eso es fácil). Y empiezas a comprobar los pedidos. Tan pronto como aparezca una orden de compra o de venta, se trabaja en la eliminación de la orden pendiente (aún más fácil). Y luego, en el momento adecuado, trabajar para cerrar todas las órdenes (esto es fácil).
в начале дня устанавливаем два отложенных ордера
После того как один(любой) сработал - второй удаляется
За пять минут до закрытия бара(допустим дневного) закрыть сработавший (если он не был закрыт по SL или TP)
Если ни один отложенный ордер не соработал то за пять минут до закрытия бара удаляем их обоих
Заранее спасибо
Así es como se implementa, se ponen órdenes pendientes en el momento adecuado (es fácil). Y entonces empiezas a comprobar los pedidos. En cuanto aparezca una orden de compra o de venta, trabaje eliminando la orden pendiente (esto es aún más fácil). Y luego, en el momento adecuado, trabajar para cerrar todas las órdenes (es muy fácil).
He pedido un código que funcione (quizás alguien lo haya implementado).
Todo lo que he hecho no ha funcionado... El proceso de odrerdelete es algo confuso.
Otra pregunta: a veces el precio se congela (no hay ticks) durante algunos minutos, es decir, no podemos cerrar una orden ya que el cuerpo de int start() no se ejecuta, aunque se reciben ticks para otros símbolos, ¿es posible pasar el valor de Curetime de cualquier símbolo con ticks?
En pocas palabras, el valor de Curetime prácticamente no debería congelarse
¿Y qué hace este fragmento de código?
Elimina las dos órdenes pendientes que aún no se han activado