알고리즘, 결정 방법, 성능 비교 - 페이지 5

 
Vasiliy Sokolov :

피터, 취했어? 하위 문자열 ... _25_ ...에는 4개의 문자가 있습니다: _ , 2 , 5 , _ .

그래, 너가 맞아. 이 순간을 놓쳤다.

하지만 고칠 수 있습니다.

 
Vasiliy Sokolov :

하위 문자열 ... _25_ ...에는 4개의 문자가 있습니다: _ , 2 , 5 , _ .

한 번에 모든 것을 고려할 수는 없습니다. 특정 오류를 지적해 주셔서 감사합니다.
 
Ре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 ));
   
  }
//+------------------------------------------------------------------+
 

Peter, 당신의 모범은 처음에는 망상적이며 효과가 없습니다. 실제 상황에서 트랜잭션 번호는 항상 무작위입니다. 쓸 수 없음:

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

다음 거래 번호를 모릅니다.

 
Vasiliy Sokolov :

실제 상황에서 트랜잭션 번호는 항상 무작위입니다. 쓸 수 없음:

다음 거래 번호를 모릅니다.

설마.

우리가 거래하고 이미 300건의 거래를 했다고 가정해 봅시다.

300번째 거래 전에 마법을 얻어야 한다면 항상 다음 거래 번호가 있습니다.

300번째 거래의 번호를 알아야 하는 경우 ... 우리는 항상 마지막 거래의 마술사 번호를 일부 변수에 유지할 수 있습니다.

 

물론 이 코드는 거래에 즉시 적용할 수 있을 정도로 이상적이지는 않습니다. 솔루션에 대한 접근 방식을 보여줍니다. 개선될 수 있습니다.

 
Реter Konow :

설마.

우리가 거래하고 이미 300건의 거래를 했다고 가정해 봅시다.

300번째 거래 전에 마법을 얻어야 한다면 항상 다음 거래 번호가 있습니다.

300번째 거래의 번호를 알아야 하는 경우 ... 우리는 항상 마지막 거래의 마술사 번호를 일부 변수에 유지할 수 있습니다.


일반 int 배열이 적합하지 않은 이유는 무엇입니까? 왜 이 문자열을 .... 반복합니다. 문자열 대신 차트 의 동적 배열 이 저장되는 클래스를 사용했다고 상상해 보십시오. 그리고 이것이 빠른 것 같습니까?