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

 

((сумма всех позиций (положительных и отрицательных) за N период) * 100%) / (текущий баланс - (сумма всех позиций (положительных и отрицательных) за N период))

Получаем прирост за N период

 
кстати, незабудьте пополнения/снятия учесть, а то лёгкое движение рукой и получается грааль с 1000% прибыли
 
SEM:

((сумма всех позиций (положительных и отрицательных) за N период) * 100%) / (текущий баланс - (сумма всех позиций (положительных и отрицательных) за N период))

Получаем прирост за N период

double growth_percent = NormalizeDouble(Growth*100/(AccountInfoDouble(ACCOUNT_BALANCE)-Growth),2);

так?

Тоже бредятина выходит


 
Maxim Kuznetsov:
кстати, незабудьте пополнения/снятия учесть, а то лёгкое движение рукой и получается грааль с 1000% прибыли

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

 

Есть еще идеи?

Выводимая инфа не верна

 
Vladimir Gribachev:

так?

Тоже бредятина выходит


Чему равен  Growth? А по первому посту это фактически баланс , а должно быть - сумма всех позиций (положительных и отрицательных) за N период)
double growth = AccountInfoDouble(ACCOUNT_BALANCE) - Current;//.. бред какой-то
 
SEM:
Чему равен  Growth? А по первому посту это фактически баланс , а должно быть - сумма всех позиций (положительных и отрицательных) за N период)

Убрал из кода проверку на магик и символ чтобы эту функцию закончить

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

void TotalProfit(double &today,double &yesterday,double &twodaysago,double &thismonth,double &lastmonth,double &growth)
  {
   today=yesterday=twodaysago=thismonth=lastmonth=growth=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)))growth+=OrderProfit()+OrderSwap()+OrderCommission();
           //}
        }
     }
   return;
  }

Growth = суме всех позиций

Growth - Прирост в $, себя правильно отрабатывает

а по процентам уже бредятина

 

HistorySelect

Запрашивает историю сделок и ордеров за указанный период серверного времени.

bool  HistorySelect(
   datetime  from_date,     // с даты
   datetime  to_date        // по дату
   );



HistoryOrdersTotal = Возвращает количество ордеров в истории.

Т.е. вся история с момента открытия счета

 
SEM:

HistorySelect

Запрашивает историю сделок и ордеров за указанный период серверного времени.

bool  HistorySelect(
   datetime  from_date,     // с даты
   datetime  to_date        // по дату
   );



HistoryOrdersTotal = Возвращает количество ордеров в истории.

Т.е. вся история с момента открытия счета


HistorySelect

где в 4ке такая функция?

и чем она поможет.

Прирост в $ мы получаем верный

Есть по дням, месяцу, могу по неделе сделать

Нужно это все выразить в %

 
Vladimir Gribachev:

HistorySelect

где в 4ке такая функция?

и чем она поможет.

Прирост в $ мы получаем верный

Есть по дням, месяцу, могу по неделе сделать

Нужно это все выразить в %

Я думал MQL5, тогда возможно нужно проверить настройки отображения истории, это критично для MQL4:

Возвращает количество закрытых и удаленных ордеров в истории текущего счета, загруженной в клиентском терминале.

int  OrdersHistoryTotal();

Возвращаемое значение

Количество закрытых и удаленных ордеров в истории текущего счета, загруженной в клиентском терминале. Размер списка истории зависит от текущих настроек вкладки "История счета" терминала.