// Lista de modificações:// 14.06.2017:// Adicionar: a implementação inicial da detecção de posições fechadas de SL/TP está ativada (закрытых через OrderClose).
O MT4 contém menos informações do que o MT5. Mas nada impede que você use as APIs de negociação do MT4/5 ao mesmo tempo
// O script mostra o campo Reason de todas as posições fechadas#include <MT4Orders.mqh>
voidOnStart()
{
for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
{
OrderPrint();
Print(EnumToString((ENUM_DEAL_REASON)HistoryDealGetInteger(OrderTicket(), DEAL_REASON)));
}
}
Quando o OrderSend não estava sincronizado com o ambiente de negociação do terminal, a sincronização automática foi incorporada ao MT4Orders.
Depois de algum tempo, os desenvolvedores incorporaram a sincronização e o antigo código de sincronização foi deixado na biblioteca com uma pequena exceção - ele começou não apenas a sincronizar, mas também a verificar se a sincronização do OrderSend dos desenvolvedores estava funcionando corretamente. Em caso de erro, um alerta deve ser exibido
if (MT4ORDERS::OrderSendBug)
{
Alert("BUG!!!!!!");
Há relatos de que esse alerta é acionado em casos raros (parece ser quando a CPU está ocupada), sinalizando que o OrderSend dos desenvolvedores está com erros quando se trata de sincronização com o ambiente de negociação. Não sei como informar isso aos desenvolvedores do SD, pois não consigo reproduzir o problema. Mas o fato permanece.
Portanto, há duas opções.
Deixar como está - o alerta informará sobre o bug dos desenvolvedores.
Recusar o alerta.
Em ambos os casos, a biblioteca sincroniza forçosamente o OrderSend em um tempo mínimo.
// Lista de modificações:// 03.08.2016:// Versão - escrita e testada somente em um testador off-line.// ....// 03.08.2017:// Adicionar: adicionado OrderCloseBy.// Adição: a operação OrderSelect no modo MODE_TRADES foi acelerada. Agora é possível receber dados do pedido selecionado por meio de// funções MT4-Order correspondentes, mesmo que a posição/ordem MT5 (não no histórico) não seja selecionada via MT4Orders.// Por exemplo, por meio das funções MT5-PositionSelect* ou MT5-OrderSelect.// Adição: Adicionadas OrderOpenPriceRequest() e OrderClosePriceRequest() - retornam o preço de uma solicitação de negociação ao abrir/fechar uma posição.// Com a ajuda dessas funções, é possível calcular as derrapagens correspondentes das ordens.
É verdade, eu tentei dois EAs e a experiência foi negativa, na primeira tentativa a compilação não passou - eu não a entendi por causa da má compreensão das funções de negociação, na segunda variante o EA se tornou terrivelmente lento - ele usa todos os recursos do kernel, mas a compilação foi bem-sucedida.
É difícil dizer qual é a razão para a segunda variante, talvez não seja por causa da classe - há uma negociação semiautomática na quebra de nível - os níveis são construídos à mão.
Infelizmente, originalmente a biblioteca não era responsável por todas as traduções MT4->MT5, onde não são usadas apenas funções de negociação MQL4.
No seu caso, a lentidão do trabalho do Expert Advisor não é causada por essa biblioteca, mas por uma implementação privada da tradução MT4->MT5, afetando o trabalho com séries temporais, indicadores, etc.
Infelizmente, inicialmente a biblioteca não era responsável por todas as traduções MT4->MT5, onde não são usadas apenas as funções de negociação MQL4.
Mas agora ela é responsável?
fxsaber:
No seu caso, a lentidão do trabalho do Expert Advisor não é causada por essa biblioteca, mas por uma implementação privada da tradução MT4->MT5, que afeta o trabalho com séries temporais, indicadores, etc.
Privada - é a minha biblioteca ou outra biblioteca?
Fiz tudo de acordo com o artigo conhecido por todos, e não há indicadores especiais lá....
Duvido que esse código possa causar sobrecarga no kernel:
double iMAMQL4(string symbol,
int tf,
int period,
int ma_shift,
int method,
int price,
int shift)
{
ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
ENUM_MA_METHOD ma_method=MethodMigrate(method);
ENUM_APPLIED_PRICE applied_price=PriceMigrate(price);
int handle=iMA(symbol,timeframe,period,ma_shift,
ma_method,applied_price);
if(handle<0)
{
Print("Объект iMA не создан: Ошибка ",GetLastError());
return(-1);
}
elsereturn(CopyBufferMQL4(handle,0,shift));
}
Atualização
Um exemplo de como funciona
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Telas do terminal MT5 versus MT4 - Decepcionado com as mudanças no MT 5
fxsaber, 2017.07.07 08:46 AM
Primeiro, execute este script
Resultado:
Em seguida, execute este
Resultado
Dessa forma, é possível saber o SL/TP das posições fechadas.
O MT4 contém menos informações do que o MT5. Mas nada impede que você use as APIs de negociação do MT4/5 ao mesmo tempo
Resultados
Quando o OrderSend não estava sincronizado com o ambiente de negociação do terminal, a sincronização automática foi incorporada ao MT4Orders.
Depois de algum tempo, os desenvolvedores incorporaram a sincronização e o antigo código de sincronização foi deixado na biblioteca com uma pequena exceção - ele começou não apenas a sincronizar, mas também a verificar se a sincronização do OrderSend dos desenvolvedores estava funcionando corretamente. Em caso de erro, um alerta deve ser exibido
Há relatos de que esse alerta é acionado em casos raros (parece ser quando a CPU está ocupada), sinalizando que o OrderSend dos desenvolvedores está com erros quando se trata de sincronização com o ambiente de negociação. Não sei como informar isso aos desenvolvedores do SD, pois não consigo reproduzir o problema. Mas o fato permanece.
Portanto, há duas opções.
A biblioteca tem um ano de existência...
A biblioteca completou um ano...
Parabéns! É um invólucro maravilhoso.
A biblioteca completou um ano...
Parabéns!
É verdade, eu tentei dois EAs e a experiência foi negativa, na primeira tentativa a compilação não passou - eu não a entendi por causa da má compreensão das funções de negociação, na segunda variante o EA se tornou terrivelmente lento - ele usa todos os recursos do kernel, mas a compilação foi bem-sucedida.
É difícil dizer qual é a razão para a segunda variante, talvez não seja por causa da classe - há uma negociação semiautomática na quebra de nível - os níveis são construídos à mão.
Obrigado pelos parabéns, agradeço os comentários de todos! Eles são sempre levados em consideração.
O EA ficou terrivelmente lento - ele consome todos os recursos do kernel, mas a compilação foi bem-sucedida.
Gostaria de ver o código. Você pode enviá-lo por PM.
Obrigado pelos parabéns, agradeço os comentários de todos! Eles são sempre levados em consideração.
Gostaria de ver o código. Você pode me enviar um PM.
Enviei o código para sua PM.
Enviei o código para a PM.
Infelizmente, originalmente a biblioteca não era responsável por todas as traduções MT4->MT5, onde não são usadas apenas funções de negociação MQL4.
No seu caso, a lentidão do trabalho do Expert Advisor não é causada por essa biblioteca, mas por uma implementação privada da tradução MT4->MT5, afetando o trabalho com séries temporais, indicadores, etc.
Infelizmente, inicialmente a biblioteca não era responsável por todas as traduções MT4->MT5, onde não são usadas apenas as funções de negociação MQL4.
Mas agora ela é responsável?
No seu caso, a lentidão do trabalho do Expert Advisor não é causada por essa biblioteca, mas por uma implementação privada da tradução MT4->MT5, que afeta o trabalho com séries temporais, indicadores, etc.
Privada - é a minha biblioteca ou outra biblioteca?
Fiz tudo de acordo com o artigo conhecido por todos, e não há indicadores especiais lá....
Duvido que esse código possa causar sobrecarga no kernel:
Ou é esse o motivo?