мт4..Как Ордера????

 

 доброго времени суток!.. помогите.. Как найти цену первого и последнего ордеров???  допустим открыто 5 бай ордеров..

как найти цену первого бай ордера и последнего пятого бай ордера?? 

 
Dream11:

 доброго времени суток!.. помогите.. Как найти цену первого и последнего ордеров???  допустим открыто 5 бай ордеров..

как найти цену первого бай ордера и последнего пятого бай ордера?? 

Цену чего? Открытия ордера? 

 
Alexandr Saprykin:

Цену чего? Открытия ордера? 

да
 
Dream11:

 доброго времени суток!.. помогите.. Как найти цену первого и последнего ордеров???  допустим открыто 5 бай ордеров..

как найти цену первого бай ордера и последнего пятого бай ордера?? 

Как-то так:

int Magic = -1; // Любой

void OnTick()
 {
// ---- Comment
   Comment("Min BUY = ",        MinPriceOpen(OP_BUY, Magic),        // Min
           "\nMax BUY = ",      MaxPriceOpen(OP_BUY, Magic),        // Max
           "\nMin SELL = ",     MinPriceOpen(OP_SELL, Magic),       // Min
           "\nMax SELL = ",     MaxPriceOpen(OP_SELL, Magic),       // Max
           "\nMin BUYSTOP = ",  MinPriceOpen(OP_BUYSTOP, Magic),    // Min
           "\nMax BUYSTOP = ",  MaxPriceOpen(OP_BUYSTOP, Magic),    // Max
           "\nMin SELLLIMIT = ",MinPriceOpen(OP_SELLLIMIT, Magic),  // Min
           "\nMax SELLLIMIT = ",MaxPriceOpen(OP_SELLLIMIT, Magic)   // Max
          );
//- end
 }

//===============================================================================================
//----------------------- Возвращает минимальную цену позиции или ордера -----------------------+
//===============================================================================================
double MinPriceOpen(int type=-1, int mg=-1) {
 double m=0;
  for(int i=0; i<OrdersTotal(); i++) {
   if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==_Symbol && OrderType()==type &&(mg<0||OrderMagicNumber()==mg)) {
     if(m==0 || m>OrderOpenPrice()) {
       m=OrderOpenPrice();
  }}}}
  return(m);
 }
//===============================================================================================
//----------------------- Возвращает максимальную цену позиции или ордера ----------------------+
//===============================================================================================
double MaxPriceOpen(int type=-1, int mg=-1) {
 double m=0;
  for(int i=0; i<OrdersTotal(); i++) {
   if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==_Symbol && OrderType()==type &&(mg<0||OrderMagicNumber()==mg)) {
      if(m<OrderOpenPrice()) {
        m=OrderOpenPrice();
  }}}}
  return(m);
 }
 
Vitaly Muzichenko:

Как-то так:

А что за тип ордера такой -1 ?

if(OrderSymbol()==_Symbol && OrderType()==type &&(mg<0||OrderMagicNumber()==mg))
 
Vitaly Muzichenko:

Как-то так:

Товарищ просил цены первого и последнего ордера, а не мин/макс цены. )

 
Dream11:

 доброго времени суток!.. помогите.. Как найти цену первого и последнего ордеров???  допустим открыто 5 бай ордеров..

как найти цену первого бай ордера и последнего пятого бай ордера?? 

// первый ордер
double fFirstOrderPrice = 0;

if(OrderSelect(0, SELECT_BY_POS) == true)
   fFirstOrderPrice = OrderOpenPrice();

// последний ордер
double fLastOrderPrice = 0;

if(OrderSelect(OrdersTotal() - 1, SELECT_BY_POS) == true)
   fLastOrderPrice = OrderOpenPrice();

 Это основа, принцип. Для законченного кода ещё нужно делать проверки на символ, тип и мэджик, это сами.

 
Artyom Trishkin:

А что за тип ордера такой -1 ?

Тип: =-1, да фиг знает, не стал писать "0" или селл, вписал чтоб было "ничего". По сути многие функции можно вызвать по умолчанию: MaxPriceOpen( ); и в этой вернёт "0"
Sergei Vladimirov:

Товарищ просил цены первого и последнего ордера, а не мин/макс цены. )

Дело было ночью, видать плохо понял задачу, но зато ТС будет обладать кодом поиска макс/мин цены - в хозяйстве пригодится )
 
Vitaly Muzichenko:
Тип: =-1, да фиг знает, не стал писать "0" или селл, вписал чтоб было "ничего". По сути многие функции можно вызвать по умолчанию: MaxPriceOpen( ); и в этой вернёт "0"Дело было ночью, видать плохо понял задачу, но зато ТС будет обладать кодом поиска макс/мин цены - в хозяйстве пригодится )
Как так можно подходить к созданию программ, работающих с деньгами?
 

Вот та, что нужна - первого и последнего.

int Magic = -1; // Любой

void OnTick()
 {
// ---- Comment
   Comment("Первый BUY = ",        FirstPriceOpen(OP_BUY, Magic),        // First
           "\nПоследний BUY = ",      LastPriceOpen(OP_BUY, Magic),      // Last
           "\nПервый SELL = ",     FirstPriceOpen(OP_SELL, Magic),       // First
           "\nПоследний SELL = ",     LastPriceOpen(OP_SELL, Magic),     // Last
           "\nПервый BUYSTOP = ",  FirstPriceOpen(OP_BUYSTOP, Magic),    // First
           "\nПоследний BUYSTOP = ",  LastPriceOpen(OP_BUYSTOP, Magic),  // Last
           "\nПервый SELLLIMIT = ",FirstPriceOpen(OP_SELLLIMIT, Magic),  // First
           "\nПоследний SELLLIMIT = ",LastPriceOpen(OP_SELLLIMIT, Magic) // Last
          );
//- end
 }
//===============================================================================================
//------------------------- Возвращает цену первой позиции или ордера --------------------------+
//===============================================================================================
double FirstPriceOpen(int type=-1, int mg=-1) {
 datetime m=0;
 double p=0;
  for(int i=0; i<OrdersTotal(); i++) {
   if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==_Symbol && OrderType()==type &&(mg<0||OrderMagicNumber()==mg)) {
     if(m==0 || m>OrderOpenTime()) {
       m=OrderOpenTime();
       p=OrderOpenPrice();
  }}}}
  return(p);
 }
//===============================================================================================
//------------------------ Возвращает цену последней позиции или ордера ------------------------+
//===============================================================================================
double LastPriceOpen(int type=-1, int mg=-1) {
 datetime m=0;
 double p=0;
  for(int i=0; i<OrdersTotal(); i++) {
   if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
    if(OrderSymbol()==_Symbol && OrderType()==type &&(mg<0||OrderMagicNumber()==mg)) {
      if(m<OrderOpenTime()) {
        m=OrderOpenTime();
        p=OrderOpenPrice();
  }}}}
  return(p);
 }

 

Artyom Trishkin:
Как так можно подходить к созданию программ, работающих с деньгами?

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

Функция написана правильно, а вот входные параметры на совести пользователя функции.

Вы когда покупаете в магазине лампу на 12В, вы же её не сунете в патрон где 220В, потому как это опасно для здоровья, стёклами может глаза ранить, хотя стандарты патронов одинаковы. Используете по назначению, вот и тут нужно использовать по назначению, то есть ввести нужные параметры, а не по умолчанию. Поэтому и поставил =-1, чтоб не использовалась по умолчанию. Это так сказать "страховка от дурака", потому как действительно, программа работает с деньгами, и косяки нужно предостерегать. 

Причина обращения: