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

 
Vasiliy Sokolov:

ピーター、酔ってるのか?の部分文字列で...25_...4文字:_、 25 、_。

はい、その通りです。懐かしいですね。

でも、直せばいいんです。

 
Vasiliy Sokolov:

部分文字列で ...25_...4文字:_、 25 、_。

全部が全部、説明できるわけではありません。具体的なエラーのご指摘ありがとうございます。
 
Реter Konow:

はい、その通りです。その点を見落とした。

でも、直せるんです。

どうやら、この患者さんは不治の病のようです。

 

コードを修正して投稿します。

お待ちください。

ちなみに。感情は和らぐかもしれません。何も問題はないんです。

 
Реter Konow:

コードを修正して投稿します。

お待ちください。

ねえ。感情は和らぐかもしれません。何も心配することはありません。


始まった死んだものは死にたくない。

 

完了しました。

//+------------------------------------------------------------------+
//|                                                        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;
 //---------------------------------
}
//+------------------------------------------------------------------+
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 stringlen = StringLen((string)deal_number); //добавлено
 //--------------------------------------------
 //Получаем начало строки магика.
 //--------------------------------------------
 int Magic_position_start =  StringFind(All_magics,"_" + (string)deal_number + "_",0) + stringlen + 2;
 //--------------------------------------------
 //Получаем конец строки магика.
 //--------------------------------------------
 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(1000);
   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));
   
  }
//+------------------------------------------------------------------+
 

ピーター あなたの例は、本質的に妄想であり、実行不可能です。現実の世界では、トランザクション番号は常にランダムである。書けないんですね。

//--------------------------------------------
 //Получаем конец строки магика.
 //--------------------------------------------
 int Magic_position_end   =  StringFind(All_magics,"_" + (string)(deal_number + 1) + "_",0); //тут по идее снова начинается поиск и он уже идет с самого начала снова не знаю зачем искать еще раз, надо хотябы поиск начинать с тагоже места где нашли начало маджика чтоли... и искать просто подчеркивание... 

次の取引番号がわからない。

 
Vasiliy Sokolov:

現実の世界では、トランザクション番号は常にランダムである。書けないんですね。

次の取引番号がわからない。

そうでもないんです。

例えば、取引をしていて、すでに300回取引をしているとします。

300回目のトレードまでにどんなメジッチでも手に入れる必要があるのなら、次のトレード番号は常に持っている。

300回目のトレードの数字が必要なら最後のトレードの番号を常に変数に保存しておくことができます。

 

確かに、すぐに取引に適用できるような完璧なコードではありません。解決へのアプローチを示しているに過ぎない。微調整が可能です。

 
Реter Konow:

そうでもないんです。

例えば、取引をしていて、すでに300回取引をしているとします。

300回目の取引までに何かメジッチを手に入れる必要がある場合、常に次の取引の番号を持っています。

300件目の案件の番号を知る必要があるなら最後のトレードの番号を常に変数に保存しておくことができます。


普通のintsの配列で何が悪いんだ!Tバックの意味がないじゃないか...。もう一度、文字列の代わりに、チャートの動的 配列を格納するクラスを使用することを想像してみてください - それが高速だと思いますか?