mql5中的OOP、模板和宏,细微之处和用途 - 页 15 1...8910111213141516171819202122...28 新评论 Vladimir Simakov 2019.08.14 20:04 #141 Vict: 我把事情搞得太复杂了))。 所以,让第一种人使用,这可能是最好的方式。 把TEST写几遍也不是问题。 你也可以这样做,但只能以相反的顺序调用所有的东西。 #define LINE(dId) EA.AddDealsSettings(InDealType_##dId,InVolType_##dId,InVolume_##dId,InPrice_##dId,InVolCoeff_##dId,InClosePips_##dId,Mirror) #define BLOCK1 LINE(01) #define BLOCK2 LINE(02); BLOCK1 #define BLOCK3 LINE(03); BLOCK2 #define BLOCK4 LINE(04); BLOCK3 #define BLOCK5 LINE(05); BLOCK4 #define BLOCK6 LINE(06); BLOCK5 #define BLOCK7 LINE(07); BLOCK6 #define BLOCK8 LINE(08); BLOCK7 #define BLOCK9 LINE(09); BLOCK8 #define BLOCK10 LINE(10); BLOCK9 #define SEND(dCount) do {BLOCK##dCount;} while(false) void OnStart() { SEND(10); } Igor Makanu 2019.08.14 20:13 #142 嗯,我以为我会让自己更容易少敲键盘,但现在我不得不处理所有的例子了。 @Vladimir Simakov 酷! @Vict 谢谢你! ZS:说实话,我只理解了宏的第一个例子,其他的都不明白((())。 Vladimir Simakov 2019.08.14 20:17 #143 Igor Makanu: 嗯,我以为我会让自己更容易少敲键盘,但现在我不得不处理所有的例子了。 @Vladimir Simakov 酷! @Vict 谢谢你! ZS:说实话,我只理解了宏的第一个例子,其他的都不明白((())。 预处理器的魔力被调用))) Igor Makanu 2019.08.14 20:24 #144 Vladimir Simakov: 预处理程序的魔力被调用了))) 我知道,我从来没有练习过,这就是为什么它很难学(())。 我可以把这段代码变成一个宏吗? //--- input parameters input ENUM_DEALTYPE InDealType_01=BUY; //1.------------------------------ Order ------------------------------ input int InPrice_01 = 000; //Start price input double InVolume_01 = 0.01; //Start Volume input ENUM_VOLUMERATIO InVolType_01=MultiplyAlways; //Next operation with volume coefficient input double InVolCoeff_01 = 1.5; //Volume coefficient input ENUM_DISTANCERATIO InDistType_01 = NotMove; //Next price type input double InDistCoeff_01 = 1.23; //Coefficient next open price input int InDistShift_01 = 150; //Shift next open price input int InClosePips_01 = 200; //TakeProfit>0 or StopLoss<0 input ENUM_DEALTYPE InDealType_02=BUY; //2.------------------------------ Order ------------------------------ input int InPrice_02 = 000; //Start price input double InVolume_02 = 0.01; //Start Volume input ENUM_VOLUMERATIO InVolType_02=MultiplyAlways; //Next operation with volume coefficient input double InVolCoeff_02 = 1.5; //Volume coefficient input ENUM_DISTANCERATIO InDistType_02 = NotMove; //Next price type input double InDistCoeff_02 = 1.23; //Coefficient next open price input int InDistShift_02 = 150; //Shift next open price input int InClosePips_02 = 200; //TakeProfit>0 or StopLoss<0 那么10次呢? 我的意思是,还剩下8次...但我不知道,当我在优化器中运行时,也许我会添加或删除参数,我还没有最终确定代码(注释是相同的,但有一个数字是不同的 - 第一行)。 Vladimir Simakov 2019.08.14 20:28 #145 Igor Makanu: 我知道,我从来没有练习过,这就是为什么它很难学(())。 这段代码可以用宏包起来吗? 那么10次呢? 而且评论是相同的,但有一个数字是不同的。 是的,没有问题,但就是没有评论。是的,并且用/* ... 替换它们。*/将不起作用,在这种情况下,编译器停止接受它在设置表的外部变量的文本描述中的作用。已检查。 Igor Makanu 2019.08.14 20:35 #146 Vladimir Simakov:是的,没有问题,但就是没有评论。是的,并且用/* ... 替换它们。*/将不起作用,在这种情况下,编译器在设置表的外部变量的文本描述中停止接受它。已检查。 那么就有问题了,这些评论将不得不由hand.... 来纠正。对于测试来说,这很好,反正它更快,我正在处理我的代码,编辑它需要很多时间,我不能到测试器... 如果你不介意,请举个例子,不加评论。 PS:也许这个想法很垃圾,但从早上开始我就在脑子里想我想看的东西....。对于现在一个网格的订单进入优化器,但最终的目标是不同的(而不是一些固定的网格步骤,我想附加一个多项式,使优化器运行的系数,那么也许是相同的,但我想看到泰勒的行;)),但网格首先我需要看到优化器显示,一个测试多边形 一般我准备))。 Andrey Khatimlianskii 2019.08.14 21:31 #147 Igor Makanu: 我知道,我从来没有练习过,这就是为什么它很难学(())。 我可以把这段代码变成一个宏吗? 那么10次呢? 我的意思是,还剩下8次...但我不知道,当我在优化器中运行时,也许我会增加或删除参数,我还没有写代码(注释是相同的,但有一个数字是不同的 - 第一行)。 你可以写一个小函数来生成这个代码(并保存到文件或剪贴板)。 Igor Makanu 2019.08.14 23:42 #148 Andrey Khatimlianskii: 你可以写一个小函数来生成这个代码(并将其保存到文件或剪贴板上)。 好了,你去了,摧毁了所有的诗意,在散文中,这并不难,像这样。 #property copyright "IgorM" #property link "https://www.mql5.com/ru/users/igorm" #property version "1.00" #include <Files\FileTxt.mqh> CFileTxt FOut; #define COUNT 10 const string code0[]= { "input ENUM_DEALTYPE InDealType_","=BUY; //",".------------------------------ Order ------------------------------" }; const string code1[]= { "input int InPrice_"," = 000; //Start price", "input double InVolume_"," = 0.01; //Start Volume", "input ENUM_VOLUMERATIO InVolType_","=MultiplyAlways; //Next operation with volume coefficient", "input double InVolCoeff_"," = 1.5; //Volume coefficient", "input ENUM_DISTANCERATIO InDistType_"," = NotMove; //Next price type", "input double InDistCoeff_"," = 1.23; //Coefficient next open price", "input int InDistShift_"," = 150; //Shift next open price", "input int InClosePips_"," = 200; //TakeProfit>0 or StopLoss<0" }; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { if(FOut.Open(__FILE__+".txt",FILE_WRITE|FILE_COMMON)!=INVALID_HANDLE) { for(int i=0;i<COUNT;i++) { string N=IntegerToString(i,2,'0'); FOut.WriteString(code0[0]+N+code0[1]+IntegerToString(i)+code0[2]+"\n"); for(int j=0;j<8;j++) { FOut.WriteString(code1[j*2]+N+code1[j*2+1]+"\n"); } } printf("Write to file %s",FOut.FileName()); } else printf("Open file error № %i",GetLastError()); } //+------------------------------------------------------------------+ )))) 但还是要感谢你的建议! Alexey Viktorov 2019.08.15 06:44 #149 Vladimir Simakov: 是的,没有问题,但就是没有评论。是的,并且用/* ... 替换它们。*/将不起作用,在这种情况下,编译器在设置表的外部变量的文本描述中停止接受它。已检查。 也许你做错了什么?还是宏的行为方式不同? input double d1=1.02,/*Первая переменная double*/ d2=3;/*Вторая переменная double*/ input double d3=3.07;/*Третья переменная double*/ input int i1=5,/*Первая переменная int*/ i2=7;/*Вторая переменная int*/ Vladimir Simakov 2019.08.15 07:20 #150 Alexey Viktorov:你做错了什么吗?还是宏的行为方式不同? 是的,它是不同的。这与预处理器在解析器 之前启动并愚蠢地收集文本有关,宏内的注释在预处理器的阶段被丢弃。同时,如果你把//留在宏中,你可能会因为自己的过错而得到一个猛烈的错误。 1...8910111213141516171819202122...28 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我把事情搞得太复杂了))。
所以,让第一种人使用,这可能是最好的方式。
把TEST写几遍也不是问题。你也可以这样做,但只能以相反的顺序调用所有的东西。
嗯,我以为我会让自己更容易少敲键盘,但现在我不得不处理所有的例子了。
@Vladimir Simakov 酷!
@Vict 谢谢你!
ZS:说实话,我只理解了宏的第一个例子,其他的都不明白((())。
嗯,我以为我会让自己更容易少敲键盘,但现在我不得不处理所有的例子了。
@Vladimir Simakov 酷!
@Vict 谢谢你!
ZS:说实话,我只理解了宏的第一个例子,其他的都不明白((())。
预处理器的魔力被调用)))
预处理程序的魔力被调用了)))
我知道,我从来没有练习过,这就是为什么它很难学(())。
我可以把这段代码变成一个宏吗?
那么10次呢?
我的意思是,还剩下8次...但我不知道,当我在优化器中运行时,也许我会添加或删除参数,我还没有最终确定代码(注释是相同的,但有一个数字是不同的 - 第一行)。
我知道,我从来没有练习过,这就是为什么它很难学(())。
这段代码可以用宏包起来吗?
那么10次呢? 而且评论是相同的,但有一个数字是不同的。
是的,没有问题,但就是没有评论。是的,并且用/* ... 替换它们。*/将不起作用,在这种情况下,编译器停止接受它在设置表的外部变量的文本描述中的作用。已检查。
是的,没有问题,但就是没有评论。是的,并且用/* ... 替换它们。*/将不起作用,在这种情况下,编译器在设置表的外部变量的文本描述中停止接受它。已检查。
那么就有问题了,这些评论将不得不由hand.... 来纠正。对于测试来说,这很好,反正它更快,我正在处理我的代码,编辑它需要很多时间,我不能到测试器...
如果你不介意,请举个例子,不加评论。
PS:也许这个想法很垃圾,但从早上开始我就在脑子里想我想看的东西....。对于现在一个网格的订单进入优化器,但最终的目标是不同的(而不是一些固定的网格步骤,我想附加一个多项式,使优化器运行的系数,那么也许是相同的,但我想看到泰勒的行;)),但网格首先我需要看到优化器显示,一个测试多边形 一般我准备))。
我知道,我从来没有练习过,这就是为什么它很难学(())。
我可以把这段代码变成一个宏吗?
那么10次呢?
我的意思是,还剩下8次...但我不知道,当我在优化器中运行时,也许我会增加或删除参数,我还没有写代码(注释是相同的,但有一个数字是不同的 - 第一行)。
你可以写一个小函数来生成这个代码(并保存到文件或剪贴板)。
你可以写一个小函数来生成这个代码(并将其保存到文件或剪贴板上)。
好了,你去了,摧毁了所有的诗意,在散文中,这并不难,像这样。
))))
但还是要感谢你的建议!
是的,没有问题,但就是没有评论。是的,并且用/* ... 替换它们。*/将不起作用,在这种情况下,编译器在设置表的外部变量的文本描述中停止接受它。已检查。
也许你做错了什么?还是宏的行为方式不同?
你做错了什么吗?还是宏的行为方式不同?