엘리엇 파동 이론에 기반한 거래 전략 - 페이지 10

 
일반적으로 모든 것이 그렇습니다. Hurst 지수는 각 채널에 대해 계산되며 가장 중요한 것은 구성 요소의 막대 수가 특정 값을 초과한다는 것입니다. 예를 들어 30 - t \ f는 계산이 일일 채널을 기반으로 하기 때문에 중요하지 않습니다(예: 3). -5-7일(모두 얻고자 하는 정확도에 따라 다름 - 1일 선택은 불안정할 수 있음) - 일중 막대로 충분합니다.). 그리고 나서 역전 구역의 예측 및 구축에 대한이 채널의 적합성에 대한 결론이 내려집니다. 다른 채널에 대한 동일한 Murray 반전 수준은 다른 신뢰 구간 에 있을 것입니다. 결국 어떻게든 이를 차단해야 합니다. 맞죠? 그리고 품질의 기준은 위치 에너지입니다. 이차 형태를 보세요. 특별한 것은 없습니다.

그리고 저는 READY SOLUTION을 공유하지 않을 것이지만 그 기술은 - 아무 문제 없습니다.

행운을 빕니다.
 

그리고 저는 READY SOLUTION을 공유하지 않을 것이지만 그 기술은 - 아무 문제 없습니다.

일반적으로 이해할 수 있습니다. 마치 논문 같군요. 아주 간단한 계획을 제외하고는 모든 것이 있습니다. 그렇지 않으면 아무 것도 작동하지 않습니다. o)! 그리고 그것을 발명한 사람만이 그 계획을 알고 있고, 그것이 없는 다른 모든 것은 이미 주위에 많이 있는 종이일 뿐입니다. 참고로 저는 사실만 말하고 다른 의미는 없습니다. 모든 사람은 여전히 자신의 자전거를 타야 합니다. 포렉스입니다! :o)

그리고 여기에 또 다른 질문이 있습니다. 무엇에 구현한 것이 이것이 전부입니까? MT4에서?
즉, MT4에는 가져온 Murray 표시기가 있습니다. 이것은 분명합니다.
하지만 채널과 Hirst의 계산은 무엇으로 합니까? MT4에서도요? 당신은 어떻게 든 0.5M 정도의 코드 크기에 대해 언급했습니다. 그게 당신이 의미하는 무엇입니까? mql4에서 계산 프로그램 텍스트의 무게? 그렇다면 솔직히 그런 양은 상상하기 어렵다. 내 보수적인 추정에 따르면 그러한 프로그램의 텍스트는 대략 10,000줄 정도의 범위를 가져야 합니다. 내가 사용하는 간단한 화이트 노이즈 전략은 1000줄만 사용하며, 이는 서로 다른 시간대의 정보를 사용하는 6개의 거래 스레드를 병렬로 실행하기만 하면 되지만 예를 들어, 배열을 사용하여 400-500줄로 바꾸는 것보다 현재 사용할 수 있는 형식의 이러한 코드(비록 미래에도 그러한 계획이 있음). 즉, 한 타임프레임에 하나의 스레드를 시작하는 데 400-500줄이 걸립니다. 모니터링할 필요가 없는 완전한 기능을 갖춘 EA를 사용하고 있습니다. 물론 추가 개선을 거부하지는 않지만 지금까지 테스터에서 최적화 할 수있는 모든 것을 이미 최적화했습니다. 그러나 당신의 방법에는 어느 정도 관심이 있으며, 물론 효과가 있다면 나는 무언가를 적용하려고 노력할 것입니다.

추신: 그리고 제가 큰 로트와 거래하는 스레드 하나가 아니라 다른 시간대에 작은 로트를 가진 여러 병렬 스레드를 사용한다는 사실은 그러한 거래 중에 최대 손실을 필터링하는 것과 같은 효과가 있다는 사실만으로 설명됩니다. 즉, 여러 개의 임의 프로세스(하나의 스레드에 대한 균형 역학)가 있는 경우 한 계정에 잔액을 추가할 때 최대 손실은 각 스레드의 손실 합계와 같지 않지만 각 스레드의 손실 합계는 스레드 수의 제곱근으로 나눈 값! 따라서 총 최대 드로다운을 줄이려고 합니다. 즉, 6개의 스레드가 있고 각 스레드가 1.5년의 기록에 대해 50USD의 감소가 있는 경우 논리적으로 6개의 스레드의 총 감소는 300USD여야 하지만 실제로는 이 금액을 다음으로 나누어야 합니다. 6의 루트 = 2, 45. 글쎄, 이와 같은 것이 테스터에 표시됩니다. 테스터에 따르면 약 2.2로 나누어야합니다. 최대 드로다운을 줄이려는 내 아이디어와 잘 맞는다고 생각합니다.
 
일반적으로, 당신은 당신 자신의 "계획"을 생각해 낼 수 있습니다. 그것이 쉬울 것이라고 말하지는 않겠지만, 그것이 어떻게 작동하고 어떻게 (그리고 왜 정확히 이런 식으로 그리고 다른 어떤 방식으로도) 이해하는 것이 가능할 것입니다. 방법) 신호가 해석됩니다. 코드에 관하여: 나는 그것을 MKL4로 작성했습니다. 이것은 제가 오랫동안 프로그래밍해 온 C \ C ++와 매우 유사하지만 느리게 작동하지만 C ++에서 모든 것을 다시 컴파일할 것입니다. 프로그램의 크기와 관련하여 - 정말 다소 큽니다. 0.5M은 컴파일된 프로그램의 크기, 즉 .ex4 파일의 크기입니다. 줄의 수에 약간의 실수를 저질렀습니다 - 총 6000개 정도 - 기본적으로 모든 것이 함수, 루프 및 다차원 배열 에 있으므로 확장하면 상상조차 할 수 없습니다 :) .....


행운을 빕니다.
 
야 블라디슬라프!
그리고 우리는 다른 사람의 지점을 범람시켰습니다. :). 행운을 빕니다.


당신과 의견이 다를 수 있습니다. 이 스레드는 경험과 아이디어를 공유하기로 결정했을 때만 흥미로워졌습니다.

물리학자로서 나는 그 분야, 가능성 등에 대한 모든 것을 이해합니다. 최적화를 통해 모든 것이 명확해집니다. 이것은 사소하지 않고 흥미로운 문제입니다. 수학적 통계에 관해서는, 아아, 여기서는 그것이 일반적인 용어로만 무엇에 관한 것인지 이해할 수 있었습니다. 그리고 주제가 흥미롭습니다. 특히 수준의 중요성과 비무작위 예측 가능성에 대한 사전 평가 측면에서.

내 접근 방식(지금까지)은 추세 시장에서 기간을 식별하는 데 중점을 두었습니다. 나는 위의 기사에 주어진 형식이나 다른 방식 으로 허스트 지수 를 사용하지 않았습니다. 그러나 나는 또한 나만의 계산 알고리즘이 있는 시장 프랙털리티 측정에 의존하려고 합니다. 추세 기간뿐만 아니라 반대 추세 기간도 사용할 수 있다는 생각은 제게는 전혀 예상치 못한 일이었습니다. 때로는 코 밑에 무엇이 있는지조차 보기 어려울 때가 있습니다. :-)

따라서 이 포럼이 아닌 경우 Murray 레벨 표시기에 제공된 귀하의 이메일 또는 개인의 스파이더를 통해 기꺼이 대화를 계속할 것입니다.

어쨌든 당신의 작업은 저에게 깊은 인상을 남겼습니다! 처음으로 나는 아마추어(나도 포함)의 "비유적 사고"가 아닌 수학자의 손에 있는 수학을 보았습니다.
나는 특히 이것을 좋아했다:
...2006년 1월 이후로 따옴표의 약간의 차이에도 불구하고 모든 데이터 피드, 즉 모든 DC에서 반전 영역의 동일한 수준과 경계를 제공하는 솔루션을 얻을 수 있었습니다. 평활 알고리즘을 사용합니다. 모두 늦습니다.

스무딩을 사용하지 않고 다양한 데이터 스트림에서 결과를 수렴한다는 것은 기술에 프로세스의 특성이 있다는 것을 의미합니다!
 
따라서 이 포럼이 아닌 경우 Murray 레벨 표시기에 제공된 귀하의 이메일 또는 개인의 스파이더를 통해 기꺼이 대화를 계속할 것입니다.


괜찮아요 .


스무딩을 사용하지 않고 다양한 데이터 스트림에서 결과를 수렴한다는 것은 기술에 프로세스의 특성이 있다는 것을 의미합니다!


나는 조금 더 겸손하게 말할 것입니다. 이것은 수학적 통계 방법이 작동한다는 것을 의미합니다. 올바르게 적용하기만 하면 되지만 그럼에도 불구하고 많은 TA 방법에는 정당성이 있습니다. (즉, 시장에 미리 결정된 움직임의 섹션이 있습니다). Elliott 또는 Gann과 같은 질적 방법을 포함하지만 이미 썼듯이 정량적 평가가 없기 때문에 Elliott를 별로 좋아하지 않습니다.

어쨌든 - 행운을 빕니다. 추세를 통과하십시오.

추신: 거미에 대한 수학적 통계에 대한 몇 권의 좋은 책이 있습니다. McCormick의 "Encyclopedia of Trading Strategies"와 Bulashev의 " Statistics for Traders "를 찾아보세요. 적용되는 의미에서 매우 유용합니다. 방법을 적용하는 논리가 표시됩니다.
 
나는 당신의 토론을 흥미롭게 읽었고 사용된 방법에 대한 더 큰 관심을 가지고 나의 전문적인 활동으로 인해 나와 매우 가깝습니다. 나의 작은 기여를 해보자.
안티 앨리어싱 알고리즘을 사용하지 않습니다. 모두 늦습니다.

회절 커널이 있는 DCT를 사용해 보십시오. 매우 매끄럽고 지연이 전혀 없습니다. IMHO, 기존 LCF보다 더 잘 작동합니다. 아래는 C++의 코드 조각입니다. 사용 방법은 의견에서 분명하다고 생각합니다.

//*************************************************************************//
/////////////////////////////////////////////////////////////////////////////
//+-----------------------------------------------------------------------+//
//| Прямое дискретное косинус-преобразование (DCT) x[] --> y[]            |//
//+-----------------------------------------------------------------------+//
/////////////////////////////////////////////////////////////////////////////
/*
   Входные глобальные переменные:
 double x[]           // входной массив
   Входные локальные переменные:
 int    n_bars        // полное число баров для DCT-преобразования
   Выходные локальные переменные: нет
   Выходные глобальные переменные:
 double y[]           // массив гармоник
*/
void DCT(int n_bars, double x [], double y [])
{ 
 int k;                                // счетчик строк матрицы коэффициентов
 int n;                             // счетчик столбцов матрицы коэффициентов
 double sum;                                                    // накопитель
 double PIN2 = PI / (n_bars * 2.0);
 double wgt_zero = 1.0 / sqrt(n_bars);            // вес при 0-м коэффициенте
 double wgt_nzero = sqrt(2.0) * wgt_zero;           // вес при всех остальных
 //----
 // dct-преобразование
 for (k = 0; k < n_bars; k++)
 {                                                               // цикл по k
  sum = 0.0;                                           // обнуляем накопитель
  for (n = 0; n < n_bars; n++)
  { sum += x[n] * cos(PIN2 * (2.0 * n + 1.0) * k); }             // цикл по n
   if (k != 0)
   { y[k] = wgt_nzero * sum; } 
   else
   { y[k] = wgt_zero  * sum; }
  }                                                              // цикл по k
 //----
 return;
} 
//
//*************************************************************************//
/////////////////////////////////////////////////////////////////////////////
//+-----------------------------------------------------------------------+//
//| Обратное дискретное косинус-преобразование (IDCT) y[] --> x[]         |//
//+-----------------------------------------------------------------------+//
/////////////////////////////////////////////////////////////////////////////
/*
   Входные глобальные переменные:
 double y[]           // массив гармоник
   Входные локальные переменные:
 int    n_bars        // полное число баров для DCT-преобразования
   Выходные локальные переменные: нет
   Выходные глобальные переменные:
 double x[]           // выходной массив
*/
void IDCT(int n_bars, double x [], double y [])
{ 
 int k;                                // счетчик строк матрицы коэффициентов
 int n;                             // счетчик столбцов матрицы коэффициентов
 double sum;                                                    // накопитель
 double PIN2 = PI / (n_bars * 2.0);
 double wgt_zero = 1.0 / sqrt(n_bars);            // вес при 0-м коэффициенте
 double wgt_nzero = sqrt(2.0) * wgt_zero;           // вес при всех остальных
 //----
 // idct-преобразование
 for (n = 0; n < n_bars; n++)
 {                                                               // цикл по n
  sum = 0.0;                                           // обнуляем накопитель
  for (k = 0; k < n_bars; k++)
  {                                                              // цикл по k
   if (k != 0)
   { sum += wgt_nzero * y[k] * cos(PIN2 * (2.0 * n + 1.0) * k); }
   else
   { sum += wgt_zero  * y[k] * cos(PIN2 * (2.0 * n + 1.0) * k); }
  }                                                              // цикл по k
    x[n] = sum;
 }                                                               // цикл по n
 //----
 return;
} 
//
//*************************************************************************//
/////////////////////////////////////////////////////////////////////////////
//+-----------------------------------------------------------------------+//
//| Вычисление левой части уравнения y[] --> y[] (диффракционное ядро)    |//
//+-----------------------------------------------------------------------+//
/////////////////////////////////////////////////////////////////////////////
/*
   Входные глобальные переменные:
 double y[]            // массив гармоник
   Входные локальные переменные:
 int    n_bars         // полное число баров для расчета
 double eye            // размер "окна"
 double alfa           // параметр регуляризации
   Выходные локальные переменные: нет
   Выходные глобальные переменные:
 double y[]            // массив значений левой части уравнения 
*/
void GetDiffrLeftSide(int n_bars, double eye, double alfa, double y []) 
{
 double kern;   //
 double omega;  //
 double domega; //
 double omega2; // 1 + omega^2
 double delta = 2.0 * PI / (n_bars - 1);
 int i;
 //----
 for (i = 0; i < n_bars; i++)
 {
  omega  = i * delta;
  domega = omega * eye;
  omega2 = 1.0 + omega * omega;                  // 1. + omega^2
  kern   = (sin(domega) + EPS) / (domega + EPS); // sin(arg)/arg
  y[i]  = (kern * y[i]) / (kern * kern + alfa * omega2);
 }
 //----
 return;
}
//
//*************************************************************************//
/////////////////////////////////////////////////////////////////////////////
//+-----------------------------------------------------------------------+//
//| Линейное сглаживание массива x[] по 5 точкам; результат - y[]         |//
//+-----------------------------------------------------------------------+//
/////////////////////////////////////////////////////////////////////////////
/*
   Входные глобальные переменные:
 double x[]    // входной массив - аргумент;
   Входные локальные переменные:
 int    n_beg  // номер начального бара
 int    n_end  // номер конечного бара
   Выходные локальные переменные: нет
   Выходные глобальные переменные:   
 double y[]    // выходной массив - ответ;
*/
void GetSmooth5(int n_beg, int n_end, double x [], double y [])
{ 
 int i;
 //----
 y[n_beg] = (3.0 * x[n_beg] + 2.0 * x[n_beg+1] + 
                                    x[n_beg+2] - x[n_beg+4]) / 5.0;
 y[n_beg+1] = (4.0 * x[n_beg] + 3.0 * x[n_beg+1] + 
                                2.0 * x[n_beg+2] + x[n_beg+3]) / 10.0;
 for (i = n_beg + 2; i < n_end - 2; i++)
 { y[i] = (x[i-2] + x[i-1] + x[i] + x[i+1] + x[i+2]) / 5.0; }
 y[n_end-2] = (x[n_end-4] + 2.0 * x[n_end-3] + 
                            3.0 * x[n_end-2] + 4.0 * x[n_end-1]) / 10.0;
 y[n_end-1] = (3.0 * x[n_end-1] + 2.0 * x[n_end-2] + 
                                        x[n_end-3] - x[n_end-5]) / 5.0;
 //----
 return;
} 
//



사용 방법은 다음과 같습니다.

//
//*************************************************************************//
/////////////////////////////////////////////////////////////////////////////
//+-----------------------------------------------------------------------+//
//| Сглаживание методом DCT-преобразования (без запаздывания)             |//
//+-----------------------------------------------------------------------+//
/////////////////////////////////////////////////////////////////////////////
/*
   Входные глобальные переменные:
 double x[]     // несглаженный массив значений аргумента (цена);
   Входные локальные переменные:
 int    n_bars  // полное число баров для преобразования
 double eye     // размер "окна"
 double alfa    // параметр регуляризации 
   Выходные локальные переменные: 
 int nn_tot     // число сглаженных баров
   Выходные глобальные переменные:
 double x[]     // ответ - сглаженный массив значений аргумента;
*/
MT4_EXPFUNC int __stdcall GetDiffrDCTS (int nn_tot, double eye,  double alfa,
                                                                 double x [])
{
 int err_code = 0;                                              // код ошибки
 int i;                                                            // счетчик
 //
 // ########################### Error Definitions ###########################
 // *** Ошибка: если превышено максимальное число баров, выход ***
 if (nn_tot > NN_MAX) 
 { 
	 err_code = -1;
	 return(err_code); 
 } 
 // *** Ошибка: для преобразования задано слишком мало баров, выход ***
 if (nn_tot < NN_MIN) 
 {  
	 err_code = -2;
	 return(err_code); 
 }  
 // *** Ошибка: параметр alfa = 0 при eye <> 0, выход ***
 if ((alfa == 0.0) && (eye != 0.0)) 
 {  
	 err_code = -3;
	 return(err_code); 
 }  
 // *** Ошибка: параметр eye_size < 0, выход ***
 if (eye < 0.0) 
 {  
	 err_code = -4;
	 return(err_code); 
 }  
 // *** Ошибка: параметр eye_alfa < 0, выход ***
 if (alfa < 0.0) 
 { 
	 err_code = -5;
	 return(err_code); 
 }  
 // #########################################################################
 //
 //----
 //
 DCT (nn_tot, x, y);                                           // x[] --> y[]
 GetDiffrLeftSide (nn_tot, eye, alfa, y);                      // y[] --> y[]
 IDCT (nn_tot, x, y);                                          // y[] --> x[]
 GetSmooth5 (0, nn_tot, x, y);                                 // x[] --> y[]
 for (i = 0; i < nn_tot; i++) { x[i] = y[i]; }                 // y[] --> x[]

 //
 //----
 err_code = nn_tot;
 return(err_code);
}
//



예를 들어 매개변수 Eye = 2.5, Alfa = 0.5를 사용해 보십시오. 조합(Eye !=0, Alfa == 0)은 허용되지 않음을 기억하는 것이 중요합니다. EPS는 유형 0/0 모호성을 피하기 위해 사용됩니다. EPS = 1.0E-09를 사용합니다.
평활화된 배열은 nn_tot 막대에 대한 가격 변동 범위로 정규화되어야 합니다.

//
/////////////////////////////////////////////////////////////////////////////
//+-----------------------------------------------------------------------+//
//| Нормировка результов вычислений на заданный диапазон значений         |//
//+-----------------------------------------------------------------------+//
/////////////////////////////////////////////////////////////////////////////
/*
   Входные глобальные переменные:
 double x[]    // неномированный массив значений аргумента;
   Входные локальные переменные:
 int    n_beg  // номер начального бара
 int    n_end  // номер конечного бара
 double v_max  // максимальное значение диапазона для нормировки;
 double v_min  // минимальное значение диапазона для нормировки;
   Выходные локальные переменные: нет
   Выходные глобальные переменные:
 double x[]    // ответ - нормированный массив значений аргумента;
*/
MT4_EXPFUNC int __stdcall NormRange(int n_beg, int n_end, 
                                    double v_max, double v_min, double x [])
{ 
 int    err_code = 0;                              // возвращаемый код ошибки
 double x_max;                 // максимальное значение в нормируемом массиве
 double x_min;                  // минимальное значение в нормируемом массиве
 double x_curr;                           // текущее ненормированное значение
 double x_norm;                             // текущее нормированное значение
 double coef_1;                              // 1-й нормировочный коэффициент
 double coef_2;                              // 2-й нормировочный коэффициент
 double diff_x;                                     // разность x_max - x_min
 int    n_bars;                                              // n_end - n_beg
 int    i;                                                         // счетчик
 //
 n_bars = n_end - n_beg;
 // ########################### Error Definitions ###########################
 // *** Ошибка: если перепутаны местами начальный и конечный бары, выход ***
 if (n_bars < 0) 
 { 
	 err_code = -6;
	 return(err_code); 
 } 
 // *** Ошибка: если превышено максимальное число баров, выход ***
 if ((n_bars > 0) && (n_bars > NN_MAX))
 { 
	 err_code = -1;
	 return(err_code); 
 } 
 // *** Ошибка: для преобразования задано слишком мало баров, выход ***
 if ((n_bars > 0) && (n_bars < NN_MIN))
 {  
	 err_code = -2;
	 return(err_code); 
 }  
 // #########################################################################
 //
 //----
 // находим максимумы и минимумы в массиве результата
 x_min =  999999999.0;
 x_max = -999999999.0;
 for (i = n_beg; i < n_end; i++)
 { 
  x_curr = x[i];
  if (x_curr >= x_max) { x_max = x_curr; }
  if (x_curr <= x_min) { x_min = x_curr; }
 } 
 diff_x = x_max - x_min;
 //
 // ########################### Error Definitions ###########################
 // *** Ошибка: diff_x = 0 ***
 if (diff_x == 0.0)
 {
  err_code = -7;
  return(err_code);
 }
 // #########################################################################
 //
 // находим коэффициенты пересчета   
 coef_1 = (v_min * x_max - v_max * x_min) / diff_x;
 coef_2 = (v_max - v_min) / diff_x;
 // нормируем результат на заданный диапазон
 for (i = n_beg; i < n_end; i++)
 { 
  x_curr = x[i];
  x_norm = coef_1 + x_curr * coef_2;
  x[i]   = x_norm;
 } 
 //----
 return(err_code);
} 
//



변수 v_max 및 v_min은 처리를 위한 가격 배열을 구성할 때 더 일찍 얻어야 합니다.

 
블라디슬라프
세간의 이목을 끄는 문구와 수학적 통계 방법에 대한 태도 없이 하려는 당신의 바람을 이해합니다.
그러나 나는 다른 의견을 가지고 있습니다.

시장은 고정적이지 않고 혼란스러운 과정입니다. 그리고 수학적 통계는 주로 고정 과정을 다룹니다. 한계에 도달하는 것은 주장을 증명하는 주요 방법 중 하나입니다. 시장의 한계 상태는 무엇입니까? 브라운 운동은 닫힌 시스템에서 현상이며 시장은 본질적으로 열린 시스템입니다. 반면에 시장은 자기조직화 과정이므로 이 자기조직화의 법칙이 있다.

내 관점에서 당신의 성공은 수학적 방법을 사용하기 때문이 아니라,
전략의 건설적인 부분에서 수학적 통계 방법에 대한 제한.
메서드(즉, 도구)가 응용 프로그램의 세부 사항에 용해되지 않도록 하지 않고 중요한 것을 캡처하는 데 도움이 된 것은 이러한 제한 사항이었습니다.

책 감사합니다. 꼭 읽어봐야겠습니다.
거미의 별명이 같습니까?
 

거미의 별명이 같습니까?


거미에 - VG.

행운을 빕니다.
 
알렉스주
이 세 가지 소스를 수행한다는 것은 MT4(이와 유사)와 함께 사용한다는 것을 의미합니다. 그리고 컴파일을 위한 C 환경이 없다면 어떤 느낌이 들까요?
 
alexjou
이 세 가지 소스를 수행한다는 것은 MT4(이와 유사)와 함께 사용한다는 것을 의미합니다. 그리고 컴파일을 위한 C 환경이 없다면 어떤 느낌이 들까요?

당신은 MT를 시도 할 수 있습니다. 초기에는 디버깅을 위해 MQL로 프로그래밍한 다음 최소한의 변경으로 C로 마이그레이션했으며 가장 오래된 버전은 어셈블러에 있었습니다.
사유: