Compra/venda de EAs e indicadores - página 4

 
cifox:
Olá Masters ......,Você poderia me ajudar a fazer EA para compra ou venda aberta em um tempo...

Eu mudei seu posto para aqui.

Leia este tópico do primeiro post e você encontrará poucos EAs.

 

Abra apenas uma compra e uma venda por dia!

Olá, pessoal,

Eu tenho um pequeno problema com minha EA. Ela se baseia no movimento de preços e durante um dia abre mais de uma posição. Eu quero limitar isto, mas não entendi como posso fazer.

O que eu quero fazer é algo parecido com isto:

Se durante o dia atual você já abriu uma posição de compra, não abra nenhuma outra posição de COMPRA. Mas se você encontrar um sinal de venda, abra um sinal de venda. Neste caso, se depois disto você encontrar outro sinal de venda, não abra outras posições de venda.

Eu não sei como escrever isto e qual é a posição correta. Você pode me ajudar?

Muito obrigado!!!

Cumprimentos,

Mauro

EDIT:

Em outro tópico encontrei este código, mas não sei onde e como anexá-lo:

if(OrderSelect(1, SELECT_BY_POS)==true)

{

if(TimeToStr(OrderOpenTime(),TIME_DATE ) != TimeToStr(CurTime(),TIME_DATE ))

{

//open new order

}

}
 

Neste tópico não há nada sobre o que eu estou procurando... este tópico é sobre comprar e vender ao mesmo tempo.... Mas o que eu estou falando é que se eu já abri uma ordem de compra minha EA durante o dia não tem nenhuma nova ordem de compra aberta. A mesma coisa se já tiver aberto uma ordem de venda.

Mas se ela abrir uma ordem de compra, durante o dia só pode abrir uma ordem de venda...seguindo as regras escritas acima.

Exemplo:

A hora é: hoje

A EA abre um pedido de compra.

A posição chega ao TakeProfit ou ao StopLoss, portanto, é fechada.

Agora, a EA pode ver outro sinal de compra, mas visto que já abriu uma ordem de compra no tempo anterior, ela não abre esta ordem.

Agora, a EA vê um sinal de VENDA, e visto que ainda não abriu uma ORDEM de VENDA, ela abre uma posição de VENDA.

A posição atinge o TakeProfit ou o StopLoss, portanto, é fechada.

Agora, a EA pode ver outro sinal de venda, mas visto que já abriu uma ordem de venda no tempo anterior, ela não abre esta ordem.

Isto é o que eu estou procurando....

 
 

Ok, obrigado por sua resposta NewDigital. Agora, eu acho que meu código é este:

if (TimeDayOfYear(TimeCurrent())!=DayOfLastTrade)

{

ticket=OrderSend(....

DayOfLastTrade=(TimeDayOfYear(TimeCurrent());

}

[/CODE]

So, can you check if I have added this code in the right way on my code?Here it is

[CODE]if (Order == SIGNAL_BUY && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount)))) {

if(!IsTrade) {

//Check free margin

if (AccountFreeMargin() < (1000 * Lots)) {

Print("We have no money. Free Margin = ", AccountFreeMargin());

return(0);

}

if (UseStopLoss) StopLossLevel = Ask - StopLoss * Point; else StopLossLevel = 0.0;

if (UseTakeProfit) TakeProfitLevel = Ask + TakeProfit * Point; else TakeProfitLevel = 0.0;

if (TimeDayOfYear(TimeCurrent())!=DayOfLastTrade)

{

Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, StopLossLevel, TakeProfitLevel, "MaxPower Buy Order", MagicNumber, 0, DodgerBlue);

DayOfLastTrade=(TimeDayOfYear(TimeCurrent());

}

if(Ticket > 0) {

if (OrderSelect(Ticket, SELECT_BY_TICKET, MODE_TRADES)) {

Print("BUY order opened : ", OrderOpenPrice());

if (SignalMail) SendMail("[Signal Alert]", "[" + Symbol() + "] " + DoubleToStr(Ask, Digits) + " Open Buy");

} else {

Print("Error opening BUY order : ", GetLastError());

}

}

if (EachTickMode) TickCheck = True;

if (!EachTickMode) BarCount = Bars;

return(0);

}

}

O código acima é apenas para posição de compra, portanto, desta forma, ele deve abrir apenas uma posição de compra. Se eu fizer a mesma coisa para o código de VENDA, ele deve abrir apenas uma posição de venda, certo?

Obrigado por sua ajuda.

Mauro

 

MMM...o Metaeditor diz que há um erro...

'\end_of_program' - unbalanced left parenthesis (259, 1)
 

Isso significa que este

{[/CODE]

and

[CODE]}

é desequilibrado.

Verifique no código.

Desculpe, eu não sou um codificador, então não posso ajudar muito.

 

Olá newdigital...sim, eu sei que para a farentese....mas verifiquei todo o código e a farentese está equilibrada...

mmm.... Não entendo onde está o problema...., mas continuarei a verificar...espero encontrar uma solução!

Obrigado por todos...

Mauro

 

Por exemplo, este aqui:

DayOfLastTrade=(TimeDayOfYear(TimeCurrent());
 

Depurar o MT4 é uma dor no a***, mas se você for paciente, você pode descobrir o problema.

A primeira coisa que eu diria é onde sempre o MT4 lhe diz que o problema é... não é! A próxima coisa que eu faria seria começar a cortar GRANDES pedaços de código na complicada declaração IF que muito provavelmente está causando os problemas.

Por exemplo, se eu tiver...

if(){

//second if

if(){

//third if

if(){

}

}

}

Eu cortaria se fosse 2 e 3 e sairia se fosse 1. Tente compilá-lo. Se compilar, você o reduziu. Depois cole 2 & 3 e depois corte 3. Teste novamente. Continue fazendo isso por alguns minutos e eventualmente você encontrará o problema.

Boa sorte.

LUx