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

 
Реter Konow :

2. 고문과의 통합이 핵심 입니다. 솔루션이 매우 혼란스럽다면(Sergey Dzyublik의 솔루션이 어떻게 작동하는지 설명조차 할 수 없다고 확신합니다), 트레이더에게 실질적인 가치는 무엇 입니까? 복잡한 솔루션으로 정상적인 Expert Advisor를 구축하는 것은 불가능합니다.

제안된 솔루션이 즉시 발표됨

그러나 아무도 그것이 무엇인지 묻지 않았습니다. 구현은 훨씬 "더 이해하기 쉬울" 수 있었습니다. 그러나 이것이 아이디어의 기초를 바꾸지는 않을 것입니다.

 
Реter Konow :

1. 실천의 관점에서 볼 때 이것은 사실과 싸우는 공허한 단어입니다. 나는 마술사를 찾는 타이머를 보여주었다. 나는 Expert Advisor에 솔루션을 통합하는 편리함을 시연했습니다. 당신은 내 결정에 대해 단지 중상 모략을 보여줍니다. 다른 건 없습니다.

2. 고문과의 통합이 핵심 입니다. 솔루션이 매우 혼란스럽다면(Sergey Dzyublik의 솔루션이 어떻게 작동하는지 설명조차 할 수 없다고 확신합니다), 트레이더에게 실질적인 가치는 무엇 입니까? 복잡한 솔루션으로 정상적인 Expert Advisor를 구축하는 것은 불가능합니다.

나는Sergey Dzyublik 의 솔루션을 판단하지 않습니다. 그는 아직 설명하지 않았습니다. 그가 설명하면 누가 "정원에 울타리를 치는지"가 분명해질 것입니다.


그래서 답변을 드리고 싶었지만 진행자가 앞서서 똑같은 말을 했습니다. 그래서 그가 말한 것을 다시 보여 드리겠습니다.

Artyom Trishkin :

아니요. 나는 당신에게 낯선 솔루션 스타일을 제안하지 않습니다. 자신의 스타일로 작성하십시오 - 아무도 누구에게도 강요하지 않습니다.

그러나 나는 당신이 당신의 특성 인내심을 가지고 처음부터 최적의 방법으로 문제를 해결하는 것이 좋습니다. 뭐하세요?

1. 처음에는 가능한 가장 비최적의 솔루션을 선택하고 모든 면에서 이를 극복하기 시작합니다. 이 작업을 위해 솔루션을 통해 생각하는 단계에서도 옵션을 버릴뿐만 아니라 그 방향으로 생각하는 것조차 필요하지 않습니다. 텍스트 작업은 리소스를 너무 많이 소모합니다. 그리고 그것은 텍스트 기능을 위한 것이 아닙니다.

2. Expert Advisor로의 통합 및 제안된 솔루션의 장점에 대해서는 제안한 사람이 답변을 드리겠습니다.


추신: 분명히 당신은 매우 나쁜 학생입니다 :)

 
Реter Konow :

나는 내 실수를 확신하는 즉시 내 실수를 깨닫는다. 지금까지 아무도 내 결정이 틀렸다는 것을 증명할 수 없었습니다 . 기다릴 것이다.

당신은 제대로 훈련되지 않았습니다!

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

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

Sergey Dzyublik , 2017.12.10 20:58


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


추가한 후에는 _1_3_2_4_3_5_4_6_ 이 있습니다.
목록에서 3번째 항목을 찾으십시오.
결과 2 를 얻을 수 있습니다.

 string All_magics = "_1_3_2_4_3_5_4_6_" ;

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 ()
{
   Print (All_magics);
   Print ( Get_magic( 3 ) );   
}


결과

_1_3_2_4_ 3_5 _4_6_
2
 
Artyom Trishkin :

지금까지 나는 여기에 자신의 결정을 게시할 용기를 가진 사람의 비웃음만 여기에서 봅니다.

그것은 ... 가볍게 말하면 - 단어에서 전혀 쓸모가 없다는 것이 분명합니다. 그러나 그는 게시했습니다. 나머지는 웃으면서 손가락질할 용기만 남았다.

Artem, 나는 하위 문자열에 ... _25_ ... 세 글자가 아닌 네 글자가 있다는 것을 사람에게 설명하기 위해 40분의 시간과 수백만 개의 신경 세포를 보냈습니다. 글쎄요, 우리 모두가 그에게 개념적으로 더 가치 있고 강력한 것을 설명하는 데 몇 년이 걸릴 것이라고 생각하십니까? 제 생각에는 이 사람의 세월이 많이, 많이 생각됩니다. 그래서 아무도 설명하고 씹으려 하지 않습니다. 설명자가 떨어질 수 없는 최소한의 수준이 있고, Peter의 수준은 이 막대보다 낮습니다.

 
fxsaber :



결과

마법사의 수는 사용자가 결정한다고 이미 말했습니다. 문자열 내에서 충돌을 방지하려면 마술사에게 특정 숫자 범위를 할당해야 합니다. 예를 들어 100,000에서 999,000까지라면 문제가 없을 것입니다.

이 경우 물론 솔루션을 수정하는 것이 가능합니다. 이것은 "프로토타입"일 뿐입니다. 데모 버전.

 
Vasiliy Sokolov :

Artem, 나는 하위 문자열에 ... _25_ ... 세 글자가 아닌 네 글자가 있다는 것을 사람에게 설명하기 위해 40분의 시간과 수백만 개의 신경 세포를 보냈습니다. 글쎄요, 우리 모두가 그에게 개념적으로 더 가치 있고 강력한 것을 설명하는 데 몇 년이 걸릴 것이라고 생각하십니까? 제 생각에는 많은, 많은 사람들이 이 같은 사람 년을 생각합니다. 그래서 아무도 설명하고 씹으려 하지 않습니다. 설명자가 떨어질 수 없는 최소한의 수준이 있고, Peter의 수준은 이 막대보다 낮습니다.

Vasily, 나는 당신이 말한 즉시 모든 것을 이해했습니다. 이 오류를 찾아주셔서 감사합니다.

 
fxsaber :

네, 가셨습니다.

도착했습니다...))

그리고 왜 그런 반응을 보이는가?

 

문제를 해결하기 위해 라이브러리의 표준 컨테이너인 CArrayList가 선택되었습니다.
거의 모든 코드는 테스트를 위한 "편리한" 인터페이스를 제공하기 위한 래퍼입니다. 그들이 말하는 맛과 색 ....

솔루션을 테스트하려면 다음이 필요합니다.
1. ITestRandomAccessCollection에서 상속하고 필요한 메서드를 구현하는 클래스를 만듭니다. ( TestRandomAccessCollectionCArrayList 와 유사)
2. 테스트를 위해 특정 유형의 데이터를 사용합니다. 예제는 int였습니다.
선택한 데이터 유형 에 대한 생성기가 있고 CreateGenerator 에 추가되었는지 확인해야 합니다( IntGenerator 와 유사).
3. 여러 솔루션에 대해 동일한 데이터에 대해 테스트를 실행하고 결과를 비교합니다(원하는 경우 루프를 사용하여 평균을 얻을 수도 있음).

{
     printf ( "TestRandomAccessCollectionAfterAdding: Started." , result);
     TestRandomAccessCollectionCArrayList< int > testCollection();
     result = TestRandomAccessCollectionAfterAdding(testCollection, 10000 , 1 );
     printf ( "TestRandomAccessCollectionAfterAdding: Fineshed. Total result: %I64i\n" , result);
}


현재 테스트를 위한 기능이며 유추하여 새 기능을 추가할 수 있습니다.

 template < typename T>
ulong TestRandomAccessCollectionAfterAdding(ITestRandomAccessCollection<T> &testCollection, const int iterationCount = 1000 , int srandValue = 0 )

옵션:

testCollection - ITestRandomAccessCollection<T>을 구현하는 테스트용 컨테이너.
iterationCount - 테스트의 반복 주기 수.
srandValue - 무작위 샘플이 0인 경우 생성기의 샘플에 미치는 영향.

 
Реter Konow :
1. 솔루션에서 마술사를 찾는 데 평균 몇 마이크로초가 걸리나요?

2. 솔루션을 EA에 통합하는 것이 얼마나 쉬운가요?


1. 무의미하다. 알고리즘 전체를 상대적인 결과로 비교합니다.
2. 솔루션이 이미 통합되어 있습니다. 표준 라이브러리 <Generic\ArrayList.mqh>입니다.

 
Реter Konow :

마법사의 수는 사용자가 결정한다고 이미 말했습니다. 문자열 내에서 충돌을 방지하려면 마술사에게 특정 숫자 범위를 할당해야 합니다. 예를 들어 100,000에서 999,000까지라면 문제가 없을 것입니다.

이 경우 물론 솔루션을 수정하는 것이 가능합니다. 이것은 "프로토타입"일 뿐입니다. 데모 버전.


달링, 당신이 원하는 것은 어린이용 놀이입니다. 학생들은 이러한 문제를 해결합니다.

인터넷에는 수십 가지의 작업이 있습니다. 그리고 문자열 데이터는 잊어버리십시오.