MQL5的股权振荡器意味着 - 页 2 1234567 新评论 Rashid Umarov 2011.01.20 13:31 #11 DV2010: 但为什么不断变化的 股票价值 没有显示在指标上,尽管不断变化的价值(检查!)被写入指标数组中? 那里什么也没写,循环也没被调用。自己检查一下吧。 DV2010 2011.01.20 14:02 #12 这就是问题所在:该循环在所有滴答声中都被调用。 你自己看吧!我是故意把输出放在循环的主体里的。int OnCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spread[]){ for (int i = prev_calculated; i <= rates_total-1; ++i){ Print("Equity - OnCalculate - Cycle: prev_calculated=",prev_calculated," rates_total=",rates_total); Print("Equity - OnCalculate - Cycle: AccountInfoDouble(ACCOUNT_EQUITY)=", AccountInfoDouble(ACCOUNT_EQUITY)); Values[i] = AccountInfoDouble(ACCOUNT_EQUITY); } return rates_total;} 这就是最终的结果。2011.01.20 13:58:56 Core 1 OnTester result 02011.01.20 13:58:56 Core 1 2011.01.14 23:59:59 order performed sell 0.15 at 1.33829 [#13 sell 0.15 EURUSD at 1.33829]2011.01.20 13:58:56 Core 1 2011.01.14 23:59:59 deal performed [#13 sell 0.15 EURUSD at 1.33829]2011.01.20 13:58:56 Core 1 2011.01.14 23:59:59 deal #13 sell 0.15 EURUSD at 1.33829 done (based on order #13)2011.01.20 13:58:56 Core 1 2011.01.14 23:59:59 position closed due end of test at 1.33829 [buy 0.15 EURUSD 1.33593]2011.01.20 13:58:56 Core 1 2011.01.14 22:00:00 Equity - OnCalculate - Cycle: AccountInfoDouble(ACCOUNT_EQUITY)=9949.2999999999992011.01.20 13:58:56 Core 1 2011.01.14 22:00:00 Equity - OnCalculate - Cycle: prev_calculated=6418 rates_total=64192011.01.20 13:58:56 Core 1 2011.01.14 21:00:00 CTrade::PositionOpen: instant buy 0.15 EURUSD at 1.33593 [done at 0.00000]2011.01.20 13:58:56 Core 1 2011.01.14 21:00:00 order performed buy 0.15 at 1.33593 [#12 buy 0.15 EURUSD at 1.33593]2011.01.20 13:58:56 Core 1 2011.01.14 21:00:00 deal performed [#12 buy 0.15 EURUSD at 1.33593]2011.01.20 13:58:56 Core 1 2011.01.14 21:00:00 deal #12 buy 0.15 EURUSD at 1.33593 done (based on order #12)2011.01.20 13:58:56 Core 1 2011.01.14 21:00:00 instant buy 0.15 EURUSD at 1.33593 (1.33577 / 1.33593 / 1.33577)2011.01.20 13:58:56 Core 1 2011.01.14 21:00:00 CTrade::PositionClose: instant buy 0.15 EURUSD at 1.33593 [done at 0.00000]2011.01.20 13:58:56 Core 1 2011.01.14 21:00:00 order performed buy 0.15 at 1.33593 [#11 buy 0.15 EURUSD at 1.33593]2011.01.20 13:58:56 Core 1 2011.01.14 21:00:00 deal performed [#11 buy 0.15 EURUSD at 1.33593]2011.01.20 13:58:56 Core 1 2011.01.14 21:00:00 deal #11 buy 0.15 EURUSD at 1.33593 done (based on order #11)2011.01.20 13:58:56 Core 1 2011.01.14 21:00:00 instant buy 0.15 EURUSD at 1.33593 (1.33577 / 1.33593 / 1.33577)2011.01.20 13:58:56 Core 1 2011.01.14 21:00:00 Equity - OnCalculate - Cycle: AccountInfoDouble(ACCOUNT_EQUITY)=9929.652011.01.20 13:58:56 Core 1 2011.01.14 21:00:00 Equity - OnCalculate - Cycle: prev_calculated=6417 rates_total=6418 Rashid Umarov 2011.01.20 14:11 #13 DV2010:这就是问题所在:该循环在所有滴答声中都被调用。 你自己看吧!我是故意把输出放在循环的主体里的。 这就是最终的结果。 测试与此有什么关系?在图表上 运行该指标,你会看到。只要别忘了给我做编辑。 Документация по MQL5: Операции с графиками / ChartIndicatorAdd www.mql5.com Операции с графиками / ChartIndicatorAdd - Документация по MQL5 DV2010 2011.01.20 14:35 #14 在这里测试的原因是,我需要在历史上看到测试期内股权的变化。 我已经做了你的修正,我在测试模式 下和将其拖到一个新的图表中都运行了该指标。 该指标适用于整个时期,直到当前的报价,以及任何时间框架(或者说 "你将看到一切 "到底是什么意思?) 然而,公平值保持不变,尽管输出到日志中显示它在变化。 ( 否则,除了通过Print,我们还能怎样判断循环是否工作?) ...为了以防万一,这里是附有指标的专家顾问的 "骨架"。#property copyright "Copyright 2010, Pavlov Sergei"#property link ""#property version "1.00"#include <\..\Experts\_My\Classes\ClassExpert\ClassExpert.mqh> ClassExpert Expert1;int Equity1=0;void OnInit(){ Equity1 = iCustom(NULL,0,"Equity", 5, // Период 0, // Смещение MODE_SMA, // Метод рассчета PRICE_CLOSE // считаем по ценам закрытия) ); Expert1.Init();}void OnTick(){ Expert1.OnTick();}void OnDeinit(const int reason){ Expert1.Deinit();} Rashid Umarov 2011.01.20 15:00 #15 DV2010:在这里测试的原因是,我需要在历史上看到测试期内股权的变化。我已经做了你的修正,我在测试模式下运行了该指标,并将其拖放到一个新图表上。该指标适用于整个时期,直到当前的报价,以及任何时间框架(或者说 "你将看到一切 "到底是什么意思?)然而,公平值保持不变,尽管输出到日志中显示它在变化。( 否则,除了通过Print,我们还能怎样判断循环是否工作?)...为了以防万一,这里是附有指标的专家顾问的 "骨架"。 将错误的指标放入EA 是没有意义的,它不会使EA 变得更好。你仍然没有检查我的选项? Renat Fatkhullin 2011.01.20 15:04 #16 也许我弄错了,但你不是在测试完成后将指标在图表上 的外观与测试时的计算结果进行比较吗?重点是,来自测试器的自定义指标的结果(计算数组)不会以任何方式转移到图表上,但指定的指标只是在图表上启动一个新的计算。 Документация по MQL5: Операции с графиками / ChartIndicatorAdd www.mql5.com Операции с графиками / ChartIndicatorAdd - Документация по MQL5 Rashid Umarov 2011.01.20 15:57 #17 在分钟图上运行这个指标(如果你有一个开放的头寸),10-15分钟后,你会得到这样的图片。代码。//+------------------------------------------------------------------+ //| Equity_Indicator.mq5 | //| Copyright 2011, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2010, MetaQuotes Software Corp." #property link "http://www.mql5.com" #property version "1.00" #property indicator_separate_window #property indicator_buffers 1 #property indicator_plots 1 //--- plot Label1 #property indicator_label1 "Label1" #property indicator_type1 DRAW_LINE #property indicator_color1 Red #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- indicator buffers double Values[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,Values,INDICATOR_DATA); PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,100); PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE); ArraySetAsSeries(Values,false); return(0); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { Print("prev_calculated=",prev_calculated," rates_total=",rates_total); int limit=prev_calculated; if(limit>0) limit--; //---Блок заполнения Индикатора и журнала сообщений значениями for(int i=limit; i<rates_total;++i) { Values[i]=AccountInfoDouble(ACCOUNT_EQUITY); } return rates_total; } //+------------------------------------------------------------------+ DV2010 2011.01.20 16:04 #18 罗切,我已经问过你我的指标有什么问题,我也给你写过我如何检查你的变体。 而且我试图尽可能详细地向你解释,而你只简单地写了 "循环不起作用 "和 "你自己看吧"...... ...雷纳特,按照我的理解,在测试完成后, 指标 将根据测试期间的计算和指标阵列的填充 在 图表上显示。但是,测试器的结果不能从测试器转移到自定义指标图上,这是什么意思? 那么他们需要什么呢?为什么当我从代码中删除对数组的赋值时,指标线会一下子消失呢(即使是一条恒定的水平线,它也会消失)? 我以为,在 OnCalculated ,填入的指标值数组 与图表上的指标值之间的对应关系 是不明确的,否则,指标值怎么能被初始化? 这很难理解......这似乎是一个微不足道的任务,但我已经纠结了好几天,很难找到一个人,至少可以提示如何在历史上以不同的方式解决这个问题,以及是否解决了。 再次,按照我的理解(如果我错了,请纠正我,如果你不介意)。 1.我在测试器中指定一个测试期,并选择一个附有我的指标的专家顾问。 2.第一次调用 OnCalculated ,参数 prev_calculated =0, rate_total = 测试开始时对应的tick(bar) 的数量。在这段时间内,平衡值保持在最初的恒定水平。 随后 在测试期内按条 调用 OnCalculated ,发生在每个单独的条上,在这里我们可以用那些变化的数据初始化一个指标值数组(例如,复制价格,正如我写的,这很有效,但后来为什么不用变化的值初始化 Equity, 而用变化的价格 ?) 而且,无论如何,你是个专家。我希望这个简单的任务能得到解决,或者 MetaTrader 还没有达到这样的 "高度"?:))) 我已经提供了我对这个问题的简单解决方案,但它拒绝工作。 那么如何才能实现--根据对历史的测试结果,在价格图的下面有一个股票图? Sergey Gritsay 2011.01.20 16:26 #19 我要告诉你一件事,在启动可视化模式之前,要解决你的问题并不容易。有一个解决方案,就是在测试过程中把股票数据写到一个文件中。 然后把这个文件中的数据写到指标缓冲区,从而建立股票图。 DV2010 2011.01.20 16:26 #20 Rosh,在线的变体已经发布了,但作为一个主要从事历史工作的人,我需要一个能在历史数据上发挥作用的变体。而我仍然觉得很难理解主要的困难可能是什么。 由于交易数量 较少,交易者对网上的平衡图有一个概念(除非他是一个几乎没有时间按买入和卖出的临时工)。 事实上,在有数百甚至数千次交易的漫长历史中,股票动态变得至关重要,但测试器中的图表原则上不提供这些动态与价格动态的简单比较(除非,当然,MetaQuote认为程序员的主要事情是快速消除已经准备好的专家,而不分析单独的一系列弱势和强势地位)。 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这就是问题所在:该循环在所有滴答声中都被调用。
你自己看吧!我是故意把输出放在循环的主体里的。
这就是最终的结果。
这就是问题所在:该循环在所有滴答声中都被调用。
你自己看吧!我是故意把输出放在循环的主体里的。
这就是最终的结果。
在这里测试的原因是,我需要在历史上看到测试期内股权的变化。
我已经做了你的修正,我在测试模式 下和将其拖到一个新的图表中都运行了该指标。
该指标适用于整个时期,直到当前的报价,以及任何时间框架(或者说 "你将看到一切 "到底是什么意思?)
然而,公平值保持不变,尽管输出到日志中显示它在变化。
( 否则,除了通过Print,我们还能怎样判断循环是否工作?)
...为了以防万一,这里是附有指标的专家顾问的 "骨架"。
在这里测试的原因是,我需要在历史上看到测试期内股权的变化。
我已经做了你的修正,我在测试模式下运行了该指标,并将其拖放到一个新图表上。
该指标适用于整个时期,直到当前的报价,以及任何时间框架(或者说 "你将看到一切 "到底是什么意思?)
然而,公平值保持不变,尽管输出到日志中显示它在变化。
( 否则,除了通过Print,我们还能怎样判断循环是否工作?)
...为了以防万一,这里是附有指标的专家顾问的 "骨架"。
也许我弄错了,但你不是在测试完成后将指标在图表上 的外观与测试时的计算结果进行比较吗?
重点是,来自测试器的自定义指标的结果(计算数组)不会以任何方式转移到图表上,但指定的指标只是在图表上启动一个新的计算。
在分钟图上运行这个指标(如果你有一个开放的头寸),10-15分钟后,你会得到这样的图片。
代码。
罗切,我已经问过你我的指标有什么问题,我也给你写过我如何检查你的变体。 而且我试图尽可能详细地向你解释,而你只简单地写了 "循环不起作用 "和 "你自己看吧"......
...雷纳特,按照我的理解,在测试完成后, 指标 将根据测试期间的计算和指标阵列的填充 在 图表上显示。但是,测试器的结果不能从测试器转移到自定义指标图上,这是什么意思?
那么他们需要什么呢?为什么当我从代码中删除对数组的赋值时,指标线会一下子消失呢(即使是一条恒定的水平线,它也会消失)?
我以为,在 OnCalculated ,填入的指标值数组 与图表上的指标值之间的对应关系 是不明确的,否则,指标值怎么能被初始化?
这很难理解......这似乎是一个微不足道的任务,但我已经纠结了好几天,很难找到一个人,至少可以提示如何在历史上以不同的方式解决这个问题,以及是否解决了。
再次,按照我的理解(如果我错了,请纠正我,如果你不介意)。
1.我在测试器中指定一个测试期,并选择一个附有我的指标的专家顾问。
2.第一次调用 OnCalculated ,参数 prev_calculated =0, rate_total = 测试开始时对应的tick(bar) 的数量。在这段时间内,平衡值保持在最初的恒定水平。
随后 在测试期内按条 调用 OnCalculated ,发生在每个单独的条上,在这里我们可以用那些变化的数据初始化一个指标值数组(例如,复制价格,正如我写的,这很有效,但后来为什么不用变化的值初始化 Equity, 而用变化的价格 ?)
而且,无论如何,你是个专家。我希望这个简单的任务能得到解决,或者 MetaTrader 还没有达到这样的 "高度"?:)))
我已经提供了我对这个问题的简单解决方案,但它拒绝工作。
那么如何才能实现--根据对历史的测试结果,在价格图的下面有一个股票图?
Rosh,在线的变体已经发布了,但作为一个主要从事历史工作的人,我需要一个能在历史数据上发挥作用的变体。而我仍然觉得很难理解主要的困难可能是什么。
由于交易数量 较少,交易者对网上的平衡图有一个概念(除非他是一个几乎没有时间按买入和卖出的临时工)。
事实上,在有数百甚至数千次交易的漫长历史中,股票动态变得至关重要,但测试器中的图表原则上不提供这些动态与价格动态的简单比较(除非,当然,MetaQuote认为程序员的主要事情是快速消除已经准备好的专家,而不分析单独的一系列弱势和强势地位)。