как я могу получить наибольшую цену после открытия ордера (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") ;}