新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 973 1...966967968969970971972973974975976977978979980...1953 新评论 im-zvv 2019.09.21 11:34 #9721 你好。 请帮助我理解。当检查一个简单数组的操作时(赋值)。 a[0][2]=91.49999999993754; Print("a[0][2]=",a[0][2]); H= 1/(1+exp(-a[0][2]))。 a[0][2]=H。 打印(" 1/(1+exp(-a[0][2]))=",1/(1+exp(-a[0][2])), " H=",H," a[0][2]=",a[0][2])。 我得到的结果是。 2019.09.21 13:21:44.328 2011.01.03 14:54:20 W EURUSD,H4: a[0][2]=91.49999999993754 2019.09.21 13:21:44.328 2011.01.03 14:54:18 W EURUSD,H4: 1/(1+exp(-a[0][2])) =0.7310585786300049 H=1.0 a[0][2]=1.0 怎么说呢? Any questions from newcomers static array ? 静态数组 ? Igor Makanu 2019.09.21 11:50 #9722 im-zvv: 你好。 请帮助我理解。当检查一个简单数组的操作时(赋值)。 a[0][2]=91.49999999993754; Print("a[0][2]=",a[0][2]); H= 1/(1+exp(-a[0][2]))。 a[0][2]=H。 打印(" 1/(1+exp(-a[0][2]))=",1/(1+exp(-a[0][2])), " H=",H," a[0][2]=",a[0][2])。 我得到的结果是。 2019.09.21 13:21:44.328 2011.01.03 14:54:20 W EURUSD,H4: a[0][2]=91.49999999993754 2019.09.21 13:21:44.328 2011.01.03 14:54:18 W EURUSD,H4: 1/(1+exp(-a[0][2])) =0.7310585786300049 H=1.0 a[0][2]=1.0 怎么说呢? 这是一个很难重现的例子,但我怀疑由于类型转换 的原因,你得到的结果与你预期的不同。 用这个代码做实验。 void OnStart() { double a; int b = 2; a = b / 5; // a = 0.0 Print("a = ",a); } 然后用这个。 void OnStart() { double a; int b = 2; a = b /(double) 5; // a = 0.4 Print("a = ",a); } и void OnStart() { double a; int b = 2; a = b / 5.0; // a = 0.4 Print("a = ",a); } 并在论坛上搜索一下 "实数",总之,C转换一开始是有点混乱的;) im-zvv 2019.09.21 12:50 #9723 你已经展示了一堆使用int 变量的例子。 我的变量都是双倍的。 所以,将变量转换为相同的格式是行不通的。 Igor Makanu 2019.09.21 12:57 #9724 im-zvv: 你已经展示了一堆使用int 变量的例子。 我的变量都是双倍的。 因此,将变量转换为相同的格式是行不通的。 a[0][2]=91.49999999993754; Print("a[0][2]=",a[0][2]); H=1/(1+exp(-a[0][2]))。 a[0][2]=H。 打印(" 1/(1+exp(-a[0][2]))=",1/(1+exp(-a[0][2])), " H=",H," a[0][2]=",a[0][2])。 我得到的结果是。 2019.09.21 13:21:44.328 2011.01.03 14:54:20 W EURUSD,H4: a[0][2]=91.49999999993754 2019.09.21 13:21:44.328 2011.01.03 14:54:18 W EURUSD,H4: 1/(1+exp(-a[0][2]))=0.7310585786300049 H=1.0 a[0][2]=1.0 怎么说呢? 你有整数常数 以及例子本身是不可复制的--没有变量类型,好在一般来说--我的 "一堆例子 "可以不用PC计算,你的例子...请告诉我e^(-91.49999)是什么。 好吧,算了,我帮不了你。 im-zvv 2019.09.21 13:18 #9725 遗憾的是,"不能帮助"... 问题不在于e^(-91.49999)的多少。问题是,为什么一个double=H类型 的变量,被错误地写成了 早期计算出的双数类型=0.7310585786300049,但它被写成了1.0(顺便说一下双数)。 如果你尝试在测试器中使用我的代码,我想你的MT4会显示同样的东西。 如果是这样,你根本就不能用MQL4来工作,这很危险! Igor Makanu 2019.09.21 13:37 #9726 im-zvv: 太糟糕了。"不能帮助"...... 我帮助了,帮助并不意味着为我做,否则我反正不会看,我关心的是结果!"。 im-zvv。 如果是这样,MQL4根本不能用于工作,是很危险的! MQL4/MQL5在计算数学表达式方面的行为与C++相同。 你可以到任何一个C++论坛上提出你的问题,也许那里的资产会帮助你。 你的问题已经从帮助/解释/教学转移到讨论MT平台,不喜欢它,你是免费收到的? ...在古代,由于缺乏对物理过程的了解,人们对雷声或地震感到恐慌。起初,它引起了恐慌和猜测,然后是宗教))))。 im-zvv 2019.09.21 13:49 #9727 你不应该如此生气。 如果我伤害了你的个人感情,我真诚地道歉。 我根本不是在讨论或评判MT4。我只是建议你运行 我只是提出在MT4的测试器中运行我发给你的代码,如果所有的变量(H,a[0][2])都在 被定义为双倍,结果和我一样,我有一个问题。 问题是什么?我把它送给了你。 再一次:我很抱歉...... "帮不上忙"...... 再见。 Igor Makanu 2019.09.21 13:59 #9728 im-zvv: 即所有变量(H,a[0][2])都是 被定义为双 再次强调--你的数学表达式中是否有常数?- 我的例子也有常数5 ...然后我写了5.0--对编译器来说是不一样的!然后我明确地把整数常数5带到了double类型--->对编译器来说,它将与上面的例子5.0一样。 你的问题在论坛上经常重复,尽管我可能看不出你的问题是什么--你有一个 "沉重的公式 "和不明显的变量--从例子中删除不必要的东西--数组和指数--然后你会看到问题是什么,尽管如果你删除所有不必要的东西,你很可能会发现你得到的东西不是你所期望的--我通常会这样做;) HH:和指数到负91.49的幂--不是一个非常小的数字吗?"双 "型有很大的准确性,但到百位数并考虑到减号--在我看来,这种表达方式将失去准确性,我不想谷歌,但 我翻阅这个Wiki 的第一件事是 im-zvv 2019.09.21 14:38 #9729 谢谢您的耐心等待! 试过这个: A=91.49999999993754;//a[0][2]=91.49999999993754; Print("A=",A)。 H= 1/(1+exp(-A))。 //A=H; Print("1/(1+exp(-A))=",1/(1+exp(-A)), " H=",H," a[0][2]=",a[0][2])。 结果。 2019.09.21 16:14:17.691 2011.01.04 22:29:51 w eurusd,h4: a=91.4999999999993754 2019.09.21 16:14:17.690 2011.01.04 22:29:50 w EURUSD,H4: 1/(1+exp(-A))=1.0 H=1.0 a[0][2]=0.0 !!!!!这表明1/(1+exp(-91.499999993754))=1.0,但如果我保持代码中的A=H,那么在打印命令中继续计算( 我将尝试找出为什么1/(1+exp(-91.49999999993754))=1.0。 请理解我。我现在正忙于调整和训练神经网络。 代码本身很粗糙,连我自己都感到困惑......:) 我注意到,网络重复出现错误。而主要的错误是在计算sigmoid的时候。它不应该是=1。 Any questions from newcomers static array ? 静态数组 ? Igor Makanu 2019.09.21 14:53 #9730 im-zvv: 谢谢您的耐心等待! 试过这个: A=91.49999999993754;//a[0][2]=91.49999999993754; Print("A=",A)。 H= 1/(1+exp(-A))。 //A=H; Print("1/(1+exp(-A))=",1/(1+exp(-A)), " H=",H," a[0][2]=",a[0][2])。 结果。 2019.09.21 16:14:17.691 2011.01.04 22:29:51 w eurusd,h4: a=91.4999999999993754 2019.09.21 16:14:17.690 2011.01.04 22:29:50 w EURUSD,H4: 1/(1+exp(-A))=1.0 H=1.0 a[0][2]=0.0 !!!!!这表明1/(1+exp(-91.499999993754))=1.0,但如果我保持代码中的A=H,那么在打印命令中继续计算( 我将尝试找出为什么1/(1+exp(-91.49999999993754))=1.0。 请理解我。我现在正忙于调整和训练神经网络。 代码本身很粗糙,连我自己都感到困惑......:) 我注意到,网络重复出现错误。而主要的错误是在计算sigmoid的时候。它一定不是=1。 所以你不会发现什么,这就是我决定要检查的,你必须寻找代码中的错误或不准确之处。 void OnStart() { double a=91.49999999993754; Print("1. a = ",a); double H= 1/(1+exp(-a)); a=H; Print("2. a = ",a); Print("3. H = ",H); double e = exp(-91.49999999993754); Print("4. e = ",e); } 2019.09.21 16:53:01.516 tst_template EURUSD,H1: 4. e = 1.828331349163451e-40 2019.09.21 16:53:01.516 tst_template EURUSD,H1: 3.H = 1.0 2019.09.21 16:53:01.516 tst_template EURUSD,H1: 2. a = 1.0 2019.09.21 16:53:01.516 tst_template EURUSD,H1: 1. a = 91.49999999993754 然后按步骤计算并重印结果,但在我看来,在第4步,准确度已经下降,我的结果如下:1.82 x 10^(-40) - 这是一个非常小的数字,今后用这样的小数字进行任何操作都会进一步失去更多的准确性,这是在用实数工作时的一个所谓的 "魔法" - 为了不失去准确性,用这样的小数字尝试用整数或双数进行计算,但不会失去尾数 - 你需要乘以10^40 ... - 然后在一般情况下需要计数,所以继续我不会帮助 Any questions from newcomers Declaring variables behind the [ARCHIVE]Any rookie question, so 1...966967968969970971972973974975976977978979980...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你好。
请帮助我理解。当检查一个简单数组的操作时(赋值)。
a[0][2]=91.49999999993754;
Print("a[0][2]=",a[0][2]);
H= 1/(1+exp(-a[0][2]))。
a[0][2]=H。
打印(" 1/(1+exp(-a[0][2]))=",1/(1+exp(-a[0][2])), " H=",H," a[0][2]=",a[0][2])。
我得到的结果是。
2019.09.21 13:21:44.328 2011.01.03 14:54:20 W EURUSD,H4: a[0][2]=91.49999999993754
2019.09.21 13:21:44.328 2011.01.03 14:54:18 W EURUSD,H4: 1/(1+exp(-a[0][2])) =0.7310585786300049 H=1.0 a[0][2]=1.0
怎么说呢?
你好。
请帮助我理解。当检查一个简单数组的操作时(赋值)。
a[0][2]=91.49999999993754;
Print("a[0][2]=",a[0][2]);
H= 1/(1+exp(-a[0][2]))。
a[0][2]=H。
打印(" 1/(1+exp(-a[0][2]))=",1/(1+exp(-a[0][2])), " H=",H," a[0][2]=",a[0][2])。
我得到的结果是。
2019.09.21 13:21:44.328 2011.01.03 14:54:20 W EURUSD,H4: a[0][2]=91.49999999993754
2019.09.21 13:21:44.328 2011.01.03 14:54:18 W EURUSD,H4: 1/(1+exp(-a[0][2])) =0.7310585786300049 H=1.0 a[0][2]=1.0
怎么说呢?
这是一个很难重现的例子,但我怀疑由于类型转换 的原因,你得到的结果与你预期的不同。
用这个代码做实验。
然后用这个。
и
并在论坛上搜索一下 "实数",总之,C转换一开始是有点混乱的;)
你已经展示了一堆使用int 变量的例子。
我的变量都是双倍的。
所以,将变量转换为相同的格式是行不通的。
你已经展示了一堆使用int 变量的例子。
我的变量都是双倍的。
因此,将变量转换为相同的格式是行不通的。
a[0][2]=91.49999999993754;
Print("a[0][2]=",a[0][2]);
H=1/(1+exp(-a[0][2]))。
a[0][2]=H。
打印(" 1/(1+exp(-a[0][2]))=",1/(1+exp(-a[0][2])), " H=",H," a[0][2]=",a[0][2])。
我得到的结果是。
2019.09.21 13:21:44.328 2011.01.03 14:54:20 W EURUSD,H4: a[0][2]=91.49999999993754
2019.09.21 13:21:44.328 2011.01.03 14:54:18 W EURUSD,H4: 1/(1+exp(-a[0][2]))=0.7310585786300049 H=1.0 a[0][2]=1.0
怎么说呢?
你有整数常数 以及例子本身是不可复制的--没有变量类型,好在一般来说--我的 "一堆例子 "可以不用PC计算,你的例子...请告诉我e^(-91.49999)是什么。
好吧,算了,我帮不了你。
遗憾的是,"不能帮助"...
问题不在于e^(-91.49999)的多少。问题是,为什么一个double=H类型 的变量,被错误地写成了
早期计算出的双数类型=0.7310585786300049,但它被写成了1.0(顺便说一下双数)。
如果你尝试在测试器中使用我的代码,我想你的MT4会显示同样的东西。
如果是这样,你根本就不能用MQL4来工作,这很危险!
太糟糕了。"不能帮助"......
我帮助了,帮助并不意味着为我做,否则我反正不会看,我关心的是结果!"。
如果是这样,MQL4根本不能用于工作,是很危险的!
MQL4/MQL5在计算数学表达式方面的行为与C++相同。 你可以到任何一个C++论坛上提出你的问题,也许那里的资产会帮助你。
你的问题已经从帮助/解释/教学转移到讨论MT平台,不喜欢它,你是免费收到的?
...在古代,由于缺乏对物理过程的了解,人们对雷声或地震感到恐慌。起初,它引起了恐慌和猜测,然后是宗教))))。
你不应该如此生气。
如果我伤害了你的个人感情,我真诚地道歉。
我根本不是在讨论或评判MT4。我只是建议你运行
我只是提出在MT4的测试器中运行我发给你的代码,如果所有的变量(H,a[0][2])都在
被定义为双倍,结果和我一样,我有一个问题。
问题是什么?我把它送给了你。
再一次:我很抱歉...... "帮不上忙"......
再见。
即所有变量(H,a[0][2])都是
被定义为双
再次强调--你的数学表达式中是否有常数?- 我的例子也有常数5 ...然后我写了5.0--对编译器来说是不一样的!然后我明确地把整数常数5带到了double类型--->对编译器来说,它将与上面的例子5.0一样。
你的问题在论坛上经常重复,尽管我可能看不出你的问题是什么--你有一个 "沉重的公式 "和不明显的变量--从例子中删除不必要的东西--数组和指数--然后你会看到问题是什么,尽管如果你删除所有不必要的东西,你很可能会发现你得到的东西不是你所期望的--我通常会这样做;)
HH:和指数到负91.49的幂--不是一个非常小的数字吗?"双 "型有很大的准确性,但到百位数并考虑到减号--在我看来,这种表达方式将失去准确性,我不想谷歌,但 我翻阅这个Wiki 的第一件事是
谢谢您的耐心等待!
试过这个:
A=91.49999999993754;//a[0][2]=91.49999999993754;
Print("A=",A)。
H= 1/(1+exp(-A))。
//A=H;
Print("1/(1+exp(-A))=",1/(1+exp(-A)), " H=",H," a[0][2]=",a[0][2])。
结果。
2019.09.21 16:14:17.691 2011.01.04 22:29:51 w eurusd,h4: a=91.4999999999993754
2019.09.21 16:14:17.690 2011.01.04 22:29:50 w EURUSD,H4: 1/(1+exp(-A))=1.0 H=1.0 a[0][2]=0.0
我将尝试找出为什么1/(1+exp(-91.49999999993754))=1.0。
请理解我。我现在正忙于调整和训练神经网络。 代码本身很粗糙,连我自己都感到困惑......:)
我注意到,网络重复出现错误。而主要的错误是在计算sigmoid的时候。它不应该是=1。
谢谢您的耐心等待!
试过这个:
A=91.49999999993754;//a[0][2]=91.49999999993754;
Print("A=",A)。
H= 1/(1+exp(-A))。
//A=H;
Print("1/(1+exp(-A))=",1/(1+exp(-A)), " H=",H," a[0][2]=",a[0][2])。
结果。
2019.09.21 16:14:17.691 2011.01.04 22:29:51 w eurusd,h4: a=91.4999999999993754
2019.09.21 16:14:17.690 2011.01.04 22:29:50 w EURUSD,H4: 1/(1+exp(-A))=1.0 H=1.0 a[0][2]=0.0
我将尝试找出为什么1/(1+exp(-91.49999999993754))=1.0。
请理解我。我现在正忙于调整和训练神经网络。 代码本身很粗糙,连我自己都感到困惑......:)
我注意到,网络重复出现错误。而主要的错误是在计算sigmoid的时候。它一定不是=1。
所以你不会发现什么,这就是我决定要检查的,你必须寻找代码中的错误或不准确之处。
2019.09.21 16:53:01.516 tst_template EURUSD,H1: 4. e = 1.828331349163451e-40
2019.09.21 16:53:01.516 tst_template EURUSD,H1: 3.H = 1.0
2019.09.21 16:53:01.516 tst_template EURUSD,H1: 2. a = 1.0
2019.09.21 16:53:01.516 tst_template EURUSD,H1: 1. a = 91.49999999993754