Tras simplificarlo al máximo, creo que la DLL de enlace más simple posible debe tener cuatro funciones, que se utilizarían en el evento OnTick:
- Primero se llama a EAOnTick, pasando a la DLL como parámetros los valores de Bid y Ask. Devuelve 1 si hay que dar orden de compra, -1 si hay que dar orden de venta, o 0 si no hay que hacer nada. La DLL debe llevar cuenta si se había comprado ya o no...
- EABuyData: Si hay que dar orden de compra esta función permite obtener de la DLL la cantidad a comprar y el Slippage.
- EASellData: Si hay que dar orden de venta esta función permite obtener la cantidad que la DLL dice que hay que vender (en principio, todo lo que se había comprado), y el Slippage.
- EAOrderTicket: Le indica a la DLL el ticket asignado en la operación. La utilidad real de esta función es que permite a la DLL saber si se ha hecho la compra o venta con éxito (Ticket>0) o no (Ticket<=0).
El código MQL podría ser similar a:
Código:
#import "EA.dll"
int EAOnTick(double BidValue, double AskValue);
void EABuyData(double &VolumeValue, int &SlippageValue);
void EASellData(double &VolumeValue, int &SlippageValue);
void EAOrderTicket(int Ticket);
#import
void OnTick() {
int Op;
double Lotes;
int Slippage;
int Ticket =-1;
Op = EAOnTick(Bid, Ask);
if (Op==0) return;
if (Op==1) {
// Dar orden de compra
EABuyData(Lotes, Slippage);
Ticket = OrderSend(Symbol(), OP_BUY, Lotes, Ask, Slippage, 0.0, 0.0);
} else {
// Dar orden de venta
EASellData(Lotes, Slippage);
Ticket = OrderSend(Symbol(), OP_SELL, Lotes, Bid, Slippage, 0.0, 0.0);
}
EAOrderTicket(Ticket);
}
Este es el punto en que me llego... Ahora iré preparando un ejemplo completo muy simple utilizando esta DLL...
Marcadores