#property strict#ifdef __MQL5__#include <MQL4_To_MQL5.mqh> // https://www.mql5.com/pt/code/16006#endif // __MQL5__#define GetLastError GetOrderError
// Deve estar presente não apenas no MT5, mas também no MT4.// https://www.mql5.com/ru/forum/93352/page19#comment_6730221#include <MT4Orders.mqh>
#define BUY 0#define SELL 1#define ALL -1#define LAST 0#define NOMODY -1bool LogInfo=true;//Imprimir no registro de erros
/*
Aqui estão as funções da classe para trabalhar com pedidos
*/
No final da minha classe, adicionei uma função
//+-------------------------------------------------------------------------------------------------------------------+//|| Transformação de erros do MT5 para o MT4//+-------------------------------------------------------------------------------------------------------------------+int GetOrderError()
{
//int error=MT4ORDERS::LastTradeResult.retcode_external; // Retorna códigos personalizadosint error=(int)MT4ORDERS::LastTradeResult.retcode; // Retorna os códigos de erro após o envio do pedido ao servidorif(LogInfo==true)Print("error MT5=",error);
switch(error)
{
case10016:
error=130;//Pés erradosbreak;
case10018:
error=132;//Mercado fechadobreak;
case10020:
error=135;/O preço foi alteradobreak;
case136:
error=136;//Nenhum preço - nenhum código no MT5break;
case10004:
error=138;/Novos preçosbreak;
case145:
error=145;/A modificação é proibida porque a ordem está muito próxima do mercado - nenhum código no MT5break;
case146:
error=146;/Subsistema de negociação ocupado - nenhum código no MT5break;
default:
error=error;//Erro não descrito
}
return (error);
}
#undef GetLastError
Ошибки времени выполнения - Коды ошибок и предупреждений - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Não é uma opção ruim. Lembre-se apenas de que outros códigos de erro não estarão disponíveis.
Acho que essa alteração é válida somente para o código em torno da minha classe e, depois disso, eu desativo a substituição #undef GetLastError e, se entendi corretamente, o compilador não substituirá mais GetLastError, ou estou errado?
Parece que essa alteração é válida somente para o código em torno da minha classe, e depois que eu desativar a substituição #undef GetLastError e, se entendi corretamente, o compilador não substituirá mais GetLastError, ou estou errado?
Você está certo. Eu não entendi o que você quis dizer de imediato.
Muitas vezes me arrependi de ter postado isso, pois não tem nada a ver com o MT4Orders. Foi apenas um complemento para os exemplos. Não me lembro do significado dele. Não quero entrar no assunto.
Lembrei-me de que fiz uma solução mais elaborada de "conversão" aqui.
Eu mesmo uso o MT4Style apenas nas funções de Ordem. Não converto absolutamente outras funções padrão do MT4 para meu trabalho e vejo essa opção como uma muleta. Recomendo escrever funções de margem em funções nativas sem tentar convertê-las. Dei uma olhada na minha aula sobre como trabalhar com margem - um arquivo mqh de tamanho decente. E isso é apenas para o Forex regular.
Você está usando uma solução antiga, montada às pressas.
Muitas vezes me arrependi de tê-la postado, pois ela não tem nada a ver com o MT4Orders. Era apenas um complemento para os exemplos. Não me lembro do significado disso. Não quero dar uma olhada nisso.
Lembrei-me de que fiz uma solução mais elaborada de "conversão" aqui.
Eu mesmo uso o MT4Style somente nas funções de Ordem. Não converto absolutamente outras funções padrão do MT4 para meu trabalho e vejo essa opção como uma muleta. Recomendo escrever funções de margem em funções nativas sem tentar convertê-las. Dei uma olhada na minha aula sobre como trabalhar com margem - um arquivo mqh de tamanho decente. E isso é apenas para o Forex regular.
Eu tinha apenas a tarefa de criar um código compilável para MT4 e MT5 sobre as funções da lógica do EA, e converti as coisas relacionadas ao ambiente e ao trabalho com ordens com a ajuda dos inkludniks mencionados acima, ou retirei funções separadas e as reformulei para cada plataforma. O projeto acabou sendo grande, e sua solução me ajudou muito.
Tive outro erro - o tamanho mínimo do lote foi determinado incorretamente, então adicionei sinalizadores aqui. Anteriormente, fiz a travessia sem levar em conta o seu código (MQL4_To_MQL5.mqh não é o seu código?) - ele foi compilado, mas não funcionou corretamente.
#define MODE_BID 9#define MODE_ASK 10#define MODE_DIGITS 12#define MODE_SPREAD13#define MODE_STOPLEVEL 14#define MODE_LOTSIZE 15#define MODE_POINT 11#define MODE_TICKVALUE 16#define MODE_TICKSIZE 17#define MODE_MAXLOT 18#define MODE_MINLOT 19#define MODE_LOTSTEP 20//+------------------------------------------------------------------+//||//+------------------------------------------------------------------+double MarketInfo(conststring Symb,constint Type)
{
switch(Type)
{
case MODE_BID:
return(::SymbolInfoDouble(Symb, ::SYMBOL_BID));
case MODE_ASK:
return(::SymbolInfoDouble(Symb, ::SYMBOL_ASK));
case MODE_DIGITS:
return((double)::SymbolInfoInteger(Symb, ::SYMBOL_DIGITS));
caseMODE_SPREAD:
return((double)::SymbolInfoInteger(Symb, ::SYMBOL_SPREAD));
case MODE_STOPLEVEL:
return((double)::SymbolInfoInteger(Symb, ::SYMBOL_TRADE_STOPS_LEVEL));
case MODE_LOTSIZE:
return(::SymbolInfoDouble(Symb, ::SYMBOL_TRADE_CONTRACT_SIZE));
case MODE_POINT:
return(::SymbolInfoDouble(Symb, ::SYMBOL_POINT));
case MODE_TICKVALUE:
return(::SymbolInfoDouble(Symb, ::SYMBOL_TRADE_TICK_SIZE));
case MODE_TICKSIZE:
return(::SymbolInfoDouble(Symb, ::SYMBOL_TRADE_TICK_VALUE));
case MODE_MAXLOT:
return(::SymbolInfoDouble(Symb, ::SYMBOL_VOLUME_MAX));
case MODE_MINLOT:
return(::SymbolInfoDouble(Symb, ::SYMBOL_VOLUME_MIN));
case MODE_LOTSTEP:
return(::SymbolInfoDouble(Symb, ::SYMBOL_VOLUME_STEP));
}
return(-1);
}
Fiz esse tratamento de erros em minha classe
No final da minha classe, adicionei uma função
Fiz o tratamento de erros em minha classe funcionar da seguinte forma
No final da minha classe, adicionei uma função
Não é uma variante ruim. Lembre-se apenas de que outros códigos de erro não estarão disponíveis.
Não é uma opção ruim. Lembre-se apenas de que outros códigos de erro não estarão disponíveis.
Acho que essa alteração é válida somente para o código em torno da minha classe e, depois disso, eu desativo a substituição #undef GetLastError e, se entendi corretamente, o compilador não substituirá mais GetLastError, ou estou errado?
Parece que essa alteração é válida somente para o código em torno da minha classe, e depois que eu desativar a substituição #undef GetLastError e, se entendi corretamente, o compilador não substituirá mais GetLastError, ou estou errado?
Você está certo. Eu não entendi o que você quis dizer de imediato.
Você tem razão. Não percebi imediatamente o que estava querendo dizer.
Obrigado! Agora só preciso testá-lo :)
Você pode me ajudar a decifrar a função, pois não entendo todos esses dois-pontos e pontos de interrogação.
Ela retorna um valor menor que zero, com uma alavancagem de 9k 1k100 lote 0,01 - o que está errado?
Imprimiu as informações no registro
No testador:
Na vida real:
Parece que o cálculo não está acontecendo OrderCalcMargin() por razões desconhecidas - alguma ideia?
O erro 4002 significa:Parâmetro incorreto na chamada interna da função do terminal do cliente
Mas o que isso significa não está claro....
Você pode me ajudar a decifrar a função, pois não entendo todos esses dois pontos e pontos de interrogação.
Você está usando alguma solução antiga, montada às pressas.
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação.
Bibliotecas: MT4Orders
Aleksey Vyazmikin, 2022.07.21 11:58 AM
Fiz um trabalho com erros em minha classe
Lembrei-me de que fiz uma solução mais elaborada de "conversão" aqui.
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Bibliotecas: MT4Orders
fxsaber, 2019.01.13 17:23 PM.
As funções de Kim no MT4 são bastante populares, então baixei todas as fontes do site dele e escrevi um "conversor" simples para elas no MT5.Eu mesmo uso o MT4Style apenas nas funções de Ordem. Não converto absolutamente outras funções padrão do MT4 para meu trabalho e vejo essa opção como uma muleta. Recomendo escrever funções de margem em funções nativas sem tentar convertê-las. Dei uma olhada na minha aula sobre como trabalhar com margem - um arquivo mqh de tamanho decente. E isso é apenas para o Forex regular.
Você está usando uma solução antiga, montada às pressas.
Lembrei-me de que fiz uma solução mais elaborada de "conversão" aqui.
Eu mesmo uso o MT4Style somente nas funções de Ordem. Não converto absolutamente outras funções padrão do MT4 para meu trabalho e vejo essa opção como uma muleta. Recomendo escrever funções de margem em funções nativas sem tentar convertê-las. Dei uma olhada na minha aula sobre como trabalhar com margem - um arquivo mqh de tamanho decente. E isso é apenas para o Forex regular.
Eu tinha apenas a tarefa de criar um código compilável para MT4 e MT5 sobre as funções da lógica do EA, e converti as coisas relacionadas ao ambiente e ao trabalho com ordens com a ajuda dos inkludniks mencionados acima, ou retirei funções separadas e as reformulei para cada plataforma. O projeto acabou sendo grande, e sua solução me ajudou muito.
Tive outro erro - o tamanho mínimo do lote foi determinado incorretamente, então adicionei sinalizadores aqui. Anteriormente, fiz a travessia sem levar em conta o seu código (MQL4_To_MQL5.mqh não é o seu código?) - ele foi compilado, mas não funcionou corretamente.
ou MQL4_To_MQL5.mqh não é o seu código?
Ele é meu, mas é bastante antigo. É melhor dar uma olhada no mqh do Kim, pois há uma solução mais elaborada para o MarketInfo.