Как правильно рассчитать профит совокупной позиции в пунктах для кроссов? - страница 2

 
Renat Akhtyamov:

дядька, не дерзи мне

я тока что тут написал и сам же исправил

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

"т.е., наверно, вычислять произведения (пункты x объём)"

все отклонения от темы, это не более чем полет фантазии

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Как правильно рассчитать профит совокупной позиции в пунктах для кроссов?

Vitaly Muzichenko, 2019.01.24 21:10

Возьмите рассчитайте общий безубыток, и к нему прибавьте N-пунктов. Как рассчитать точку безубытка для совокупной позиции - Вы знаете.

P.S. Ответил так, как понял задачу

 
Зачем всегда код? Я внучке объясняю: покажи, как ты будешь решать задачу и я уйду, мне решение не нужно. 
 
Vitaly Muzichenko:

Может и вычислять произведения.

Я дал код безубытка, и к цене безубытка добавить N-пунктов для решения

Ты знаешь, что для мажоров и кроссов расчёты отличаются? Мне MQL5 не надо, я в нём не разбираюсь.

 
khorosh:

Ты знаешь, что для мажоров и кроссов расчёты отличаются? Мне MQL5 не надо, я в нём не разбираюсь.

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

Единственное - учитывать своп и комиссии надо?

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

double calcPointProfit(string Symb)//входной параметр функции - наименование символа, например "GBPCAD"

 {  

  double profitOnPoint = 0;

  

  for(int i=OrdersTotal()-1; i>=0; i--)

     {

      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symb) profitOnPoint= profitOnPoint +(OrderProfit()+OrderCommission()+OrderSwap())/ MarketInfo(Symb, MODE_TICKVALUE);

     }

  return(profitOnPoint);

 }


 
Renat Akhtyamov:

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

Единственное - учитывать своп и комиссии надо?

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

double calcPointProfit(string Symb)//входной параметр функции - наименование символа, например "GBPCAD"

 {  

  double profitOnPoint = 0;

  

  for(int i=OrdersTotal()-1; i>=0; i--)

     {

      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol() == Symb) profitOnPoint= profitOnPoint +(OrderProfit()+OrderCommission()+OrderSwap())/ MarketInfo(Symb, MODE_TICKVALUE);

     }

  return(profitOnPoint);

 }


Да, если MarketInfo(Symb, MODE_TICKVALUE) работает правильно, код для мажоров и кроссов вроде бы унифицируется. Сейчас вношу изменения в эксперте, проверю в тесте. Код безубытка нашёл на форуме.

 
khorosh:

Да, если MarketInfo(Symb, MODE_TICKVALUE) работает правильно, код для мажоров и кроссов вроде бы унифицируется. Сейчас вношу изменения в эксперте, проверю в тесте. Код безубытка нашёл на форуме.

Если нужен безубыток, то проще всего сдвинуть стоплосс на профит в пунктах +/- спред, ведь он уже посчитан функцией выше
 
Renat Akhtyamov:
Если нужен безубыток, то проще всего сдвинуть стоплосс на профит в пунктах +/- спред, ведь он уже посчитан функцией выше

Там, чтобы получить профит в пунктах надо кроме TickValue ещё на объём делить. Я уже нашёл на форуме функцию расчёта цены безубытка. Функция более универсальная, может ещё где пригодится.

Спасибо всем за участие. Пока вопрос закрыт, тестирование покажет правильность расчётов.

 
khorosh:

Там, чтобы получить профит в пунктах надо кроме TickValue ещё на объём делить. Я уже нашёл на форуме функцию расчёта цены безубытка. Функция более универсальная, может ещё где пригодится.

Спасибо всем за участие. Пока вопрос закрыт, тестирование покажет правильность расчётов.

посчитан профит в деньгах сначала, он уже с учетом объема идет

поэтому не нужно делить на объем

но в целом идея расчета безубытка весьма и весьма хороша
 
Renat Akhtyamov:

посчитан профит в деньгах сначала, он уже с учетом объема идет

поэтому не нужно делить на объем

Возможно, проверю на практике. Хотя вроде бы надо. Ведь прибыль в валюте зависит не только от пунктов, но и от объёма.

 
khorosh:

Возможно, проверю на практике. Хотя вроде бы надо. Ведь прибыль в валюте зависит не только от пунктов, но и от объёма.

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

double ProfitOnPoint(string Symbl)//входной параметр функции - наименование символа, например "GBPCAD"
{
   double prt=0,lt=0;
   for(int i=OrdersTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES) && OrderSymbol()==Symbl && OrderType()<2)
      {
         prt=prt+OrderProfit()+OrderCommission()+OrderSwap();
         lt=lt+OrderLots();
      }
   }
   if(lt!=0) return(prt/(lt*MarketInfo(Symbl,MODE_TICKVALUE)));
   else return(0);
}
Причина обращения: