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
Código de erro: 4109
Olá a todos:
Eu escrevi um roteiro para fechar todas as negociações, incluindo as ordens pendentes, mas fui desapontado após testá-lo. As funções: OrderClose, e Orderdelete falham no fechamento das negociações. Ao chamar a função GetLastError, recebo o código de erro: 4109 que é definido no arquivo de cabeçalho de erro como TRADE_NOT_ALLOWED.
Até tentei executar os scripts que vêm com a plataforma, mas sem sucesso.
Espero que alguém consiga resolver o problema.
Obrigado,
Ok, tente este aqui. Acho que a variável Lotes e Preços deve ser o dobro e não o número inteiro. Espero que isto ajude
//| CloseAll.mq4 |
//| FX5 |
//| |
//+------------------------------------------------------------------+
#property copyright "FX5"
#property link " "
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----
int Ticket,Lots,Price,Type,Result;
int Error=0;
int Total=OrdersTotal();
for(int i=0;i<Total;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==0)
{
Alert("Can''t select the order indexed: ",i);
Alert("Error code is ", GetLastError());
Error++;
}
else
{
/* Lots=OrderLots();
Ticket=OrderTicket();
Type=OrderType();*/
Result=0;
/* if(Type==OP_BUY)
Price=Bid;
if(Type==OP_SELL)
Price=Ask;*/
// if(Type==OP_BUY || Type==OP_SELL)
if(OrderType()<=OP_SELL)
{
Alert(OP_BUY," ",OP_SELL," ",Type);
// Result=OrderClose(Ticket,Lots,Price,5,Blue);
if(OrderType()==OP_BUY) Result=OrderClose(OrderTicket(),OrderLots(),Bid,5,Blue);
if(OrderType()==OP_SELL) Result=OrderClose(OrderTicket(),OrderLots(),Ask,5,Blue);
}
else
{
Result=OrderDelete(OrderTicket());
}
if(Result==0)
{
Alert("Can''t close the Order number: ",i," with Ticket: ",Ticket);
Alert("Error Code: ",GetLastError());
Error++;
}
}
}
if(Error!=0)
Alert(Error," Errors have occured");
else
Alert("Close all Orders Succeeded with no Errors");
//----
return(0);
}
//+------------------------------------------------------------------+tente isto
Olá a todos:
Eu escrevi um roteiro para fechar todas as negociações, incluindo as ordens pendentes, mas fui desapontado após testá-lo. As funções: OrderClose, e Orderdelete falham no fechamento das negociações. Ao chamar a função GetLastError, recebo o código de erro: 4109 que é definido no arquivo de cabeçalho de erro como TRADE_NOT_ALLOWED.
Até tentei executar os scripts que vêm com a plataforma, mas sem sucesso.
Espero que alguém consiga resolver o problema.
Obrigado,No metatrader, vá para ferramentas -> opções, clique na aba expert advisor e selecione allow live trading, e clique no allow dll import, e desmarque confirmar chamadas. Eu escrevi alguns scripts e estava tendo o mesmo problema.
Ok, tente este aqui. Acho que a variável Lotes e Preços deve ser o dobro e não o número inteiro. Espero que isto ajude
//| CloseAll.mq4 |
//| FX5 |
//| |
//+------------------------------------------------------------------+
#property copyright "FX5"
#property link " "
//+------------------------------------------------------------------+
//| script program start function |
//+------------------------------------------------------------------+
int start()
{
//----
int Ticket,Lots,Price,Type,Result;
int Error=0;
int Total=OrdersTotal();
for(int i=0;i<Total;i++)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==0)
{
Alert("Can''t select the order indexed: ",i);
Alert("Error code is ", GetLastError());
Error++;
}
else
{
/* Lots=OrderLots();
Ticket=OrderTicket();
Type=OrderType();*/
Result=0;
/* if(Type==OP_BUY)
Price=Bid;
if(Type==OP_SELL)
Price=Ask;*/
// if(Type==OP_BUY || Type==OP_SELL)
if(OrderType()<=OP_SELL)
{
Alert(OP_BUY," ",OP_SELL," ",Type);
// Result=OrderClose(Ticket,Lots,Price,5,Blue);
if(OrderType()==OP_BUY) Result=OrderClose(OrderTicket(),OrderLots(),Bid,5,Blue);
if(OrderType()==OP_SELL) Result=OrderClose(OrderTicket(),OrderLots(),Ask,5,Blue);
}
else
{
Result=OrderDelete(OrderTicket());
}
if(Result==0)
{
Alert("Can''t close the Order number: ",i," with Ticket: ",Ticket);
Alert("Error Code: ",GetLastError());
Error++;
}
}
}
if(Error!=0)
Alert(Error," Errors have occured");
else
Alert("Close all Orders Succeeded with no Errors");
//----
return(0);
}
//+------------------------------------------------------------------+Isto pode estar errado: para apagar várias ordens, você deve começar a partir da última, pois seus índices estão diminuindo após o processo de apagamento.
Portanto, no lugar de " for(int i=0;i=0;i--)".
Obrigado firedave pela modificação do código. Foi um pequeno bug ao qual eu não prestei atenção.
Crepuscular, muito obrigado pela dica. Eu poderia ter passado um século antes de descobrir a solução. Finalmente, eu tenho um código de trabalho.
Michel, essa foi uma nota muito inteligente, muito obrigado.
obter a função max drawdown
eu gostaria de escrever uma função que obtenha o máximo de saque do comércio que foi fechado. eu encontrei duas soluções.
1. calcular o drawdown enquanto o comércio ainda está ativo. salvar o número em uma variável global e escrever os dados para arquivar de acordo com o número do bilhete. O MT4 teria que estar sempre online.
2. obter o drawdown obtendo a maior alta ou a menor baixa do gráfico de 1 min. o problema aqui é que temos que ter o histórico de 1 min. para a troca. (eu usaria este método se eu pudesse obter as barras de 1 min necessárias se elas já não fossem baixadas)
Eu gostaria de encontrar uma maneira mais agradável de obter o máximo de saque.
Qualquer contribuição é apreciada.
gostaria de escrever uma função que obtenha o máximo de drawdown de negócios que foram fechados. encontrei duas soluções.
1. calcular o sorteio enquanto o comércio ainda estiver ativo. salvar o número em uma variável global e escrever os dados para arquivar de acordo com o número do bilhete. O MT4 teria que estar sempre online.
2. obter o drawdown obtendo a maior alta ou a menor baixa do gráfico de 1 min. o problema aqui é que temos que ter o histórico de 1 min. para a troca. (eu usaria este método se eu conseguisse obter as barras de 1 min necessárias se elas já não fossem baixadas)
Eu gostaria de encontrar uma maneira mais agradável de obter o máximo de saque.
Qualquer contribuição é apreciada.Salam harriss,
O que você quis dizer com "drawdown"?
Você quer dizer que o máximo de perda de um dos negócios fechados foi feito?
levantamento de crédito
O que eu quero dizer com drawdown é, qual é o ponto mais baixo do comércio. Por exemplo, se o comércio atingir o ponto de parada, então o ponto de parada seria o drawdown. Agora, se o comércio acabasse no lado positivo e fosse -15 pips em um ponto, então o drawdown seria 15. Finalmente, se o comércio fechasse em -15 pips mas fosse -30 em um ponto, então o drawdown seria de 30.
Como codificar alertas/alarmes para indicadores?
Olá, gostaria de saber mais sobre como codificar alertas/alarmes.
Não sou um programador, mas tenho a cabeça sobre meus ombros e geralmente sou capaz de mexer em alguma coisa, desmontá-la e colocá-la novamente mais perto da maneira que eu quero.
Já passei por alguns dos indicadores com alertas e copiei as funções gerais de alerta que vi para outros indicadores que eu queria ter alertas. Tive resultados mistos.
Notei que as principais funções chamadas para alertas são a função Alerta(), a função Comentário() e a função Playsound(). Até agora, estou mais familiarizado com a função Alerta(). Existe uma diferença significativa entre Alert() e Playsound(), por exemplo?
O problema geral que tenho é que não sei como codificar os alertas o suficiente para que ambos sejam perceptíveis, por um lado, mas não ridiculamente distraídos, por outro. Por exemplo, se usar a função Alerta() para algumas cruzes e o indicador não tiver sido impresso com finalidade na barra atual, o alerta pode se repetir várias vezes e eu tenho dificuldade em desligar o alerta. Normalmente tenho que mudar o período de tempo do gráfico.
Primeiro de tudo, existe uma maneira simples de desativar/desativar o alerta somente para a barra atual?
Segundo, existe uma maneira de codificar um alerta para que não seja um incômodo interminável, introduzindo um código que restrinja o número de iterações ou dê ao alerta uma duração fixa? Como você o codificaria?
Uma solução que eu vejo é atrasar o alerta até a próxima barra para que ele não esteja constantemente mudando, mas isso tem a desvantagem de não ser oportuno.
Para evitar o incômodo dos alarmes berserk nos indicadores, usei os alertas de preço pré-determinado que se pode definir usando a janela do terminal e isso ajuda, mas não é o ideal.
Também estou ciente de que os Expert Advisors poderiam ser criados para dar alertas e que existe um botão que pode ligar e desligar seus alertas facilmente. O problema que tenho com os EAs, no entanto, é que noto que outro programa importante que executo concomitantemente com o MetaTrader parece sofrer interferência quando os Expert Advisors são ativados e funcionam de forma lenta.
Existe alguma outra solução para este problema?
Se houver algum indicador lá fora que tenha um código de alerta que evite as armadilhas que enumerei e possa servir como um bom exemplo de como codificar e alertar, você poderia me consultar e/ou publicar?
Muito obrigado.