Como codificar? - página 298

 
mladen:
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

Mladen

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 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 :

int err=GetLastError(); Print(err);

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

tkuan77:
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

Terrance
Arquivos anexados:
terminal_1.gif  62 kb
 
mladen:
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 :

int err=GetLastError(); Print(err);
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 as ordens 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 ao invés de adivinhar o que está acontecendo

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);

}

//+------------------------------------------------------------------+

 
mladen:
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 :

int err=GetLastError(); Print(err);
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 as ordens 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 ao invés de adivinhar o que está acontecendo

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

mladen:
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) :

se seu comprimento de cálculo for 5, então as 2 últimas barras podem mudar

se seu comprimento de cálculo for 7, então as últimas 3 barras podem mudar

se seu comprimento de cálculo for 9, então as últimas 4 barras podem mudar

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

premalmunshaw:
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 Munshaw
 

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

Terrance

tkuan77:
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 countOpenedOrders(int type)

{

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 :

int openedBuys = countOpened(OP_BUY);

to count opened sell orders, call it like this :

[PHP]int openedSells = countOpened(OP_SELL);
e então você pode verificar
:se openBuys==0 open buyif

openSells==0 open sell

tkuan77:
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

Terrance
 

Olá, 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);

}

mladen:
Tente esta função :
int countOpenedOrders(int type)

{

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 :

int openedBuys = countOpened(OP_BUY);

to count opened sell orders, call it like this :

[PHP]int openedSells = countOpened(OP_SELL);
e então você pode verificar
:se openBuys==0 open buyif

openSells==0 open sell

Razão: