как я могу получить наибольшую цену после открытия ордера (orderopenprice).

 

Уважаемые,

может кто-нибудь проверить приведенную ниже ссылку и ответить на мой вопрос (как я могу получить самую высокую цену после открытия ордера (orderopenprice)).

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:


Вот некоторые ошибки для приведенного выше кода.

'(' - определение функции неожиданно D:\Program Files\FXDD Malta - MetaTrader 4\experts\test2.mq4 (343, 18)

эта ошибка для строки PriceToStr(double p).

для этой ошибки Я не знаю, как я могу исправить это


'iBarCurrent' - переменная не определена D:\Program Files\FXDD Malta - MetaTrader 4\experts\test2.mq4 (348, 30)

Эта ошибка из-за того, что вы определили #define iBarCURRENT, затем вы поместили его как iBarCurrent.

Я исправлю это.


2 ошибки,

 

Поместите эту строку в самый конец вашего кода вне функции start. ...

string PriceToStr(double p){ return( DoubleToStr(p, Digits) ); }

и начните читать это, если хотите научиться кодировать: https://book.mql4.com//

 

Все ясно, ребята (RaptorUK и WHRoeder),

Спасибо.

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. 

У меня другой вопрос:

если у меня открыто 2 ордера, один на покупку, другой на продажу:

как мне дать советнику понять и взять iOOT = iBarShift("EURUSD",PERIOD_H1, OOT); // Бар открытия. Для бара, на котором я получил позицию на покупку, и вычислить максимальное значение с этой точки.

И

Берем iOOT = iBarShift("EURUSD",PERIOD_H1, OOT); // Бар открытия. Для бара, на котором я получил позицию на продажу, и вычислите минимум с этой точки.

Большое спасибо

 
Чтобы получить OOT, вы должны уже выполнить orderSelect
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:
Чтобы получить OOT, вы должны уже выполнить OrderSelect


Спасибо, ребята.

Также у меня есть другой вопрос:

Как я могу выполнить следующие условия: if (last OrderClosePrice() for sell > before the last OrderClosePrice for sell ) && ( before the last OrderClosePrice for sell >= bid)

закрыть позицию

что-то вроде этого будет нормально

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


 

Просто,

Я хочу знать, как я могу получить: ордер перед последним ордером (open или close)price() для (buy или sell), чтобы добавить их для некоторых вычислений.

Большое спасибо.

 
Нет ответа, просто мне нужно получить ордер перед последним ордером даже для покупки или продажи, даже тот ордер это открытый ордер или закрытый ордер, жду вашей помощи.
 
Hand:
Я хочу знать, как я могу получить: ордер перед последним ордером (open или close)price() для (buy или sell), чтобы добавить их для некоторых вычислений.
Найдите последний ордер, помните, найдите следующий более ранний.
    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
:
 

Спасибо WHRoeder,

За реальную помощь. Если мне нужно получить последний ордер на покупку и последний ордер на продажу, то сравнить их, сделав :

if (last orderopenforbuy == OOTlastest)

{ сделайте что-нибудь }

else

{ } ....... будет ли работать приведенный ниже код.

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