算法、解决方法、其性能的比较 - 页 3

 
fxsaber:

什么是更具体的?你就不能为你的实施想一个反例吗?解释一下什么是数组和结构?

我甚至不敢猜测,如果你不仅需要得到订单的数量,还需要得到价格,例如,会发生什么。

总而言之,是某种无知的表现。而且这不是一个初学者的做法,因此是不可原谅的。如果有人从外部引用这个主题作为 "看看MQL中的程序员水平!"的例子,那是资源的耻辱。

那么你如何定义这个水平呢?
我在很多问题上也是个初学者,但彼得似乎是个好战的无知者。
而且不仅仅是在Tester或OOP中。
他对MetaEditor没有意见。
也许他很少使用它?
而库中哪怕只有一个代码呢?还是在产品中?
(

 
Реter Konow:
你提供你的解决方案。否则就是空话。和以前一样。

你准备好了吗?

关于交易、自动交易系统和交易策略测试的论坛

算法,解决方法,比较它们的性能

fxsaber, 2017.12.10 16:12

如果你事后进入只读模式一个月,这里几乎所有人都愿意这么做。


 
Sergey Dzyublik:

你准备好了吗?


CHTD。
 
/+------------------------------------------------------------------+
//|                                                        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                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   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));
   
  }
//+------------------------------------------------------------------+
 
Реter Konow:

以下是实际的证明。

即使在 "新手问题 "主题中,我也没有看到这样的阴霾。伙计们,这实在是太疯狂了!有什么可评论的呢?

s. 好吧,为什么你写Get_magic(1),写Get_magic(23999)。

 
Mikhail Dovbakh:

你又是如何确定水平的?
我在很多问题上也是个新手,但彼得似乎是个好战的无知者。

而且我对很多问题都是第一次。当我的好战无知被灌入一桶屎时,我不会假装它没有发生。我很感谢这个清醒的教训。

作为一个新手或不知道的东西,从来没有任何羞耻感。然而,在这种情况下,无知的骄傲是存在的,而且也是离谱的。

唯一的好处是--它变成了在资源上创建黑名单的最佳动力之一。

 
Vasiliy Sokolov:

即使在 "新手问题 "主题中,我也没有看到这种忧郁的情绪。伙计们,这实在是太疯狂了!有什么可评论的呢?

S.s. 不,好吧,为什么你写Get_magic(1),写Get_magic(23999)。

该解决方案是否有效?

 
Реter Konow:

该解决方案是否有效?

不,它不会,因为StringFind 可以找到medjik号码而不是交易号码。

 
Vasiliy Sokolov:

不,这不起作用,因为StringFind可以找到中位数而不是交易数。

StringFind首先找到交易号码("_"+交易号码+"_")。

然后我们加上3,就得到了大数的开始。

然后StringFind搜索下一个交易的开始。

然后,它从Megic的开始减去下一个交易的开始。

然后StringSubstr 得到megic的字符串。

然后我们将其转换为int并返回。


什么东西在这里不起作用?

 
Реter Konow:

什么东西在这里不起作用?


关于交易、自动交易系统和交易策略测试的论坛

算法、决策方法、性能比较

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。
好运。