文章 "利用箱形图(Boxplot)探索金融时间序列的季节性形态" - 页 15

 
Maxim Dmitrievsky:

如果你想的话,你可以把它贴出来,并写上 "这就是我们需要调查的地方"。

有时候,把你负责的事情公之于众 会让人很恼火我愿意授权

 
fxsaber:

有时候,把自己不负责任的事情说出来会让人恼火。我愿意委以重任。

交给我,你就不用负责了

只要不是乌克兰粗鲁的出价过高的人。

 
Maxim Dmitrievsky:

请给我留言,我就不用委派了。

我是既得利益者,所以只在公开场合致力于公开研究。

 
fxsaber:

我是既得利益者,所以只在公开场合致力于公开研究。

说吧,我会研究我自己的机器人。

 
Maxim Dmitrievsky:

说吧

你愿意吗?

 
fxsaber:

你会做吗?

只要是免费研究,我就做

 
Maxim Dmitrievsky:

既然是自由研究,我就接受了

顾问

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

#include <MT4Orders.mqh> //https://www.mql5.com/zh/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 找到的结果并不比文章中的方法差。

 
fxsaber:

你以为我是在开玩笑吗?


我不明白。

文章中的机器人是经过优化的(没有改变),它可以在 OOS 上运行,没有任何新....。这篇文章中没有包括它,因为这篇文章不是关于优化的

fxsaber

至少向前走。+ 聚类分析。我希望@Stanislav Korotky 能与他的工具包联系起来。


好了,每个人都可以重现它--在三分钟内,优化器找到的结果并不比文章中的方法差。

好吧,让他们重现吧,但设置的参数毫无用处,需要很长时间才能优化它

如果不进行研究,他们永远也不会发现这一点,如果只是因为他们还在努力推销的话。