Como codificar? - página 84

 

Comprar e vender na década de 100

Zamanibe,

Entendo o que você escreveu, mas não vejo como você fecha com lucro.

Isto me parece uma EA do tipo Hedge.

Há vários desses em Forex-tsd,

e você não tem que Martingale.

Grande Seja

 
european:
Qualquer pessoa pode compartilhar idéias/código sobre como fechar um pedido no valor TakeProfit.

Por alguma razão 'TakeProfit' na função OrderSend() nem sempre funciona em pedidos curtos/vendidos em MT4, embora funcione bem em pedidos longos/comprados.

Eu escrevi algum código comparando o valor TakeProfit do pedido com o preço atual, mas não funciona corretamente. Alguma idéia?

euro

Longs são fechados a preço de "compra", enquanto que os shorts são fechados a preço de "compra".

 
Big Be:
Zamanibe,

Entendo o que você escreveu, mas não vejo como você fecha com lucro.

Isto me parece uma EA do tipo Hedge.

Há vários desses em Forex-tsd,

e você não tem que Martingale.

Grande Seja

Vejo o mercado se movimentar em ondas para cima e para baixo alguma semana você recebe 2 ciclos para cima/para baixo eu tenho uma estratégia diferente quando ela tende. i comercial manualy

por favor, me encaminhe para a sebe ea . Eu vejo muito disso . mas não o que excatly o que eu quero.

 

problema de código ou de plataforma?

ralph.ronnquist:
Os longos são fechados por "lances", enquanto que os calções são fechados por "pedidos".

Obrigado por responder.

Por alguma razão, meu código não funciona:

se (OrderSelect(orderNo, SELECT_BY_TICKET)==verdadeiro) {

if (OrderType() == OP_BUY && Close[0] >= OrderTakeProfit()) CloseOrder(OrderNo);

if (OrderType() == OP_SELL && Close[0] <= OrderTakeProfit()) CloseOrder(orderNo); }

Agradecia um conselho.

euro

 
european:
Obrigado por responder.

Por alguma razão, meu código não funciona:

if (OrderSelect(orderNo, SELECT_BY_TICKET)==true) {

if (OrderType() == OP_BUY && Close[0] >= OrderTakeProfit()) CloseOrder(orderNo);

if (OrderType() == OP_SELL && Close[0] <= OrderTakeProfit()) CloseOrder(orderNo); }

[/PHP]

I would be grateful for advice.

euro

Certo; "Fechar[0]" é o preço de "oferta", que não é o preço contra o qual um OP_SELL é fechado. Um OP_SELL é fechado contra o preço "ask", que é alguns poucos pips (aka spread) acima do preço "bid".

Quando seu EA é executado, o preço "bid" também está disponível como a variável chamada "Bid" e o preço "ask" como a variável chamada "Ask". Portanto, o trecho de código ficaria mais bonito:

[PHP]if (OrderSelect(orderNo, SELECT_BY_TICKET)==verdadeiro) {

if (OrderType() == OP_BUY && Bid >= OrderTakeProfit()) CloseOrder(OrderNo);

if (OrderType() == OP_SELL && Ask <= OrderTakeProfit()) CloseOrder(orderNo); }

 

Por favor, ajude em código, obrigado...

Hi,

Tenho novidades por escrito EA, estava tentando o seguinte, mas recebi um erro de "Invalid ticket for OrderModify function", Alguém pode, por favor, dar uma olhada e ajudar? Agradecemos antecipadamente.

void ModifyHedgeSL(int SL) {

se (SL<1) retornar;

bool bres;

dupla sl,openadj;

if (lastopenbuy===1 && lastopensell==0) {openadj=Ask-Bid;} else {openadj=0;}

for (int i = 0; i < OrderTotal(); i++) {

OrderSelect (i, SELECT_BY_POS,MODE_TRADES);

if ( OrderSymbol() == Symbol() || OrderMagicNumber() == expertId && OrderType() == OP_BUY )

{

sl = GetLastLongOpenPrice()-openadj-SL*Point;

bres = OrderModify (OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, White);

if (bres) Print("Modifing Hedge BUY completed");

if (!bres) Print("Error Modifying Hedge BUY order : "ErrorDescription(GetLastError()));

}

if ( OrderSymbol() == Symbol() || OrderMagicNumber() == expertId && OrderType() == OP_SELLL )

{

sl = GetLastShortOpenPrice()-openadj+SL*Point;

bres = OrderModify (OrderTicket(), OrderOpenPrice(), sl, OrderTakeProfit(), 0, Gold);

if (bres) Print("Modifing Hedge SELL completed");

if (!bres) Print("Error Modifying Hedge SELL order: "ErrorDescription(GetLastError()));

}

}

retornar;

}

duplo GetLastLongOpenPrice() {

int ord;

dobro LastLongOpenPrice=0;

//----

para (int i = 0; i <= OrderTotal(); i++)

{

OrderSelect(i,SELECT_BY_POS,MODE_TRADES);

if (OrderSymbol() == Symbol() && OrderMagicNumber()==expertId && OrderType() == OP_BUY)

{

LastLongOpenPrice=OrderOpenPrice();

}

}

if (LastLongOpenPrice>0) {return(LastLongOpenPrice);}

senão {retorno(-1);}

}

 

Como codificar pedidos de compra/venda quando o SL é atingido

Por exemplo, se eu comprar 1 lote de EUR/JPY a 164,30 e Sl a 164,00.

se o SL for atingido, então eu farei outra compra pelo mesmo preço, 164,30, com o mesmo SL a 164, e com mais lotes, digamos 1,5. Então, se o SL for atingido novamente, outra ordem de compra será colocada para comprar 2 lotes ao mesmo preço com o mesmo SL.

Existe algum código para isto? Obrigado!

 
boostrade:
Por exemplo, se eu comprar 1 lote de EUR/JPY a 164,30 e Sl a 164,00.

se o SL for atingido, então farei outro pedido de compra ao mesmo preço, 164,30, com o mesmo SL a 164, e com mais lotes, digamos 1,5. Então, se o SL for atingido novamente, outra ordem de compra será colocada para comprar 2 lotes ao mesmo preço com o mesmo SL.

Existe algum código para isto? Obrigado!

Veja este tópico sobre Frank EA https://www.mql5.com/en/forum

Acho que é o que você precisa ou você pode usá-lo como exemplo.

 

ok

newdigital:
Veja este tópico sobre Frank EA https://www.mql5.com/en/forumI pense que é o que você precisa ou você pode usá-lo como exemplo.

tks muito newdigital, quaisquer perguntas que eu colocarei aqui. tks novamente.

 

Edição TP

if (OrderSelect(orderNo, SELECT_BY_TICKET)==true) {

if (OrderType() == OP_BUY && Bid >= OrderTakeProfit()) CloseOrder(orderNo);

if (OrderType() == OP_SELL && Ask <= OrderTakeProfit()) CloseOrder(orderNo); }

Ralph,

como você pode ver, chamo uma função separada CloseOrder() onde eu tinha usado 'Ask' e 'Bid' como você recomenda, mas o problema ainda existe.

// Função CloseOrder() **********************************************************

bool CloseOrder(int orderT) {

duplo sA;

se (OrderSelect(orderT, SELECT_BY_TICKET)==verdadeiro) {

if (OrderType() == OP_BUY) sA = Bid;

else sA = Perguntar;

bool bClosed = OrderClose(orderT,OrderLots(),sA,0,CLR_NONE);

se (bClosed == 1) {

pTrades = 0; retorno(1); }

caso contrário retornar(0); }}}}}

**********************************************************

Eu esperava que fosse uma quarentena para que o comércio fosse fechado uma vez que o TP fosse atingido, mas não é o caso, veja quadro anexo, onde o pedido curto foi aberto em 104,03 com TP em 103,79. Por outro lado, o preço bateu (TP) e a ordem não foi fechada.

Arquivos anexados:
tp_failed.jpg  32 kb