mql5语言的特点、微妙之处以及技巧 - 页 223 1...216217218219220221222223224225226227228229230...247 新评论 Koldun Zloy 2022.06.20 05:53 #2221 fxsaber #:针对数字字段用于排序的特殊情况(这是最常见的情况),我编写了一个变体,它比前一个变体快了几个数量级。但它消耗的内存是前者的两倍。它适用于大型数组。应用(测量执行时间)。结果 您认为该方案如何? #include <QuickSort.mqh> #include <fxsaber\Benchmark\Benchmark.mqh> // https://www.mql5.com/ru/code/31279 #define _BV2(A) _BV(A, 100) // Алертим все, что исполняется дольше 100 микросекунд. struct STRUCT : public MqlTick { double Num; }; typedef bool (*FuncLess)( const STRUCT&, const STRUCT& ); bool Less( const STRUCT& struct1, const STRUCT& struct2 ) { return struct1.Num < struct2.Num; } void function1( STRUCT& array[] ) { QuickSort< STRUCT, FuncLess >( array, Less ); } void OnStart() { STRUCT Array[]; const int Size = ArrayResize(Array, 1 e5); for (int i = Size - 1; i >= 0; i--) Array[i].Num = Size - i; // _BV2(ArraySortStruct(Array, Num)); // _BV2(ArraySortStruct2(Array, Num)); _BV2( function1( Array ) ); } fxsaber 2022.06.20 06:21 #2222 Koldun Zloy #:这样如何? 我无法测试。 Koldun Zloy 2022.06.20 06:38 #2223 fxsaber #:不要检查。 此处的 QuickSort 库 Быстрая сортировка. www.mql5.com Функции для сортировки массивов. Позволяют сортировать строки и структуры по любому условию. fxsaber 2022.06.20 08:11 #2224 Koldun Zloy #:QuickSort 库在这里 谢谢,这是个不错的选择!我 好像也用过 QuickSort,但不知为什么,速度非常慢。 你的方案可以用宏来包装,这样使用起来会更快...... Koldun Zloy 2022.06.20 11:17 #2225 fxsaber #:谢谢,这是个不错的选择!我 好像也有QuickSort,但不知道为什么,刹车总是乱响。你的方案可以用宏来包装,这样使用起来会更快.... 我不明白为什么需要宏。它本身就很简单。 Maxim Kuznetsov 2022.06.20 18:19 #2226 如何在 C 语言中正确格式化如下内容? int sort(void *arr,size_t isize,size_t size, int (*cmp)(void *item1,void *item2)); /// типовой прототип sort с функцией сравнения ??? 试图对模板进行排序: template <typename T> int sort(T &arr[],int (*cmp)(const T &,const T&)){ } } 不起作用--你不能在参数中加入函数指针。必须有一个单独的类型定义 但 typedef 不能(或者可以? macroms 可以解决这些问题 :-) mktr8591 2022.06.21 11:02 #2227 Maxim Kuznetsov #:如何在 C 语言中正确格式化类似这样的内容: int sort(void *arr,size_t isize,size_t size, int (*cmp)(void *item1,void *item2)); /// типовой прототип sort с функцией сравнения ???我们正在尝试使用模板:失败 - 不能在参数中加入函数指针。必须有一个单独的类型定义但 typedef 不能(或者可以)是模板....macroms 可以解决这些问题 :-) template <typename T> struct SORT { typedef int (*cmp)(const T &, const T&); static int Do(T &arr[], cmp) {return 0;} }; int SortInt(const int &, const int &) {return 0;} void OnStart() { int arr[]; SORT<int>::Do(arr, SortInt); } mktr8591 2022.06.21 16:57 #2228 我发现了 MQL(和 C++)的一个不显而易见的特性 class C1 { public: virtual void f1(int p = 1) {Print(p);} }; class C2: public C1 { public: virtual void f1(int p = 2) {Print(p);} }; void OnStart() { C2 obj; C1 *p = &obj; p.f1(); //Prints "1" } 那就是,在方法调用(p.f1())时,默认值会被替换到参数 (p) 中,而这个值取自类 C1 中的方法描述 - 变量 ptr 的声明类型,而不是对象 obj 的实际类型。 (一般来说,这是符合逻辑的)。 Andrey Dik 2022.06.24 10:44 #2229 关于交易、自动交易系统和交易策略测试的论坛 错误、错误、问题 Andrey Dik, 2022.06.24 08:38 MQL_VISUAL_MODE 是 MQL_TESTER 的特例吗? MQL_OPTIMIZATION 是 MQL_TESTER 的特例 吗? 我的意思是,MQL_TESTER包括MQL_VISUAL_MODE 和MQL_OPTIMIZATION? 我不知道在检查 MQLInfoInteger() 时如何为这种情况选择正确的标志? 我可以做得很简单,例如,像这样: if (MQLInfoInteger(MQL_VISUAL_MODE) || MQLInfoInteger(MQL_CHART_MODE)) { //выполняем некоторые действия } 但是 mql5 中没有提供 MQL_CHART_MODE 标志 。 有人有什么想法吗? Features of the mql5 交易者生活窍门: 利用 defines (#define) 交易员之活学活用: "平静" 优化或绘制交易分布 Maxim Kuznetsov 2022.06.24 11:47 #2230 Andrey Dik #: 有人有什么想法吗? if (ChartID()!=0) { // Graphical chart presents // draws on it } 1...216217218219220221222223224225226227228229230...247 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
针对数字字段用于排序的特殊情况(这是最常见的情况),我编写了一个变体,它比前一个变体快了几个数量级。但它消耗的内存是前者的两倍。它适用于大型数组。
应用(测量执行时间)。
结果
您认为该方案如何?
这样如何?
我无法测试。
不要检查。
此处的 QuickSort 库
QuickSort 库在这里
谢谢,这是个不错的选择!我 好像也用过 QuickSort,但不知为什么,速度非常慢。
你的方案可以用宏来包装,这样使用起来会更快......
谢谢,这是个不错的选择!我 好像也有QuickSort,但不知道为什么,刹车总是乱响。
你的方案可以用宏来包装,这样使用起来会更快....
我不明白为什么需要宏。它本身就很简单。
如何在 C 语言中正确格式化如下内容?
int sort(void *arr,size_t isize,size_t size, int (*cmp)(void *item1,void *item2)); /// типовой прототип sort с функцией сравнения
???
试图对模板进行排序:
template <typename T>
int sort(T &arr[],int (*cmp)(const T &,const T&))
{ }
}
不起作用--你不能在参数中加入函数指针。必须有一个单独的类型定义
但 typedef 不能(或者可以?
macroms 可以解决这些问题 :-)
如何在 C 语言中正确格式化类似这样的内容:
int sort(void *arr,size_t isize,size_t size, int (*cmp)(void *item1,void *item2)); /// типовой прототип sort с функцией сравнения
???
我们正在尝试使用模板:
失败 - 不能在参数中加入函数指针。必须有一个单独的类型定义
但 typedef 不能(或者可以)是模板....
macroms 可以解决这些问题 :-)
我发现了 MQL(和 C++)的一个不显而易见的特性
那就是,在方法调用(p.f1())时,默认值会被替换到参数 (p) 中,而这个值取自类 C1 中的方法描述 - 变量 ptr 的声明类型,而不是对象 obj 的实际类型。
(一般来说,这是符合逻辑的)。
关于交易、自动交易系统和交易策略测试的论坛
错误、错误、问题
Andrey Dik, 2022.06.24 08:38
MQL_VISUAL_MODE 是 MQL_TESTER 的特例吗?
MQL_OPTIMIZATION 是 MQL_TESTER 的特例 吗?
我的意思是,MQL_TESTER包括MQL_VISUAL_MODE 和MQL_OPTIMIZATION?
我不知道在检查 MQLInfoInteger() 时如何为这种情况选择正确的标志?
我可以做得很简单,例如,像这样:
if (MQLInfoInteger(MQL_VISUAL_MODE) || MQLInfoInteger(MQL_CHART_MODE))
{
//выполняем некоторые действия
}
但是 mql5 中没有提供 MQL_CHART_MODE 标志 。
有人有什么想法吗?
有人有什么想法吗?
if (ChartID()!=0) {
// Graphical chart presents
// draws on it
}