MQL Преобразование формулы - страница 3

 
prostotrader #:

Нет

результат 

А должно быть от 25 до 35

Хм, чуть позже гляну с числами...

Может где-то double к int приводится.

 
Andrey Miguzov #:

Хм, чуть позже гляну с числами...

Может где-то double к int приводится.

Ок, спасибо

p_data.exp_day = 93

#define YEAR 365

p_data.fut_buy = 62200;

p_data.spot_sell = 56.58

input double CbIno = 1.0; // Ставка иностранного банка

 
Andrey Miguzov #:

Дальше там уже и компилятор справится :)

Останется одна pow и будет гораздо нагляднее

(1.0+rdoll)*pow(double(F)/E0,1.0/T)-1.0;
 
Maxim Kuznetsov #:

главное - правильно задать вопрос :-)

Только не х, а r нужно определить

Саму формулу я написал, а вот как быть с корнем?


 
prostotrader #:

Только не х, а r нужно определить

Саму формулу я написал, а вот как быть с корнем?


 

и это:

Aleksey Nikolayev #:

Останется одна pow и будет гораздо нагляднее

(1.0+rdoll)*pow(double(F)/E0,1.0/T)-1.0;
одно и то же
 
prostotrader #:

как быть с корнем?


pow(x, 1.0/T) для корня не подходит по религиозным соображениям?

 
Andrey Miguzov #:

 одно и то же

Ну да

 
prostotrader #:

Ок, спасибо

p_data.exp_day = 93

#define YEAR 365

p_data.fut_buy = 62200;

p_data.spot_sell = 56.58

input double CbIno = 1.0; // Ставка иностранного банка

struct Test
  {
   double            fut_buy;
   double            fut_contr_size;
   double            exp_day;
   double            spot_sell;
  };

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   Test p_data;

   p_data.fut_buy=62200.0;
   p_data.fut_contr_size=1000.0;
   p_data.exp_day = 93.0;
   p_data.spot_sell = 56.58;

   double CbIno=1.0; //в процентах
   double YEAR=365.0;

//считаем в долях единицы
   double Cb_RF =(1.0+CbIno/100.0)*MathPow((p_data.fut_buy/p_data.fut_contr_size)/p_data.spot_sell,1.0/(p_data.exp_day/YEAR))-1.0;

//переводим в %
   double r_rub = Cb_RF*100.0;

   Print(DoubleToString(r_rub,2));
  }
//+------------------------------------------------------------------+

Результат

46.47
 
Andrey Miguzov #:

Результат

Чудеса.

Скопировал формулу

double Cb_RF =(1.0+CbIno/100.0)*MathPow((p_data.fut_buy/p_data.fut_contr_size)/p_data.spot_sell,1.0/(p_data.exp_day/YEAR))-1.0;
  Print("Cb_RF = ", Cb_RF * 100.0);

Результат

2022.06.14 20:36:42.888 1_sp_test (Si-9.22,M1)  Cb_RF = 9.50000000000002


Добавлено

Спасибо, разобрался

 
Andrey Miguzov #:

Результат

46,47 это годовой процент без учета вложений и комиссий!

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