kudinoff
Почетный гражданин
Может быть, не помню где подсмотрел)День добрый!
Это уравнение линейной регрессии через МА - считает шустро и не рисует.
Может быть, не помню где подсмотрел)День добрый!
Это уравнение линейной регрессии через МА - считает шустро и не рисует.
Если это оценка методом Сортино, то, думаю, Игорь ошибочно заложил в него градации оценок по Ван-Тарпу. Я посмотрел как западные инвесторы трактуют Сортино и увидел что значение меньше 2 они оценивают как рисковые.Странно, просадка на 2/3 прироста по балансу, показатели отличные Посмотреть вложение 458085
Тут как раз Тарп.Если это оценка методом Сортино
double expectedPayoff = TesterStatistics(STAT_EXPECTED_PAYOFF);
double one_trade_prof = 0.0;
double sum_squares = 0.0;
int tot_hist_orders = OrdersHistoryTotal();
for (int i = 0; i < tot_hist_orders; i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
if (OrderSymbol() == _Symbol) {
one_trade_prof = OrderProfit() + OrderCommission() + OrderSwap();
sum_squares += MathPow(one_trade_prof - expectedPayoff, 2);
}
}
}
double stdev =0;
double tot_trades = TesterStatistics(STAT_TRADES);
if (tot_trades - 1 == 0) stdev = 0;
else stdev = MathSqrt(sum_squares/(tot_trades - 1));
if (stdev == 0.0) return(0);
return(TesterStatistics(STAT_PROFIT)/ stdev);
enum test {Balance, Equity, Sortino};
extern test Sharp_Ratio = Balance;
double equity[], equitymin[];
void OnTick()
{
//=== БЛОК ЗАПИСИ ЭКВИТИ ДЛЯ СТАТИСТИКИ ================================================================
if (TimeDay(Time[0])!=TimeDay(Time[1]) && (IsTesting() || IsOptimization())) //день закончился? тогда записываем информацию о состоянии счёта на конец дня в массив
{
ArrayResize(equity,ArraySize(equity)+1);
ArrayResize(equitymin,ArraySize(equitymin)+1);
equity[ArraySize(equity)-1] = AccountEquity();
equitymin[ArraySize(equitymin)-1] = AccountEquity();
if(AccountEquity()<equitymin[ArraySize(equitymin)-1]) equitymin[ArraySize(equitymin)-1] = AccountEquity();
}
}
double OnTester()
{
int startSize = 0;
double orders[];
double plus[];
double Sharp;
double depo = TesterStatistics(STAT_INITIAL_DEPOSIT);
double avprofit =0;
// = (TesterStatistics(STAT_GROSS_PROFIT)+TesterStatistics(STAT_GROSS_LOSS))/TesterStatistics(STAT_TRADES)/depo;
double std = 0;
double high = 0;
double low = 0;
double loss = 0;
double profit = 0;
double mae = 0;
double losses = 0, profits = 0;
//---- Учет закрытых ордеров -------------------------------------------------------------------------------------
for(int i=0;i<OrdersHistoryTotal();i++)
{
if(OrderSelect(i, SELECT_BY_POS ,MODE_HISTORY) == false) continue;
if(OrderSelect(i, SELECT_BY_POS ,MODE_HISTORY) == true && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)
if(OrderType()==OP_BUY || OrderType()==OP_SELL)
if(OrderCloseTime() > 0)
{
startSize+=1;
ArrayResize(orders, startSize);
if(Sharp_Ratio == 0)
{
orders[startSize-1] = (OrderProfit()+OrderSwap()+OrderCommission())/depo;
}
}
ArraySetAsSeries(orders,true);
avprofit = iMAOnArray(orders,0,ArraySize(orders)-1,0,0,0);
std = iStdDevOnArray(orders,0,ArraySize(orders)-1,0,0,0);
}
if(Sharp_Ratio == 1)
{
ArrayResize(orders,ArraySize(equitymin));
for(int i = 1; i<ArraySize(equitymin); i++)
{
orders[i] = equitymin[i]/equitymin[i-1]-1;
}
ArraySetAsSeries(orders,true);
avprofit = iMAOnArray(orders,0,ArraySize(orders)-1,0,0,0);
std = iStdDevOnArray(orders,0,ArraySize(orders)-1,0,0,0);
}
if(Sharp_Ratio == 2)
{
ArrayResize(orders,ArraySize(equity));
ArrayResize(plus,ArraySize(equity));
for(int i = 1; i<ArraySize(equity); i++)
{
plus[i] = MathLog10(equity[i]/equity[i-1]);
orders[i] = MathLog10(equitymin[i]/equity[i-1]);
}
ArraySetAsSeries(orders,true);
ArraySetAsSeries(plus,true);
avprofit = iMAOnArray(plus,0,ArraySize(orders)-1,0,0,0);
std = iStdDevOnArray(orders,0,ArraySize(orders)-1,0,0,0);
}
if(std!=0)Sharp = NormalizeDouble(avprofit/std,5);
else Sharp = 0;
Print("Average profit "+DoubleToStr(avprofit*depo,3)+"$ "+DoubleToStr(avprofit*100,3)+"%, StdDev "+DoubleToStr(std*depo,3)+"$ "+DoubleToStr(std*100,3)+"%");
return(Sharp);
}
![]() | Есть убыточные сделки на Форекс?Возместим убытки от торговых операций в любой компании! NPBFX - c нами зарабатывают с 1996 года |
![]() | Перенос счета и открытых ордеров +30% на счетПеренесите открытые ордера в NPBFX от любого брокера и получите 30% на счет или возмещение убытков! |
![]() | Время доверить трейдинг роботам!Настоящее и будущее трейдинга – это робоэдвайзинг! Попробуйте наших лучших роботов бесплатно! |