Como codificar? - página 210

 

Muito obrigado!!! cockeyedcowboy, isso foi realmente ótimo!!

Agora a mensagem de erro está fora!!!

Mas o 2º indicador não está desenhado e eu não sei por que

Buffer_Ma=iMAOnArray(Buffer_Ma,0,Periode_MA_Momentum,0,MODE_SMA,i);

 

Você tem um problema com o segundo buffer, pois ele não tem dados para os calcs.

tente calcinar TODOS os elementos em Buffer_Mom , depois Buffer_Ma.

Exemplo:

void start()

{

int counted_bars=IndicatorCounted();

int limit=Bars-counted_bars;

if(counted_bars>0) limit++;

for(int i=0; i<limit; i++)

{

Buffer_Mom=iMomentum(NULL,Timeframe_Momentum,Periode_Momentum,PRICE_CLOSE,i);

}

for( i=0; i<limit; i++)

{

Buffer_Ma=iMAOnArray(Buffer_Mom,0,Periode_MA_Momentum,0,MODE_SMA,i);

}

return(0);

}

Boa sorte.

 

Encontrar a OHLC de um bar específico

Alguém pode me dizer como eu descubro o preço de fechamento de uma barra específica usando o código MQL? Posso fazer referência a uma barra pelo seu tempo?

Ou seja: preço_de_fecho_de_bar = Fechar("04:59:00 AM") ... se ao menos fosse assim tão fácil!

Obrigado

 

hy folks !

ok, tenho outro grande problema...

como codificar esta condição :

digite longo ou curto apenas na primeira vez

(por isso, se eu tiver muitos sinais longos seguintes e entrar apenas na primeira vez)

pagarei a todos para que me ajudem nisto

este é meu código simples para a condição de compra:

//Buy

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;

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

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

}

}
 
Sadly:
Alguém pode me dizer como eu descubro o preço de fechamento de uma barra específica usando o código MQL? Posso fazer referência a uma barra pelo seu tempo?

ie: closing_price_of_bar = Close("04:59:00 AM") ... se ao menos fosse assim tão fácil!

Obrigado.

Experimente isto:

closing_price_of_bar = iClose(Symbol(),PERIOD_M1,iBarShift(Symbol(),PERIOD_M1,StrToTime("04:59"));

 

Comprar ou Vender

Olá a todos,

Tenho a Buy EA e Sell EA que estão sempre abertas mais de uma posição. Gostaria de obter alguma ajuda sobre como alterar ou modificar o código que permite apenas 1(uma) posição de compra e 1(uma) posição de venda e em 1(uma) conta.

O SL e TP estarão usando o Preço Alvo, ou seja, se o preço de compra tiver alcançado o Preço Alvo, fechará a posição. O mesmo com o Preço de Venda.

Eu peço a ajuda dos especialistas em código neste fórum.

Obrigado.

=s21=

Arquivos anexados:
opensell.mq4  2 kb
 

Compra e Venda

Oooops...

Aqui está a Buy EA.

Arquivos anexados:
openbuy.mq4  2 kb
 

Olá, se você precisar ter apenas um pedido aberto, você pode simplesmente acrescentar a condição seguinte: Se (OrderTotal()==0).

Portanto, as regras para pedidos de COMPRA serão algo parecido com isso:

if (Order == SIGNAL_BUY && (OrdersTotal==0) && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))

[/CODE]

So you will not get second-third-... orders opened until you current order open.

dr.house7:
hy folks !

ok i have another big problem...

how to code this condition :

enter long or short only first time

(so if i have many following long signal ea enter only at first time)

i'll pay everyone could help me on this

this is my simple code for buy condition:

[CODE]

//Buy

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;

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

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

}

}
 
Roger09:
Tente isto: closing_price_of_bar = iClose(Symbol(),PERIOD_M1,iBarShift(Symbol(),PERIOD_M1,StrToTime("04:59"));

Fab! Tive que acrescentar 1 parêntese de fechamento extra para evitar que o intérprete reclamasse de um erro, mas funcionou muito bem.

Obrigado, Roger09

 
Avalanche2k:
Olá, se você precisar ter apenas um pedido aberto, você pode simplesmente acrescentar a condição seguinte: Se (OrdensTotal()==0).

Portanto, as regras para pedidos de COMPRA serão algo assim:

if (Order == SIGNAL_BUY && (OrdersTotal==0) && ((EachTickMode && !TickCheck) || (!EachTickMode && (Bars != BarCount))))

Portanto, você não receberá o segundo terço... pedidos abertos até que o seu pedido atual seja aberto.

obrigado Avalanche,

mas não é uma solução para mim, porque eu tenho um TP, não espero até a condição oposta

Outras idéias ? Primeiro eu te pago