string PriceToStr(double p){ return( DoubleToStr(p, Digits) ); } : datetime OOT = OrderOpenTime(); // Assumes OrderSelect() done already int iOOT = iBarShift(NULL,0, OOT); // Bar of the open. #define iBarCURRENT 0 // Include current bar. int nSince = iOOT - iBarCURRENT + 1; // No. bars since open. int iHi = iHighest(NULL,0, MODE_HIGH, nSince, iBarCURRENT); double HH = High[iHi]; // Highest high. Print( "High since order opened on ", TimeToStr(OOT)," is ", PriceToStr(HH) );
Aqui estão alguns erros para o código acima.
(' - definição da função inesperada D:\FXDD Malta - MetaTrader 4\experts\test2.mq4 (343, 18)
este erro para a string PriceToStr(duplo p)
para este erro não sei como posso consertá-lo
iBarCurrent' - variável não definida D:\FXDD Malta - MetaTrader 4\experts\test2.mq4 (348, 30)
este erro porque você define #define iBarCURRENT então você o coloca como iBarCurrent
eu o consertarei.
2 erro(s),
Coloque esta linha no final de seu Código fora da função inicial . .
string PriceToStr(double p){ return( DoubleToStr(p, Digits) ); }
e comece a ler isto se você quiser aprender a codificar: https://book.mql4.com//
É claro, caras ( RaptorUK e WHRoeder ),
Obrigado.
datetime OOT = OrderOpenTime(); // Assumes OrderSelect() done already int iOOT = iBarShift("EURUSD",PERIOD_H1, OOT); // Bar of the open. #define iBarCURRENT 0 // Include current bar. int nSince = iOOT - iBarCURRENT + 1; // No. bars since open. int iHi = iHighest("EURUSD",PERIOD_H1, MODE_HIGH, nSince, iBarCURRENT); double HH = High[iHi]; // Highest high. int iLi = iLowest("EURUSD",PERIOD_H1, MODE_LOW, nSince, iBarCURRENT); double LL = Low[iLi]; // Lowest low.
Tenho outra pergunta:
se tenho 2 pedidos abertos um para compra e outro para venda:
como posso deixar minha EA entender e pegar o iOOT = iBarShift("EURUSD",PERIOD_H1, OOT); // Barra do aberto. Para a barra que obtive a posição de compra dela e calcular a mais alta a partir desse ponto.
E
Pegue a iOOT = iBarShift("EURUSD",PERIOD_H1, OOT); // Barra do aberto. Para a barra que obtive a posição de venda dela e calcular a mais baixa a partir desse ponto.
Muito obrigado
for(pos = OrdersTotal()-1; pos >= 0 ; pos--) if ( OrderSelect(pos, SELECT_BY_POS) // Only my orders w/ && OrderMagicNumber() == magic.number // my magic number && OrderSymbol() == Symbol() // and my pair. ){ datetime OOT = OrderOpenTime(); // Assumes OrderSelect() done already int iOOT = iBarShift("EURUSD",PERIOD_H1, OOT); // Bar of the open. #define iBarCURRENT 0 // Include current bar. int nSince = iOOT - iBarCURRENT + 1; // No. bars since open. if (OrderType == OP_BUY){ int iHi = iHighest("EURUSD",PERIOD_H1, MODE_HIGH, nSince, iBarCURRENT); double HH = High[iHi]; // Highest high. } else{ int iLi = iLowest("EURUSD",PERIOD_H1, MODE_LOW, nSince, iBarCURRENT); double LL = Low[iLi]; // Lowest low. } }
Para obter OOT você já deve ter feito um pedidoSelect
Obrigado, pessoal.
Também tenho outras perguntas:
Como posso fazer esta condição: se (último pedidoFecharPreço() para venda > antes do último pedidoFecharPreço para venda) && ( antes do último pedidoFecharPreço para venda >= lance)
fechar a posição
é algo como isto estará bem
if ( (OrderType == OP_SELL)&& OrderSelect(pos+1, SELECT_BY_POS,MODE_TRADES ) ) { if( pos>pos+1 && pos+1>MarketInfo("EURUSD",MODE_BID); // close the position
Justo,
Quero saber como posso obter: o pedido antes do último pedido (abrir ou fechar) preço() para (comprar ou vender) para adicioná-los para algumas claculações.
Muito obrigado.
Quero saber como posso obter: o pedido antes do último pedido (abrir ou fechar) preço() para (comprar ou vender) para adicioná-los para algumas claculações.
for(pos = OrdersTotal()-1; pos >= 0 ; pos--) if ( OrderSelect(pos, SELECT_BY_POS) // Only my orders w/ && OrderMagicNumber() == magic.number // my magic number && OrderSymbol() == Symbol() // and my pair. ){ datetime OOTlatest = OrderOpenTime(); // found latest open order break; } for(pos--; pos >= 0 ; pos--) if ( OrderSelect(pos, SELECT_BY_POS) // Only my orders w/ && OrderMagicNumber() == magic.number // my magic number && OrderSymbol() == Symbol() // and my pair. ){ datetime OOTprevious = OrderOpenTime(); // found the previous break; } if (OOTlastest == 0) // no open orders if (OOTprevious == 0) // no previous :
Obrigado WHRoeder,
Para sua ajuda real. se eu precisar obter o último pedido de compra e o último pedido de venda, então compare-os fazendo :
se ( o último pedido aberto para compra == OOTlastest )
{façam alguma coisa }
senão
{ } ....... é o código abaixo que vai funcionar.
for(int pos = OrdersTotal()-1; pos >= 0 ; pos--) if ( OrderSelect(pos, SELECT_BY_POS) // Only my orders w/ && OrderMagicNumber() == magic.number // my magic number && OrderSymbol() == Symbol() // and my pair. ){ if (OrderType() == OP_BUY){ int lastorderforbuy= OrderOpenPrice(); } else{ int lastorderforsell= OrderOpenPrice(); } } for(pos--; pos >= 0 ; pos--) if ( OrderSelect(pos, SELECT_BY_POS) // Only my orders w/ && OrderMagicNumber() == magic.number // my magic number && OrderSymbol() == Symbol() // and my pair. ){ if (OrderType() == OP_BUY){ int previousorderforbuy= OrderOpenPrice(); } else{ int previousorderforsell= OrderOpenPrice(); } } if ( ((lastorderforbuy+ previousorderforsell)/2)<=MarketInfo("EURUSD",MODE_BID)) { CLOSESHORT("EURUSD") ;}
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Caríssimos,
Alguém pode verificar o link abaixo e responder a minha ração (como posso obter o preço mais alto após a abertura do pedido).
http://www.forexfactory.com/showthread.php?t=307937