# trying to find profitable weeks on backtest

894

I would like some help trying to find out how many weeks are profitable after a backtest is made, i usually do 20 weeks backtest, I tried to build an array of profits and dates like OnTester documentation article, after that I tried split these results on another week array with no luck, any suggestion will be appreciated.

```//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
input datetime start = 01/01/2019;
input datetime end = 01/01/2020;

double OnTester()
{

//--- get trade results to the array
double array[];
datetime date;
//--- average result per week
int week = 24*7*3600;
double sum_w = 0.0;
int week_prof = 0;

for (i = 0; i< ArraySize(array); i++)
{
for (datetime j = start; j< end; j= j+ week)
if (date < week[j])
sum_w[j] = array[i]++;

}
if (sum_w[j] > 0) week_prof++

return(week_prof);
}

//+------------------------------------------------------------------+
//| Get the array of profits/losses from deals                       |
//+------------------------------------------------------------------+

{
//--- request the complete trading history
if(!HistorySelect(0,TimeCurrent()))
return (false);
uint total_deals=HistoryDealsTotal();
date=start;
//--- set the initial size of the array with a margin - by the number of deals in history
ArrayResize(pl_results,total_deals);
//--- counter of deals that fix the trading result - profit or loss
int counter=0;
ulong ticket_history_deal=0;
//--- go through all deals
for(uint a=0;a<total_deals;a++)
{
//--- select a deal
if((ticket_history_deal=HistoryDealGetTicket(i))>0)
{
ENUM_DEAL_ENTRY deal_entry  =(ENUM_DEAL_ENTRY)HistoryDealGetInteger(ticket_history_deal,DEAL_ENTRY);
long            deal_type   =HistoryDealGetInteger(ticket_history_deal,DEAL_TYPE);
double          deal_profit =HistoryDealGetDouble(ticket_history_deal,DEAL_PROFIT);
datetime          deal_time =(datetime)HistoryDealGetInteger(ticket_history_deal,DEAL_TIME);
//--- we are only interested in trading operations
continue;
//--- only deals that fix profits/losses
if(deal_entry!=DEAL_ENTRY_IN)
{
//--- write the trading result to the array and increase the counter of deals
pl_results[counter]=deal_profit;
date+=deal_time;
counter++;
}
}
}
//--- set the final size of the array
ArrayResize(pl_results,counter);
return (true);
}
```
Testing trading strategies on real ticks
• www.mql5.com
The article provides the results of testing a simple trading strategy in three modes: "1 minute OHLC" using only Open, High, Low and Close prices of minute bars; detailed modeling in "Every tick" mode, as well as the most accurate "Every tick based on real ticks" mode applying actual historical data. Comparing the results allows us to assess...
3530

You cannot add values to a dimensionless array. You passed a dimensionless array into your function, but you set the size -after- putting all the items into it.

(1) The expedient way to do this is to statically fix array to a large enough size ahead of time.

`double array[1000];     // size to a large enough value`

(2) Another way is to call ArrayResize(pl_results, counter + 1) before each time you add the next deal_profit value. The downside of this is you could run into performance issues for large numbers. You can run the Profiler to see if that matters to you. You could always improve the performance by allocating blocks instead of singles ahead of time.

(3) A third way is to use dynamic arrays. See CArrayDouble for more information.