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
Terrance
Você viu esta seção do TSD : Lições?
Acho que muitas perguntas já estão respondidas lá e que você pode encontrar exemplos muito bons para a escrita geral da EA lá. A partir de sua pergunta : Eu não testei sua EA, então eu não sei. O problema de testar a EA de outra pessoa é que é preciso conhecer a idéia e a lógica da EA e muitas vezes é simplesmente impossível "ler" as do próprio código. O trecho de código de que estávamos falando tratava de como detectar 2 cruzamentos de médias em uma barra fechada e esse código está fazendo exatamente isso e nada mais que isso. É por isso que eu disse que "não tem nada a ver com SL ou TP".
cumprimentos
MladenOi Mladen, desculpe incomodá-lo novamente. Já passei por meus códigos e noto que não só meu TP e SL, às vezes até meus pedidos de compra e venda estão cancelados. Eu passei pelos links da lição que você me deu por codersgurus e é o mesmo conjunto de tutoriais que eu tinha e baseei meus códigos. Não consigo seriamente encontrar a causa do meu erro nos códigos.
As cruzes do MA funcionam como deveria junto com a Ordem Longa e Curta, porém às vezes a Entrada e a Saída parecem estar ficando fora de controle, mesmo quando eu fiz uma função básica de ASK para testá-la. Por favor, me dê alguma luz aqui.
Obrigada e Cumprimentos
Terrance
...
... Terrance
Primeiro : Seu corretor ECN/STP é como? Se sim, então você não pode colocar stop loss e obter lucro junto com a abertura do pedido, mas primeiro você deve abrir um pedido com aqueles definidos como 0 e usar OrderModify() para definir stop loss e/ou obter lucro em um pedido já aberto.
Segundo : Também, verifique sempre se você tem algo escrito na guia de especialistas da janela do terminal (verifique se alguns erros estão escritos lá : você provavelmente descobrirá então o que está acontecendo e por quê
Terceiro : Poderia ser uma boa idéia colocar uma linha como esta :
Após cada função de gerenciamento de pedidos. Descrições de erros que você pode encontrar no arquivo experts/include/stderror.mqh (há muitos erros que podem acontecer (basta ver a lista de possíveis códigos de erro e descrições) com os pedidos e você deve monitorar todo e qualquer erro possível) Com códigos de erro conhecidos (a linha de código do acima), você pode se concentrar na correção de erros específicos em vez de adivinhar o que está acontecendo
Oi Mladen, desculpe incomodá-lo novamente. Já passei por meus códigos e noto que não só meu TP e SL, às vezes até meus pedidos de compra e venda estão cancelados. Eu passei pelos links da lição que você me deu por codersgurus e é o mesmo conjunto de tutoriais que eu tinha e baseei meus códigos. Não consigo seriamente encontrar a causa do meu erro nos códigos.
As cruzes do MA funcionam como deveria junto com a Ordem Longa e Curta, porém às vezes a Entrada e a Saída parece estar ficando fora de controle mesmo quando eu fiz uma função básica de ASK para testá-la. Por favor, me dê alguma luz aqui.
Obrigada e Cumprimentos
TerranceTerrance
Primeiro : Seu corretor ECN/STP é como? Se sim, então você não pode colocar stop loss e obter lucro junto com a abertura do pedido, mas primeiro você deve abrir um pedido com aqueles definidos como 0 e usar OrderModify() para definir stop loss e/ou obter lucro em um pedido já aberto.
Segundo : Também, verifique sempre se você tem algo escrito na guia de especialistas da janela do terminal (verifique se alguns erros estão escritos lá : você provavelmente descobrirá então o que está acontecendo e por quê
Terceiro : Poderia ser uma boa idéia colocar uma linha como esta :
Olá, Mladen,
Obrigado por apontar o ponto de vista da ECN/STP. Eu não sabia sobre isso até que você mencionou. Fiz as mudanças como você sugeriu, mas agora só piorou para mim. Não só o problema de Entrada e Saída persiste, meu SL está faltando agora. Isto é mais difícil do que eu pensava.
//--- parâmetros de entrada
duplo TakeProfit externo=1000.0;
duplo externo Lots=0,1;
duplo StopLoss externo=1500.0;
//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização especializada |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
int mainCrossed (dupla linha principal1 , dupla linha principal2)
{
estático no último_direcionamento principal = 0;
direção_multi_corrente estática int = 0;
if(mainline1>mainline2)maincurrent_dirction = 1; //main up
if(mainline1<mainline2)maincurrent_dirction = 2; //main down
if(maincurrent_dirction != mainlast_direction) //main changed
{
mainlast_direction = maincurrent_dirction;
retorno (último_direção_principal);
}
senão
{
retorno (0);
}
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, bilhete, total;
duplo shortEma, longEma, mainshortEma, mainlongEma;
if(Bars<100)
{
Impressão ("barras com menos de 100");
retornar(0);
}
if(TakeProfit<10)
{
Imprimir ("TakeProfit menos de 10");
retornar(0); // verificar TakeProfit
}
int isCrossed = 0;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);
duplo longoEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);
duplo curtoEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);
duplo longoEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);
duplo dif1 = curtoEma1-longoEma1;
duplo dif2 = curtoEma2-longoEma2;
mainshortEma = iMA(NULL,0,30,0,MODE_SMA,PRICE_CLOSE,0);
mainlongEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0);
int mainisCrossed = mainCrossed (mainshortEma,mainlongEma);
if ((diff1*diff2)<0)
{
se (shortEma1>longEma1)
isCrossed = 1;
caso contrário, isCrossed = 2;
}
total = EncomendasTotal();
if(total < 1)
{
if(isCrossed == 1 && mainshortEma > mainlongEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,3,0,Ask+TakeProfit*Point,
"Minha EA",12345,0,Verde);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("Pedido aberto : ",OrderOpenPrice());
}
else Print("Erro na abertura do pedido de compra : ",GetLastError());
retornar(0);
}
if(isCrossed == 2 && mainshortEma < mainlongEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,3,0,Bid-TakeProfit*Point,
"Minha EA",12345,0,Vermelho);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("Pedido de venda aberto : ",OrderOpenPrice());
}
else Print("Erro na abertura do pedido de VENDA : ",GetLastError());
retornar(0);
}
retorno(0);
}
for(cnt=0;cnt<total;cnt++)
{
OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
if(OrderType()<=OP_SELL && OrderSymbol()==Symbol())
{
if(OrderType()==OP_BUY) // posição longa é aberta
{
OrderClose(OrderTicket(),OrderLots(),Ask-StopLoss*Point,3,Violet);
// posição fechada
retornar(0); // sair
}
senão // ir para a posição curta
{
OrderClose(OrderTicket(),OrderLots(),Bid+StopLoss*Point,3,Violet);
// posição fechada
retornar(0); // sair
}
}
}
retorno(0);
}
//+------------------------------------------------------------------+
Terrance
Primeiro : Seu corretor ECN/STP é como? Se sim, então você não pode colocar stop loss e obter lucro junto com a abertura do pedido, mas primeiro você deve abrir um pedido com aqueles definidos como 0 e usar OrderModify() para definir stop loss e/ou obter lucro em um pedido já aberto.
Segundo : Também, verifique sempre se você tem algo escrito na guia de especialistas da janela do terminal (verifique se alguns erros estão escritos lá : você provavelmente descobrirá então o que está acontecendo e por quê
Terceiro : Poderia ser uma boa idéia colocar uma linha como esta :
Ei Mladen, gostaria de lhe agradecer por sua ajuda nestes poucos dias. Consegui encontrar o erro em meu código que está causando o erro de entrada e saída.
Atenciosamente
Terrance
Abrindo mais de 1 comércio
Olá a todos, tenho tentado fazer com que minha EA possa abrir vários negócios, mas até agora só consegui limitá-lo a 1 negócio.
Meu objetivo é simples:
Quando o LWMA 10 cruza abaixo do LWMA 20, o sistema abreviará tanto o LWMA 10 como o 20 cruza abaixo do SMA 50 e vice versa para as operações longas.
Quero limitar minha EA a não abrir mais de 2 negociações, entretanto, quando mudo os códigos, ela se torna abrir 2 negociações de cada vez ao invés de abrir 1 negociação por critério.
Preciso configurar um sistema de contador ou qualquer coisa ou como devo configurar meu contador para reagir quando 1 de minha operação já tem TP ou SL?
Alguém pode me dar alguma luz aqui sobre o que está errado com meus códigos.
Muito obrigado e cumprimentos
Terrance
//--- parâmetros de entrada
duplo TakeProfit externo=500,0;
duplo externo Lots=0,1;
duplo StopLoss externo=500,0;
//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização especializada |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, bilhete, total;
duplo shortEma, longEma, mainshortEma, mainlongEma;
if(Bars<100)
{
Impressão ("barras com menos de 100");
retornar(0);
}
if(TakeProfit<10)
{
Imprimir ("TakeProfit menos de 10");
retornar(0); // verificar TakeProfit
}
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);
int isCrossed = 0;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);
duplo longoEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);
duplo curtoEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);
duplo longoEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);
duplo dif1 = curtoEma1-longoEma1;
duplo dif2 = curtoEma2-longoEma2;
mainshortEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0);
se ((dif1*diff2)<0)
{
se (shortEma1>longEma1)
isCrossed = 1;
caso contrário, isCrossed = 2;
}
total = EncomendasTotal();
if(total < 1)
{
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"Minha EA",12345,0,Verde);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("Pedido aberto : ",OrderOpenPrice());
}
else Print("Erro na abertura do pedido de compra : ",GetLastError());
retornar(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"Minha EA",12345,0,Vermelho);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("Pedido de venda aberto : ",OrderOpenPrice());
}
else Print("Erro na abertura do pedido de VENDA : ",GetLastError());
retornar(0);
}
retorno(0);
}
if(total === 1)
{
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"Minha EA",12345,0,Verde);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("Pedido aberto : ",OrderOpenPrice());
}
else Print("Erro na abertura do pedido de compra : ",GetLastError());
retornar(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"Minha EA",12345,0,Vermelho);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("Pedido de venda aberto : ",OrderOpenPrice());
}
else Print("Erro na abertura do pedido de VENDA : ",GetLastError());
retornar(0);
}
retorno(0);
}
retorno(0);
}
//+------------------------------------------------------------------+
Perguntas
Mladen,
Estou tentando procurar Lições sob o link que você me mostrou, mas são lições genéricas, estou procurando informações especificamente para o indicador de Henderson...
Além disso, passei pelos tópicos postados e, depois disso, quero descobrir as seguintes coisas.
-Em linguagem simples e fácil de entender, quero perguntar que aproximadamente depois de quantas barras passam, e a cor muda.
Em outras palavras, quantas barras no máximo são necessárias antes que a cor da linha mude de azul para rosa? Infelizmente, eu não entendo terminologia extravagante e gostaria de obter uma resposta muito simples onde eu possa seguir em frente e começar a estratégia. Qualquer gráfico é muito bem aprendido. premalmunshaw@yahoo.com é meu endereço de e-mail.
Estou tentando pagar 39 dólares para que este pacote seja ativado.
AGUARDO COM EXPECTATIVA UMA RESPOSTA POSITIVA!
Cumprimentos,
Premal Munshaw
Muito francamente, não entendo o que você está perguntando.
Se você está perguntando quando muda a cor, então a resposta é : quando a inclinação muda
Se você está perguntando como é codificado para mudar de cor, então a resposta que você deve procurar nesta seção : Lições....
Infelizmente eu não entendo suas perguntas, então tudo o que farei é me reintegrar (a duração do cálculo se refere à duração do filtro de Henderson) :
Mais simples do que isso é impossível de responder. E não há explicação mais simples de como o filtro de Henderson é calculado: seria se eu tentasse explicar a transformação de Fourier em termos de "1+1 = 2". Por favor, examine os links que lhe foram fornecidos
Quanto ao resto: você tem links para a matemática por trás do filtro, você tem informações a partir de quantas barras são recalculadas, você tem até mesmo exemplos do tópico de notícias da seção de elite. A partir da estratégia usando esse filtro : eu disse 1000 vezes em 1000s de posts que o recálculo de indicadores (SSA, filtro de Henderson, TMA centralizado, transformações de Fourier, análise de regressão, ...) não deveria ser usado em "modo de sinalização", mas em "modo de estimativa". Se você está atrás de um sinal do filtro de Henderson, então você está em um caminho completamente errado e se esta é a única razão pela qual você considera a assinatura da seção de elite, então é melhor que você não assine
PS: é uma má prática torná-lo público por e-mail. Assim, tudo o que você vai receber é uma tonelada de mensagens de spamm em sua caixa de e-mail.
______________________________________
Desejo a você o melhor em sua busca por um sistema comercial
cumprimentos
Mladen
Mladen,
Estou tentando procurar Lições sob o link que você me mostrou, mas são lições genéricas, estou procurando informações especificamente para o indicador de Henderson...
Além disso, passei pelos tópicos postados e, depois disso, quero descobrir as seguintes coisas.
-Em linguagem simples e fácil de entender, quero perguntar que aproximadamente depois de quantas barras passam, e a cor muda.
Em outras palavras, quantas barras no máximo são necessárias antes que a cor da linha mude de azul para rosa? Infelizmente, eu não entendo terminologia extravagante e gostaria de obter uma resposta muito simples onde eu possa seguir em frente e começar a estratégia. Qualquer gráfico é muito bem aprendido. premalmunshaw@yahoo.com é meu endereço de e-mail.
Estou tentando pagar $39 para que este pacote seja ativado.
AGUARDO COM EXPECTATIVA UMA RESPOSTA POSITIVA!
Cumprimentos,
Premal MunshawMladen,
Existe uma maneira de eu definir um contador para o meu comércio de tal forma que quando meu comércio tiver TP ou SL eu seja capaz de acionar o salto do contador?
Atenciosamente
Terrance
Olá a todos, tenho tentado fazer com que minha EA possa abrir vários negócios, mas até agora só consegui limitá-lo a 1 negócio.
Meu objetivo é simples:
Quando o LWMA 10 cruza abaixo do LWMA 20, o sistema abreviará, tanto o LWMA 10 como o 20 cruza abaixo do SMA 50 e vice versa para as operações longas.
Quero limitar minha EA para não abrir mais de 2 negociações, entretanto, quando mudo os códigos, ela se torna abrir 2 negociações de cada vez ao invés de abrir 1 negociação por critério.
Preciso configurar um sistema de contador ou qualquer coisa ou como devo configurar meu contador para reagir quando 1 de minha operação já tem TP ou SL?
Alguém pode me dar alguma luz aqui sobre o que está errado com meus códigos.
Muito obrigado e cumprimentos
Terrance
//--- parâmetros de entrada
duplo TakeProfit externo=500,0;
duplo externo Lots=0,1;
duplo StopLoss externo=500,0;
//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização especializada |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, bilhete, total;
duplo shortEma, longEma, mainshortEma, mainlongEma;
if(Bars<100)
{
Impressão ("barras com menos de 100");
retornar(0);
}
if(TakeProfit<10)
{
Imprimir ("TakeProfit menos de 10");
retornar(0); // verificar TakeProfit
}
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,0);
int isCrossed = 0;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);
duplo longoEma1 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,1);
duplo curtoEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);
duplo longoEma2 = iMA(NULL,0,20,0,MODE_LWMA,PRICE_CLOSE,2);
duplo dif1 = curtoEma1-longoEma1;
duplo dif2 = curtoEma2-longoEma2;
mainshortEma = iMA(NULL,0,50,0,MODE_SMA,PRICE_CLOSE,0);
se ((dif1*diff2)<0)
{
se (shortEma1>longEma1)
isCrossed = 1;
caso contrário, isCrossed = 2;
}
total = EncomendasTotal();
if(total < 1)
{
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"Minha EA",12345,0,Verde);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("Pedido aberto : ",OrderOpenPrice());
}
else Print("Erro na abertura do pedido de compra : ",GetLastError());
retornar(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"Minha EA",12345,0,Vermelho);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("Pedido de venda aberto : ",OrderOpenPrice());
}
else Print("Erro na abertura do pedido de VENDA : ",GetLastError());
retornar(0);
}
retorno(0);
}
if(total === 1)
{
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"Minha EA",12345,0,Verde);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("Pedido aberto : ",OrderOpenPrice());
}
else Print("Erro na abertura do pedido de compra : ",GetLastError());
retornar(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"Minha EA",12345,0,Vermelho);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("Pedido de venda aberto : ",OrderOpenPrice());
}
else Print("Erro na abertura do pedido de VENDA : ",GetLastError());
retornar(0);
}
retorno(0);
}
retorno(0);
}
//+------------------------------------------------------------------+...
Tente esta função:
{
int openedOrders = 0;
for(int i=0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
if(OrderSymbol() != Symbol()) continue;
if(OrderMagicNumber() != MagicNumber) continue;
if(OrderType() == type) openedOrders++;
}
return(openedOrders);
}
[/PHP]
To count opened buy orders, call it like this :
to count opened sell orders, call it like this :
[PHP]int openedSells = countOpened(OP_SELL);Mladen,
Existe uma maneira de eu definir um contador para o meu comércio de tal forma que quando meu comércio tiver TP ou SL eu seja capaz de acionar o salto do contador?
Atenciosamente
TerranceOlá, Mladen,
Eu descobri outra maneira usando a função "Bars". Quando uma troca é acionada, eu vou definir uma contagem inteira com a função de barras (por exemplo, uma troca de compra é acionada na barra 122, portanto a contagem será 122) e quando meu critério for acionado novamente, eu vou chamar a função de barras novamente e compará-la com a contagem e a troca só será acionada se a nova contagem for maior do que a anterior que é 122 neste caso.
No entanto, ainda estou acionando 2 negociações em conjunto ao invés de 1 por critério. Por que isto é assim?
Por favor, ajude
Obrigado e cumprimentos
Terrance
//--- parâmetros de entrada
duplo TakeProfit externo=530.0;
duplo externo Lots=0,1;
duplo StopLoss externo=520,0;
//+------------------------------------------------------------------+
//| função de iniciação de especialista |
//+------------------------------------------------------------------+
int init()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de desinicialização especializada |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
retorno(0);
}
//+------------------------------------------------------------------+
//| função de início especializado |
//+------------------------------------------------------------------+
int start()
{
//----
int cnt, bilhete, total;
duplo shortEma, longEma, mainshortEma, mainlongEma;
if(Bars<100)
{
Impressão ("barras com menos de 100");
retornar(0);
}
if(TakeProfit<10)
{
Imprimir ("TakeProfit menos de 10");
retornar(0); // verificar TakeProfit
}
shortEma = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,0);
longEma = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,0);
int isCrossed = 0;
double shortEma1 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,1);
duplo longoEma1 = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,1);
duplo curtoEma2 = iMA(NULL,0,10,0,MODE_LWMA,PRICE_CLOSE,2);
duplo longoEma2 = iMA(NULL,0,25,0,MODE_LWMA,PRICE_CLOSE,2);
duplo dif1 = curtoEma1-longoEma1;
duplo dif2 = curtoEma2-longoEma2;
mainshortEma = iMA(NULL,0,113,0,MODE_EMA,PRICE_CLOSE,0);
se ((dif1*diff2)<0)
{
se (shortEma1>longEma1)
isCrossed = 1;
caso contrário, isCrossed = 2;
}
int BarCounter, BarCounter2;
total = OrdensTotal();
if(total < 1)
{
if(isCrossed == 1 && shortEma > mainshortEma && longEma > mainshortEma)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"Minha EA",12345,0,Verde);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("Pedido aberto : ",OrderOpenPrice());
BarCounter = Barras;
}
else Print("Erro na abertura do pedido de compra : ",GetLastError());
retornar(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma < mainshortEma)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"Minha EA",12345,0,Vermelho);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("Pedido de venda aberto : ",OrderOpenPrice());
BarCounter = Barras;
}
else Print("Erro na abertura do pedido de VENDA : ",GetLastError());
retornar(0);
}
retorno(0);
}
if(total === 1)
{
BarCounter2 = Barras;
if(isCrossed === 1 && shortEma > mainshortEma && longEma > mainshortEma && BarCounter2 > BarCounter)
{
ticket=OrderSend(Symbol(),OP_BUY,Lots,Ask,1,Ask-StopLoss*Point,Ask+TakeProfit*Point,
"Minha EA",12345,0,Verde);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("Pedido aberto : ",OrderOpenPrice());
BarCounter = BarCounter2;
}
else Print("Erro na abertura do pedido de compra : ",GetLastError());
retornar(0);
}
if(isCrossed == 2 && shortEma < mainshortEma && longEma BarCounter)
{
ticket=OrderSend(Symbol(),OP_SELL,Lots,Bid,1,Bid+StopLoss*Point,Bid-TakeProfit*Point,
"Minha EA",12345,0,Vermelho);
if(bilhete>0)
{
if(OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES))
Imprimir("Pedido de venda aberto : ",OrderOpenPrice());
BarCounter = BarCounter2;
}
else Print("Erro na abertura do pedido de VENDA : ",GetLastError());
retornar(0);
}
retorno(0);
}
retorno(0);
}
Tente esta função :
{
int openedOrders = 0;
for(int i=0; i < OrdersTotal(); i++)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) == false) break;
if(OrderSymbol() != Symbol()) continue;
if(OrderMagicNumber() != MagicNumber) continue;
if(OrderType() == type) openedOrders++;
}
return(openedOrders);
}
[/PHP]
To count opened buy orders, call it like this :
to count opened sell orders, call it like this :
[PHP]int openedSells = countOpened(OP_SELL);