错误、漏洞、问题 - 页 2635 1...262826292630263126322633263426352636263726382639264026412642...3184 新评论 Aleksandr Prishenko 2020.02.05 09:03 #26341 这个平台(MT5)是为金融市场交易设计的,还是一个马戏团?每次我们都要为你的更新重做代码,我们要怎么做?我已经厌烦了。 Vladislav Andruschenko 2020.02.05 09:06 #26342 Aleksandr Prishenko: 这个平台(MT5)是为金融市场交易设计的,还是一个马戏团?每次我们都要为你的更新重做代码,我们要怎么做?我已经厌烦了。 hmm.... 你到底需要修改什么? 也许我也需要? 我不认为我已经做了什么更新.........。 Aleksandr Prishenko 2020.02.05 09:15 #26343 #include <MovingAverages.mqh> //--- indicator settings #property indicator_separate_window #property indicator_buffers 6 #property indicator_plots 4 //--- plot Value #property indicator_label1 "Volume;Volume1" #property indicator_type1 DRAW_FILLING #property indicator_color1 clrBlue,clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 2 //--- plot Middle #property indicator_label2 "Middle line" #property indicator_type2 DRAW_LINE #property indicator_color2 clrMediumOrchid #property indicator_style2 STYLE_SOLID #property indicator_width2 1 //--- plot OverBought #property indicator_label3 "Bands upper" #property indicator_type3 DRAW_LINE #property indicator_color3 clrDeepPink #property indicator_style3 STYLE_SOLID #property indicator_width3 1 //--- plot OverSold #property indicator_label4 "Bands lower" //нижняя линия #property indicator_type4 DRAW_LINE #property indicator_color4 clrDeepPink #property indicator_style4 STYLE_SOLID #property indicator_width4 1 //--- enum OSCILLATOR_NAME { MACD, // MACD MOMENTUM, // Momentum RSI, // RSI MFI, // MFI AC // AC }; //--- enum LEVEL_MODE { CONST_VALUE_MODE, // Constant level value mode MA_MODE, // Moving Average mode BB_MODE // Bollinger Bands Mode }; //--- enum DRAW_MODE { LINE, // Line FILLING, // Filling HISTOGRAM // Histogram }; //--- input parameters input ENUM_TIMEFRAMES TF_Oscillator = PERIOD_CURRENT; // TIMEFRAMES Oscillator input OSCILLATOR_NAME InpOscillator = MACD; // Oscillator input int InpOscPeriod1 = 1; // MACD Fast EMA / Period for: RSI,MFI,Momentum input int InpOscPeriod2 = 34; // MACD Slow EMA input int InpOscPeriod3 = 1; // MACD Signal input ENUM_APPLIED_PRICE InpAppliedPrice = PRICE_CLOSE; // Applied price input ENUM_APPLIED_VOLUME InpVOLUME = VOLUME_TICK; //Applied Volume for MFI input DRAW_MODE InpDrawMode = LINE; // Draw Mode input int InpLevelsPeriod = 40; // Levels Period Upper input int InpLevelsPeriod1 = 35; // Levels Period Lower input double InpLevelsIndent = 3.0; // Deviation Upper input double InpLevelsIndent1 = 4.0; // Deviation Lower LEVEL_MODE InpLevelsMode = BB_MODE; // Levels Mode bool InpIndentAutoCorrection = true; // Levels Auto Correction //input string InpDivider = "---For Stochastic or MACD---"; // Just Divider NOT Parameter //input ENUM_STO_PRICE InpStochPrice = STO_LOWHIGH; // Stochastic Price //--- indicator buffers double ExtBuffer1[]; //Line double ExtBuffer2[];//Middle double ExtBuffer3[];//Upper double ExtBuffer4[];//Lowe double ExtBuffer5[]; double ExtBuffer6[]; //--- global variables int oscPeriod1; int levelsPeriod; int levelsPeriod1; int minRequiredBars; int oscHandle; int oscPeriod2; int oscPeriod3; double midValue; double addValue; double levelsIndent,levelsIndent1 ; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- if ( InpOscPeriod1 < 1 ) { oscPeriod1 = 14; printf("Incorrected input parameter InpOscPeriod1 = %d. Indicator will use value %d.", InpOscPeriod1, oscPeriod1); } else { oscPeriod1 = InpOscPeriod1; } if ( InpLevelsPeriod < 1 ) { levelsPeriod = 10; printf("Incorrected input parameter InpLevelsPeriod = %d. Indicator will use value %d.", InpLevelsPeriod, levelsPeriod); } else { levelsPeriod = InpLevelsPeriod; } if ( InpLevelsPeriod1 < 1 ) { levelsPeriod = 10; printf("Incorrected input parameter InpLevelsPeriod = %d. Indicator will use value %d.", InpLevelsPeriod, levelsPeriod); } else { levelsPeriod1 = InpLevelsPeriod1; } if ( InpOscPeriod2 < 1 ) { oscPeriod2 = 3; printf("Incorrected input parameter InpOscPeriod2 = %d. Indicator will use value %d.", InpOscPeriod2, oscPeriod2); } else { oscPeriod2 = InpOscPeriod2; } if ( InpOscPeriod3 < 1 ) { oscPeriod3 = 3; printf("Incorrected input parameter InpOscPeriod3 = %d. Indicator will use value %d.", InpOscPeriod3, oscPeriod3); } else { oscPeriod3 = InpOscPeriod3; } levelsIndent = MathAbs(InpLevelsIndent);// Levels Indent / Deviation levelsIndent1 = MathAbs(InpLevelsIndent1);// Levels Indent / Deviation //--- minRequiredBars = 20; // oscPeriod1 + oscPeriod2 + oscPeriod3 + levelsPeriod - 1; //--- indicator buffers mapping SetIndexBuffer(0, ExtBuffer1, INDICATOR_DATA); SetIndexBuffer(1, ExtBuffer2, INDICATOR_DATA); SetIndexBuffer(2, ExtBuffer3, INDICATOR_DATA); SetIndexBuffer(3, ExtBuffer4, INDICATOR_DATA); SetIndexBuffer(4, ExtBuffer5, INDICATOR_DATA); SetIndexBuffer(5, ExtBuffer6, INDICATOR_DATA); //--- string shortname = "Oscillator For BBS: "; //--- switch ( InpOscillator ) { case MACD: oscHandle = iMACD(_Symbol, TF_Oscillator, oscPeriod1, oscPeriod2, oscPeriod3, InpAppliedPrice); midValue = 0.0; shortname += "MACD (" + (string)oscPeriod1 + ", " + (string)oscPeriod2 + ", " + (string)oscPeriod3 + ")"; break; case MOMENTUM: oscHandle = iMomentum(_Symbol, TF_Oscillator, oscPeriod1, InpAppliedPrice); midValue = 100.0; levelsAutoCorrect(0.03, 5.0, 0.5); shortname += "Momentum (" + (string)oscPeriod1 + ")"; break; case RSI: oscHandle = iRSI(_Symbol, TF_Oscillator, oscPeriod1, InpAppliedPrice); midValue = 50.0; levelsAutoCorrect(5.0, 50.0, 20.0); shortname += "RSI (" + (string)oscPeriod1 + ")"; break; case MFI: oscHandle = iMFI(_Symbol, TF_Oscillator, oscPeriod1, InpVOLUME); midValue = 50.0; levelsAutoCorrect(5.0, 50.0, 20.0); shortname += "MFI (" + (string)oscPeriod1 + ")"; break; case AC: oscHandle = iAC(_Symbol,0); midValue = 0.0; levelsAutoCorrect(5.0, 50.0, 20.0); shortname += "AC"; break; default: oscHandle = INVALID_HANDLE; Print("Unknown Oscillator!"); return(-1); } //--- switch ( InpDrawMode ) { case FILLING: SetIndexBuffer(2, ExtBuffer3, INDICATOR_DATA); PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_FILLING); break; case HISTOGRAM: SetIndexBuffer(2, ExtBuffer3, INDICATOR_COLOR_INDEX); PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_COLOR_HISTOGRAM2); break; case LINE: default: SetIndexBuffer(2, ExtBuffer3, INDICATOR_DATA); PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_LINE); break; } //--- IndicatorSetString(INDICATOR_SHORTNAME, shortname); //--- return(0); } //+------------------------------------------------------------------+ //| Levels indent / deviation correction function | //+------------------------------------------------------------------+ void levelsAutoCorrect(double minIndent, double maxIndent, double correctIndent) { //--- if ( InpLevelsMode == BB_MODE ) { if ( levelsIndent > 4.0 ) { levelsIndent = 2.0; printf("Incorrected deviation input parameter InpLevelsIndent = %f. Indicator will use value %f.", InpLevelsIndent, levelsIndent); } if ( levelsIndent1 > 4.0 ) { levelsIndent1 = 2.0; printf("Incorrected deviation input parameter InpLevelsIndent = %f. Indicator will use value %f.", InpLevelsIndent, levelsIndent1); } } else { if ( levelsIndent < minIndent || levelsIndent > maxIndent ) { levelsIndent = correctIndent; printf("Incorrected indent input parameter InpLevelsIndent = %f. Indicator will use value %f.", InpLevelsIndent, levelsIndent); } if ( levelsIndent1 < minIndent || levelsIndent1 > maxIndent ) { levelsIndent1 = correctIndent; printf("Incorrected indent input parameter InpLevelsIndent = %f. Indicator will use value %f.", InpLevelsIndent, levelsIndent1); } } //--- } //+------------------------------------------------------------------+ //| 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[]) { //--- int startBar, calculated, toCopy; //--- if ( rates_total < minRequiredBars ) { Print("Not enough bars for calculation."); return(0); } //--- calculated = BarsCalculated(oscHandle); if ( calculated < rates_total ) { Print("Not all data of oscHandle is calculated (", calculated, " bars. Error #", GetLastError()); return(0); } //--- if ( prev_calculated > rates_total || prev_calculated <= 0 ) { startBar = minRequiredBars; toCopy = rates_total; } else { startBar = prev_calculated - 1; toCopy = rates_total - prev_calculated; if ( prev_calculated > 0 ) { toCopy += 1; } } //--- if ( CopyBuffer(oscHandle, 0, 0, toCopy, ExtBuffer1) <= 0 ) { Print("Getting Oscillator is failed. Error #", GetLastError()); return(0); } //--- if ( InpLevelsMode != CONST_VALUE_MODE ) { //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! SimpleMAOnBuffer(rates_total, prev_calculated, oscPeriod1+levelsPeriod, levelsPeriod, ExtBuffer1, ExtBuffer2); } //--- for ( int bar = startBar; bar < rates_total; bar++ ) { double value, sum = 0.0, sum1 = 0.0; double middleLine, indent, indent1; //--- switch ( InpLevelsMode ) { case MA_MODE: middleLine = ExtBuffer2[bar]; indent = levelsIndent; indent1 = levelsIndent1; break; case BB_MODE: //просмотреть формулу middleLine = value = ExtBuffer2[bar]; for ( int i = bar - levelsPeriod + 1; i <= bar; i++ ) { sum += MathPow(ExtBuffer1[i]-value, 2); } indent = levelsIndent * MathSqrt(sum/levelsPeriod); for ( int k = bar - levelsPeriod1 + 1; k <= bar; k++ ) { sum1 += MathPow(ExtBuffer1[k]-value, 2); } indent1 = levelsIndent1 * MathSqrt(sum/levelsPeriod1); break; case CONST_VALUE_MODE: default: middleLine = ExtBuffer2[bar] = midValue; indent = levelsIndent; indent1 = levelsIndent1; break; } //--- switch ( InpDrawMode ) { case LINE: ExtBuffer3[bar] = middleLine + indent; //Upper ExtBuffer4[bar] = middleLine - indent1; //Lowe break; case FILLING: ExtBuffer3[bar] = middleLine; ExtBuffer4[bar] = middleLine + indent; ExtBuffer5[bar] = middleLine - indent1; break; case HISTOGRAM: if ( ExtBuffer1[bar] >= ExtBuffer2[bar] ) { ExtBuffer3[bar] = 0; } else { ExtBuffer3[bar] = 1; } ExtBuffer4[bar] = middleLine; ExtBuffer5[bar] = middleLine + indent; ExtBuffer6[bar] = middleLine - indent1; break; } } //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ 这里有什么错误? 我已经有好几次没有看到这种错误了。 case BB_MODE: middleLine = value = ExtBuffer2[bar]; for ( int i = bar - levelsPeriod + 1; i <= bar; i++ ) { sum += MathPow(ExtBuffer1[i]-value, 2); 2020.02.05 10:56:13.220 Core 1 2017.11.01 00:00:00 'Oscillator For BBS.mq5'中的数组超出了范围(308,41) 。 Vladislav Andruschenko 2020.02.05 09:35 #26344 Aleksandr Prishenko: 这里的错误是什么? 我已经有好几个版本没有看到这样的错误了。 2020.02.05 10:56:13.220 Core 1 2017.11.01 00:00:00 'Oscillator For BBS.mq5'中的数组超出了范围(308,41) 。 А...我明白了... 嗯,这可能与更新没有关系。必须弄清楚为什么..... Aleksandr Prishenko 2020.02.05 10:05 #26345 Vladislav Andruschenko: А...我明白了... 嗯,这可能与更新没有关系。必须弄清楚为什么..... 它已经工作了5年多))。代码并没有改变)。 Grigori.S.B 2020.02.05 10:14 #26346 Aleksandr Prishenko: 它已经工作了5年多))。代码并没有改变) 这完全不能说明这些错误是由于平台更新造成的。你已经离开了这个阵列。 Aleksey Vyazmikin 2020.02.05 12:25 #26347 Evgeny Potapov: 你好! 我想用一个批处理文件来运行一些MT4。 请告诉我如何做,为什么我的代码不起作用。 它最多只能运行几个MT4,然后就挂了。 当然,也不乏有RAM的存在。 此外,我在不同的电脑上试了一下 是否需要便携式模式的钥匙? 它是否手动启动所有终端? Roman 2020.02.05 13:57 #26348 Alexey Viktorov: 罗曼,这是你第二次上当,因为你基本不愿意阅读文档。 而在mql4文档中,如果我没记错的话,它明确指出变量不应该被用作数组大小。 不太一样,但还是要感谢你引用了文档的内容。 Roman 2020.02.05 14:12 #26349 Koldun Zloy: 我不是一个开发者,但我要发表意见。 对于静态数组,编译器必须在编译时在内存中分配一定数量的字节。 如果在编译时row和col是未知的,编译器应该分配多少内存? 初始值只在调用时省略参数的情况下使用。实际参数只有在运行时才知道。 因此,不搞噱头,学习语言。 这听起来差不多,谢谢你,我心里也有同样的想法。 C的例子正是我的指导思想。 int N, M; int i, j; scanf("%d", &N); scanf("%d", &M); int A[N][M]; for (i = 0; i < N; i++) { for (j = 0; j < M; j++) { A[i][j] = 10 + rand() % (20 - 10 + 1); printf("%d ", A[i][j]); } } puts("\n"); 但显然,现代编译器已经变得更加严格。 我在VS中检查了这段代码,它也抱怨说有未分配的阵列内存。 也许这个样本是为其他编译器准备的,或者它已经过时了,取决于语言标准? Andrey Dik 2020.02.05 16:40 #26350 现在在mql5.com页面标题中,有三个图标,紧挨着个人资料按钮。 1.收藏 2.饲料 3.留言 请添加另一个图标,类似的东西。 4.奖金 当天收到的所有资金(市场、自由职业者等)的数额将被显示出来,这将是非常方便的,而现在你必须到个人资料中去看可用的余额。 1...262826292630263126322633263426352636263726382639264026412642...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这个平台(MT5)是为金融市场交易设计的,还是一个马戏团?每次我们都要为你的更新重做代码,我们要怎么做?我已经厌烦了。
这个平台(MT5)是为金融市场交易设计的,还是一个马戏团?每次我们都要为你的更新重做代码,我们要怎么做?我已经厌烦了。
hmm....
你到底需要修改什么? 也许我也需要?
我不认为我已经做了什么更新.........。
这里有什么错误? 我已经有好几次没有看到这种错误了。
这里的错误是什么? 我已经有好几个版本没有看到这样的错误了。
А...我明白了...
嗯,这可能与更新没有关系。必须弄清楚为什么.....
А...我明白了...
嗯,这可能与更新没有关系。必须弄清楚为什么.....
它已经工作了5年多))。代码并没有改变)。
它已经工作了5年多))。代码并没有改变)
这完全不能说明这些错误是由于平台更新造成的。你已经离开了这个阵列。
你好!
我想用一个批处理文件来运行一些MT4。
请告诉我如何做,为什么我的代码不起作用。
它最多只能运行几个MT4,然后就挂了。
当然,也不乏有RAM的存在。
此外,我在不同的电脑上试了一下
是否需要便携式模式的钥匙?
它是否手动启动所有终端?
罗曼,这是你第二次上当,因为你基本不愿意阅读文档。
而在mql4文档中,如果我没记错的话,它明确指出变量不应该被用作数组大小。
不太一样,但还是要感谢你引用了文档的内容。
我不是一个开发者,但我要发表意见。
对于静态数组,编译器必须在编译时在内存中分配一定数量的字节。
如果在编译时row和col是未知的,编译器应该分配多少内存?
初始值只在调用时省略参数的情况下使用。实际参数只有在运行时才知道。
因此,不搞噱头,学习语言。
这听起来差不多,谢谢你,我心里也有同样的想法。
C的例子正是我的指导思想。
但显然,现代编译器已经变得更加严格。
我在VS中检查了这段代码,它也抱怨说有未分配的阵列内存。
也许这个样本是为其他编译器准备的,或者它已经过时了,取决于语言标准?
现在在mql5.com页面标题中,有三个图标,紧挨着个人资料按钮。
1.收藏
2.饲料
3.留言
请添加另一个图标,类似的东西。
4.奖金
当天收到的所有资金(市场、自由职业者等)的数额将被显示出来,这将是非常方便的,而现在你必须到个人资料中去看可用的余额。