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
Como resultado, uma contagem de posição personalizada foi adicionada ao bloco de fechamento, o que resultou em um fechamento "correto", mas oerro 131 ainda aparece algumas vezes no registro:
Essa inserção de uma contagem de pedidos em um loop é normal, considerando que já existe uma verificação de pedidos e
Você poderia corrigir o código para evitar o erro 131?
Muito obrigado.
Você poderia por favor corrigir o código para evitar o erro 131?
Muito obrigado.
E quem vai normalizar o tamanho do lote para você após a divisão? Daí o erro.
Alex, antes de passar o lote para a função de fechamento, normalize seu tamanho com NormalizeLot().
Obrigado Igor, Alexander,
De fato, eu verifiquei os lotes substituindo o Lote/3 (Lote/2, Lote) por 0,01 na função SELLCLOSED_1=OrderClose( OrderTicket(), Lote/3, Ask, 0, Vermelho ); e e evitei o erro 131. Poderíamos deixá-lo assim (0,01), mas, primeiro, o fechamento no formulário de Lote é mais correto. Em segundo lugar, nunca tinha encontrado funções de usuário e sua chamada no programa antes, o que acabou se revelando bastante interessante. Pareço ter anexado tudo corretamente no código e tudo funciona, mas o erro 131 ainda permanece. Dê uma olhada no código, por favor. Talvez eu tenha estragado algo na função de chamada NormalizeLot.
Desculpas. No código original, a linha
RefreshRates();
BUYCLOSED_1=OrderClose( OrderTicket(), CloseLot, Bid, 0, Red );
é o LotClose correto, de acordo com a condição.
Lote =OrderLots(); // NÚMERO DE LOTES
LotClose =NormalizarLot(Lote); // o valor do LOT NORMALIZADO é atribuído ao LOT FECHADO
errado ao postar........
Dê uma olhada no código, por favor. Talvez você tenha estragado algo na função de chamada NormalizeLot.
Tente substituir
para
Bom dia Alexander,
Infelizmente, sua dica não ajudou. Eu analisei o registro e descobri que o erro ocorre em dois casos, quando o fechamento de uma parte de um lote, quase coincide com o fechamento de outra parte do lote.
No caso de não haver coincidência no tempo, então parte do lote é fechada sem um erro.
Tentei normalizar lotes para fechamento de compra e lotes para fechamento de venda separadamente, mas sem sucesso:
duplo
Lote, // Número de lotes na ordem selecionada
LotCloseBuy,
LotCloseSell,
............................
Lote =OrderLots();
LotCloseBuy =NormalizeLot(Lote);
LotCloseSell =NormalizeLot(Lote);
............................
BUYCLOSED_3=OrderClose( OrderTicket(), LotCloseBuy, Bid, 0, Red )
...........................
SELLCLOSED_3=OrderClose( OrderTicket(), LotCloseSell, Ask, 0, Red );
...................
A função de Igor
NormalizeLot.........
Você tem alguma idéia?
Que ovelha eu sou! Ugh - é nojento....
Normalizou os lotes no ciclo do pedido
//--------------------------------------------------------------- 4 --
// Pedidos de contagem
Symb=Symbol(); // Nome do instrumento financeiro.
BuyTotal=0; // Número de pedidos de compra
SellTotal=0; // Número de pedidos de venda
for(int i=1; i<=OrdersTotal(); i++) // Laço de pedidos
{
if (OrderSelect(i-1,SELECT_BY_POS)==true) // Se o seguinte
{ // Análise do pedido:
if (OrderSymbol()!=Symb)continuar; // Não nosso instrumento financeiro
if (OrderType()>1) // Pendente
{
Alert(" Ordem pendente detectada. Expert Advisor não funciona.");
return; // Sair início()
}
if (OrderType()==OP_BUY)
{
BuyTotal++; // Contador de pedidos de compra
BuyOrdOpPrice=OrderOpenPrice(); // Preço de compra aberto
}
if (OrderType()==OP_SELLL)
{
SellTotal++; // Contador de pedidos de venda
SellOrdOpPrice=OrderOpenPrice(); // Preço de compra aberto
}
Ticket=OrderTicket(); // Número do pedido selecionado.
Dica =OrderType(); // Tipo da ordem selecionada.
Lote =OrderLots();
LotCloseBuy =NormalizeLot(Lote);
LotCloseSell =NormalizeLot(Lot);
}
}
.... e criei um loop separado para contabilizar os pedidos abertos, onde tive que normalizar lotes para fechá-los!!!
//--------------------------------------------------------------- 6 --
// Verificação de pedidos abertos
int _GetLastError = 0, _OrdensTotal = OrdersTotal();
int z;
//
passar por todas as posições abertas
para ( z = _OrdensTotal-1 ; z >=0; z -- )
{ // O laço para - passar por todas as ordens abertas
//---- se ocorrer um erro durante a seleção da posição, proceder para o próximo
se ( !OrderSelect( z, SELECT_BY_POS )
{
_GetLastError = GetLastError();
Print("OrderSelect( ", z, ", SELECT_BY_POS ) - Error #", _GetLastError );
continue;
}
//Finished
//Binding to Currency and Majik
//
se a posição estiver aberta não para o instrumento atual, pule se ( OrderSymbol() != Symbol() ) continuar; // ERROR
//Finished
//
se MagicNumber não for igual a Expert_ID, pule esta posição
if ( OrderMagicNumber() != Expert_ID ) continue; // ERROR
//Finished if (OrderType()==OP_BUY)
{
BuyClot=OrderLots();
}
if (OrderType()==OP_SELL)
{
SellClLot=OrderLots();
}
OpenedLots=OrderLots();
LotCloseBuy =NormalizeLot(OpenedLots); // Número de lotes
LotCloseSell =NormalizeLot(OpenedLots); // Número de lotes
//Cheque se uma posição de compra está aberta,
........................................
Obrigado Igor, Alexander. Sem a função de normalização de lotes, ainda estaria em um impasse....
Boa noite,
E o primeiro erro que ocorre:
2009.07.08 21:05:45 TestGenerator: erro de dados incomparável (limite de volume 651 em 2009.07.08 19:00 excedido)
é crítico ou é apenas um erro do testador?
Obrigado.