Прошу помочь с логикой расчетов прироста по дням

 

Здравствуйте

Прошу помочь с логикой расчетов прироста по дням в % от баланса,

только не от текущего а от того который был на тот момент

мозг себе засрал уже до не могу, не соображаю не чего, отдых нужен и недельный запой.

Что у нас есть.

Today=Yesterday=TwoDaysAgo=ThisMonth=LastMonth=Current=0;
TotalProfit(Today,Yesterday,TwoDaysAgo,ThisMonth,LastMonth,Current);

void TotalProfit(double &today,double &yesterday,double &twodaysago,double &thismonth,double &lastmonth,double &current)
  {
   today=yesterday=twodaysago=thismonth=lastmonth=current=0;

   for(int i=0; i<OrdersHistoryTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
        {
         if(OrderSymbol()==Symbol() && (OrderMagicNumber()==MagicNumber || MagicNumber==-1))
           {
            if(OrderCloseTime()>=iTime(Symbol(),PERIOD_D1,0))today+=OrderProfit()+OrderSwap()+OrderCommission();
            if(OrderCloseTime()>=iTime(Symbol(),PERIOD_D1,1)&& OrderCloseTime()<iTime(Symbol(),PERIOD_D1,0))yesterday+=OrderProfit()+OrderSwap()+OrderCommission();
            if(OrderCloseTime()>=iTime(Symbol(),PERIOD_D1,2)&& OrderCloseTime()<iTime(Symbol(),PERIOD_D1,1))twodaysago+=OrderProfit()+OrderSwap()+OrderCommission();
            if(OrderCloseTime()>=iTime(Symbol(),PERIOD_MN1,0))thismonth+=OrderProfit()+OrderSwap()+OrderCommission();
            if(OrderCloseTime()>=iTime(Symbol(),PERIOD_MN1,1)&& OrderCloseTime()<iTime(Symbol(),PERIOD_MN1,0))lastmonth+=OrderProfit()+OrderSwap()+OrderCommission();
            if(OrderCloseTime()>=iTime(Symbol(),PERIOD_MN1,iBars(NULL,PERIOD_MN1)))current+=OrderProfit()+OrderSwap()+OrderCommission();
           }
        }
     }
   return;
  }

Имеем

  1. Прирост в валюте депозита
  2. Сегодня
  3. Вчера
  4. Позавчера
  5. В этом месяце
  6. В прошлом месяце
  7. Прирост

Мне нужно теперь все это дело выразить еще и в % соотношении

Вот эта лабуда которую я захер...л не куда не годится

   double growth = AccountInfoDouble(ACCOUNT_BALANCE) - Current;//.. бред какой-то
   double today_percent = NormalizeDouble(Today*100/AccountInfoDouble(ACCOUNT_BALANCE),2);
   double yesterday_percent = NormalizeDouble(Yesterday*100/AccountInfoDouble(ACCOUNT_BALANCE)-Today,2);
   double twodaysago_percent = NormalizeDouble(TwoDaysAgo*100/AccountInfoDouble(ACCOUNT_BALANCE)-Today-Yesterday,2);
   double current_percent = NormalizeDouble(Current*100/AccountInfoDouble(ACCOUNT_BALANCE),2);

Прошу помочь формулами расчета.

 

Вот эта

double current_percent = NormalizeDouble(Current*100/AccountInfoDouble(ACCOUNT_BALANCE),2);

вроде корректно отображает

 
Vladimir Gribachev:

Здравствуйте

Прошу помочь с логикой расчетов прироста по дням в % от баланса,

только не от текущего а от того который был на тот момент

мозг себе засрал уже до не могу, не соображаю не чего, отдых нужен.

Что у нас есть.

Имеем

  1. Прирост в валюте депозита
  2. Сегодня
  3. Вчера
  4. Позавчера
  5. В этом месяце
  6. В прошлом месяце
  7. Прирост

Мне нужно теперь все это дело выразить еще и в % соотношении

Вот эта лабуда которую я захер...л не куда не годится

Прошу помочь формулами расчета.

// если Current - правильно посчитанный текущий балас, то

today_percents=today/(Current-today)*100;// прибыль полученную за день делим на баланс на начало дня (текущий балас минус указанная прибыль) и всё это в процентах

 
Добрый вечер.
   double yesterday_percent = NormalizeDouble(Yesterday*100/(AccountInfoDouble(ACCOUNT_BALANCE)-Today),2);
   double twodaysago_percent = NormalizeDouble(TwoDaysAgo*100/(AccountInfoDouble(ACCOUNT_BALANCE)-Today-Yesterday),2);

Может так? :)

Если используете фильтр по символу и меджику

if(OrderSymbol()==Symbol() && (OrderMagicNumber()==MagicNumber || MagicNumber==-1))

то будет несостыковочка, AccountInfoDouble(ACCOUNT_BALANCE) даст общий баланс, а Today и тп с учетом фильтра...

 

Где точка отсчета, т.е. значение равно 100%?

Например 6 месяцев назад было 1000$, это 100%.

Допустим в период от 6 до 3 месяцев назад, сумма всех позиций (положительных и отрицательных) равна 150$.

Тогда (150$ * 100% )/ 1000$ = 15 % прирост за 3 месяца.

1000$/100%

150$/x

Берем текущее состояние счета и вычитаем сумму всех позиций (положительных и отрицательных) за N количество дней, получаем точку отсчета равную 100%.

 
Oleksii Chepurnyi:
Добрый вечер.

Может так? :)

Если используете фильтр по символу и меджику

то будет несостыковочка, AccountInfoDouble(ACCOUNT_BALANCE) даст общий баланс, а Today и тп с учетом фильтра...


Попробовал так

double today_percent = NormalizeDouble(Today/(AccountInfoDouble(ACCOUNT_BALANCE)-Today)*100,2);
   double yesterday_percent = NormalizeDouble(Yesterday/(AccountInfoDouble(ACCOUNT_BALANCE)-Yesterday-Today)*100,2);
   double twodaysago_percent = NormalizeDouble(TwoDaysAgo/(AccountInfoDouble(ACCOUNT_BALANCE)-TwoDaysAgo-Yesterday-Today)*100,2);
   double thismonth = NormalizeDouble(ThisMonth/(AccountInfoDouble(ACCOUNT_BALANCE)-ThisMonth)*100,2);
   double lastmonth =  NormalizeDouble(LastMonth/(AccountInfoDouble(ACCOUNT_BALANCE)-ThisMonth-LastMonth)*100,2);
   

вышел бред

27.14% (прошлый месяц) от числа 2826617.68 (баанс) = 767144.04

 
SEM:

Где точка отсчета, т.е. значение равно 100%?

  1. Сегодня =  100% это баланс сегодня
  2. Вчера =  100% это баланс вчера
  3. Позавчера =  100% это баланс позавчера
  4. В этом месяце ..
  5. В прошлом месяце..
  6. Прирост
 
Oleksii Chepurnyi:
Добрый вечер.

Может так? :)

Если используете фильтр по символу и меджику

то будет несостыковочка, AccountInfoDouble(ACCOUNT_BALANCE) даст общий баланс, а Today и тп с учетом фильтра...


Вроде оно

double today_percent = NormalizeDouble(Today*100/(AccountInfoDouble(ACCOUNT_BALANCE)),2);
   double yesterday_percent = NormalizeDouble(Yesterday*100/(AccountInfoDouble(ACCOUNT_BALANCE)-Today),2);
   double twodaysago_percent = NormalizeDouble(TwoDaysAgo*100/(AccountInfoDouble(ACCOUNT_BALANCE)-Today-Yesterday),2);
   double thismonth = NormalizeDouble(ThisMonth*100/(AccountInfoDouble(ACCOUNT_BALANCE)),2);
   double lastmonth =  NormalizeDouble(LastMonth*100/(AccountInfoDouble(ACCOUNT_BALANCE)-ThisMonth),2);

Спасибо

 

Баланс на начало lastmonth 2826618,68 + 1931,48 + 1053869,98 = 3882420,14

Прирост за lastmonth -1053869,98   -1053869,98 / 3882420,14 * 100 = -27,144666 %

По логике формул все нормально.

 
Vladimir Gribachev:
  1. Сегодня =  100% это баланс сегодня
  2. Вчера =  100% это баланс вчера
  3. Позавчера =  100% это баланс позавчера
  4. В этом месяце ..
  5. В прошлом месяце..
  6. Прирост
Хорошо, если вчера это 100% и 1000$, и сегодня это 1150$ то прирост со вчерашнего дня 15%
 

шото меня терзают смутные сомнения. 

щас все пересчитаю