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

 
fxsaber :

그리고 더 구체적인 것은 무엇입니까? 구현에 대한 반례를 생각할 수 있습니까? 배열과 구조가 무엇인지 설명하십시오.

예를 들어 주문 번호로 매직 넘버뿐만 아니라 가격도 얻어야 한다면 어떤 일이 벌어질지 짐작조차 하기가 두렵습니다.

일반적으로 일종의 무지입니다. 그리고 그것은 초보자를 위한 것이 아니므로 용서할 수 없습니다. 외부의 누군가가 "MQL 프로그래머의 수준을 보세요!"라는 예로 이 스레드를 이끌면 리소스가 부끄럽습니다.

수준을 어떻게 결정합니까?
나도 모르는 것이 많지만 피터는 호전적인 무지한 것 같다.
테스터나 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 :

다음은 실용적인 증거입니다.

나는 "초보자 질문" 스레드에서도 그런 어둠을 본 적이 없습니다. 여러분, 이것은 일종의 주석입니다! 코멘트할게 뭐가있나요?

추신 아니, 왜 Get_magic(1)을 작성하고 Get_magic(23999)을 작성합니까?

 
Mikhail Dovbakh :

수준을 어떻게 결정합니까?
나도 모르는 것이 많지만 피터는 호전적인 무지한 것 같다.

그리고 저는 많은 것을 처음 접했습니다. 그리고 나의 호전적인 무지가 똥통에 빠졌을 때, 나는 아무 일도 없었던 척하지 않습니다. 진지한 강의 감사합니다.

초보자이거나 아무것도 모르는 것은 결코 부끄러운 일이 아닙니다. 이 경우 자부심은 무지와 함께 존재하지만 규모도 벗어납니다.

유일한 이점은 블랙리스트 리소스에서 동일한 창작물을 만드는 데 가장 좋은 동기 중 하나가 된다는 것입니다.

 
Vasiliy Sokolov :

나는 "초보자 질문" 스레드에서도 그런 어둠을 본 적이 없습니다. 여러분, 이것은 일종의 주석입니다! 코멘트할게 뭐가있나요?

추신 아니, 왜 Get_magic(1)을 작성하고 Get_magic(23999)을 작성합니까?

솔루션이 작동합니까?

 
Реter Konow :

솔루션이 작동합니까?

아니요, StringFind 가 거래 번호 대신 매직 번호를 찾을 수 있기 때문에 작동하지 않습니다.

 
Vasiliy Sokolov :

아니요, StringFind가 거래 번호 대신 매직 번호를 찾을 수 있기 때문에 작동하지 않습니다.

StringFind는 먼저 거래 번호("_" + 거래 번호 + "_")를 찾습니다.

그런 다음 3을 추가하고 메가의 시작을 얻습니다.

그런 다음 StringFind는 다음 거래의 시작을 찾습니다.

그런 다음 다음 거래의 시작 부분에서 메가의 시작 부분을 뺍니다.

그런 다음 StringSubstr 은 메가 문자열을 가져옵니다.

다음으로 int로 변환하여 반환합니다.


여기에서 작동하지 않는 것은 무엇입니까?

 
Реter Konow :

여기에서 작동하지 않는 것은 무엇입니까?


거래, 자동 거래 시스템 및 거래 전략 테스트에 관한 포럼

알고리즘, 결정 방법, 성능 비교

Sergey Dzyublik , 2017.12.10 16:10

Peter Konow, "데이터 구조"에 대한 지식 수준은 0입니다.

1. 코드가 작동하지 않습니다.
잘못된 패턴 "_index_magic". 가능한 솔루션 "|index_magic"

2. 알고리즘의 속도는 문자열을 통해 All_magics 의 값으로 세 번 전달하는 동안 O(n)입니다.

3. 귀하의 성과 측정이 절대적으로 정확하지 않습니다.

- 시리즈 평균 없음
- 최신 인덱스 값을 검색하는 시리즈 없음



넌센스를 쓰는 대신 - https://habrahabr.ru/post/310794/ 와 같이 주제에 대해 최소한 무언가를 공부하십시오.
그런 다음 <Generic\ArrayList.mqh>에서 CArrayList를 사용하는 방법을 배웁니다.
행운을 빕니다.