Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
A solução proposta não atingiu mais nada até agora. Portanto, eu não poderia sugerir melhor.
Se você colocar a solução na frente da SB agora, ela se torna sincronizada.
#include <Trade\Trade.mqh>
Posso ter um pequeno exemplo? Ao ligar as aulas - a sua e a da SB:
#include <Trade\Trade.mqh>
Entrando no tema)
Tirada daqui
Entrando no tema)
Tirada daqui
Apenas troquei as linhas...
Posso dar-lhe um pequeno exemplo? Ao ligar as aulas - a sua e a SB:
#include <Trade\Trade.mqh>
Estou a entrar no assunto.)
Sim, eu esqueci-me dessa nuance. No entanto, esta restrição já não existe lá...
Se reordenar os lúdios, não vai jurar, claro. Mas o efeito será nulo - a SB não será sincronizada.
Infelizmente, eu não vejo uma solução bonita. Até agora.
// Это сделает СБ синхронизированным и не потребует каких-либо изменений в экспертах.
#ifdef OrderSend
#undef OrderSend
#define CTrade CTradeBase
#include <Trade\Trade.mqh>
#undef CTrade
class CTrade : public CTradeBase
{
virtual bool OrderSend(const MqlTradeRequest &request,MqlTradeResult &result)
{
bool res;
string action="";
string fmt ="";
//--- action
if(m_async_mode)
res=::OrderSendAsync(request,result);
else
res=ORDERSEND::OrderSendSync(request,result); // единственное отличие от стандарта
//--- check
if(res)
{
if(m_log_level>LOG_LEVEL_ERRORS)
PrintFormat(__FUNCTION__+": %s [%s]",FormatRequest(action,request),FormatRequestResult(fmt,request,result));
}
else
{
if(m_log_level>LOG_LEVEL_NO)
PrintFormat(__FUNCTION__+": %s [%s]",FormatRequest(action,request),FormatRequestResult(fmt,request,result));
}
//--- return the result
return(res);
}
};
// Эта строчка позволяет сделать все OrderSend корректными.
#define OrderSend ORDERSEND::OrderSendSync
#else
#include <Trade\Trade.mqh>
#endif
O meu erro, muito confiante, não verificou.
Sim, eu esqueci-me disso. No entanto, esta restrição já não existe lá...
Se reordenar os nichos, é claro, não vai jurar. Mas o efeito será nulo - a SB não será sincronizada.
Infelizmente, eu não vejo uma solução bonita. Até agora, até agora.
// Это сделает СБ синхронизированным и не потребует каких-либо изменений в экспертах.
...
Bem, isto é, para ligar a sua classe, e o Trade.mqh já vai puxar para cima.
E se for necessário herdar do Trade\Trade.mqh? Como?
Bem, isto é, para ligar a sua classe, e o Trade.mqh será puxado para cima.
A herança vai funcionar como antes. Mas é melhor esclarecer a sua pergunta.
Ou seja, faça da CTrade uma classe base na primeira linha do seu código:
Como deve ser neste caso? Em vez de #incluir <Comércio\Comércio.mqh>, deve inserir o código sugerido?
Herdar este código da CTrade.
Ou seja, faça da CTrade uma classe base na primeira linha do seu código:
Assim, você não deve mais conectar Trade\Trade.mqh ao seu programa, mas sim um inluder, por exemplo, #include <aTradeSync.mqh> que contém sua classe e #include <Trade\Trade.mqh> escrito logo no início.
Eu não o faria desta forma, pois isso exigiria a mudança de EAs previamente escritos. E o OrderSend puro não será sincronizado, apenas o SB-OrderSend. Nem todos usam apenas SB. Algumas pessoas até usam MQL5 puro.
Portanto, a solução abaixo parece ser a ideal por enquanto. Todos os EAs funcionarão sem alterações.
#include <TradeSync.mqh> // Если подключен OrderSendSync.mqh - СБ станет синхронизированной, иначе - стандартной.
Não o faria desta forma, uma vez que exigiria a alteração de EAs previamente escritos. E o OrderSend puro não será sincronizado, apenas o SB-OrderSend. Nem todos usam apenas SB. Algumas pessoas até usam MQL5 puro.
Portanto, a solução abaixo parece ser a ideal por enquanto. Todos os EAs funcionarão sem alterações.
#include <TradeSync.mqh> // Если подключен OrderSendSync.mqh - СБ станет синхронизированной, иначе - стандартной.