初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1339 1...133213331334133513361337133813391340134113421343134413451346...1503 新评论 Alexey Viktorov 2021.08.29 06:16 #13381 Kira27 #: 嗨!!!告诉我哪里错了,我自己也不明白) 在275个工具中,它处理了27个,然后卡住了,占据了内存,并在脚本被迫终止时产生一个错误字符串。 如果这个数组 double bufer_MA[]; //Буфер для хендла 然后将其用于 CopyBuffer(MA200,0,TimeCurrent(),5,bufer_MA); // заполнение масива bufer_MA хендлом MA200 выбранного тайма 这一点也不对。 还是我误解了什么? Artyom Trishkin 2021.08.29 09:21 #13382 Alexey Viktorov #:如果这个数组然后将其用于是完全不对的。还是我误解了什么? 有很多事情是不对的。 Kira27 2021.08.29 10:32 #13383 Alexey Viktorov #:如果这个数组那么它在Пример: //+------------------------------------------------------------------+ //| TestCopyBuffer3.mq5 | //| Copyright 2009, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2009, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property indicator_separate_window #property indicator_buffers 1 #property indicator_plots 1 //---- plot MA #property indicator_label1 "MA" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- input parameters input bool AsSeries=true; input int period=15; input ENUM_MA_METHOD smootMode=MODE_EMA; input ENUM_APPLIED_PRICE price=PRICE_CLOSE; input int shift=0; //--- indicator buffers double MABuffer[]; int ma_handle; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,MABuffer,INDICATOR_DATA); Print("Параметр AsSeries = ",AsSeries); Print("Индикаторный буфер после SetIndexBuffer() является таймсерией = ", ArrayGetAsSeries(MABuffer)); //--- set short indicator name IndicatorSetString(INDICATOR_SHORTNAME,"MA("+period+")"+AsSeries); //--- set AsSeries (depends on input parameter) ArraySetAsSeries(MABuffer,AsSeries); Print("Индикаторный буфер после ArraySetAsSeries(MABuffer,true); является таймсерией = ", ArrayGetAsSeries(MABuffer)); //--- ma_handle=iMA(Symbol(),0,period,shift,smootMode,price); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| 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[]) { //--- check if all data calculated if(BarsCalculated(ma_handle)<rates_total) return(0); //--- we can copy not all data int to_copy; if(prev_calculated>rates_total || prev_calculated<=0) to_copy=rates_total; else { to_copy=rates_total-prev_calculated; //--- last value is always copied to_copy++; } //--- try to copy if(CopyBuffer(ma_handle,0,0,to_copy,MABuffer)<=0) return(0); //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ 是完全不对的。还是我误解了什么? 为什么错了? 因为在函数的例子中 复制缓冲区 并使用 Kira27 2021.08.29 10:39 #13384 Alexey Viktorov #: 还是我误解了什么? 脚本的重点是在1分钟到4小时的时间段内,通过市场观察中的每个工具来寻找价格高于MA200的情况,如果检测到这一事实,在所有6个时间段内产生一个带有价格高于MA的符号名称的警报。 Kira27 2021.08.29 10:46 #13385 Artyom Trishkin #:有很多事情是不对的。 如果你不介意的话,请更具体一些) Artyom Trishkin 2021.08.29 19:53 #13386 Kira27 #:如果你不介意的话,请更具体一些) 阵列索引只是简单的令人毛骨悚然...在一个循环中复制相同的数据...在一个循环中创建新的手柄--无字... 我甚至不想看他们的其他部分,对不起 Kira27 2021.08.29 21:53 #13387 Artyom Trishkin #:阵列索引只是简单的令人毛骨悚然...在一个循环中复制相同的数据...在一个循环中创建新的手柄--无字...我甚至不想看其余的代码,对不起 我不明白数组的索引,你不喜欢什么数组? CopyBuffer函数第43行的数据是复制不同时间段的句柄,从1分钟到4H。5个MA指标价格被复制,为前5个柱状,句柄和5个柱状的数组在每次迭代时都被清零。 ArrayFree(bufer_MA); 并且手柄被删除。 IndicatorRelease(MA200); //Удаление хендла 如果你能提出一种算法,以其他方式处理274个符号和6个时间段上的每个符号,我会很高兴的。 只是这个主题有点像叫--初学者的问题。 如果我是一个专家,我可能不会有任何问题。 Fast235 2021.08.29 22:12 #13388 在不同的情况下创建手柄 似乎并不昂贵,它只是一个没有预加载的指针? 主要的工作是由CopyBuffer完成的。 没有必要在循环中删除句柄,你可能需要检查它。 就我个人而言,我只有在创建第一个时才有一个持续的问题;它是通过Sleep()加载一个图表或预加载报价的功能来解决的。 开发者应该自己决定,速度在OnInit中并不重要,我指的是第一个有7个符号的指标,错误总是在不同的迭代中显示出来。 ---------- 创建一个句柄是如何工作的,在一个特殊的循环中,是否有必要检查可用性,或者只是另一个创建就够了(即覆盖)? Kira27 2021.08.29 23:29 #13389 Fast235 #:在不同的情况下创建手柄 似乎并不昂贵,它只是一个没有预加载的指针? 主要的工作是由CopyBuffer完成的。没有必要在循环中删除句柄,你可能需要检查它。 就我个人而言,我只有在创建第一个时才有一个持续的问题;它是通过Sleep()加载一个图表或预加载报价的功能来解决的。开发者应该自己决定,速度在OnInit中并不重要,我指的是第一个有7个符号的指标,错误总是在不同的迭代中显示出来。----------创建一个句柄是如何工作的,在一个特殊的循环中,是否有必要检查可用性,或者只是另一个创建就足够了(即覆盖)? 你是在跟我说话,还是在问当地专家的问题?) Fast235 2021.08.29 23:37 #13390 Kira27 #:你是在跟我说话,还是在问这里的专家?) 关于创建和删除手柄。 它是有效的,我对正确的方法感兴趣,我希望开发者能告诉我。 1...133213331334133513361337133813391340134113421343134413451346...1503 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
嗨!!!告诉我哪里错了,我自己也不明白)
在275个工具中,它处理了27个,然后卡住了,占据了内存,并在脚本被迫终止时产生一个错误字符串。
如果这个数组
然后将其用于
这一点也不对。
还是我误解了什么?
如果这个数组
然后将其用于
是完全不对的。
还是我误解了什么?
有很多事情是不对的。
如果这个数组
那么它在
是完全不对的。
还是我误解了什么?
为什么错了? 因为在函数的例子中
复制缓冲区
并使用
Alexey Viktorov #:
还是我误解了什么?
脚本的重点是在1分钟到4小时的时间段内,通过市场观察中的每个工具来寻找价格高于MA200的情况,如果检测到这一事实,在所有6个时间段内产生一个带有价格高于MA的符号名称的警报。
有很多事情是不对的。
如果你不介意的话,请更具体一些)
如果你不介意的话,请更具体一些)
阵列索引只是简单的令人毛骨悚然...在一个循环中复制相同的数据...在一个循环中创建新的手柄--无字...
我甚至不想看他们的其他部分,对不起
阵列索引只是简单的令人毛骨悚然...在一个循环中复制相同的数据...在一个循环中创建新的手柄--无字...
我甚至不想看其余的代码,对不起
我不明白数组的索引,你不喜欢什么数组? CopyBuffer函数第43行的数据是复制不同时间段的句柄,从1分钟到4H。5个MA指标价格被复制,为前5个柱状,句柄和5个柱状的数组在每次迭代时都被清零。
ArrayFree(bufer_MA);
并且手柄被删除。
如果你能提出一种算法,以其他方式处理274个符号和6个时间段上的每个符号,我会很高兴的。 只是这个主题有点像叫--初学者的问题。 如果我是一个专家,我可能不会有任何问题。
在不同的情况下创建手柄 似乎并不昂贵,它只是一个没有预加载的指针? 主要的工作是由CopyBuffer完成的。
没有必要在循环中删除句柄,你可能需要检查它。 就我个人而言,我只有在创建第一个时才有一个持续的问题;它是通过Sleep()加载一个图表或预加载报价的功能来解决的。
开发者应该自己决定,速度在OnInit中并不重要,我指的是第一个有7个符号的指标,错误总是在不同的迭代中显示出来。
----------
创建一个句柄是如何工作的,在一个特殊的循环中,是否有必要检查可用性,或者只是另一个创建就够了(即覆盖)?
在不同的情况下创建手柄 似乎并不昂贵,它只是一个没有预加载的指针? 主要的工作是由CopyBuffer完成的。
没有必要在循环中删除句柄,你可能需要检查它。 就我个人而言,我只有在创建第一个时才有一个持续的问题;它是通过Sleep()加载一个图表或预加载报价的功能来解决的。
开发者应该自己决定,速度在OnInit中并不重要,我指的是第一个有7个符号的指标,错误总是在不同的迭代中显示出来。
----------
创建一个句柄是如何工作的,在一个特殊的循环中,是否有必要检查可用性,或者只是另一个创建就足够了(即覆盖)?
你是在跟我说话,还是在问当地专家的问题?)
你是在跟我说话,还是在问这里的专家?)
关于创建和删除手柄。
它是有效的,我对正确的方法感兴趣,我希望开发者能告诉我。