初学者的问题 MQL5 MT5 MetaTrader 5 - 页 265 1...258259260261262263264265266267268269270271272...1503 新评论 Fry_Антон 2014.06.25 01:37 #2641 C-4: 你说的'对齐'是什么意思?将尾数按小数位数归 一?- 这就是NormalizeDouble函数的作用。如果是其他东西,请更详细地描述它。在输入任何正双,在输出四舍五入到实际价格,可以在这个工具。 如果价格步数是0.25,那么就四舍五入到0.25。有点像这样。double RoundPrice(const double price) { if(price<=0) return(-1); double tick_size=SymbolInfoDouble(Symbol(),SYMBOL_TRADE_TICK_SIZE); double p=round(price/tick_size); return(NormalizeDouble(p*tick_size,_Digits)); }但话虽如此,如果有一个偏移量(如0.13;0.38;0.63;0.88),那么它也算。然后。在输入1.0时,输出1.13。 1.25为输入,1.38为输出。 1,5 ---> 1,63...在API层面上,这可以被编码成几个汇编语言命令,而且这显然是一个基本功能。我以为有一个 =/ Newalligator 2014.06.26 11:39 #2642 如何通过实时更新来更新到新的版本。实时更新在哪里? Vladimir Karputov 2014.06.26 11:58 #2643 Newalligator: 如何通过实时更新来更新到新的版本。这个实时更新在哪里? 你应该在MetaQuotes-Demo服务器上开一个模拟账户,并偶尔连接到它,以检查更新。如何在MetaQuotes-Demo服务器上开立一个模拟账户 Newalligator 2014.06.27 09:44 #2644 谢谢你的回答,我是实盘交易,MT5一直开着。如果软件说我需要更新,那很好。 如果没有,实时更新在哪里? Vladimir Karputov 2014.06.27 10:10 #2645 Newalligator: 谢谢你的回答,我是实盘交易,MT5一直开着。如果程序本身提示我更新,这很好,但如果没有,这个实时更新在哪里? 当你在MetaQuotes-Demo服务器上连接到你的账户时,MetaTrader将自动检查更新。如果有更新,它将自动下载新版本。 jommerbot 2014.06.29 00:21 #2646 大家好!有一个问题 - 我不能在一个自定义指标 中使用另一个自定义指标的读数。我几乎可以肯定我做错了,但我还是要把代码粘贴出来。int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { if(rates_total < iPeriod ) { return(0); } int first; if ( prev_calculated == 0 ) { first = iPeriod + begin; } else { first = prev_calculated - 1; } // Пользовательский индикатор ROC для EURUSD double aRocRatesEURUSD[]; int iRocHandleEURUSD = iCustom("EURUSD", 0, "Examples\\ROC"); CopyBuffer(iRocHandleEURUSD, 0, 0, rates_total, aRocRatesEURUSD); for(int bar = first; bar < rates_total; bar++) { 在这段代码中,变化率指标(aRocRatesEURUSD) 的缓冲区不可用。我不明白如何正确连接这个指标,请帮助我理解。 Vladimir Karputov 2014.06.29 04:27 #2647 jommerbot:大家好!有一个问题 - 我不能在一个自定义指标 中使用另一个自定义指标的读数。我几乎可以肯定我做错了,但我还是要把代码粘贴出来。在这段代码中,变化率指标(aRocRatesEURUSD) 的缓冲区不可用。我不能理解如何正确连接这个指标,请帮助我理解。指标手柄必须在OnInit()中声明。//+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { // Пользовательский индикатор ROC для EURUSD double aRocRatesEURUSD[]; int iRocHandleEURUSD = iCustom("EURUSD", 0, "Examples\\ROC"); } 否则,事实证明,你每次调用OnCalculate()都会创建一个新的自定义指标。 jommerbot 2014.06.29 11:14 #2648 barabashkakvn:指标手柄应该在OnInit()中声明。 这也行不通。缓冲区阵列最后要么是空的,要么是充满了左手的值。 Vladimir Karputov 2014.06.29 11:37 #2649 jommerbot: 这也是行不通的。结果是,带有缓冲区的数组要么是空的,要么是充满了左边的值。 然而,在OnInit()中声明指标句柄是正确的。另一个问题是,为什么每次有新的刻度线出现时,你都要写上(OnCalculate()函数)?rates_total, // размер входных таймсерий到缓冲区aRocRatesEURUSD?这真的会减慢终端的速度。此外,这是一个非常深刻的故事。我想你会发现,阅读《指标的经济性重新计算原则》一文会很有趣。还要阅读OnCalculate()函数的帮助。 jommerbot 2014.06.29 12:36 #2650 好吧,即使在最简单的情况下也是不行的。#property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 #property indicator_type1 DRAW_LINE #property indicator_color1 Red double ExtLineBuffer[]; int iRocHandleEURUSD; int iPlotShift = 0; int iPeriod = 6; void OnInit() { SetIndexBuffer(0, ExtLineBuffer, INDICATOR_DATA); PlotIndexSetInteger(0, PLOT_SHIFT, iPlotShift); PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, iPeriod - 1); int iRocHandleEURUSD = iCustom("EURUSD", 0, "Examples\\ROC"); if( iRocHandleEURUSD == INVALID_HANDLE ) { Print("Не удалось получить хендл индикатора ROC EURUSD"); } } int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { if(rates_total < iPeriod ) { return(0); } int first; double aRocRatesEURUSD[]; if ( prev_calculated == 0 ) { first = iPeriod + begin; } else { first = prev_calculated - 1; } for(int bar = first; bar < rates_total; bar++) { CopyBuffer(iRocHandleEURUSD, 0, bar, 1, aRocRatesEURUSD); Print(aRocRatesEURUSD[ 0 ]); ExtLineBuffer[ bar ] = NormalizeDouble(aRocRatesEURUSD[ 0 ], SYMBOL_DIGITS); } return(rates_total); }我不明白我的错误在哪里。在EA 和脚本中复制相同的指标 缓冲区可以工作,但在指标中不能。指示器手柄被初始化,没有错误。 1...258259260261262263264265266267268269270271272...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你说的'对齐'是什么意思?将尾数按小数位数归 一?- 这就是NormalizeDouble函数的作用。如果是其他东西,请更详细地描述它。
在输入任何正双,在输出四舍五入到实际价格,可以在这个工具。
如果价格步数是0.25,那么就四舍五入到0.25。有点像这样。
但话虽如此,如果有一个偏移量(如0.13;0.38;0.63;0.88),那么它也算。然后。
在输入1.0时,输出1.13。
1.25为输入,1.38为输出。
1,5 ---> 1,63...
在API层面上,这可以被编码成几个汇编语言命令,而且这显然是一个基本功能。我以为有一个 =/
如何通过实时更新来更新到新的版本。这个实时更新在哪里?
谢谢你的回答,我是实盘交易,MT5一直开着。如果程序本身提示我更新,这很好,但如果没有,这个实时更新在哪里?
大家好!有一个问题 - 我不能在一个自定义指标 中使用另一个自定义指标的读数。我几乎可以肯定我做错了,但我还是要把代码粘贴出来。
在这段代码中,变化率指标(aRocRatesEURUSD) 的缓冲区不可用。我不明白如何正确连接这个指标,请帮助我理解。
大家好!有一个问题 - 我不能在一个自定义指标 中使用另一个自定义指标的读数。我几乎可以肯定我做错了,但我还是要把代码粘贴出来。
在这段代码中,变化率指标(aRocRatesEURUSD) 的缓冲区不可用。我不能理解如何正确连接这个指标,请帮助我理解。
指标手柄必须在OnInit()中声明。
否则,事实证明,你每次调用OnCalculate()都会创建一个新的自定义指标。指标手柄应该在OnInit()中声明。
这也是行不通的。结果是,带有缓冲区的数组要么是空的,要么是充满了左边的值。
rates_total, // размер входных таймсерий
到缓冲区
?这真的会减慢终端的速度。此外,这是一个非常深刻的故事。
我想你会发现,阅读《指标的经济性重新计算原则》一文会很有趣。
还要阅读OnCalculate()函数的帮助。
好吧,即使在最简单的情况下也是不行的。
我不明白我的错误在哪里。在EA 和脚本中复制相同的指标 缓冲区可以工作,但在指标中不能。指示器手柄被初始化,没有错误。