新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1042 1...103510361037103810391040104110421043104410451046104710481049...1953 新评论 wolder1 2020.01.16 18:55 #10411 Добрый день. Прошу помощи. Уже пару недель безуспешно пытаюсь заставить индикатор круглых уровней заставить (см.код) передавать их для использования в эксперте через iCustom. Прошу помочь поправить код. #property indicator_chart_window extern string H = " --- Mode_Settings ---"; extern bool Show_00_50_Levels = true; extern bool Show_20_80_Levels = true; extern color Level_00_Color = Lime; extern color Level_50_Color = Gray; extern color Level_20_Color = Red; extern color Level_80_Color = Green; double dXPoint = 1; double Div = 0; double i = 0; double HighPrice = 0; double LowPrice = 0; int iDigits; int start() { HighPrice = MathRound((High[iHighest(NULL, 0, MODE_HIGH, Bars + 300, 2)]+1) * Div); LowPrice = MathRound((Low[iLowest(NULL, 0, MODE_LOW, Bars + 300, 2)]-1) * Div); if(Show_00_50_Levels) { for (i = LowPrice; i <= HighPrice; i++) { if (MathMod(i, 5) == 0.0) { if (ObjectFind("RoundPrice " + DoubleToStr(i, 0)) != 0) { ObjectCreate("RoundPrice " + DoubleToStr(i, 0), OBJ_HLINE, 0, Time[1], i / Div); ObjectSet("RoundPrice " + DoubleToStr(i, 0), OBJPROP_STYLE, STYLE_DOT); if(MathMod(i, 10) == 0.0) { ObjectSet("RoundPrice " + DoubleToStr(i, 0), OBJPROP_COLOR, Level_00_Color); } else { ObjectSet("RoundPrice " + DoubleToStr(i, 0), OBJPROP_COLOR, Level_50_Color); } } } } } if(Show_20_80_Levels) { for (i = LowPrice; i <= HighPrice; i++) { if (StringSubstr(DoubleToStr(i/Div,iDigits), StringLen(DoubleToStr(i/Div,iDigits))-2, 2)=="20") { if (ObjectFind("RoundPrice " + DoubleToStr(i, 0)) != 0) { ObjectCreate("RoundPrice " + DoubleToStr(i, 0), OBJ_HLINE, 0, Time[1], i / Div); ObjectSet("RoundPrice " + DoubleToStr(i, 0), OBJPROP_STYLE, STYLE_DOT); ObjectSet("RoundPrice " + DoubleToStr(i, 0), OBJPROP_COLOR, Level_20_Color); } } if (StringSubstr(DoubleToStr(i/Div,iDigits), StringLen(DoubleToStr(i/Div,iDigits))-2, 2)=="80") { if (ObjectFind("RoundPrice " + DoubleToStr(i, 0)) != 0) { ObjectCreate("RoundPrice " + DoubleToStr(i, 0), OBJ_HLINE, 0, Time[1], i / Div); ObjectSet("RoundPrice " + DoubleToStr(i, 0), OBJPROP_STYLE, STYLE_DOT); ObjectSet("RoundPrice " + DoubleToStr(i, 0), OBJPROP_COLOR, Level_80_Color); } } } } return (0); } int init() { iDigits = Digits; if(Digits==5 || Digits==3)dXPoint=10; if(Digits==3) iDigits=2; if(Digits==5) iDigits=4; Div = 0.1 / (Point*dXPoint); return (0); } int deinit() { HighPrice = MathRound((High[iHighest(NULL, 0, MODE_HIGH, Bars + 300, 2)]+1) * Div); LowPrice = MathRound((Low[iLowest(NULL, 0, MODE_LOW, Bars + 300, 2)]-1) * Div); for (i = LowPrice; i <= HighPrice; i++) ObjectDelete("RoundPrice " + DoubleToStr(i, 0)); return (0); [删除] 2020.01.16 18:58 #10412 Aleksey Mavrin: 如果你说你的编程能力几乎为零,那么你为什么要承担这种非标准的任务,也许从简单的任务开始?或者提高你的基础知识?为你做这件事更容易,是的。 我并没有写:"让我成为一个指标"。我请求帮助。我没有必要完全掌握mql4。我只是在检查想法。我已经受够了EXCEL)。 Igor Makanu 2020.01.16 19:03 #10413 Oleg Bondarev: (我警告过你,我是个 "草泥马") 我是这样做的。 现在它画出了一个滴答图,但有一些断线。 我是在4个月内完成的。 断线表示Label1Buffer[ХХХ]中没有值。 第二个,我在上面写的,再来一次--指标缓冲区(Label1Buffer)是由终端控制的,如果你看到一个新的bar,数值都会自动转移--在M1上运行代码并观察 ZS:不是黑客,而是正在努力自学的人!)))) [删除] 2020.01.16 19:15 #10414 Igor Makanu: 断线表示Label1Buffer[XXX]中没有值。 第二个,我在上面写的,再来一次--指标缓冲区(Label1Buffer)是由终端控制的,如果出现新条形,那么数值都会自动转移--在M1上运行代码并观察 ZS:不是黑客,而是正在努力自学的人!)))) Label1Buffer[XXX] - 它是指3个复合数吗? Igor Makanu 2020.01.16 19:34 #10415 Oleg Bondarev: Label1Buffer[XXX] - 这是一个3分量的数字吗? 不,我写的是我记得的第一封信。 那是项目的编号。 看看你的代码,你写的代码与我的循环相似,你将指标缓冲区Label1Buffer 移动了一个元素--注意每一个指标调用(每一个刻度)。 并在你转移 Label1Buffer 的内容后 ,将新的值分配给Label1Buffer[0]。 其他元素的值是多少?一开始它们会有 "空值"(EMPTY_VALUE),然后你把它们移位一次,然后给....,赋予一个新值。然后,当一个新的条形图出现时, 终端本身将转移Label1Buffer的 所有值 一般来说,你的知识有轻微的转变,但尝试用指标简单地画出条形的收盘价,以下是代码 #property indicator_separate_window #property indicator_buffers 1 #property indicator_plots 1 //--- plot line1 #property indicator_label1 "line1" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- input parameters input int Input1=10; //--- indicator buffers double line1Buffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,line1Buffer); IndicatorDigits(Digits); //--- 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[]) { //--- int i,limit; //--- Первый вызов индикатора или смена таймфрейма или подгрузка данных из истории if(prev_calculated==0){ limit=rates_total-1; }else limit=rates_total-prev_calculated+1; // или limit=rates_total-prev_calculated ; чтобы не перерисовывать бар №1 //--- Основной цикл расчета //Print("limit = ",limit); for(i=limit; i>=0; i--){ line1Buffer[i]=close[i]; } //--- return(rates_total); } //+------------------------------------------------------------------+ [删除] 2020.01.16 20:03 #10416 我听你的。我得考虑一下。谢谢你! Alexandr Sokolov 2020.01.18 14:40 #10417 如何在Excel中记录数据?- MQL5。 Excel的文件格式是xlsx,但FileOpen函数 可以创建并处理txt和csv文件。 在OnTester中测试后,我需要从缓冲区卸载数据,这些缓冲区包含了每个tick打开时的不同数据历史,并在一个图表上输出所有交易的数据。 正如你所理解的,即使是一个交易,数据也会很多,更不用说所有的交易了 - 所以 "手动转移 "的选项并不适合。 你有什么建议? Alexandr Sokolov 2020.01.18 15:21 #10418 Alexandr Sokolov: 如何将数据导入Excel?- MQL5。 Excel文件格式是xlsx,FileOpen函数 可以创建并处理txt和csv文件。 我需要在OnTester中测试后,从缓冲区中卸载数据,缓冲区中包含每个tick点开仓时的不同历史数据,然后在一个图表上显示所有交易数据。 正如你所理解的,即使是一个交易,数据也会很多,更不用说所有的交易了 - 所以 "手动转移 "的选项并不适合。 你有什么建议? 好吧,底线很简单--你不能用MQL5直接写入Excel,但你可以在Excel的 "数据">>"来自文本 "标签下从文本文件导入数据。 ukrop1203 2020.01.18 16:51 #10419 你好,我在完成一个探索者测试后得到一个关于不成功的对象的错误,而且我已经完全创建了所有的对象,据我所知,是在堆栈中创建的,也就是说没有新建。请解释这个问题。 Igor Makanu 2020.01.18 17:37 #10420 Alexandr Sokolov: 你有什么建议? 写在.csv中并在Excel中打开 1...103510361037103810391040104110421043104410451046104710481049...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
如果你说你的编程能力几乎为零,那么你为什么要承担这种非标准的任务,也许从简单的任务开始?或者提高你的基础知识?为你做这件事更容易,是的。
我并没有写:"让我成为一个指标"。我请求帮助。我没有必要完全掌握mql4。我只是在检查想法。我已经受够了EXCEL)。
(我警告过你,我是个 "草泥马")
我是这样做的。
现在它画出了一个滴答图,但有一些断线。
我是在4个月内完成的。
断线表示Label1Buffer[ХХХ]中没有值。
第二个,我在上面写的,再来一次--指标缓冲区(Label1Buffer)是由终端控制的,如果你看到一个新的bar,数值都会自动转移--在M1上运行代码并观察
ZS:不是黑客,而是正在努力自学的人!))))
断线表示Label1Buffer[XXX]中没有值。
第二个,我在上面写的,再来一次--指标缓冲区(Label1Buffer)是由终端控制的,如果出现新条形,那么数值都会自动转移--在M1上运行代码并观察
ZS:不是黑客,而是正在努力自学的人!))))
Label1Buffer[XXX] - 它是指3个复合数吗?
Label1Buffer[XXX] - 这是一个3分量的数字吗?
不,我写的是我记得的第一封信。
那是项目的编号。
看看你的代码,你写的代码与我的循环相似,你将指标缓冲区Label1Buffer 移动了一个元素--注意每一个指标调用(每一个刻度)。
并在你转移 Label1Buffer 的内容后 ,将新的值分配给Label1Buffer[0]。
其他元素的值是多少?一开始它们会有 "空值"(EMPTY_VALUE),然后你把它们移位一次,然后给....,赋予一个新值。然后,当一个新的条形图出现时, 终端本身将转移Label1Buffer的 所有值
一般来说,你的知识有轻微的转变,但尝试用指标简单地画出条形的收盘价,以下是代码
如何在Excel中记录数据?- MQL5。

Excel的文件格式是xlsx,但FileOpen函数 可以创建并处理txt和csv文件。
在OnTester中测试后,我需要从缓冲区卸载数据,这些缓冲区包含了每个tick打开时的不同数据历史,并在一个图表上输出所有交易的数据。
正如你所理解的,即使是一个交易,数据也会很多,更不用说所有的交易了 - 所以 "手动转移 "的选项并不适合。
你有什么建议?
如何将数据导入Excel?- MQL5。
Excel文件格式是xlsx,FileOpen函数 可以创建并处理txt和csv文件。
我需要在OnTester中测试后,从缓冲区中卸载数据,缓冲区中包含每个tick点开仓时的不同历史数据,然后在一个图表上显示所有交易数据。
正如你所理解的,即使是一个交易,数据也会很多,更不用说所有的交易了 - 所以 "手动转移 "的选项并不适合。
你有什么建议?
好吧,底线很简单--你不能用MQL5直接写入Excel,但你可以在Excel的 "数据">>"来自文本 "标签下从文本文件导入数据。
你有什么建议?
写在.csv中并在Excel中打开