/+------------------------------------------------------------------+
//| Magic.mq5 |//| Peter Konow |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Peter Konow"#property link"https://www.mql5.com"#property version"1.00"#property strict//+------------------------------------------------------------------+string All_magics;
int order_number;
int Random_orders_of_strategy;
//+------------------------------------------------------------------+void Save_magic(int magic)
{
order_number++;
//---------------------------------//Записываем каждый магик вместе с порядковым номером ордера.//---------------------------------
All_magics += "_" + (string)order_number + "_" + (string)magic; // Тут как бы не рационально особенно для скорости - в данном случае будет происходить поочередное сложение т.е. сперва стрин увеличиться на один знак и ему выделеиться дополнительно 1 чарт, потом увоичиться на количество символов в (string)order_number.... и каждый раз будет происходить выделение памяти... //---------------------------------
}
//+------------------------------------------------------------------+void Trading()
{
Random_orders_of_strategy = MathRand(); ///Всеже проще рандом не вызывать при тестах на скорость - т.к. хз сколь уйдет времени на эту функцию//----------------------------------------//Имитируем открытие неопределенного количества ордеров стратегии.//----------------------------------------for(int a1 = 0; a1 < Random_orders_of_strategy; a1++)
{
int this_magic = MathRand();
//----------------------------
Save_magic(this_magic);
//----------------------------
}
//----------------------------------------
}
//+------------------------------------------------------------------+int Get_magic(int deal_number)
{
//--------------------------------------------//Получаем начало строки магика.//--------------------------------------------int Magic_position_start = StringFind(All_magics,"_" + (string)deal_number + "_",0) + 3; // поиск происходит слушающим образом... наш string разбирается на масив чартов и мы начинаем искать среди них номер чарта равный номеру символа "_" путем перебора, если произошло совпадение то будем сравнивать второй символ... даже банально исключив последний + "_" скорость возрастет//--------------------------------------------//Получаем конец строки магика.//--------------------------------------------int Magic_position_end = StringFind(All_magics,"_" + (string)(deal_number + 1) + "_",0); //тут по идее снова начинается поиск и он уже идет с самого начала снова не знаю зачем искать еще раз, надо хотябы поиск начинать с тагоже места где нашли начало маджика чтоли... и искать просто подчеркивание... //--------------------------------------------//Получаем количество цифр из которых состоит магик.//--------------------------------------------int Magic_lenght = Magic_position_end - Magic_position_start;
//--------------------------------------------//Извлекаем магик из общей строки.//--------------------------------------------string Magic = StringSubstr(All_magics,Magic_position_start,Magic_lenght);
//--------------------------------------------//Возвращаем цифровое значение магика.//--------------------------------------------return((int)Magic);
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
Trading();
//--------------------------ulong t1 = GetMicrosecondCount();
Get_magic(1); // Мы же на скорость проверяем так что давайте исполняемые функции брать в цикл с повтором в 10 000 раз... хотябы лучше с изменяющими входными параметрамиulong t2 = GetMicrosecondCount();
//--------------------------Print("Время исполнения функции Get_magic() при количестве ордеров ",Random_orders_of_strategy," равно ",t2 - t1);
//--------------------------Print("Random_orders_of_strategy ",Random_orders_of_strategy);
Print("magic 1: ",Get_magic(1)," magic 2: ",Get_magic(2)," magic 3: ",Get_magic(3));
}
//+------------------------------------------------------------------+
什么是更具体的?你就不能为你的实施想一个反例吗?解释一下什么是数组和结构?
我甚至不敢猜测,如果你不仅需要得到订单的数量,还需要得到价格,例如,会发生什么。
总而言之,是某种无知的表现。而且这不是一个初学者的做法,因此是不可原谅的。如果有人从外部引用这个主题作为 "看看MQL中的程序员水平!"的例子,那是资源的耻辱。
那么你如何定义这个水平呢?
我在很多问题上也是个初学者,但彼得似乎是个好战的无知者。
而且不仅仅是在Tester或OOP中。
他对MetaEditor没有意见。
也许他很少使用它?
而库中哪怕只有一个代码呢?还是在产品中?
(
你提供你的解决方案。否则就是空话。和以前一样。
你准备好了吗?
关于交易、自动交易系统和交易策略测试的论坛
算法,解决方法,比较它们的性能
fxsaber, 2017.12.10 16:12
如果你事后进入只读模式一个月,这里几乎所有人都愿意这么做。
你准备好了吗?
以下是实际的证明。
即使在 "新手问题 "主题中,我也没有看到这样的阴霾。伙计们,这实在是太疯狂了!有什么可评论的呢?
s. 好吧,为什么你写Get_magic(1),写Get_magic(23999)。
你又是如何确定水平的?
我在很多问题上也是个新手,但彼得似乎是个好战的无知者。
而且我对很多问题都是第一次。当我的好战无知被灌入一桶屎时,我不会假装它没有发生。我很感谢这个清醒的教训。
作为一个新手或不知道的东西,从来没有任何羞耻感。然而,在这种情况下,无知的骄傲是存在的,而且也是离谱的。
唯一的好处是--它变成了在资源上创建黑名单的最佳动力之一。
即使在 "新手问题 "主题中,我也没有看到这种忧郁的情绪。伙计们,这实在是太疯狂了!有什么可评论的呢?
S.s. 不,好吧,为什么你写Get_magic(1),写Get_magic(23999)。
该解决方案是否有效?
该解决方案是否有效?
不,它不会,因为StringFind 可以找到medjik号码而不是交易号码。
不,这不起作用,因为StringFind可以找到中位数而不是交易数。
StringFind首先找到交易号码("_"+交易号码+"_")。
然后我们加上3,就得到了大数的开始。
然后StringFind搜索下一个交易的开始。
然后,它从Megic的开始减去下一个交易的开始。
然后StringSubstr 得到megic的字符串。
然后我们将其转换为int并返回。
什么东西在这里不起作用?
什么东西在这里不起作用?
关于交易、自动交易系统和交易策略测试的论坛
算法、决策方法、性能比较
Sergey Dzyublik, 2017.12.10 16:10
Reg Konow,你对 "数据结构 "的知识水平为0。
1.你的代码是不工作的。
错误的"_index_magic "模式。可能的解决方案是"|index_magic"。
2.你的算法有O(n)的速度,有多达三遍的字符串值All_magics
3.你的性能测量是完全不正确的。
- 在该系列中没有平均结果
- 没有搜索最后索引值的系列
与其胡乱写东西--不如研究一下这个问题,例如https://habrahabr.ru/post/310794/。
然后学习如何从<Generic\ArrayList.mqh>中应用CArrayList。
好运。