[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 898

 
Dimka-novitsek:
Та же ситуация.
выложи код
 
arvis:
Kак в МТ4 задать чтобы индикатор считал прибыль в пунктах с определенного времени?

если Вы хотите от времени, то вот так будет при закрытии цены, ну а если Вы хотите от 21:00 считала пункты, то это нужно играться со временем и там ни чего сложного нет.

 double Profit; // или double Profit = 0;

 int start {

 double PrevCl

 double CurrCl

PrevCl = iClose(Symbol(), 0, 2);
CurrCl = iClose(Symbol(), 0, 1);

if (PrevCl > CurrCl){ 

if (Ask > signal) {

 Profit = (Ask - signal);

return (Profit); 

} 

 if (Bid < signal) {

 Profit = (signal - Bid);

return (Profit); 

    }
  } 
}
 

подскажите как сделать правильней следующий код :

double LastOpenOrder() {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0;
   int l_ticket_20 = 0;
   for (int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--) {
      OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_SELL) {
         l_ticket_24 = OrderTicket();
         if (l_ticket_24 > l_ticket_20) {
            l_ord_open_price_8 = OrderOpenPrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}

что бы я мог сделать вот так:

if (LastOpenOrder - Bid >= 25 * Point) CloseOrder;

То есть закрытие только этого последнего открытого ордера, другие не трогать!

Заранее благодарен.

 

Как правильно записать в советнике и получить в нём результат индикатора?

double ROC = iCustom(NULL,0,"ROC",12,0,0); - данные не выводит.

double ROC = iCustom(NULL,0,"ROC",12,0,0,0); - данные не выводит.

double ROC = iCustom(NULL,0,"ROC",12,0,0,0,0); - данные не выводит.

Индикатор: https://www.mql5.com/ru/code/9340

 
DhP:

Как правильно записать в советнике и получить в нём результат индикатора?

double ROC = iCustom(NULL,0,"ROC",12,0,0); - данные не выводит.

double ROC = iCustom(NULL,0,"ROC",12,0,0,0); - данные не выводит.

double ROC = iCustom(NULL,0,"ROC",12,0,0,0,0); - данные не выводит.

Индикатор: https://www.mql5.com/ru/code/9340

правильней будет вот так:

double ROC = iCustom(NULL,0,"ROC",0,0);

но я не могу понять, что вы будете дальше с ним делать. ну может мне и не нужно понимать )

 
belck:

если Вы хотите от времени, то вот так будет при закрытии цены, ну а если Вы хотите от 21:00 считала пункты, то это нужно играться со временем и там ни чего сложного нет.


Спасибо за помощь, belck

Скажите, а как пощитать ту же сумму прибыли в пунктах, если торговля ведется по нескольким парам? К тому же еще надо учитывать и закрытые сделки. 

 
arvis:


Спасибо за помощь, belck.

Скажите, а как пощитать ту же сумму прибыли в пунктах, если торговля ведется по нескольким парам? К тому же еще надо учитывать и закрытые сделки.

Мне сложно ответить на данный вопрос.

Но могу сказать одно, что это все нужно вызывать. если вы вызываете например закрытие последней свечи

 int start {

 double PrevCl

 double CurrCl

PrevCl = iClose(Symbol(), 0, 2); // то тут указываете какая валютная пара и по желанию период : PrevCl = iClose("EURUSD", PERIOD_H1, 2);
CurrCl = iClose(Symbol(), 0, 1); // тут так же

if (PrevCl > CurrCl){ 

if (Ask > signal) {

 Profit = (Ask - signal);

return (Profit); 

} 

 if (Bid < signal) {

 Profit = (signal - Bid);

return (Profit); 

    }
  } 
}

цена последнего открытого ордера вызывается вот таким образом:

double LastOpenOrder() {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0;
   int l_ticket_20 = 0;
   for (int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--) {
      OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_SELL) {
         l_ticket_24 = OrderTicket();
         if (l_ticket_24 > l_ticket_20) {
            l_ord_open_price_8 = OrderOpenPrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}
 
Все более - менее понятно. Большое спасибо за потраченое время, belck .
 
arvis:


Спасибо за помощь, belck.

Скажите, а как пощитать ту же сумму прибыли в пунктах, если торговля ведется по нескольким парам? К тому же еще надо учитывать и закрытые сделки.

К стати мне тоже очень интересно, как считать правильней. а то я уже начал делать вот так, но понимаю что и начал запутываться:

double LastOpenPriceCloseOrder() {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0;
   int l_ticket_20 = 0;
   for (int l_pos_16 = OrdersHistoryTotal( )  - 1; l_pos_16 >= 0; l_pos_16--) {
      OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_BUY) {
         l_ticket_24 = OrderTicket();
         if (l_ticket_24 > l_ticket_20) {
            l_ord_open_price_8 = OrderOpenPrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}

и

double LastClosePriceCloseOrder() {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0;
   int l_ticket_20 = 0;
   for (int l_pos_16 = OrdersHistoryTotal( )  - 1; l_pos_16 >= 0; l_pos_16--) {
      OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == OP_BUY) {
         l_ticket_24 = OrderTicket();
         if (l_ticket_24 > l_ticket_20) {
            l_ord_open_price_8 = OrderClosePrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}
 

Я вот по каким критериям захожу в тупик:

- а если было больше одного ордера закрыто, то надо посчитать их общее количество прибыльных пунктов, а надо считать именно пункты.

и подскажите как правильней поступить в данном коде:

LastBuyPrice = FindLastBuyPrice();     

if (Ask - LastBuyPrice >= 25 * Point) {
      for (int l_pos_16 = OrdersTotal()  - 1; l_pos_16 >= 0; l_pos_16--) {
 OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumberBuy) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumberBuy && OrderType() == OP_BUY) {
         CloseThisSymbolAll();
         Print("Closed All due to Stop Out");
         }
       }
     }


double FindLastBuyPrice() {
   double l_ord_open_price_8;
   int l_ticket_24;
   double ld_unused_0 = 0;
   int l_ticket_20 = 0;
   for (int l_pos_16 = OrdersTotal() - 1; l_pos_16 >= 0; l_pos_16--) {
      OrderSelect(l_pos_16, SELECT_BY_POS, MODE_TRADES);
      if (OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumberBuy) continue;
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumberBuy && OrderType() == OP_BUY) {
         l_ticket_24 = OrderTicket();
         if (l_ticket_24 > l_ticket_20) {
            l_ord_open_price_8 = OrderOpenPrice();
            ld_unused_0 = l_ord_open_price_8;
            l_ticket_20 = l_ticket_24;
         }
      }
   }
   return (l_ord_open_price_8);
}
Причина обращения: