Discussion of article "Exploring Seasonal Patterns of Financial Time Series with Boxplot" - page 15

 
Maxim Dmitrievsky:

You want my approval? You could post it if you wanted to, with a note saying, "This is where we need to investigate."

Sometimes it's annoying to put it out there in a way that's your responsibility. I'm willing to delegate.

 
fxsaber:

Sometimes it's annoying to put it out there that you're not responsible. I'm willing to delegate.

Drop it to me, you won't have to delegate.

just not to Ukrainian boorish overbidders.

 
Maxim Dmitrievsky:

Drop me a line, I won't have to delegate.

I have a vested interest, so only in public with a commitment to research in public.

 
fxsaber:

I have a vested interest, so only in public with a commitment to research in public.

Go ahead, I'll research my own bot.

 
Maxim Dmitrievsky:

Go ahead.

Will you do it?

 
fxsaber:

You'll do it?

I'll do it, as long as it's free research.

 
Maxim Dmitrievsky:

I'll take it, since it's a free-for-all study

Advisor

// https://www.mql5.com/en/articles/7038

#include <MT4Orders.mqh> // https://www.mql5.com/en/code/16006

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

input int inPeriod = 25; // Mashka period
input int inLow = -2;    // Lower boundary of the difference between the price and the MAP - entry
input int inHigh = 0;    // The upper limit of the difference between the price and the MAP is the output

const int hnd = iMA(NULL, 0, inPeriod, 0, MODE_SMA, PRICE_CLOSE); // https://www.mql5.com/ru/forum/170952/page152#comment_14131263

const double dLow = inLow * _Point;
const double dHigh = inHigh * _Point;

double maArr[], prArr[];

input int inStartHour = 0;
input int inCountHours = 23;

const int EndHour = inStartHour + inCountHours;

bool SystemON()
{
  int CurrentHour = (int)(TimeCurrent() / 3600) % 24;

  if ((EndHour >= 24) && (CurrentHour < inStartHour))
    CurrentHour += 24;
             
  return((inStartHour <= CurrentHour) && (CurrentHour <= EndHour));
}

sinput double inMaxAbsoluteDD = 0; // Maximum absolute drawdown

const double StartBalance = AccountInfoDouble(ACCOUNT_BALANCE);

bool IsMaxAbsoluteDD()
{

  return(inMaxAbsoluteDD && ((StartBalance - AccountInfoDouble(ACCOUNT_EQUITY)) > inMaxAbsoluteDD));
}

void OnTick()
{
  static bool Position = false;

  if (!IsMaxAbsoluteDD())
  {
    CopyBuffer(hnd, 0, 0, 1, maArr);
    CopyClose(NULL, 0, 0, 1, prArr);
    
    const double pr = prArr[0] - maArr[0];
  
    Position = Position ? !((pr >= dHigh) && OrderSelect(0, SELECT_BY_POS) && OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0))
                        : (pr < dLow) && SystemON() && (OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0) > 0);
  }
}

sinput int inMinTrades = 500; // Minimum number of trades (positions).

double OnTester()
{
  return(((TesterStatistics(STAT_TRADES) >= inMinTrades) ? TesterStatistics(STAT_PROFIT_FACTOR) : 0));
}


Optimisation

; Подключиться к MetaQuotes-Demo.
; Выбрать в Тестере советник по ссылке https://www.mql5.com/ru/forum/327812/page15#comment_14162754
; Этот текст скопировать в буфер обмена и сделать CTRL+V во вкладке Настроки Тестера.
; Запустить Оптимизацию, нажав Старт.
; Применить лучший проход.
; Отключить режим Оптимизации, выставить начало на 2015 год и запустить одиночный проход.
[Tester]
Symbol=EURUSD
Period=M15
Optimization=2
Model=2
FromDate=2017.01.01
ToDate=2019.12.09
ForwardMode=0
Deposit=100000
Currency=USD
ProfitInPips=1
Leverage=100
ExecutionMode=0
OptimizationCriterion=6
[TesterInputs]
inPeriod=20||5||5||250||Y
inLow=-40||-500||10||100||Y
inHigh=20||-100||10||500||Y
inStartHour=0||0||1||23||Y
inCountHours=3||2||1||23||Y
inMaxAbsoluteDD=2000
inMinTrades=500
 
fxsaber:

Counsellor


Optimisation

I don't see any difference from the original, except for the inputs.

my bot has been running since 2012 after optimisation.

what to investigate? any other time intervals found?

 
Maxim Dmitrievsky:

I don't see a single difference from the original, except for the inputs.

Did you think I was joking when I said that?

I have my bot working after optimisation since 2012.

I do not understand.

What to investigate? any other time intervals found?

Walk-forward at least. + cluster analysis. I hope @Stanislav Korotky will join us with his toolkit.


Well, everyone can reproduce it - in three minutes Optimiser finds results no worse than the approach in the article.

 
fxsaber:

Did you think I was joking when I said that?


I don't get it.

The bot from the article was optimised (unchanged), it works on OOS, nothing new.... It was not included in the article, as the article is not about optimisation

fxsaber:

Walk-forward at least. + cluster analysis. I hope @Stanislav Korotky will connect with his toolkit.


Well, everyone can reproduce it - in three minutes the Optimiser finds results no worse than the approach in the article.

Well, let them reproduce it, but the parameters set are useless, it will take a long time to optimise it

They would never have found it without research, if only because they would still be trying to sell.