程序库: MT4Orders - 页 37 1...303132333435363738394041424344...95 新评论 fxsaber 2019.04.30 23:05 #361 关于交易、自动交易系统和测试交易策略的论坛 专家顾问:Equity Tral fxsaber, 2019.04.30 22:57 在 MT5 下转换此 EA #define MT4_TICKET_TYPE // 命令发送(OrderSend)和订单票据(OrderTicket)必须返回与 MT4 相同类型的值 - int。 #include <KimIVToMT5.mqh> //https://c.mql5.com/3/263/KimIVToMT5.mqh #include "ind4to5.mqh" //https://c.mql5.com/3/277/ind4to5.mqh bool ObjectSetText( const string name, const string text, const int font_size = 0, const string font_name = NULL, const color Color = clrNONE ) { return(ObjectSetString(0, name, OBJPROP_TEXT, text) && ((font_name == NULL) || ObjectSetInteger(0, name, OBJPROP_FONTSIZE, font_size)) && ((font_name == NULL) || ObjectSetString(0, name, OBJPROP_FONT, font_name)) && ((Color == clrNONE) || ObjectSetInteger(0, name, OBJPROP_COLOR, Color))); } void OnInit() { init(); } void OnDeinit( const int ) { deinit(); } void OnTick() { start(); } #include "Equity_Tral.mq4" //https://www.mql5.com/zh/code/12354 fxsaber 2019.05.02 01:22 #362 我正在研究自学指标转换的特殊性。下面是另外三个指标。 #define MT4_TICKET_TYPE // 命令发送(OrderSend)和订单票据(OrderTicket)必须返回与 MT4 相同类型的值 - int。 #include <KimIVToMT5.mqh> //https://c.mql5.com/3/263/KimIVToMT5.mqh #define MT4_OLD_EVENT_HANDLERS #include "ind4to5.mqh" //https://c.mql5.com/3/277/ind4to5.mqh bool ObjectSetText( const string name, const string text, const int font_size = 0, const string font_name = NULL, const color Color = clrNONE ) { return(ObjectSetString(0, name, OBJPROP_TEXT, text) && ((font_name == NULL) || ObjectSetInteger(0, name, OBJPROP_FONTSIZE, font_size)) && ((font_name == NULL) || ObjectSetString(0, name, OBJPROP_FONT, font_name)) && ((Color == clrNONE) || ObjectSetInteger(0, name, OBJPROP_COLOR, Color))); } int WindowFind( const string ) { return(ChartWindowFind()); } int Digits( void ) { return(_Digits); } string StringTrimRight2( string Str ) { StringTrimRight(Str); return(Str); } string StringTrimLeft2( string Str ) { StringTrimLeft(Str); return(Str); } string ObjectDescription( const string name ) { return(ObjectGetString(0, name, OBJPROP_TEXT)); } #define CORNER_LEFT_LOWER 2 #define CORNER_LEFT_UPPER 0 #define CORNER_RIGHT_LOWER 3 #define CORNER_RIGHT_UPPER 1 #define CORNER(A) ((A) ? ((A) + 1) % 3 + 1 : 0) bool ObjectSet2( const string name, const ENUM_OBJECT_PROPERTY_INTEGER property, const long value ) { return((property != OBJPROP_CORNER) ? ObjectSetInteger(0, name, property, value) : ObjectSetInteger(0, name, OBJPROP_CORNER, CORNER(value)) && ObjectSetInteger(0, name, OBJPROP_ANCHOR, CORNER(value) << 1)); } bool ObjectSet2( const string name, const ENUM_OBJECT_PROPERTY_DOUBLE property, const double value ) { return(ObjectSetDouble(0, name, property, value)); } #undef CORNER template <typename T> bool ObjectCreate2(const string name, const T type, const int subwindow, const datetime time1, const double price1, const datetime time2 = NULL, const double price2 = NULL) { return(ObjectCreate(0, name, (ENUM_OBJECT)type, subwindow, time1, price1, time2, price2)); }; template <typename T> bool ObjectCreate2(const long chart_id, const string name, const T type, const int subwindow, const datetime time1, const double price1, const datetime time2 = NULL, const double price2 = NULL) { return(ObjectCreate(chart_id, name, (ENUM_OBJECT)type, subwindow, time1, price1, time2, price2)); }; #define TRUE true #define FALSE false #define StringTrimRight StringTrimRight2 #define StringTrimLeft StringTrimLeft2 #define ObjectSet ObjectSet2 #define ObjectCreate ObjectCreate2 #define StringConcatenate StringConcatenate2 string StringConcatenate2( const string Str1, const int Str2 ) { return(Str1 + (string)Str2); } string StringConcatenate2( const double Str1, const string Str2, const string Str3 ) { return((string)Str1 + Str2 + Str3); } string StringConcatenate2( const string Str1, const string Str2, const string Str3 = "", const string Str4 = "", const string Str5 = "", const string Str6 = "", const string Str7 = "" ) { return(Str1 + Str2 + Str3 + Str4 + Str5 + Str6 + Str7); } string StringConcatenate2( const string Str1, const int Str2, const string Str3, const string Str4, const string Str5, const double Str6, const string Str7, const string Str8, const string Str9, const double Str10 ) { return(Str1 + (string)Str2 + Str3 + Str4 + Str5 + (string)Str6 + Str7 + Str8 + Str9 + (string)Str10); } string StringConcatenate2( const string Str1, const int Str2, const string Str3, const string Str4, const string Str5, const double Str6, const string Str7, const string Str8, const string Str9, const double Str10, const string Str11, const double Str12 ) { return(Str1 + (string)Str2 + Str3 + Str4 + Str5 + (string)Str6 + Str7 + Str8 + Str9 + (string)Str10 + Str11 + (string)Str12); } string StringConcatenate2( const string Str1, const int Str2, const string Str3, const double Str4, const string Str5, const double Str6 ) { return(Str1 + (string)Str2 + Str3 + (string)Str4 + Str5 + (string)Str6); } string StringConcatenate2( const string Str1, const double Str2, const string Str3, const string Str4 ) { return(Str1 + (string)Str2 + Str3 + Str4); } string StringConcatenate2( const string Str1, const string Str2, const int Str3 ) { return(Str1 + Str2 + (string)Str3); } #property indicator_buffers 0 #property indicator_plots 0 #define Symb SymbTmp #define NULL "" #property indicator_separate_window #include "TradeInfo.mq4" //https://github.com/icefx/tradeinfo/blob/master/TradeInfo.mq4 // #属性 indicator_chart_window // #include "ProfitInfo.mq4" //https://github.com/icefx/profitinfo/blob/master/ProfitInfo.mq4 // #属性 indicator_chart_window // #include "IceFX.DrawProfit.mq4" //https://github.com/icefx/drawprofit/blob/master/IceFX.DrawProfit.mq4 像往常一样,我没有动 MT4 的原始代码。 您可以从源代码中清楚地看到作者在代码中使用了 StringConcatenate。这太愚蠢了! Vladimir Perervenko 2019.05.02 09:38 #363 TO: fxsaber谢谢你,好心人。还有很多工作要做。向您致敬。最后两个指标(ProfitInfo、IceFX.DrawProfit)真的出现了 44 个错误。缺少了一些东西。但这并不重要。重要的是,如果有必要,您现在可以快速将您的开发成果转化为 MKL5。祝您好运 PS: 也许是时候将您的工作转移到 GitHub 了? 附加的文件: Err.zip 229 kb fxsaber 2019.05.02 10:13 #364 Vladimir Perervenko:最后两个指标(ProfitInfo、IceFX.DrawProfit)出现了 44 个错误。有东西丢失了。 最有可能的是,他们不小心在某处多留了一个字符。 PS: 也许是时候将您的作品转移到 GitHub 了?我不知道该怎么做。而且为什么要从已配置的资源中移除某些东西呢? Andrey Khatimlianskii 2019.05.02 22:53 #365 Vladimir Perervenko: PS:也许是时候把你的工作转移到 GitHub 上了?我已经建议了很久。我甚至还创建了一个 repo 并开始定期更新,但后来还是放弃了。 fxsaber: 为什么要从剖析资源中移除某些内容? 1.便于跟踪更新(在一个列表中显示所有编辑,在源代码中突出显示......)。鉴于 kodobase 中所有文件存档的问题(错误尚未修复),这一点尤为重要。 2.一键切换到任何版本(在工作终端)。 3.只需点击几下即可在新电脑上同步。 4. ... 5.摆脱本地专制 管理。删除评论、代码、文章或账户是家常便饭。封杀异议者也是家常便饭(我就不多说了)。 例如,getch-a 和 hrenfx 的开发现在已经很难找到,有些甚至根本找不到。fxsaber 明天会怎么样?;) Vladimir Perervenko 2019.05.03 13:57 #366 fxsaber:从源代码中,你可以清楚地看到哪些作者在他们的代码中使用了 StringConcatenate。这太愚蠢了!正确的方法是什么? 如果你用 "+"替换它 - 它会转换。如果在StringConcatenate() 中有两个参数,它就会转换,如果有更多参数,它就不会转换。 fxsaber 2019.05.03 14:13 #367 Vladimir Perervenko:正确的方法是什么?Str = Str1 + Str2 + Str3 + ....; fxsaber 2019.05.03 14:14 #368 Andrey Khatimlianskii:我已经建议了一段时间。我甚至还创建了一个 repo,并开始定期更新,但后来就不了了之了。1.方便跟踪更新(所有编辑都在一个列表中,在源代码中突出显示......)。鉴于 kodobase 中所有文件存档的问题(错误尚未修复?)2.一键切换到任何版本(在工作终端)。3.点击几下即可在新电脑上同步。4. ...5.摆脱本地管理层的 傲慢。删除评论、代码、文章或账户是家常便饭。禁止持不同政见者也是常规程序(不用我说)。谢谢你列出的论据。我会努力研究这个话题。 Andrey Khatimlianskii 2019.05.03 15:55 #369 fxsaber:感谢您提供的论据清单。我会努力研究这个问题。 论坛上有一个讨论。BitBucket + utf8 编码 + 用于同步的源代码树 = 准备就绪的存储库 Stanislav Korotky 2019.05.03 21:24 #370 Andrey Khatimlianskii: 论坛上曾有过这样的讨论BitBucket + utf8 编码 + 用于同步的 SourceTree = 准备就绪的存储库最多可有 5 人同时拥有编辑权。 1...303132333435363738394041424344...95 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
关于交易、自动交易系统和测试交易策略的论坛
专家顾问:Equity Tral
fxsaber, 2019.04.30 22:57
在 MT5 下转换此 EA
我正在研究自学指标转换的特殊性。下面是另外三个指标。
像往常一样,我没有动 MT4 的原始代码。
您可以从源代码中清楚地看到作者在代码中使用了 StringConcatenate。这太愚蠢了!
TO: fxsaber
谢谢你,好心人。还有很多工作要做。向您致敬。
最后两个指标(ProfitInfo、IceFX.DrawProfit)真的出现了 44 个错误。缺少了一些东西。但这并不重要。
重要的是,如果有必要,您现在可以快速将您的开发成果转化为 MKL5。
祝您好运
PS: 也许是时候将您的工作转移到 GitHub 了?最后两个指标(ProfitInfo、IceFX.DrawProfit)出现了 44 个错误。有东西丢失了。
最有可能的是,他们不小心在某处多留了一个字符。
我不知道该怎么做。而且为什么要从已配置的资源中移除某些东西呢?
PS:也许是时候把你的工作转移到 GitHub 上了?
我已经建议了很久。我甚至还创建了一个 repo 并开始定期更新,但后来还是放弃了。
为什么要从剖析资源中移除某些内容?
1.便于跟踪更新(在一个列表中显示所有编辑,在源代码中突出显示......)。鉴于 kodobase 中所有文件存档的问题(错误尚未修复),这一点尤为重要。
2.一键切换到任何版本(在工作终端)。
3.只需点击几下即可在新电脑上同步。
4. ...
5.摆脱本地专制 管理。删除评论、代码、文章或账户是家常便饭。封杀异议者也是家常便饭(我就不多说了)。
例如,getch-a 和 hrenfx 的开发现在已经很难找到,有些甚至根本找不到。fxsaber 明天会怎么样?;)
从源代码中,你可以清楚地看到哪些作者在他们的代码中使用了 StringConcatenate。这太愚蠢了!
正确的方法是什么?
如果你用 "+"替换它 - 它会转换。如果在StringConcatenate() 中有两个参数,它就会转换,如果有更多参数,它就不会转换。
正确的方法是什么?
我已经建议了一段时间。我甚至还创建了一个 repo,并开始定期更新,但后来就不了了之了。
1.方便跟踪更新(所有编辑都在一个列表中,在源代码中突出显示......)。鉴于 kodobase 中所有文件存档的问题(错误尚未修复?)
2.一键切换到任何版本(在工作终端)。
3.点击几下即可在新电脑上同步。
4. ...
5.摆脱本地管理层的 傲慢。删除评论、代码、文章或账户是家常便饭。禁止持不同政见者也是常规程序(不用我说)。
谢谢你列出的论据。我会努力研究这个话题。
感谢您提供的论据清单。我会努力研究这个问题。
论坛上曾有过这样的讨论
最多可有 5 人同时拥有编辑权。