アルゴリズム、解法、性能比較 - ページ 3

 
fxsaber:

より具体的には?実装の反例を考えることはできないのでしょうか?配列と構造体とは何かを説明しなさい。

例えば、注文番号だけでなく、価格も取得する必要がある場合、どうなるのか想像するのも怖いです。

全体として、ある種の無知。そしてそれは初心者のそれではないので、理不尽なことです。もし、外部の誰かがこのスレッドを「MQLのプログラマーのレベルを見ろ!」という例として挙げるなら、リソースの恥だ。

また、レベルはどのように定義するのですか?
私もいろいろな問題で初心者ですが、ピーターは過激なまでに無知なようです。
また、TesterやOOPだけでなく。
MetaEditorに問題があるわけではないそうです。
めったに使わないのかも?
そして、ライブラリの中の1つのコードさえもどこにあるのでしょうか?それとも製品に?
(

 
Реter Konow:
あなたは、あなたのソリューションを提供します。そうでなければ、ただの空虚な言葉になってしまいます。従来と同じです。

準備はいいですか?

トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

アルゴリズム、解法、性能比較

fxsaber さん 2017.12.10 16:12

ここでは、その後1ヶ月間、読み取り専用モードに入れば、ほぼ全員が喜んでやってくれます。


 
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は トランザクション番号の代わりにメジーク番号を見つけることができるからです。

 
Vasiliy Sokolov:

いいえ、うまくいきません。StringFindはトランザクション番号の代わりに中央値の番号を見つけることができるからです。

StringFindは、まず取引番号("_" + 取引番号 + "_")を検索します。

そして、3を足してメジックの始まりとなる。

そして、StringFindは次の取引の開始を検索します。

そして、メジックの始まりから次のトレードの始まりを引き算します。

そして、StringSubstrは megicの文字列を取得する。

そして、それをintに変換して返す。


ここでは何がダメなのか?

 
Реter Konow:

ここでうまくいかないことは?


トレーディング、自動売買システム、トレーディング戦略のテストに関するフォーラム

アルゴリズム, 決定法, 性能比較

セルゲイ・デジブリク さん 2017.12.10 16:10

レジ・コノウ、あなたの「データ構造」に対する知識レベルは0です。

1.あなたのコードは動作していません。
_index_magic "パターンが間違っています。解決策として考えられるのは、「|index_magic」です。

2.あなたのアルゴリズムは、文字列値All_magicsを 3回通過させても速度O(n)です。

3.あなたの性能測定は完全に間違っています。

- 相半ばする
- 最後のインデックス値を検索するシリーズがない



無意味なことを書くのではなく、このテーマについて何か勉強してください。例えば、https://habrahabr.ru/post/310794/
そして、<GenericArrayList.mqh>からCArrayListを適用する方法を学びます。
頑張ってください。