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

 
Начните учиться кодировать и перестаньте набивать свою тему.
 

Просто мне нужна небольшая помощь, тогда все будет хорошо. (Мне нужно знать последний ордер на покупку, последний ордер на продажу и предыдущий ордер на покупку или продажу).

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

int LastOpenTicketForBuy(){
    datetime lastTime  = 0;
    int      lastTicket = -1; // None open.
    int magi.number=0;
    //for(int pos=0; pos<OrdersTotal(); i++) {
      OrderSelect(pos, SELECT_BY_POS);
    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.
    &&  OrderOpenTime()     >  lastTime
    && OrderType()==OP_BUY
    ){
      lastTime   = OrderOpenTime();
      lastTicket = OrderTicket();
    }
    return(lastTicket);
}

int LastOpenTicketForSell(){
    datetime lastTime  = 0;
    int      lastTicket = -1; // None open.
    int magi.number=0;
    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.
    &&  OrderOpenTime()     >  lastTime
    && OrderType()==OP_SELL
    ){
      lastTime   = OrderOpenTime();
      lastTicket = OrderTicket();
    }
    return(lastTicket);
}

int previousorderforbuy(){
    datetime lastTime  = 0;
    int      lastTicket = -1; // None open.
    int magi.number=0;
    for(int 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.
    &&  OrderOpenTime()     >  lastTime
    && OrderType()==OP_BUY
    ){
      lastTime   = OrderOpenTime();
      lastTicket = OrderTicket();
    }
    return(lastTicket);
}

int previousorderforsell(){
    datetime lastTime  = 0;
    int      lastTicket = -1; // None open.
    int magi.number=0;
    for(int 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.
    &&  OrderOpenTime()     >  lastTime
    && OrderType()==OP_SELL
    ){
      lastTime   = OrderOpenTime();
      lastTicket = OrderTicket();
    }
    return(lastTicket);
}
 

ребята,

не могли бы вы взглянуть и сказать мне, что не так.


Мне нужно создать несколько функций для:
1- функция для получения и сохранения цены открытия последнего ордера на покупку.
2- функция для получения и хранения цены открытия последнего ордера на продажу.
3- функция для получения и хранения последнего закрытого ордера на покупку или продажу.

int LastOpenTicketForBuy(){ datetime lastTime = 0 ; int lastTicket = - 1 ; // None open. 
int magi.number= 0 ;
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.
&& OrderType ()==OP_BUY )
{ lastTime = OrderOpenTime ();
lastTicket = OrderTicket (); }
return (lastTicket);}

int LastOpenTicketForSell()
{ datetime lastTime = 0 ; int lastTicket = - 1 ; // None open.

int magi.number= 0 ;
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.
&& OrderType ()==OP_SELL )
{ lastTime = OrderOpenTime (); 

lastTicket = OrderTicket (); }
return (lastTicket);}

int lastcloseorder()
{ datetime lastTime = 0 ; int lastTicket = - 1 ; // None open. 
int magi.number= 0 ; 
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.
&& OrderCloseTime () > lastTime
&& OrderType ()==OP_BUY||OP_SELL )
{ lastTime = OrderCloseTime (); lastTicket = OrderTicket (); }
return (lastTicket);}




затем я поставлю, если ((LastOpenTicketForBuy()+LastOpenTi cketForSell())/2)<MarketInfo("EURUSD",MODE_BID)Clo se t the position

 
По вашему мнению ... что делает return (lastTicket);?
 

Вы имеете в виду, что я должен

1- поставить double LastOpenForBuy() вместо int

2-поставить double orderforbuy затем return( orderforbuy )

таким образом я смогу получить последний ордер, открытый только для покупки.

double LastOpenForBuy(){ datetime lastTime = 0 ; int lastTicket = - 1 ; // None open. 
int magi.number= 0 ; double orderforbuy;
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.
&& OrderType ()==OP_BUY )
{ orderforbuy = OrderOpenprice ();
lastTicket = OrderTicket (); }
return (orderforbuy);}

 
Hand:

Вы имеете в виду, что я должен

Это вопрос... Я не имею в виду ничего другого, кроме ... каков ваш ответ?

Если вы хотите, чтобы я помог, вы должны ответить на мой вопрос ... и "Я не знаю" не является приемлемым ответом. Подумайте об этом немного.

 

Как вы считаете... что делает return(lastTicket); ?

Возвращает номер билета для текущего выбранного заказа.

 
Hand:

Спасибо WHRoeder,

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

if (last orderopenforbuy == OOTlastest)

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

else

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

действительно ли это работает????

первая петля

for(int pos = OrdersTotal()-1; pos >= 0 ; pos--) if (

переходит во второй

 for(pos--; pos >= 0 ; pos--) if (

pos декрементируется до нуля. второй цикл заканчивается --> переходит обратно в первый, а первый цикл не знает, куда делся pos с прошлого раза. есть шанс, что pos = нулю.

 

этот код может работать... просто нужно изменить одну вещь:

второй оператор for

for(pos--; pos >= 0 ; pos--) if (

на другой итератор, например

for(int a=pos--; a>=0 ; a--) if(// abort the use of pos again and introduce a new iterator, a

и аналогичным образом заменить pos на новый итератор (в данном случае a) во всей логике второго цикла ТОЛЬКО.

 
Hand:

По вашему мнению... что делает return(lastTicket); ?

Возвращает номер билета для текущего выбранного ордера.

Вы сказали ...

"Мне нужно создать несколько функций для:
1- функция для получения и сохранения цены открытия последнего ордера на покупку.
2- функция для получения и сохранения цены открытия последнего ордера на продажу.

3- функция для получения и сохранения последнего закрытого ордера, будь то покупка или продажа ".

Так почему вы возвращаете номер билета? Прочитайте код, который вы копируете и вставляете, поймите его, научитесь...