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
Executar no testador mt4orders_exampleexpert.mq5
Ao escrever a biblioteca, eu estava longe de perceber a extensão total dos possíveis problemas com os usuários. Antes de você, todos eles funcionavam sem instruções.
Exemplos concisos de conversão de EA não estão apenas na descrição da biblioteca, mas também em sua discussão - nos comentários (ainda mais claros lá).
Graças ao ilan1_4_strict.mq4, tudo deu certo, mas meus EAs apresentaram 75 erros. Os erros são desse tipo:
Obrigado, com o ilan1_4_strict.mq4 tudo funcionou, mas o meu ea deu 75 erros. Os erros são desta natureza:
no mínimo, jogue fora toda a parte gráfica.
Por que você precisa dela no testador?
No mínimo, jogue fora todos os gráficos.
Por que você ainda precisa deles no testador?
Obrigado, com o ilan1_4_strict.mq4 tudo funcionou, mas meu ea deu 75 erros. Os erros são desse tipo:
Na discussão mencionada e na descrição, há as seguintes palavras
Esse trabalho afeta apenas o sistema de ordens.
A questão da possibilidade de criar uma biblioteca tão completa, quando o código MQL4 pode funcionar no MetaTrader 5 sem alterações, não foi resolvida.
Atenção!
A biblioteca está contida em apenas um arquivo - MT4Orders.mqh. Todos os outros arquivos estão anexados como exemplos de uso da biblioteca. Esses arquivos não são necessários para trabalhar com a biblioteca.
Durante a transição MT4->MT5, o obstáculo mais difícil é o novo sistema de ordens. O MT4Orders elimina completamente essa dificuldade. As outras diferenças não são tão desanimadoras. Como elas são facilmente reescritas, há dados de referência convenientes sobre esse tópico. Bem, a correção do trabalho da biblioteca foi demonstrada da seguinte forma
Vários consultores MT4/5 de diferentes tipos foram retirados (do kodobase) como exemplo de uso: pips, news, martin, multicurrency, etc.
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação.
Erros, bugs, perguntas
fxsaber, 2016.10.20 15:54
#include <Trade\Trade.mqh>;
#include <Trade\OrderInfo.mqh>
// Via MT5-Standard Library - somente MT5
// Define SellLimit e, em seguida, define seu SL/TP
void MT5Order( const double Price )
{
CTrade Trade;
if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(_Symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
Trade.SetTypeFilling(ORDER_FILLING_RETURN);
Trade.OrderOpen(_Symbol, ORDER_TYPE_SELL_LIMIT, 1, 0, Price, 0, 0, ORDER_TIME_GTC, 0, __FUNCTION__);
const ulong Ticket = Trade.ResultOrder();
if (Ticket > 0)
{
COrderInfo Order;
if (Order.Select(Ticket))
Trade.OrderModify(Order.Ticket(), Order.PriceOpen(), Order.PriceOpen() + SLTP, Order.PriceOpen() - SLTP, Order.TypeTime(), Order.TimeExpiration());
}
}
#include <MT4Orders.mqh> // https://www.mql5.com/pt/code/16006
// Via MT4-OSJS - variante entre plataformas (MT4/5)
// Define SellLimit e, em seguida, define seu SL/TP
void MT4Order( const double Price )
{
const int Ticket = OrderSend(_Symbol, OP_SELLLIMIT, 1, Price, 0, 0, 0, __FUNCTION__);
if ((Ticket > 0) && OrderSelect(Ticket, SELECT_BY_TICKET))
OrderModify(OrderTicket(), OrderOpenPrice(), OrderOpenPrice() + SLTP, OrderOpenPrice() - SLTP, OrderExpiration(), clrNONE);
}
void OnTick()
{
static bool FirstRun = true;
if (FirstRun)
{
const double Price = SymbolInfoDouble(_Symbol, SYMBOL_BID) + 100 * _Point;
MT5Order(Price); // Via MT5-Standard Library - somente MT5
MT4Order(Price); // Via MT4-OSJS - variante entre plataformas (MT4/5)
FirstRun = false;
}
}
A função MT4Order destacada em amarelo faz a mesma coisa que a função MT5Order. Em qualquer fórum, o código amarelo será imediatamente compreendido, mas o código alternativo do MT5 não.
E como escrever para o MT5 - cada um decide por si mesmo. Eu, por exemplo, uso MT4Orders e, em alguns casos raros, também MQL5 puro (SB tem funcionalidade fraca). Ambos os estilos de escrita funcionam em paralelo. Mas, se você escrever apenas por meio do MT4Orders, o sistema de ordens será multiplataforma. Portanto, eu pratico a escrita de código que funciona em ambas as plataformas sem alterações.
Assim, pratico a escrita de código que é executado sem alterações em ambas as plataformas.
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Como determinar o último preço de fechamento de uma ordem (MQL5)?
fxsaber, 2016.12.05 10:25 AM
void OnStart()
{
if (OrderSelect(OrdersHistoryTotal() - 1, SELECT_BY_POS, MODE_HISTORY))
Alert(OrderClosePrice());
}
{
int oldticket=0;
int Ticket=0;
ArrayResize(Mas_LOT,OrdersTotal(),3);
ArrayInitialize(Mas_LOT,0);
for(int i=0; i <= OrdersTotal(); i++)
{
if(OrderSelect(i,SELECT_BY_POS, MODE_TRADES)){
if (OrderSymbol()==Symbol()&& OrderMagicNumber() == Magik){
Mas_LOT[i][0] = OrderTicket();
Mas_LOT[i][1] = OrderLots();
Mas_LOT[i][2] = OrderType();
Mas_LOT[i][3] = (OrderProfit() + OrderSwap() + OrderCommission());
Mas_LOT[i][4] = OrderStopLoss();
Mas_LOT[i][5] = OrderOpenPrice();
Mas_LOT[i][6] = OrderTakeProfit();
}}}}
Qual a melhor maneira de convertê-lo para o MT5 usando a biblioteca MT4Orders.mqh?
Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação
Nova versão do MetaTrader 5 build 1525: apresentação do histórico na forma de posições e melhoria do testador
fxsaber, 2017.01.27 19:20
Executando um script de plataforma cruzada
#property strict
#include <MT4Orders.mqh>
void OnStart()
{
MqlTick Tick;
if (SymbolInfoTick(_Symbol, Tick) && (OrdersTotal() == 0) &&
(OrderSend(_Symbol, OP_BUY, 1, Tick.ask, 0, 0, 0) > 0))
{
const double Lots[] = {0.6, 0.3, 0.1};
for (int i = 0; i < ArraySize(Lots); i++)
if (OrderSelect(0, SELECT_BY_POS) && SymbolInfoTick(_Symbol, Tick))
OrderClose(OrderTicket(), Lots[i], Tick.bid, 0);
const int Total = OrdersHistoryTotal();
for (int i = 0; i < Total; i++)
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
OrderPrint();
}
}
Primeiro no MT5-Hedge. Obtemos uma impressão MT4 muito boa
#114769087 2017.01.27 19:57:25 buy 0.60 EURUSD 1.06838 0.00000 0.00000 2017.01.27 19:57:25 1.06829 0.00 0.00 -5.40 0
#114769088 2017.01.27 19:57:25 buy 0.30 EURUSD 1.06838 0.00000 0.00000 2017.01.27 19:57:25 1.06829 0.00 0.00 -2.70 0
#114769089 2017.01.27 19:57:25 buy 0.10 EURUSD 1.06838 0.00000 0.00000 2017.01.27 19:57:26 1.06829 0.00 0.00 -0.90 0
e um relatório clássico
Como confirmação, executamos o mesmo script no MT4.
Relatório clássico do MT4
E a impressão do registro do script
#170039287 2017.01.27 20:00:57 buy 0.60 EURUSD 1.06854 0.00000 0.00000 2017.01.27 20:00:57 1.06836 0.00 0.00 -10.80 to #170039289 0
#170039289 2017.01.27 20:00:57 buy 0.30 EURUSD 1.06854 0.00000 0.00000 2017.01.27 20:00:58 1.06836 0.00 0.00 -5.40 to #170039290 0
#170039290 2017.01.27 20:00:57 buy 0.10 EURUSD 1.06854 0.00000 0.00000 2017.01.27 20:00:58 1.06836 0.00 0.00 -1.80 from #170039289 0
Você pode ver claramente que o registro do script no MT4 e no MT5 coincide - a plataforma cruzada funciona.
ZY Se a lógica do script for escrita para o MT5 via SB, o script não funcionará corretamente. Em geral, é até difícil dizer como escrever uma lógica MQL4 tão simples para o MT5.
seleção por símbolo e majic não funciona
if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
{
}
OrderSelect não funciona não seleciona uma ordem (ticket por índice) para trabalhar com ela, exemplo simples em anexo e não funciona no mt5 por algum motivo