错误、漏洞、问题 - 页 735 1...728729730731732733734735736737738739740741742...3184 新评论 --- 2012.05.03 10:58 #7341 joo:发现了一个 "困惑"。为什么编译器不喜欢第二个b 变量的定义?而一般来说,我应该如何处理这种情况?它不喜欢这个定义。它只是写了另一个错误--数组维度 的变量类型错误你只能在尺寸中指定常数 Andrey Dik 2012.05.03 11:02 #7342 sergeev:他不喜欢的不是定义。它还写了另一个错误--数组维度 的变量类型错误只有常数可以在尺寸中指定常量也不会起作用,会有一个错误。const int AA =11; ArrWe m[AA];访问指定者 访问指定器告诉编译器如何访问变量、结构的成员或类。 const指定符 声明一个变量是一个常量,并且不允许在程序执行过程中改变这个变量的值 。 在声明一个变量时,允许对其进行一次初始化。 --- 2012.05.03 11:05 #7343 我的意思是只有两种选择Arr[100]。或 #define r 100 int Arr[r]对于其余的ArrayResize Dmitriy Skub 2012.05.03 11:19 #7344 papaklass: 我不明白。我在图表上放了一个EA,这个信息出现在 "专家 "选项卡中。反正专家顾问继续工作。这不是一个错误,而是一个警告。关于什么的警告? 这是一个运行时 的错误--它意味着内存泄漏。某处被字符串占用的内存没有被释放。最有可能的是,它是一个结构或类,在新建后没有被删除。你需要翻阅代码才能更具体。 Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров www.mql5.com Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5 Valerii Mazurenko 2012.05.03 20:57 #7345 joo:常量也不会起作用,会有一个错误。访问指定者 访问指定器告诉编译器如何访问变量、结构的成员或类。 const指定符 声明一个变量是一个常量,并且不允许这个变量的值在程序执行过程中被改变 。 在声明一个变量时,允许对其进行一次初始化。 一个常数变量不是一个常数!它被允许被初始化一次,也就是说,它是一个被分配内存的变量。常数的任务是计算并插入代码中,在运行时不占用内存。常数将是 const AA=11。因此,编译器会被宣誓。如果const AA=11,它就不会抱怨。 Виктор 2012.05.05 12:21 #7346 你能告诉我问题出在哪里吗?在ChannelPeriod=100的最后一个区间,指标读数有一个急剧的上移,超过最后100个柱子,一切显示正常。有谁知道如何解决这个问题吗?//+------------------------------------------------------------------+ 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[]) { //--- variables of indicator int i; CopyClose(Symbol1_Name,PERIOD_M30,0,rates_total,close_1); CopyClose(Symbol2_Name,PERIOD_M30,0,rates_total,close_2); //--- main cycle for(i=prev_calculated; i<rates_total; i++) { Last[i] = (Symbol1_Vol*Symbol1_K*close_1[i] - Symbol2_Vol*Symbol2_K*close_2[i]); } // Считаем положение эквити относительно канала удвоенного среднеквадратичного отклонения double StdDev; for(i=prev_calculated; i<rates_total; i++) { StdDev=MyStdDev(Last,ChannelPeriod,i); if(StdDev>0.00001) // Защита от отсутствия данных ExtStdDevBuffer[i]=(Last[i]+2*StdDev-iMAOnArrayMQL4(Last,0,ChannelPeriod,0,MODE_SMA,i))/(4*StdDev); } return(rates_total); } //----------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------- // Calculation StdDev -----------------------------------------------| // StdDev = SQRT (SUM [(S(i) - SMA(i))^2, N] / N) | double MyStdDev(double &array[], int BandsPeriod, int Index) { double ds, sum, center; sum = 0; center = iMAOnArrayMQL4(array,0,BandsPeriod,0,MODE_SMA,Index); for(int i = 0; i < BandsPeriod; i++) { ds = array[Index+i] - center; sum += ds * ds; } sum = MathSqrt (sum / BandsPeriod); return (sum); } //----------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------- double iMAOnArrayMQL4(double &array[], int total, int period, int ma_shift, int ma_method, int shift) { double buf[],arr[]; if(total==0) total=ArraySize(array); if(total>0 && total<=period) return(0); if(shift>total-period-ma_shift) return(0); switch(ma_method) { case MODE_SMA : { total=ArrayCopy(arr,array,0,shift+ma_shift,period); if(ArrayResize(buf,total)<0) return(0); double sum=0; int i,pos=total-1; for(i=1;i<period;i++,pos--) sum+=arr[pos]; while(pos>=0) { sum+=arr[pos]; buf[pos]=sum/period; sum-=arr[pos+period-1]; pos--; } return(buf[0]); } case MODE_EMA : { if(ArrayResize(buf,total)<0) return(0); double pr=2.0/(period+1); int pos=total-2; while(pos>=0) { if(pos==total-2) buf[pos+1]=array[pos+1]; buf[pos]=array[pos]*pr+buf[pos+1]*(1-pr); pos--; } return(buf[shift+ma_shift]); } case MODE_SMMA : { if(ArrayResize(buf,total)<0) return(0); double sum=0; int i,k,pos; pos=total-period; while(pos>=0) { if(pos==total-period) { for(i=0,k=pos;i<period;i++,k++) { sum+=array[k]; buf[k]=0; } } else sum=buf[pos+1]*(period-1)+array[pos]; buf[pos]=sum/period; pos--; } return(buf[shift+ma_shift]); } case MODE_LWMA : { if(ArrayResize(buf,total)<0) return(0); double sum=0.0,lsum=0.0; double price; int i,weight=0,pos=total-1; for(i=1;i<=period;i++,pos--) { price=array[pos]; sum+=price*i; lsum+=price; weight+=i; } pos++; i=pos+period; while(pos>=0) { buf[pos]=sum/weight; if(pos==0) break; pos--; i--; price=array[pos]; sum=sum-lsum+price*period; lsum-=array[i]; lsum+=price; } return(buf[shift+ma_shift]); } default: return(0); } return(0); } //----------------------------------------------------------------------------------------- Виктор 2012.05.05 12:23 #7347 指标 附加的文件: Spread_O.mq5 7 kb [删除] 2012.05.06 07:21 #7348 为什么当我按下 "开始 "按钮时,测试器不从最初的存款水平开始测试,而是从上一次测试结束的水平开始。4中没有这样的问题。如何从初始存款水平开始测试? Aleksey Rodionov 2012.05.06 09:57 #7349 请给我一个直接的链接来下载PDF格式的教科书,因为我的手机浏览器不能看到网站上的所有内容。 --- 2012.05.06 10:37 #7350 Zeleniy: 请给我一个可以下载PDF格式教科书的直接链接,因为我的手机浏览器无法看到网站上的一切。 没有教科书,只有帮助。 1...728729730731732733734735736737738739740741742...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
发现了一个 "困惑"。
为什么编译器不喜欢第二个b 变量的定义?
而一般来说,我应该如何处理这种情况?
它不喜欢这个定义。
它只是写了另一个错误--数组维度 的变量类型错误
你只能在尺寸中指定常数
他不喜欢的不是定义。
它还写了另一个错误--数组维度 的变量类型错误
只有常数可以在尺寸中指定
常量也不会起作用,会有一个错误。
访问指定者
访问指定器告诉编译器如何访问变量、结构的成员或类。
const指定符 声明一个变量是一个常量,并且不允许在程序执行过程中改变这个变量的值 。 在声明一个变量时,允许对其进行一次初始化。
我的意思是只有两种选择
Arr[100]。
或
#define r 100
int Arr[r]
对于其余的ArrayResize
我不明白。我在图表上放了一个EA,这个信息出现在 "专家 "选项卡中。反正专家顾问继续工作。这不是一个错误,而是一个警告。关于什么的警告?
常量也不会起作用,会有一个错误。
访问指定者
访问指定器告诉编译器如何访问变量、结构的成员或类。
const指定符 声明一个变量是一个常量,并且不允许这个变量的值在程序执行过程中被改变 。 在声明一个变量时,允许对其进行一次初始化。
一个常数变量不是一个常数!它被允许被初始化一次,也就是说,它是一个被分配内存的变量。
常数的任务是计算并插入代码中,在运行时不占用内存。
常数将是 const AA=11。
因此,编译器会被宣誓。如果const AA=11,它就不会抱怨。
你能告诉我问题出在哪里吗?
在ChannelPeriod=100的最后一个区间,指标读数有一个急剧的上移,超过最后100个柱子,一切显示正常。
有谁知道如何解决这个问题吗?
请给我一个可以下载PDF格式教科书的直接链接,因为我的手机浏览器无法看到网站上的一切。