記事"Boxplotによる金融時系列のシーズンパターンの探索"についてのディスカッション - ページ 15

 
Maxim Dmitrievsky:

私の承認を得たいのなら、"ここは調査が必要だ "と書いて貼ってもいい。

自分の責任で出すと迷惑なこともある。私は喜んで委任する。

 
fxsaber:

自分に責任がないことを表に出すのは腹立たしいこともある。私は喜んで委任する。

私に任せてくれれば、任せる必要はない。

ただ、ウクライナの傲慢な過大入札者にだけは。

 
Maxim Dmitrievsky:

委任する必要はない。

私は既得権益を持っているので、公の場での研究にコミットしている公の場でのみ。

 
fxsaber:

私は既得権益を持っているので、公の場での研究にのみコミットしている。

どうぞ、私は自分のロボットを研究します。

 
Maxim Dmitrievsky:

どうぞ。

やってくれますか?

 
fxsaber:

やるのか?

自由研究ならやるよ。

 
Maxim Dmitrievsky:

自由研究なんだから、私がやるわ

アドバイザー

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

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

#define  Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)

input int inPeriod = 25; // マシュカ期間
input int inLow = -2;    // 価格とMAPの差の下限 - エントリー
input int inHigh = 0;    // 価格とMAPの差の上限が出力される。

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; // 最大絶対ドローダウン

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; // 最低取引数(ポジション)。

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


最適化

; Подключиться к 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:

カウンセラー


最適化

入力以外、オリジナルとの違いは見当たりません。

私のボットは最適化後、2012年から稼働しています。

何か他の時間間隔が見つかりましたか?

 
Maxim Dmitrievsky:

入力以外、オリジナルとの違いはひとつも見当たらない。

冗談だと思った?

私は2012年以来、最適化の後に私のボットを動作させています。

私は理解していません。

他の時間間隔が見つかりましたか?

少なくともウォークフォワード。+ クラスター分析も。Stanislav Korotkyが ツールキットを持って参加してくれることを期待している。


Optimiserは3分で記事のアプローチより悪くない結果を見つける。

 
fxsaber:

冗談だと思った?


理解できないよ。

記事のボットは最適化されており(変更されておらず)、OOSでも動作する。最適化についての記事ではないので、記事には含まれていない。

fxsaber

少なくともウォークフォワード。+クラスター分析。Stanislav Korotky氏が 彼のツールキットに接続してくれることを期待している。


オプティマイザーは3分で、記事のアプローチよりも悪くない結果を見つける。

まあ、彼らに再現させればいい。しかし、設定されたパラメーターは役に立たないし、最適化には長い時間がかかるだろう。

彼らはまだ売ろうとしているのだから。