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
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 nenhuma outra EA em execução, nem mesmo ela mesma em outro gráfico!
bool ans;
//You do not select an order
if(OrderType()==OP_BUY){
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);
}
}
Muito obrigado por me ajudar com meu código até agora e seu tempo, vou tentar fazer os ajustes necessários.
Como você tem muitos problemas lógicos em sua EA, sugiro que você dê uma olhada no código de amostra por MetaQuotes, a saber"Moving Average.mq4" e/ou "MACD Sample.mq4" e, com base nisso, até entender os princípios básicos de como uma EA funciona.
Anexei os arquivos, mas você os encontrará em sua pasta "MQL4\Experts".
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 da Ordem como OrderTicket() no seu fechamento, que pode falhar se a OrderSelect() inicial também falhar.
Depois de notar sua edição.....
eu sempre assumi que uma OrderSelect() seria perdida quando houvesse um novo tick.
Portanto, eu verifiquei e descobri que uma vez que uma ordem é selecionada, ela permanece selecionada mesmo em tiquetaques novos subseqüentes.
Aprenda algo novo todos os dias :)
Sempre presumi que uma OrderSelect() se perderia quando houvesse um novo tick.
Então, eu verifiquei e descobri que uma vez que uma ordem é selecionada, ela permanece selecionada mesmo em carrapatos novos subseqüentes.
Aprenda algo novo todos os dias :)
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 nenhuma outra EA em funcionamento, nem mesmo ela mesma em outro gráfico!
for(int i=0;i<OrdersTotal();i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
if(OrderMagicNumber()==MagicNumber && OrderSymbol()==Symbol()) continue;
//---Check Order Type
if(OrderType()==OP_BUY)
{
if(fastma < slowma)
{
if(OrderClose(OrderTicket(),Lots,Bid,10,clrNONE))
Print("Order Closed : ", OrderClosePrice());
return(0);
}
else
Print("Error : ", GetLastError());
return(0);
break;
}
if(OrderType()==OP_SELL)
{
if(fastma > slowma)
{
if(OrderClose(OrderTicket(),Lots,Ask,10,clrNONE))
Print("Order Closed : ", OrderClosePrice());
return(0);
}
else
Print("Error : ", GetLastError());
return(0);
break;
}
}
Aqui está a seção OrderClose, eu não estou mais recebendo o erro do bilhete inválido, mas agora estou recebendo o preço inválido.
Aqui está diretamente do tronco
2016.12.09 10:47:10.243 Estratégia de Crossover Média Móvel Simples EURUSDi,H1: preço inválido 1,05454000 para a função OrderClose
{
if(OrderClose(OrderTicket(),Lots,Bid,10,clrNONE))
Print("Order Closed : ", OrderClosePrice());
return(0);
}
...
{
if(OrderClose(OrderTicket(),Lots,Ask,10,clrNONE))
Print("Order Closed : ", OrderClosePrice());
return(0);
Aqui está a seção OrderClose, eu não estou mais recebendo o erro do bilhete inválido, mas agora estou recebendo o preço inválido
Aqui está diretamente do tronco
2016.12.09 10:47:10.243 Estratégia de Crossover Média Móvel Simples EURUSDi,H1: preço inválido 1,05454000 para a função OrderClose
Não use Bid/Ask ao fechar, use OrderClosePrice(). Será automaticamente o bom preço.
Devo simplesmente substituí-lo na função OrderClose? e se sim, devo remover o OrderClosePrice na função OrderClosePrice na função de impressão abaixo dele?
Editar:
Acabei de fazer isso, mas agora ele não terá nenhuma posição em aberto. Apenas abre e fecha posições, embora agora não esteja tendo nenhum problema trabalhando em múltiplos pares.
if(OrderType()==OP_BUY)
{
if(fastma < slowma)
{
if(OrderClose(OrderTicket(),Lots,Bid,10,clrNONE))
Print("Order Closed : ", OrderClosePrice());
return(0);
}
else
Print("Error : ", GetLastError());
return(0);
break;
}
Não há batedor para os retornos ou o intervalo, pois você precisa completar o laço
Além disso, sua impressão de erro depende de
if(fastma < slowma)
ser falso, não relacionado ao fato de a OrderClose() falhar
if(OrderType()==OP_BUY)
{
if(fastma<slowma)
{
if(OrderClose(OrderTicket(),Lots, OrderClosePrice(),10,clrNONE))
Print("Order Closed : ",OrderClosePrice());
else
Print("Error : ",GetLastError())
}
}