알고리즘 '원심분리기'' - 페이지 13

 
Aleksei Stepanenko :

확인, ...

- 아마도 다른 것...

IT(이상점)를 찾기 위해서는 어떻게든 GA를 활용해야 한다. 나는 그것에 대해 생각하고 있어요.
 
Igor Makanu :

이야기의 이상적인 진입점 - 지그재그, 당신은 거부했습니다

아이디어를 모독할 수 있으므로 ZigZag를 사용하고 싶지 않습니다. ZZ가 이상적인 포인트의 완벽한 지표라면 가장 완벽한 지표입니다. 다른 것보다 이상적인 포인트에 더 정확하게 도달하기 때문입니다. 지그재그는 모든 전략의 모든 거래 신호 집합에 있어야 합니다. 그리고 이것은 넌센스입니다.

시간/이익/위험과 GA를 사용하는 기준에 따라 기록의 거래 섹션이 결정되어야 한다고 생각합니다.

 
Реter Konow :

아이디어를 모독할 수 있으므로 ZigZag를 사용하고 싶지 않습니다. ZZ가 이상적인 포인트의 완벽한 지표라면 가장 완벽한 지표입니다. 다른 것보다 이상적인 포인트에 더 정확하게 도달하기 때문입니다. 지그재그는 모든 전략의 모든 거래 신호 집합에 있어야 합니다. 그리고 이것은 넌센스입니다.

시간/이익/위험과 GA를 사용하는 기준에 따라 기록의 거래 섹션이 결정되어야 한다고 생각합니다.

나는 그것에 대해 아무 것도 없다

무엇을 논의해야 할지 모르겠어, 지금은 자리를 비우고 있어

 
Реter Konow :
IT(이상점)를 찾기 위해서는 어떻게든 GA를 활용해야 한다. 나는 그것에 대해 생각하고 있어요.

이해하지 못했습니다. 이상적인 점은 이미 역사에 알려져 있습니다. 이것은 극단이며 눈으로 볼 수 있습니다. 극한값 검색 에는 복잡한 알고리즘이 필요하지 않습니다. 검색 조건을 정의하기만 하면 됩니다(예: 반대쪽 인접 극값 사이의 특정 수의 포인트 초과). 그런 다음 이러한 극한값(가격, 날짜)의 배열을 만들고 동일한 기록의 각 극값(정상 또는 이 지점으로 가는 도중) 지점에서 표시기의 값을 확인할 수 있습니다. 그래서?

예를 들어, 다음은 히스토리 극한값을 검색하고 저장하기 위한 무릎 위의 코드입니다(성능 보장 없이).

 input double Distance= 100 ;

//каждый элемент массива будет содержать три поля: дата, цена и положение экстремума (верх, низ) 
struct sextr{ datetime time; double price; int position;} Extremes[];

void OnStart ()
   {
   int Total= iBars ( Symbol (), 0 );
   for ( int i=Total- 1 ; i>= 0 ; i--)
      {
      WriteExtremum(Extremes,Distance, Symbol (), 0 ,i);
      }
   }   

//здесь записываем экстремумы в массив
void WriteExtremum(sextr &eExtremes[], double eDistance, string eSymbol, int eTimeFrame, int eShift)
   {
   int eFinish= ArraySize (eExtremes)- 1 ;
   double eHigh= iHigh (eSymbol,eTimeFrame,eShift);
   double eLow= iLow (eSymbol,eTimeFrame,eShift);
   datetime eTime= iTime (eSymbol,eTimeFrame,eShift);
   //если массив пустой
   if (eFinish< 0 )
      {
       ArrayResize (eExtremes,++eFinish+ 1 );
      eExtremes[eFinish].time=eTime;
       //пока мы не знаем какой из экстремумов будет в первом элементе, поэтому берём цену по середине
       //можно сделать более грамотнее, но лень. Поэтому первый экстремум у нас будет бракованный 
      //и мы его потом затрём 
      eExtremes[eFinish].price=(eHigh+eLow)/ 2 ;
      eExtremes[eFinish].position= 0 ;
      }
   //если в массиве есть элементы
   else
      {
       //текущий элемент - максимум
       if (eExtremes[eFinish].position== 1 )
         {
         //произошло обновление текущего экстремума
         if (eHigh-eExtremes[eFinish].price> 0 )
            {
            eExtremes[eFinish].time=eTime;
            eExtremes[eFinish].price=eHigh;
            }         
         //произошло превышение расстояния между противоположными экстремумами
         if (eExtremes[eFinish].price-eLow>eDistance)
            {
             ArrayResize (eExtremes,++eFinish+ 1 );
            eExtremes[eFinish].time=eTime;
            eExtremes[eFinish].price=eLow;
            eExtremes[eFinish].position=- 1 ;
            }
         }
       //текущий элемент - минимум
       if (eExtremes[eFinish].position==- 1 )
         {
         //произошло обновление текущего экстремума
         if (eExtremes[eFinish].price-eLow> 0 )
            {
            eExtremes[eFinish].time=eTime;
            eExtremes[eFinish].price=eLow;
            }         
         //произошло превышение расстояния между противоположными экстремумами
         if (eHigh-eExtremes[eFinish].price>eDistance)
            {
             ArrayResize (eExtremes,++eFinish+ 1 );
            eExtremes[eFinish].time=eTime;
            eExtremes[eFinish].price=eHigh;
            eExtremes[eFinish].position= 1 ;
            }
         }
       //эта ситуация, когда первый элемент не закрылся, и не понятно максимум это будет или минимум
       //если произошло превышение в любую сторону, тогда затираем значения первого элемента
       if (extremes[eFinish].position== 0 )
         {
         //произошло превышение расстояния между противоположными экстремумами
         if (eHigh-eExtremes[eFinish].price>eDistance)
            {
            eExtremes[eFinish].time=eTime;
            eExtremes[eFinish].price=eHigh;
            eExtremes[eFinish].position= 1 ;
            }            
         if (eExtremes[eFinish].price-eLow>eDistance)
            {
            eExtremes[eFinish].time=eTime;
            eExtremes[eFinish].price=eLow;
            eExtremes[eFinish].position=- 1 ;
            }
         }
      }   
   }

또한 이 코드에서 머리핀을 잡아 처리해야 합니다. 이것은 하나의 양초가 고가와 저가를 동시에 겹칠 때입니다. 극단 사이의 최소 시간뿐만 아니라.

극한값이 포함된 배열이 가득 찼으므로 지표를 언제 어디서 볼지 알 수 있습니다. 그러나 유용성에 대한 의구심은 남아있었습니다 :)

 
Реter Konow :

아이디어를 모독할 수 있으므로 ZigZag를 사용하고 싶지 않습니다. ZZ가 이상적인 포인트의 완벽한 지표라면 가장 이상적인 지표입니다 . 다른 것보다 이상적인 포인트에 더 정확하게 도달하기 때문입니다. 지그재그는 모든 전략의 모든 거래 신호 집합에 있어야 합니다. 그리고 이것은 넌센스입니다.

시간/이익/위험과 GA를 사용하는 기준에 따라 기록의 거래 섹션이 결정되어야 한다고 생각합니다.

지그재그 표시기의 본질을 이해하지 못하...

33 표시기는 실제로 이상적인 표시기이지만 다른 표시기 에 대한 설정일 뿐입니다...

 
Serqey Nikitin :

지그재그 표시기의 본질을 이해하지 못하...

33 표시기는 실제로 이상적인 표시기이지만 다른 표시기 에 대한 설정일 뿐입니다...

TP의 문제점은 거래의 시간/보상/위험 비율을 고려하지 않는다는 것입니다.
33 진입점은 불균형 거래를 제공합니다. 그들은 추세/평면을 고려하지 않을 것입니다. 회랑은 봉우리와 함께 무역 지역 내부에 배치됩니다.
ZZ는 어떤 역동성을 포함하고 있으며 그것을 기반으로 다른 지표를 선택하는 것은 무의미해 보입니다. 적어도 똑똑하지는 않습니다.

우리는 다른 접근 방식이 필요합니다. 이상적인 진입/종료 지점뿐만 아니라 거래의 내부 비율 준수(포지션 기간, 이익 및 위험).

여기서 위험이란 로트, 스탑, 예치금의 비율이 아니라 오픈 포지션 에 따른 가격 변동의 안정성을 의미합니다. 덜 안정적인 변화(탈곡기), 이익 손실의 위험이 커집니다.

따라서 이상적인 진입점/출구점은 "이익이 높을수록 좋다"는 원칙이 아니라 "이상적인 거래는 시간, 이익 및 위험의 비율이 가장 좋은 거래"라는 원칙에 따라 찾아야 합니다.

그게 제 의견입니다.
 
Aleksei Stepanenko :

이해하지 못했습니다. 이상적인 점은 이미 역사에 알려져 있습니다. 이것은 극단이며 눈으로 볼 수 있습니다. 극한값 검색에는 복잡한 알고리즘이 필요하지 않습니다. 검색 조건을 정의하기만 하면 됩니다(예: 반대쪽 인접 극값 사이의 특정 수의 포인트 초과). 그런 다음 이러한 극한값(가격, 날짜)의 배열을 만들고 동일한 기록의 각 극값(정상 또는 이 지점으로 가는 도중) 지점에서 표시기의 값을 확인할 수 있습니다. 그래서?

예를 들어, 다음은 히스토리 극한값을 검색하고 저장하기 위한 무릎 위의 코드입니다(성능 보장 없이).

또한 이 코드에서 머리핀을 잡아 처리해야 합니다. 이것은 하나의 양초가 고가와 저가를 동시에 겹칠 때입니다. 극단 사이의 최소 시간뿐만 아니라.

극한값이 포함된 배열이 가득 찼으므로 지표를 언제 어디서 볼지 알 수 있습니다. 그러나 유용성에 대한 의구심은 남아있었습니다 :)

코드 주셔서 감사합니다. 하지만 IT 검색으로 모든 것이 그렇게 간단하다고 확신할 수는 없습니다.
 

Peter, 차트에 손으로 여러 거래의 예를 그릴 수 있습니까? 입구와 출구. 다양한 가격 움직임이 있는 차트를 취하는 것이 좋습니다. 그리고 이 시점에서 그 이유를 설명하십시오. 여기서 거래의 시간/이익/위험의 비율은 얼마입니까?

그런 다음 이상적인 지점에 대한 당신의 생각을 잘 이해하지 못합니다.

 
Aleksei Stepanenko :

Peter, 차트에 손으로 여러 거래의 예를 그릴 수 있습니까? 입구와 출구. 다양한 가격 움직임이 있는 차트를 취하는 것이 좋습니다. 그리고 이 시점에서 그 이유를 설명하십시오. 여기서 거래의 시간/이익/위험의 비율은 얼마입니까?

그런 다음 이상적인 지점에 대한 당신의 생각을 잘 이해하지 못합니다.

네, 나중에 하겠습니다. 나는 아직 그것을 스스로 알아내지 못했다. 나는 나의 관점을 바꿀 수 있다. 그렇다면 죄송합니다. ))
 

아무 문제 없습니다.

배럴을 지그재그로 굴린다는 사실은 의미가 있습니다. 지그재그는 추세에 대해 아무것도 모릅니다. 트렌드와 플랫 모두에서 시계처럼 똑딱 거리고 있습니다. 그의 웨이브(무릎)는 트렌드 웨이브가 아닙니다. 추세 웨이브는 다음 규칙에 따라 생성됩니다. 추세는 새로운 피크를 정복하면 계속되는 것으로 간주됩니다. 이것은 다음 트렌드 웨이브가 항상 이전 트렌드 웨이브를 중단한다는 것을 의미하며, 중단되지 않으면 이것은 웨이브가 아닙니다.