Скачать MetaTrader 5

Как подсчитать ожидаемую прибыль?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Murad Ismayilov
1810
Murad Ismayilov  

Есть цена открытия, TP и вся информация о символе. Хотелось бы подсчитать ожидаемую прибыль в валюте депозита (если ордер закроется по TP). Есть формула?

Заранее спасибо.

Alexey Viktorov
8097
Alexey Viktorov  
MODE_TICKVALUE тебе в помощь.
Vitalie Postolache
12271
Vitalie Postolache  
считать можно только выведенную прибыль, всё остеальное - ванильные мечты ;)
Mislaid
617
Mislaid  

Я считаю в USD, потом можно пересчитать в другую валюту депозита. 

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

// Исходные данные:
// Pair - символ инструмента, 6 символов
   FirstSymbol  = StringSubstr( Pair, 0, 3); // первый
   SecondSymbol = StringSubstr( Pair, 3, 3); // и второй символы валютной пары
// размер лота 100000 FirstSymbol  валюты
// для одного лота результат выражается формулой (без свопов и комиссий)
// profit = 1000 * r * ( ЦенаЗакрытия - ЦенаОткрытия )
// r пропорционально значению MarketInfo с идентификатором запроса MODE_TICKVALUE 
// по некой валютной паре. Но, я предпочитаю считать сам, поскольку MarketInfo 
// не дает значения TickValue на истории
// существует 3 варианта расчета r
// SymbolList - список валютных пар
   string SymbolList = "EURUSD GBPUSD AUDUSD EURGBP USDJPY EURJPY GBPJPY AUDJPY CHFJPY CADJPY EURAUD GBPAUD USDCHF EURCHF GBPCHF AUDCHF CADCHF USDCAD EURCAD GBPCAD AUDCAD NZDUSD EURNZD GBPNZD NZDJPY AUDNZD NZDCHF NZDCAD ";

   // variant = 1
   // EURUSD, GBPUSD, AUDUSD, NZDUSD
   if ( SecondSymbol == "USD" ) variant = 1;
   else
   {
      // variant = 2
      // USDJPY, USDCHF, USDCAD, EURJPY, GBPJPY, AUDJPY, EURCHF, GBPCHF,
      // AUDCHF, EURCAD, GBPCAD, AUDCAD, NZDJPY, NZDCHF, NZDCAD
      if ( StringFind( SymbolList, "USD" + SecondSymbol ) >= 0 ) variant = 2;
      else // StringFind( SymbolList, SecondSymbol + "USD" ) >= 0
      {
         // variant = 3;
         // EURGBP, EURAUD, GBPAUD, EURNZD, AUDNZD, GBPNZD
         variant = 3;
      }
   }
// теперь считаем r
// функция LastKnownPrice(  string symbol, datetime ctime )
// возвращает последнее известное значение Bid по инструменту symbol, 
// на момент времени ctime 
   r = 1.0;
   switch( variant )
   {
// в первом варианте r  константа и мы можем точно вычислить результат в будущем
      case 1:
         break;
// во втором и третьем варианте мы можем точно вычислить результат, если будущая
// цена известна. Т.е., если мы работаем на истории, всегда можем сосчитать результат
// с точностью до свопов
// Поэтому, если нам нужно оценить будущий результат, мы должны будем взять последнюю
// известную цену на нулевом баре 
      case 2:
         r = LastKnownPrice( "USD" + SecondSymbol, ctime);
         r = 1.0 / r;
         break;
      case 3:
         r = LastKnownPrice( SecondSymbol + "USD", ctime);
         break;
     default:
         break;         
   }
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий