Especialistas: Servidor DDE - página 4

 

Seria possível obter o código-fonte da DLL e do EXE? Estou escrevendo minhas primeiras DLLs para o MT5 (32 bits e 64 bits) e esse seria um projeto perfeito.

 
Não estou funcionando, recebo o erro "2019.02.26 11:23:40.882 dde_example (ES,H1) Alert: Cannot find MT4.DDE.2 window!"

 
O programa está funcionando bem. Mas não entendo onde preciso criar a planilha do Excel... ou ela é gerada automaticamente? se ela é gerada automaticamente, onde posso encontrá-la?

Por favor, ajude

Obrigado,
 
Tom Sasson:

Esta postagem é bastante antiga, mas ainda é relevante.

Essa ferramenta é incrível e pode ser usada para integrar dados até mesmo de várias instâncias do MT4 ou de vários EAs.

Se alguma das perguntas anteriores ainda for relevante, publique-a novamente e eu responderei.

O mesmo se aplica às perguntas sobre MQL4, pois também posso ajudar com MQL4.

Olá, Tom,


Gostaria de exportar dados de compra e venda em tempo real para o Excel. É possível usar essa ferramenta?

Obrigado, Tom

 

Buenas.


Estou tentando obter o LAST, mas sempre vem em branco.


Alguém faz ideia do que esta errado?




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

   ArraySetAsSeries(MA,true);

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


// Check & Add Item DDE

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

     {

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

     }


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

     {

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

     }

     

   if(!CheckItem("COMPANY","Value")) AddItem("COMPANY","Value");

   if(!CheckItem("TIME","Value")) AddItem("TIME","Value");

   

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

 

// Set Item Value 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));

  }

 

Boa noite. 


Depois de apanhar muito, consegui resolver. Me cadastrei no site só pra isso.

Altere toda a função OnTimer():

void OnTimer()

  {

//--- filling an array MA[] with current values of iMA

//--- Copying 100 elements

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

//   ArraySetAsSeries(MA,true);

   double EURUSD_ASK = SymbolInfoDouble("EURUSD",SYMBOL_ASK); // for eurusd (example)

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

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

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

   

// Check & Add Item DDE

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

//     {

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

//     }


   if(!CheckItem("COMPANY","Value")) AddItem("COMPANY","Value");

   if(!CheckItem("TIME","Value")) AddItem("TIME","Value");

   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");

   

// Set Item Value 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));

  }

O restante é igual o que foi descrito acima.


Espero que ajude alguém.

 
Mikhail Shikin:
Não estou funcionando, recebo o erro "2019.02.26 11:23:40.882 dde_example (ES,H1) Alert: Cannot find MT4.DDE.2 window!"

Você esqueceu de executar o DDE Server.exe

 
MARFE:

Oi Tom,


Gostaria de exportar dados de compra e venda de ticks em tempo real para o Excel. É possível usar essa ferramenta?

Obrigado, Tom

Desculpe-me pela demora na resposta, mas é claro que é possível.

Eu disse "era" porque não uso essa ferramenta há 3 anos e não tentei no Windows 10, então você pode experimentar e relatar o resultado.

 
maurorechi:

Boa noite. 


Depois de apanhar muito, consegui resolver. Me cadastrei no site só pra isso.

Altere toda a função OnTimer():

void OnTimer()

  {

//--- filling an array MA[] with current values of iMA

//--- Copying 100 elements

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

//   ArraySetAsSeries(MA,true);

   double EURUSD_ASK = SymbolInfoDouble("EURUSD",SYMBOL_ASK); // for eurusd (example)

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

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

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

   

// Check & Add Item DDE

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

//     {

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

//     }


   if(!CheckItem("COMPANY","Value")) AddItem("COMPANY","Value");

   if(!CheckItem("TIME","Value")) AddItem("TIME","Value");

   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");

   

// Set Item Value 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));

  }

O restante é igual o que foi descrito acima.


Espero que ajude alguém.

Valeu Maurorechi,


mas tem que fazer essas linhas que vc fez pro EURUSD pra cada ativo ?

E outra duvida, pra puxar infos de um ativo tem que estar com a janela do ativo aberta?

 
gostaria que ele pudesse gerar os valores bid/ask automático para todos os symbols do market watch. Alguem pode ajudar?