从头开始自学MQL5语言 - 页 84 1...7778798081828384 新评论 [删除] 2021.11.29 07:29 #831 Georgiy Merts #:这就是我要说的!而你说'没有人见过'。没有人感兴趣--所以没有人看过(小丑们不感兴趣--他们没有看过)。那些有兴趣的人--他们已经看到了。 向版主发送了对该小丑的投诉,并将这样做,直到你被禁。 Georgiy Merts 2021.11.29 07:36 #832 Vladimir Baskakov #: 向版主发送了关于这个小丑的投诉,并将这样做,直到你被禁止。 哦,用他的光屁股吓唬刺猬......。 [删除] 2021.11.29 07:37 #833 Georgiy Merts #:哦,用他的光屁股吓唬刺猬......。 我不着急。 Alexey Viktorov 2021.11.29 08:11 #834 Georgiy Merts #:我看不出有什么问题。对。填充的数组被声明,然后--它被再次填充,用其他数据。在我看来,对于一个初学者来说,这是一个相当可以接受的错误。而这是一个错误吗?当我声明变量和数组时,我必须立即填满它们。如果在声明的那一刻,确切的价值是未知的,我就用明知无效的价值来填补它。如果一个变量在没有初始化的情况下被声明,然后被使用,它可能包含随机值,这些随机值将在工作中被使用,而这个工作的结果将是不正确的,而且很难发现问题(我已经不止一次发现)。但如果一个变量在创建时就被初始化为无效值,在使用未初始化变量的情况下,将立即发现它包含一些垃圾,很容易找到它的来源,并发现该变量是在没有初始化的情况下使用的。因此,我个人认为,声明一个已经填充的数组是很好的做法。但我们应该在那里采取WRONG_VALUE值。 我一点也不反对初始化变量甚至数组。例如,像这样 int ExtHandle[21] = {}; 也将是一个初始化的数组。但在这种情况下,即使这样做也是没有必要的,因为整个数组在OnInit()中已经被填充。所以我认为没有任何必要。甚至皮诺曹和他的苹果在这里也不起作用,因为在使用(读取)数值之前,它们已经被初始化了。 Georgiy Merts 2021.11.29 08:19 #835 Alexey Viktorov #:我一点也不反对初始化变量,甚至数组。例如,像这样也将是一个初始化的数组。但在这种特殊情况下,即使这样做也是没有必要的,因为在OnInit()中,整个数组都被填充了。所以我认为没有任何必要。甚至皮诺曹和他的苹果在这里也不起作用,因为在使用(读取)数值之前,它们已经被初始化了。 呃...那么它将在哪里被 "初始化"?根据代码,这样的数组将被填满垃圾。 在我看来,正如我已经说过的,在创建时用非无效的值进行初始化是很好的做法。 int ExtHandle[3] = {WRONG_VALUE;WRONG_VALUE;WRONG_VALUE}; 当然,如果数组很大--用这种方法填充它是不合理的,在这种情况下,我使用DEBUG版本,在这个版本中,我用非无效值填充大数组,而在RELEASE版本中,没有填充。 这种做法多次使我免于使用未初始化的变量。 Alexey Viktorov 2021.11.29 08:47 #836 SanAlex #:你在代码中的名字--你设置的代码我在你的名字下创建,以了解。但这并不奏效。 那么,谁该为你的坏手负责呢? 在图片上你可以看到,计算值是9.08253,转换后是9.08,不要告诉我小数点后16位中的1。 还有,如果你得到一个小于最小体积的值 我不得不输入另一个变量来显示... Alexey Viktorov 2021.11.29 08:59 #837 Georgiy Merts #:呃...那么它在哪里会被 "初始化 "呢?根据代码,这样的数组将充满了垃圾。在我看来,在创建时用无效的值进行初始化是很好的做法,我已经说过了。当然,如果数组很大--用这种方法填充它是不合理的,在这种情况下,我使用DEBUG版本,在这个版本中,我用非无效值填充大数组,而在RELEASE版本中,没有填充。这种做法多次使我免于使用未初始化的变量。 就在这里,在突出显示的循环中。并注意到一个事实,即我只是在谈论一个阵列。 关于交易、自动交易系统和策略测试的论坛 在MQL5中从头开始自学 SanAlex, 2021.11.29 07:17 我不明白你在说什么。我亲手做的。你是什么意思?代码来自终端,但方式本身,如何实现在测试器中打开几对,我个人实现了这个结果。 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 告诉我,我在哪里从你那里拿了代码。 //+------------------------------------------------------------------+ //| Copyright 2021, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2021, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //--- #include <Trade\Trade.mqh> //--- CTrade ExtTrade; //+------------------------------------------------------------------+ input double MaximumRisk = 0.02; // Maximum Risk in percentage //--- int ExtHandle[]= {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; double LotsRisk[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; string symb_name[]= {"EURUSD","GBPUSD","USDCHF","USDJPY","USDCAD","AUDUSD","AUDNZD", "AUDCAD","AUDCHF","AUDJPY","CHFJPY","EURGBP","EURAUD","EURCHF", "EURJPY","EURNZD","EURCAD","GBPCHF","GBPJPY","CADCHF","GBPAUD" }; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- ExtTrade.SetExpertMagicNumber(0); ExtTrade.SetMarginMode(); //--- for(int i=0; i<20; i++) { ExtTrade.SetTypeFillingBySymbol(symb_name[i]); //--- Moving Average indicator ExtHandle[i]=iMA(symb_name[i],_Period,12,6,MODE_SMA,PRICE_CLOSE); if(ExtHandle[i]==INVALID_HANDLE) { printf("Error creating MA indicator"); return(INIT_FAILED); } } //--- return(INIT_SUCCEEDED); } 我已经删除了代码中与我们的对话无关的所有内容。嗯,几乎所有的东西... Georgiy Merts 2021.11.29 09:34 #838 Alexey Viktorov #:就在那里,在突出显示的循环中。并注意到一个事实,即我只是在谈论一个阵列。 是的,这是正确的。在我看来,这是正常的做法。 SanAlex 2021.11.29 13:00 #839 SanAlex #:这个几乎已经准备好了--我只需要删除不必要的非功能性功能。这个多货币专家顾问来自这个 "MACD样本.mq5" 我似乎已经删除了所有不必要的东西,以便它能够工作。我必须把它打磨得有滋有味,然后我再把它贴在这里。 \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ 这是我目前得到的情况--也许有人会做得更好 附加的文件: 00001_Mult.mq5 15 kb MrBrooklin 2021.12.01 10:30 #840 Alexey Viktorov #:我真的希望这不是你写的...。这里有一个工作函数 你所要做的就是输入风险大小,不从全额自由保证金中计算... 大家今天好,心情好 我花了很长时间来理解和研究数组,但我已经有了结果,因为我自己写了计算12个货币对的风险的函数代码。 问候,弗拉基米尔。 //+------------------------------------------------------------------+ //| Входные параметры советника | //+------------------------------------------------------------------+ input double Risk0=1.0; //Риск для валютной пары EURUSD (% от баланса) . . . . input double Risk11=1.0; //Риск для валютной пары EURJPY (% от баланса) //+------------------------------------------------------------------+ //| Функция Money_Management рассчитывает размер лота в зависимости | //| от риска, заданного во входных параметрах советника. | //+------------------------------------------------------------------+ double Money_Management() { //--- объявляем динамический массив double risk[]; //--- устанавливаем размер массива ArrayResize(risk,12); //--- заполняем массив значениями риска ArrayFill(risk,0,1,Risk0); ArrayFill(risk,1,1,Risk1); ArrayFill(risk,2,1,Risk2); ArrayFill(risk,3,1,Risk3); ArrayFill(risk,4,1,Risk4); ArrayFill(risk,5,1,Risk5); ArrayFill(risk,6,1,Risk6); ArrayFill(risk,7,1,Risk7); ArrayFill(risk,8,1,Risk8); ArrayFill(risk,9,1,Risk9); ArrayFill(risk,10,1,Risk10); ArrayFill(risk,11,1,Risk11); //--- double price=0.0; double margin=0.0; double MaximumRisk=risk[11]/100; //--- if(!SymbolInfoDouble(_Symbol,SYMBOL_ASK,price)) return(0.0); if(!OrderCalcMargin(ORDER_TYPE_BUY,_Symbol,1.0,price,margin)) return(0.0); if(margin<=0.0) return(0.0); //--- double min_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MIN); double max_volume=SymbolInfoDouble(Symbol(),SYMBOL_VOLUME_MAX); //--- double lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_MARGIN_FREE)*MaximumRisk/margin,2); //--- if(lot<min_volume) lot=min_volume; if(lot>max_volume) lot=max_volume; return(lot); } //+------------------------------------------------------------------+ 1...7778798081828384 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这就是我要说的!
而你说'没有人见过'。没有人感兴趣--所以没有人看过(小丑们不感兴趣--他们没有看过)。那些有兴趣的人--他们已经看到了。
向版主发送了关于这个小丑的投诉,并将这样做,直到你被禁止。
哦,用他的光屁股吓唬刺猬......。
哦,用他的光屁股吓唬刺猬......。
我看不出有什么问题。
对。填充的数组被声明,然后--它被再次填充,用其他数据。在我看来,对于一个初学者来说,这是一个相当可以接受的错误。
而这是一个错误吗?
当我声明变量和数组时,我必须立即填满它们。如果在声明的那一刻,确切的价值是未知的,我就用明知无效的价值来填补它。如果一个变量在没有初始化的情况下被声明,然后被使用,它可能包含随机值,这些随机值将在工作中被使用,而这个工作的结果将是不正确的,而且很难发现问题(我已经不止一次发现)。
但如果一个变量在创建时就被初始化为无效值,在使用未初始化变量的情况下,将立即发现它包含一些垃圾,很容易找到它的来源,并发现该变量是在没有初始化的情况下使用的。
因此,我个人认为,声明一个已经填充的数组是很好的做法。但我们应该在那里采取WRONG_VALUE值。
我一点也不反对初始化变量甚至数组。例如,像这样
也将是一个初始化的数组。但在这种情况下,即使这样做也是没有必要的,因为整个数组在OnInit()中已经被填充。所以我认为没有任何必要。甚至皮诺曹和他的苹果在这里也不起作用,因为在使用(读取)数值之前,它们已经被初始化了。
我一点也不反对初始化变量,甚至数组。例如,像这样
也将是一个初始化的数组。但在这种特殊情况下,即使这样做也是没有必要的,因为在OnInit()中,整个数组都被填充了。所以我认为没有任何必要。甚至皮诺曹和他的苹果在这里也不起作用,因为在使用(读取)数值之前,它们已经被初始化了。
呃...那么它将在哪里被 "初始化"?根据代码,这样的数组将被填满垃圾。
在我看来,正如我已经说过的,在创建时用非无效的值进行初始化是很好的做法。
当然,如果数组很大--用这种方法填充它是不合理的,在这种情况下,我使用DEBUG版本,在这个版本中,我用非无效值填充大数组,而在RELEASE版本中,没有填充。
这种做法多次使我免于使用未初始化的变量。
你在代码中的名字--你设置的代码我在你的名字下创建,以了解。但这并不奏效。
那么,谁该为你的坏手负责呢?
在图片上你可以看到,计算值是9.08253,转换后是9.08,不要告诉我小数点后16位中的1。
还有,如果你得到一个小于最小体积的值
我不得不输入另一个变量来显示...
呃...那么它在哪里会被 "初始化 "呢?根据代码,这样的数组将充满了垃圾。
在我看来,在创建时用无效的值进行初始化是很好的做法,我已经说过了。
当然,如果数组很大--用这种方法填充它是不合理的,在这种情况下,我使用DEBUG版本,在这个版本中,我用非无效值填充大数组,而在RELEASE版本中,没有填充。
这种做法多次使我免于使用未初始化的变量。
就在这里,在突出显示的循环中。并注意到一个事实,即我只是在谈论一个阵列。
关于交易、自动交易系统和策略测试的论坛
在MQL5中从头开始自学
SanAlex, 2021.11.29 07:17
我不明白你在说什么。我亲手做的。你是什么意思?代码来自终端,但方式本身,如何实现在测试器中打开几对,我个人实现了这个结果。
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
告诉我,我在哪里从你那里拿了代码。
我已经删除了代码中与我们的对话无关的所有内容。嗯,几乎所有的东西...
就在那里,在突出显示的循环中。并注意到一个事实,即我只是在谈论一个阵列。
是的,这是正确的。在我看来,这是正常的做法。
这个几乎已经准备好了--我只需要删除不必要的非功能性功能。这个多货币专家顾问来自这个 "MACD样本.mq5"
我似乎已经删除了所有不必要的东西,以便它能够工作。我必须把它打磨得有滋有味,然后我再把它贴在这里。
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
这是我目前得到的情况--也许有人会做得更好
我真的希望这不是你写的...。
这里有一个工作函数
你所要做的就是输入风险大小,不从全额自由保证金中计算...
大家今天好,心情好
我花了很长时间来理解和研究数组,但我已经有了结果,因为我自己写了计算12个货币对的风险的函数代码。
问候,弗拉基米尔。