- [AVISO FECHADO!] Qualquer pergunta de novato, para não desorganizar o fórum. Profissionais, não passem por aqui. Não posso ir a lugar algum sem você.
- Como codificar?
- Erros, bugs, perguntas
Sou muito novo na codificação do mql4, e completei minha primeira EA. Meu único problema agora é que não consigo fazer com que ele abra negócios em mais de um par. Na seção EA no terminal ao lado do diário, ele envia um fluxo do erro, bilhete inválido para a função de fechamento de pedidos, mesmo que o EA abra e feche comércios em apenas um par. Qualquer um pode dar uma mãozinha.
Como você espera que saibamos se você não mostrar seu código nem seu registro dos erros?
Se você quiser nossa ajuda, terá que mostrar seu código, assim como os erros que ele dá (os resultados no log). Também será útil saber em que pares de moedas e prazos você está testando, quando tivermos uma olhada em seu código.
Além disso, observe que no MetaTrader 4 você só pode testar uma única moeda de cada vez no Strategy Tester. Se sua EA negocia várias moedas simultaneamente a partir de um único gráfico, você não poderá testá-lo no Testador de Estratégia - somente em uma Demonstração ao vivo ou em uma conta real!
Matt_Townsend: mesmo que a EA abra e feche as negociações com apenas um par. | É por isso que eu recomendo Não negocie várias moedas em um único EA
|
Por favor, edite seu post e use o botão SRC para adicionar seu código! Não se limite a copiar/colar como texto padrão, pois é difícil de ler. Tenho certeza de que você pode ver por outros tópicos como deve ser feito. Por favor, use o botão SRC para postar seu código.
EDITAR: Como solicitado antes - . .. Também será útil saber quais pares de moedas e prazos você está testando em ...
EDIT2: Como solicitado antes - ... bem como os erros que ele dá (os resultados no log) ...
Por favor, edite seu post e use o botão SRC para adicionar seu código! Não se limite a copiar/colar como texto padrão, pois é difícil de ler. Tenho certeza de que você pode ver por outros tópicos como deve ser feito. Por favor, use o botão SRC para postar seu código.
//| Simple Moving Average Crossover Strategy.mq4 |
//| Matthew Townsend |
//+------------------------------------------------------------------+
#property version "1.05"
#property strict
//---
//---Inputs
extern double Lots =0.01;
extern int FastMA =5;
input int FastMAMode =MODE_EMA;
extern int SlowMA =8;
input int SlowMAMode =MODE_SMA;
//+----------------------------------------+
//|undesirables |
//+----------------------------------------+
int init()
{
//----
//----
return(0);
}
int deinit()
{
//----
//----
return(0);
}
//+---------------------------------------------+
//|System start |
//+---------------------------------------------+
int start()
{
double fastma, slowma;
int ticket, total;
//---define Ma's
fastma = iMA(NULL,0,5,0,MODE_EMA,PRICE_CLOSE,0);
slowma = iMA(NULL,0,8,0,MODE_SMA,PRICE_CLOSE,0);
total = OrdersTotal();
//---Start operations
if(total < 1)
{
if(fastma > slowma)
{
ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,10,0,0,"",0,0,Blue);
if(ticket > 0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Buy order opened : ", OrderOpenPrice());
}
else
Print("Error opening order : ", GetLastError());
return(0);
}
if(fastma < slowma)
{
ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,10,0,0,"",0,0,Red);
if(ticket > 0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Sell order opened : ", OrderOpenPrice());
}
else
Print("Error opening order : ", GetLastError());
return(0);
}
return(0);
}
bool ans;
if(OrderType()==OP_BUY)
{
while(fastma < slowma)
{
ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
if(ticket < 1)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Buy order closed : ", OrderClosePrice());
}
else
Print("Error closing order : ", GetLastError());
return(0);
}
}
if(OrderType()==OP_SELL)
{
while(fastma > slowma)
{
ans = OrderClose(OrderTicket(),Lots,Ask,10,clrNONE);
if(ticket < 1)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Sell order closed : ", OrderClosePrice());
}
else
Print("Error closing order : ", GetLastError());
return(0);
}
}
return(0);
}
//+-----------------------------------------------------------------------------------+
Solicitei que você EDITAR seu post anterior, não adicionar um novo, para não tornar o fio tão longo!
Eu estava testando em 1 hora de tempo, EURUSD e 1hr GBPUSD
...
ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
...
ans = OrderClose(OrderTicket(),Lots,Ask,10,clrNONE);
...
Você não está verificando corretamente o resultado para a operação de fechamento.
Em termos de lógica, há vários problemas com sua EA, mas como ela está no momento, está funcionando sem nenhum erro da minha parte no Testador de Estratégia, portanto, por favor, forneça a lista de erros que você está recebendo!
Já existem dois avisos de compilação para o seguinte código:
...
ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
...
ans = OrderClose(OrderTicket(),Lots,Ask,10,clrNONE);
...
Você não está verificando corretamente o resultado para a operação de fechamento.
Em termos de lógica, há vários problemas com sua EA, mas como ela está no momento, ela está funcionando sem nenhum erro da minha parte, portanto, por favor, forneça a lista de erros que você está recebendo!
O único erro que tenho recebido da EA é umticket inválido para a função de fechamento de pedido, com um número ao lado, gostaria de mostrar o log real, mas no segundo gráfico com a EA rodando ela não está fazendo nada, pois normalmente tentaria abrir uma negociação imediatamente. Se, e quando o log começar a ser preenchido com o erro, como eu iria mostrar o log real?
Selecione as linhas em questão com Click, Ctrl-Click ou Shift-Click (operação com janelas padrão), depois com Right-Click a seleção e escolha "Copy"!
EDIT: Com relação ao código, você está usando o OrderSelect, mas você está sempre assumindo que ele funciona sempre. E quando ele não funciona, você simplesmente continua a usar as funções de detalhes do OrderTicket() em seu fechamento, que pode falhar se o OrderSelect() inicial também falhar. Como eu disse, você tem muitos problemas lógicos em seu código!
bool ans;
//You do not select an order
{
while(fastma < slowma) //Use if not while
{
ans = OrderClose(OrderTicket(),Lots,Bid,10,clrNONE);
if(ticket < 1) //ticket is a local variable and has not been assigned a value
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Print("Buy order closed : ", OrderClosePrice());
}
else
Print("Error closing order : ", GetLastError());
return(0);
}
}
O único erro que tenho recebido da EA é oticket inválido para a função defechamento de pedidos, com um número ao lado, gostaria de mostrar o log real, mas no segundo gráfico com a EA rodando ela não está fazendo nada, pois normalmente tentaria abrir uma negociação imediatamente. Se, e quando o log começar a ser preenchido com o erro, como eu iria mostrar o log real?
Outra nota muito importante com relação ao uso de sua EA em múltiplos pares de moedas ou períodos de tempo.
Seu código não usa a seleção "Número mágico" nem verifica o Símbolo (nem "Número mágico") em uso ao verificar as ordens em aberto no Histórico. Portanto, em essência, sua EA não funcionará corretamente nem consigo mesma nem com outras EA.
Como está, você só pode usar esta EA por si só sem outra EA rodando, nem mesmo ela mesma em outro gráfico!
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso