75,000个选项 - 4GB内存和4GB磁盘缓存还不够吗? - 页 5

 
我们没有可视化,我们还不需要一个。
但我们可能会在下一个版本中做到这一点。

我将向你展示我所能做的。
不可能100%地转移专家顾问。
我打个比方,这不是关于专家顾问的问题,是吗?
这与优化器的能力有关,不是吗?
 
Mak:
我们没有可视化,我们还不需要一个。
但我们可能会在下一个版本中做到这一点。

我将向你展示我所能做的。
不可能100%地转移专家顾问。
我打个比方,这不是关于专家顾问的问题,是吗?
这与优化器的能力有关,不是吗?
一点也不。绘图和可用性的整个综合体是它的本质,这需要大量的资源支出。

让程序员耕耘他们所有的代码以嵌入与外部优化器的通信,然后运行在那里计算东西的优化器是一回事。而这一切是有代价的。而勾选任何专家的 "遗传优化 "复选框,选择一个正常的范围(不是几百亿),得到结果,并在优化器工作时立即查看结果,这是另一回事,不需要任何附加程序。 而且是免费的。

我们一贯使我们的系统尽可能地简单、方便和完整。有人声称 "我的测试器快了10-100倍",但没有证明这一点。有人用 "球形真空中的一匹马 "来谈论虚构的任务。虽然我们制作的工作系统对使用MetaTrader的数十万名交易者来说是非常有效的。而我们远远领先于任何竞争对手,也是因为我们的建筑系统思想。

ps:顺便问一下,为什么你的遗传优化器的分发包比MetaTrader的大?撰写它不经济吗?
 
好吧,这里有一个运行。

我在欧米茄中没有货币,我在分布
- IBM(D1)中运行了31年(>11000条)。

在Athlon XP 1500+上运行1000次花了~10分钟

我扩大了参数范围,因为股票的波动性比较大

TakeProfit = (10, 10000, 1)
TralingStop = (10, 10000, 1)
Lots = (1, 1000, 1) - 我的股票数量是
MACDOpenLevel = (1, 100, 1)
MACDCloseLevel = (1, 100, 1)
MATrendPeriod = (2, 100, 1)

总参数空间是~10^14个状态。

以下是EasyLanguage和ScreenShot中的代码。
此外,还在Zip文件中附上了欧米茄的信号代码和报告。

(粘贴代码

没有用)
========================================================================
输入:Gen(1);
Vars: TakeProfit(50),
TralingStop(30),
Lots(0.1),
MACDOpenLevel(3),
MACDCloseLevel(2),
MATrendPeriod(26);
If CurrentBar = 1 Then Begin
R = TS.GO。Start("MACD");
If Gen = 1 Then Begin
R = TS.GO.Mode(0);
R = TS.GO.Popul(100);
R = TS.GO.Var("Gen");
R = TS.GO.Var("Trades");

R = TS.GO.Method(1);
R = TS.GO.Criterion("NetProfit",1);
R = TS.GO.Criterion("MaxDD",1);
R = TS.GO.Criterion("PF",1);

K = TS.GO.Chrom("Stops");
R = TS.GO.Gen("TakeProfit", K, 10, 10000, 1);
R = TS.GO.Gen("TralingStop", K, 10, 10000, 1);

K = TS.GO.Chrom("Lots");
R = TS.GO.Gen("Lots", K, 1, 1000, 1);

K = TS.GO.Chrom("MACD");
R = TS.GO.Gen("MACDOpenLevel", K, 1, 100, 1);
R = TS.GO.Gen("MACDCloseLevel", K, 1, 100, 1);
R = TS.GO.Gen("MATrendPeriod", K, 2, 100, 1);
End;

R = TS.GO.Next(Gen);
R = TS.GO。Set("Gen",Gen);
R = TS.GO.ShowViewer;

TakeProfit = TS.GO.Get("TakeProfit", 0);
TralingStop = TS.GO.Get("TralingStop", 0);
Lots = TS.GO.Get("Lots", 0);
MACDOpenLevel = TS.GO.Get("MACDOpenLevel",0);
MACDCloseLevel = TS.GO.Get("MACDCloseLevel", 0);
MATrendPeriod = TS.GO.Get("MATrendPeriod",0);
End;

Vars:MacdCurrent(0), MacdPrevious(0), SignalCurrent(0),
SignalPrevious(0), MaCurrent(0), MaPrevious(0);

MacdCurrent = MACD(Close,12,26);
MacdPrevious = MACD(Close,12,26)[1]。
SignalCurrent = XAverage(MacdCurrent,9);
SignalPrevious = XAverage(MacdCurrent,9)[1];
MaCurrent = XAverage(Close,MATrendPeriod);
MaPrevious = XAverage(Close,MATrendPeriod) [1];

Vars:StopLoss(0);
If MarketPosition = 0 Then Begin
If MacdCurrent < 0
and MacdCurrent > SignalCurrent
and MacdPrevious < SignalPrevious
and AbsValue(MacdCurrent) > (MACDOpenLevel Point)
and MaCurrent >MaPrevious
然后开始
在收盘时买入本栏目的股票;
结束;

如果MacdCurrent > 0
和MacdCurrent < SignalCurrent
和MacdPrevious > SignalPrevious
和AbsValue(MacdCurrent >.(MACDOpenLevel Point)
and MaCurrent < MaPrevious
Then Begin
Sell Lots shares this bar on close;
end;
end;

If MarketPosition > 0 Then Begin
If MacdCurrent > 0
and MacdCurrent <SignalCurrent
and MacdPrevious > SignalPrevious
and AbsValue(MacdCurrent) > (MACDCloseLevel Point)
Then Begin
ExitLong ("CloseLong") this bar on close;
end;

If StopLoss = 0 Then StopLoss = EntryPrice - TralingStop Points;
StopLoss = MaxList(StopLoss,High - TralingStop Points);

ExitLong ("TakeLong") Next Bar at EntryPrice + TakeProfit Points Limit;
ExitLong ("StopLong")下一棒在StopLoss止损;
end;

If MarketPosition < 0 Then Begin
If MacdCurrent < 0
and MacdCurrent > SignalCurrent
and MacdPrevious < SignalPrevious
and AbsValue(MacdCurrent) >。(MACDCloseLevel Point)
Then Begin
ExitShort ("CloseShort") this bar on close;
end;

If StopLoss = 0 Then StopLoss = EntryPrice + TralingStop Points;
StopLoss = MinList(StopLoss,Low + TralingStop Points)。

ExitLong ("TakeShort") Next Bar at EntryPrice - TakeProfit Points Limit;
ExitLong ("StopShort") Next Bar at StopLoss Stop;
end;


IF LastBarOnChart Then Begin
R = TS.GO.Set("Trades",TotalTrades);
R = TS.GO.Set("NetProfit",NetProfit);
R = TS.GO.Set("MaxDD",MaxIDDrawDown);
R = TS.GO.Set("PF",GrossProfit/(0.001-GrossLoss));
R = TS.GO.Fitness(0);
End;
========================================================================


附加的文件:
macd_test.zip  32 kb
 
Renat:
小迈
我们没有可视化,我们还不需要一个。
但我们可能会在下一个版本中做到这一点。

我将向你展示我所能做的。
不可能100%地转移专家顾问。
我将做一些近似的事情,这不是关于专家顾问,而是关于优化器的能力?
这与优化器的能力有关,不是吗?
绝对不是。问题的关键在于整个绘图和可用性的复杂性,这需要大量的资源支出。

让程序员耕耘他们所有的代码以整合与外部优化器的通信,然后运行在那里计算东西的优化器是一回事。而这一切是有代价的。而勾选任何专家的 "遗传优化 "复选框,选择一个正常的范围(不是几百亿),得到结果,并在优化器工作时立即查看结果,这是另一回事,不需要任何附加程序。 而且是免费的。

我们一贯使我们的系统尽可能地简单、方便和完整。有人声称 "我的测试器快了10-100倍",但没有证明这一点。有人用 "球形真空中的一匹马 "来谈论虚构的任务。虽然我们制作的工作系统对使用MetaTrader的数十万名交易者来说是非常有效的。而我们远远领先于任何竞争对手,也是因为我们的建筑系统思想。

ps:顺便问一下,为什么你的遗传优化器的分发包比MetaTrader的大?撰写它不经济吗?

雷纳特,你自己要求我给你看这个。
我已经多次问你这是什么....
如果在我问你的时候,你已经写了前一篇文章。
谈话会有不同的结果,而我也不需要为欧米茄重写这个MACD。
我不得不放下其他事情,忙着证明 "我不是一只骆驼"。

一句话。
你说你做了一件多么好的事情,而且是免费的......。
我是在和你争论这个问题吗(我根本没有和你争论任何问题)?

我只是指出,你的优化器消耗了太多的内存。
我想这是你的优化器的一个旧版本的遗留问题,当时你还没有CS。
这很容易解决,而且会使你的优化器更加完善。

注意,我没有批评的意思。
我只是想帮助你。
 
当你用细节为你的立场辩护时,情况就完全不同了。真的,为什么在这么大的空间里只有1000个超标点?这是一个非常粗略的方式来看待它。我在MT4上运行了这个EA的1.5B值,在18000条EURUSD H1 历史记录中,它在4分钟内实现了4400次净反弹。

这项任务当然是真空中的球状马的领域,我们在MT4中由于可能的数值面积巨大,事实上是错误地试图保留一定的内存(蛮力机制的遗产)。这一点将得到纠正。

谢谢你的坚持--你迫使我们对测试器进行更深入的挖掘。
 
Renat писал (а):

....但为什么这么大的空间只有1000个篮板呢? 这非常粗略。我在MT4中对15亿个数值的区域运行了这个专家顾问,在4分钟内对18000个欧元兑美元H1的历史条数进行了4400次净超调。....
遗传学中的搜索速度与参数空间的大小无关。
它取决于目标函数(fitness)的质量。

此外,我们使用的原始算法比其他已知算法快一个数量级。
1000次运行有点多,我通常使用100-200次运行(对于任何数量的参数)来评估一个解决方案。
 
Renat писал (а):
是的,事实上,测试中的这个EA消耗了太多的内存,于是就停机了。我们会研究的。
谢谢你提供的代码。


雷纳特,还没有消息吗?
 

理智,有新闻。他们发现了一个内存泄漏。编译器没有在正确的地方插入行释放命令。

 
stringo писал (а):

理智,有新闻。他们发现了一个内存泄漏。编译器没有在正确的地方插入行释放命令。


好的,我们正在等待新的建设。
 
sane:
stringo

理智,有新闻。他们发现了一个内存泄漏。编译器没有在正确的地方插入行释放命令。


好的,等待新的建设。

我已经在198EA的新版本上运行了你的例子。







不再有过多的内存消耗,在启用遗传优化后,21600个搜索中有1088个搜索,计算时间为8分31秒。

关于专家顾问本身--由于存在严重的错误,绝不应该使用它。
  • 不正确的停止水平,所有日志中都有关于它的信息
  • 对于SetOrder功能,你可以从你的经纪人那里得到一个严厉的禁令,禁止使用专家顾问系统交易。

    这个函数试图以过时的价格交易五次,专家顾问的作者不明白它在做什么(它试图使用RefreshRates,但仍然给出一个过时的价格)。而且根本就没有任何有意义的错误处理。