Asesores Expertos: DDE - Server - página 4

 

¿Sería posible conseguir el código fuente de la DLL y el EXE? Estoy escribiendo mis primeros DLLs para MT5 (32bit y 64bit) y este sería un proyecto perfecto.

 
No me funciona me sale el error "2019.02.26 11:23:40.882 dde_example (ES,H1) Alert: Cannot find MT4.DDE.2 window!"

 
Programa funcionando bien .. Pero no entiendo donde tengo que crear excelsheet .. o su auto generar? si su auto generar así que donde puedo encontrarlo?

Por favor ayuda

Gracias,
 
Tom Sasson:

Este post es bastante antiguo, pero sigue siendo relevante.

Esta herramienta es increíble, y se puede utilizar para integrar datos incluso de múltiples instancias de MT4 o múltiples EAs.

Si alguna de las preguntas anteriores sigue siendo relevante, por favor volver a publicarlas y voy a responder.

Lo mismo va para las preguntas MQL4, ya que puedo ayudar con MQL4 también.

Hola Tom ,


Me gustaría exportar en tiempo real de compra y venta de datos de garrapatas a Excel, ¿es posible el uso de esta herramienta?

Gracias

 

Buenas.


Estoy intentando poner LAST, pero siempre sale en blanco.


¿Alguien tiene alguna idea de lo que está mal?




CopyBuffer(MA_handle,0,0,100,MA);

ArraySetAsSeries(MA,true);

double LAST = SymbolInfoDouble("USDBRL", SYMBOL_LAST);


// Comprobar y añadir elemento DDE

if(!CheckItem("A", "B"))

{

if(!AddItem("A", "B")) return;

}


if(!CheckItem("C", "D"))

{

if(!AddItem("C", "D")) return;

}

if(!CheckItem("EMPRESA", "Valor")) AddItem("EMPRESA", "Valor");

if(!CheckItem("HORA", "Valor")) AddItem("HORA", "Valor");

if(!CheckItem("LAST", "EURUSD")) AddItem("LAST", "USDBRL");

// Establecer el valor del elemento DDE

SetItem("COMPANY", "Value",(string)AccountInfoString(ACCOUNT_COMPANY));

SetItem("TIME", "Value",(string)TimeCurrent());


SetItem("A", "B", "EMA(21): "+DoubleToString(MA[0],6));


SetItem("C", "D", "LAST: "+DoubleToString(LAST,5));

}

 

Buenas noches.


Después de mucho trastear, he conseguido solucionarlo. Me registré en el sitio sólo para esto.

Cambia toda la función OnTimer():

void OnTimer()

{

//--- llenando un array MA[] con los valores actuales de iMA

//--- Copiando 100 elementos

// CopiarBuffer(MA_handle,0,0,100,MA);

// ArraySetAsSeries(MA,true);

double EURUSD_ASK = SymbolInfoDouble("EURUSD",SYMBOL_ASK); // para eurusd (ejemplo)

double EURUSD_BID = SymbolInfoDouble("EURUSD",SYMBOL_BID);

double USDCHF_ASK = SymbolInfoDouble("USDCHF",SYMBOL_ASK);

double USDCHF_BID = SymbolInfoDouble("USDCHF",SYMBOL_BID);

// Comprobar y añadir elemento DDE

// if(!CheckItem("EMA", "B"))

// {

// if(!AddItem("EMA", "B")) return;

// }


if(!CheckItem("EMPRESA", "Valor")) AddItem("EMPRESA", "Valor");

if(!CheckItem("TIEMPO", "Valor")) AddItem("HORA", "Valor");

if(!CheckItem("EURUSD", "ASK")) AddItem("EURUSD", "ASK");

if(!CheckItem("EURUSD", "BID")) AddItem("EURUSD", "BID");

if(!CheckItem("USDCHF", "ASK")) AddItem("USDCHF", "ASK");

if(!CheckItem("USDCHF", "BID")) AddItem("USDCHF", "BID");

// Establecer el valor del elemento DDE

SetItem("COMPANY", "Value",(string)AccountInfoString(ACCOUNT_COMPANY));

SetItem("TIME", "Value",(string)TimeCurrent());


// SetItem("EMA", "B", "EMA(21): "+DoubleToString(MA[0],6));

SetItem("EURUSD", "ASK",DoubleToString(EURUSD_ASK,5));

SetItem("EURUSD", "BID",DoubleToString(EURUSD_BID,5));

SetItem("USDCHF", "ASK",DoubleToString(USDCHF_ASK,5));

SetItem("USDCHF", "BID",DoubleToString(USDCHF_BID,5));

}

El resto es igual a lo descrito anteriormente.


Espero que le sirva a alguien.

 
Mikhail Shikin:
No me funciona me sale el error "2019.02.26 11:23:40.882 dde_example (ES,H1) Alert: Cannot find MT4.DDE.2 window!"

Se te ha olvidado ejecutar DDE Server.exe

 
MARFE:

Hola Tom ,


Me gustaría exportar datos de compra y venta en tiempo real a Excel, ¿es posible con esta herramienta?

Gracias

Perdón por la tardanza en contestar, por supuesto que era posible.

Dije "era" porque no he utilizado esta herramienta desde hace 3 años, y no he probado en Windows 10 por lo que puede experimentar e informar.

 
maurorechi:

Buenas noches.


Después de mucho trastear, he conseguido solucionarlo. Me registré en el sitio sólo para eso.

Cambia toda la función OnTimer():

void OnTimer()

{

//--- llenando un array MA[] con los valores actuales de iMA

//--- Copiando 100 elementos

// CopiarBuffer(MA_handle,0,0,100,MA);

// ArraySetAsSeries(MA,true);

double EURUSD_ASK = SymbolInfoDouble("EURUSD",SYMBOL_ASK); // para eurusd (ejemplo)

double EURUSD_BID = SymbolInfoDouble("EURUSD",SYMBOL_BID);

double USDCHF_ASK = SymbolInfoDouble("USDCHF",SYMBOL_ASK);

double USDCHF_BID = SymbolInfoDouble("USDCHF",SYMBOL_BID);

// Comprobar y añadir elemento DDE

// if(!CheckItem("EMA", "B"))

// {

// if(!AddItem("EMA", "B")) return;

// }


if(!CheckItem("EMPRESA", "Valor")) AddItem("EMPRESA", "Valor");

if(!CheckItem("HORA", "Valor")) AddItem("HORA", "Valor");

if(!CheckItem("EURUSD", "ASK")) AddItem("EURUSD", "ASK");

if(!CheckItem("EURUSD", "BID")) AddItem("EURUSD", "BID");

if(!CheckItem("USDCHF", "ASK")) AddItem("USDCHF", "ASK");

if(!CheckItem("USDCHF", "BID")) AddItem("USDCHF", "BID");

// Establecer el valor del elemento DDE

SetItem("EMPRESA", "Valor",(string)AccountInfoString(CUENTA_EMPRESA));

SetItem("TIME", "Value",(string)TimeCurrent());


// SetItem("EMA", "B", "EMA(21): "+DoubleToString(MA[0],6));

SetItem("EURUSD", "ASK",DoubleToString(EURUSD_ASK,5));

SetItem("EURUSD", "BID",DoubleToString(EURUSD_BID,5));

SetItem("USDCHF", "ASK",DoubleToString(USDCHF_ASK,5));

SetItem("USDCHF", "BID",DoubleToString(USDCHF_BID,5));

}

El resto es igual a lo descrito anteriormente.


Espero que ayude a alguien.

Gracias Maurorechi,


¿pero tienes que hacer estas líneas que hiciste para EURUSD para cada activo?

Y otra pregunta, ¿tienes que tener la ventana del activo abierta para poder sacar información de un activo?

 
Me gustaría que fuera capaz de generar los valores de compra/venta automáticamente para todos los símbolos del market watch. ¿Alguien puede ayudarme?