没有用) ======================================================================== 输入: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;
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; ========================================================================
但我们可能会在下一个版本中做到这一点。
我将向你展示我所能做的。
不可能100%地转移专家顾问。
我打个比方,这不是关于专家顾问的问题,是吗?
这与优化器的能力有关,不是吗?
我们没有可视化,我们还不需要一个。
但我们可能会在下一个版本中做到这一点。
我将向你展示我所能做的。
不可能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;
========================================================================
我们没有可视化,我们还不需要一个。
但我们可能会在下一个版本中做到这一点。
我将向你展示我所能做的。
不可能100%地转移专家顾问。
我将做一些近似的事情,这不是关于专家顾问,而是关于优化器的能力?
这与优化器的能力有关,不是吗?
让程序员耕耘他们所有的代码以整合与外部优化器的通信,然后运行在那里计算东西的优化器是一回事。而这一切是有代价的。而勾选任何专家的 "遗传优化 "复选框,选择一个正常的范围(不是几百亿),得到结果,并在优化器工作时立即查看结果,这是另一回事,不需要任何附加程序。 而且是免费的。
我们一贯使我们的系统尽可能地简单、方便和完整。有人声称 "我的测试器快了10-100倍",但没有证明这一点。有人用 "球形真空中的一匹马 "来谈论虚构的任务。虽然我们制作的工作系统对使用MetaTrader的数十万名交易者来说是非常有效的。而我们远远领先于任何竞争对手,也是因为我们的建筑系统思想。
ps:顺便问一下,为什么你的遗传优化器的分发包比MetaTrader的大?撰写它不经济吗?
雷纳特,你自己要求我给你看这个。
我已经多次问你这是什么....
如果在我问你的时候,你已经写了前一篇文章。
谈话会有不同的结果,而我也不需要为欧米茄重写这个MACD。
我不得不放下其他事情,忙着证明 "我不是一只骆驼"。
一句话。
你说你做了一件多么好的事情,而且是免费的......。
我是在和你争论这个问题吗(我根本没有和你争论任何问题)?
我只是指出,你的优化器消耗了太多的内存。
我想这是你的优化器的一个旧版本的遗留问题,当时你还没有CS。
这很容易解决,而且会使你的优化器更加完善。
注意,我没有批评的意思。
我只是想帮助你。
这项任务当然是真空中的球状马的领域,我们在MT4中由于可能的数值面积巨大,事实上是错误地试图保留一定的内存(蛮力机制的遗产)。这一点将得到纠正。
谢谢你的坚持--你迫使我们对测试器进行更深入的挖掘。
....但为什么这么大的空间只有1000个篮板呢? 这非常粗略。我在MT4中对15亿个数值的区域运行了这个专家顾问,在4分钟内对18000个欧元兑美元H1的历史条数进行了4400次净超调。....
它取决于目标函数(fitness)的质量。
此外,我们使用的原始算法比其他已知算法快一个数量级。
1000次运行有点多,我通常使用100-200次运行(对于任何数量的参数)来评估一个解决方案。
是的,事实上,测试中的这个EA消耗了太多的内存,于是就停机了。我们会研究的。
谢谢你提供的代码。
雷纳特,还没有消息吗?
理智,有新闻。他们发现了一个内存泄漏。编译器没有在正确的地方插入行释放命令。
理智,有新闻。他们发现了一个内存泄漏。编译器没有在正确的地方插入行释放命令。
好的,我们正在等待新的建设。
理智,有新闻。他们发现了一个内存泄漏。编译器没有在正确的地方插入行释放命令。
好的,等待新的建设。
我已经在198EA的新版本上运行了你的例子。
不再有过多的内存消耗,在启用遗传优化后,21600个搜索中有1088个搜索,计算时间为8分31秒。
关于专家顾问本身--由于存在严重的错误,绝不应该使用它。
这个函数试图以过时的价格交易五次,专家顾问的作者不明白它在做什么(它试图使用RefreshRates,但仍然给出一个过时的价格)。而且根本就没有任何有意义的错误处理。