como posso obter o preço mais alto após a abertura do pedido.

 

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

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


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

 
Para obter OOT você já deve ter feito um pedidoSelect
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. 
    }
}
 
WHRoeder:
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.

 
Sem resposta, apenas preciso obter o pedido antes do último pedido, mesmo para comprar ou vender, mesmo que seja um pedido aberto ou fechado, aguardando sua ajuda.
 
Hand:
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.
Encontre o último pedido, lembre-se, encontre o próximo pedido anterior.
    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") ;}