트레이딩의 머신러닝: 이론, 모델, 실전 및 알고리즘 트레이딩 - 페이지 3301

 
Andrey Dik #:

예, Sanych는 어떤 함수에도 극한값이 있기 때문에 극한값이 없다고 썼지만 그는 틀렸습니다.

극한값은 함수가 주어진 구간 또는 주어진 영역에서 가장 큰(최대) 또는 가장 작은(최소) 값에 도달하는 지점입니다. 극값은 함수가 한 점의 일부 주변에서만 극값에 도달하는 국부적일 수도 있고, 주어진 전체 구간 또는 주어진 영역에서 극값에 도달하는 전역적일 수도 있습니다.

극한값은 의도적으로 찾지 않더라도 항상 존재합니다(사용하는 알고리즘이 이 검색 작업을 대신 수행합니다). 최적화 없는 학습은 불가능하며, 올바른 FF 할당 없이는 최적화도 불가능합니다. 극값 검색이 자동으로 수행되고 알고리즘에 숨겨져 있다고 해서 (극값과 최적화 모두) 존재하지 않는다는 의미는 아닙니다.

거기에는 기능이 없습니다.

제발, 박스오피스 정보는 그만 넘어가주세요. 최적화가 뭔지 알아요.
 
mytarmailS #:

그렇게요?

그리고 정말 수많은 조건을 처리할 수 있을까요?

이 스위치와 C++에 대해 잘 모르겠어요.

처음 두 함수는 R로 구현한 것이고, 마지막 함수는 C++로 만든 스위치입니다.

Unit: microseconds
                              expr    min     lq      mean median     uq       max neval
     rule(n = sample(1:200, 1), x) 40.482 44.473  57.18044 46.754 51.886  2688.931  1000
    rule2(n = sample(1:200, 1), x) 29.079 35.351 567.03671 38.202 43.904 86712.314  1000
 rule_cpp(n = sample(1:200, 1), x) 31.360 34.781  53.26793 36.491 40.482  4924.005  1000

사실, 전혀 이득이 없는데, 어떻게 이럴 수 있나....
 
mytarmailS #:

이 스위치와 C++에 대해 약간 혼란스러워요.

처음 두 함수는 R로 구현한 것이고, 마지막 함수는 C++로 구현한 스위치입니다.

사실, 전혀 이득이 없는데 어떻게 그럴 수 있을까요...?

코드를 보여줄 수 있나요?

아마 이미 답을 받았을 때 함수를 낭비하고있는 것 같습니다 ...

 
Aleksey Vyazmikin #:

코드를 보여주시겠어요?

아마도 당신은 이미 답변을 받았을 때 헛되이 함수를 실행하고있을 것입니다 ...

코드는 제가 게시 한 코드와 동일하지만 규칙을 5 대신 300으로 만든 것을 제외하고는 동일합니다.

코드를 게시하는 이유는 무엇입니까?
나는 이미 아키텍처를 결정했습니다.
 
mytarmailS #:
코드는 게시하신 것과 동일하지만 규칙을 5가 아닌 300으로 만들었습니다.

R 코드를 게시하는 이유는 무엇인가요?
이미 아키텍처를 결정했습니다.

문제는 함수 호출 코드에 있습니다.

 
Aleksey Vyazmikin #:

문제는 함수 호출 코드에 있습니다.

이해가 안 됩니다.
 
mytarmailS #:

기본적으로 이득이 전혀 없는데, 어떻게 그럴 수 있죠?

여러 가지 이유가 있을 수 있습니다. 스크립트 첨부, 아래는 함수 부분입니다.

bool Rule0( const vector<double> &x ) { return(x[3] > x[4]); }
bool Rule1( const vector<double> &x ) { return(x[0] < x[4]); }
bool Rule2( const vector<double> &x ) { return(x[1] >= x[0]); }
bool Rule3( const vector<double> &x ) { return(x[3] == x[4]); }
bool Rule4( const vector<double> &x ) { return(x[0] != x[4]); }
bool Rule5( const vector<double> &x ) { return(x[1] >= x[0]); }
bool Rule6( const vector<double> &x ) { return(x[3] <= x[4]); }
bool Rule7( const vector<double> &x ) { return(x[0] < x[4]); }
bool Rule8( const vector<double> &x ) { return(x[1] >= x[0]); }
bool Rule9( const vector<double> &x ) { return(x[3] <= x[4]); }

bool rule3( const int n, const vector<double> &x )
{
  typedef bool (*RULE)( const vector<double>& );
  static const RULE Rules[] = {Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9,
                               Rule0, Rule1, Rule2, Rule3, Rule4, Rule5, Rule6, Rule7, Rule8, Rule9};

  return(Rules[n](x));
}

#define  BENCH(A)                                                              \
  StartTime = GetMicrosecondCount();                                          \
  A;                                                                          \
  Print(#A + " - " + (string)(GetMicrosecondCount() - StartTime) + " mcs");

void OnStart()
{
  const vector<double> x = {1, 2, 3, 4, 5};
  int Tmp = 0;

  ulong StartTime;

  BENCH(for (uint i = 1 e8; (bool)i--;) Tmp += rule(i % 100, x));
  BENCH(for (uint i = 1 e8; (bool)i--;) Tmp += rule2(i % 100, x));
  BENCH(for (uint i = 1 e8; (bool)i--;) Tmp += rule3(i % 100, x));
//  BENCH(for (uint i = 1e8; (bool)i--;) Tmp += rule(i % 100, x));  // Если добавить эту строку, то выше rule замедлится.
//  BENCH(for (uint i = 1e8; (bool)i--;) Tmp += rule2(i % 100, x)); // Если добавить эту строку, то выше rule2 замедлится.
//  BENCH(for (uint i = 1e8; (bool)i--;) Tmp += rule3(i % 100, x)); // Если добавить эту строку, то выше rule3 замедлится.

  Print(Tmp);
}


결과.

for (uint i = 1 e8; (bool)i--;) Tmp += rule(i % 100, x) - 505436 mcs
for (uint i = 1 e8; (bool)i--;) Tmp += rule2(i % 100, x) - 261261 mcs
for (uint i = 1 e8; (bool)i--;) Tmp += rule3(i % 100, x) - 709846 mcs


여기서 측정되는 것이 무엇인지 명확하지 않습니다 - 강조 표시된 주석을 참조하십시오. rule2보다 훨씬 빠른 것으로 추정됩니다.

파일:
 
fxsaber #:

흥미롭게도 데이터(따옴표)의 양이 많다는 점에서 인간의 뇌(신경망으로서의)는 MO에 비유하면 인퓨소리아에 비유할 수 있습니다.

그러나 원시적인 인간은 꽤 잘 작동하는 TC를 만들 수 있다는 것이 입증되었습니다. 작동하는 TC를 만드는 데 그렇게 많은 양의 데이터가 필요하지 않다는 것이 밝혀졌습니다.

예를 들어, 인간이 어떻게 작동하는 스캘퍼 모델에 도달했는지는 저에게는 미스터리입니다. 거의 전적으로 숫자 크런처 없이 이루어졌습니다.


이에 대한 시나리오는 다음과 같은 것이었습니다:

  1. 나는 종종 어떤 종류의 평탄화를 봅니다 (나는 며칠 동안 멍청하게 화면을 연마하고 있습니다).
  2. 나는 원시적 인 TS로 돈을 벌려고 노력할 것입니다.
  3. 많이 소모되지 않습니다. TS를 조금 다듬어야합니다. 거래 내역을 살펴 보니 뭔가 개선 할 수있는 것 같습니다.
  4. 그것은 조금 더하기 시작했습니다. 포인트 3을 반복합니다.
숫자 크런처는 없습니다. 방금 포인트 1을보고 시작했습니다. 이 접근 방식의 확률은 거의 0 인 것 같지만 어떻게 든 작동합니다. 일종의 작동하는 미친 찌르기 방법입니다.


분명히 일부 무의식적 인 인간의 뇌는 여전히 극소량의 데이터에서 "패턴"을 찾을 수 있습니다. 운이라고 할 수는 없습니다. 미스터리입니다.

임호, 모든 비밀은 경험의 전수에 있으며 새로운 모든 것은 이전 세대의 업적을 기반으로합니다. 최신 프로세서를 생각해보십시오. 19 세기 사람들에게는 마술이 될 것입니다. 20 세기에는 리버스 엔지니어링에 적합한 도구가없는 매우 복잡한 기술이 될 것입니다. 지식 이전과 점진적인 발전을 통해서만 우리는 현대 기술 수준에 도달할 수 있습니다. 그래서 3 차 세계 대전이 일어나면 4 차 세계 대전에서 돌로 싸울 것이라고 말하는 이유입니다. 거래에 대한 전설이 있는데, 초기 시장은 훨씬 쉬웠고 정점 거래자들은 이동 평균의 도움으로 재산을 벌었지만 이제는 그렇게 작동하지 않을 것입니다.

 
fxsaber #:

여기서 무엇을 측정하는지는 명확하지 않습니다. 강조 표시된 댓글을 참조하세요. 규칙 2보다 훨씬 빠르다고 합니다.

여기 이 함수와 C++를 포함한 다양한 구현(등가물)을 측정했습니다.

글쎄요, 저는 이미 아키텍처를 결정했고, 지금은 순수한 R-ke에 앉아있을 것이며, 25 배 속도를 높이는 방법을 찾았으며 코드에 C ++를 추가하지 않는 데는 여전히 장점 / 강력한 이유가 있습니다.

 

제 AMO와 함께 도전할 수 있습니다.

"TS를 풀어보세요."


여러분이 사용하는 작은 데이터 조각을 제공합니다.

코드에서 어떤 연산자, 함수, 변수를 사용하는지 설명해 주세요.

그리고 알고리즘의 등식이나 신호를 알려주세요.


그러면 제가 검색 문법을 만들고 코드를 암호로 받아 TS를 풀게 됩니다.

사유: