추세선의 경사각 계산. - 페이지 15

 
Daniil Kurmyshev :

아, 글쎄, 그렇다면 분명하다) 그런 다음 코드를 반환합니다. 아마도 Renat Akhtyamov 가 아닌 다른 사람에게 유용할 것입니다. 그런데 나는 이에 대한 포럼에 앉아 있지 않습니다)))

//------------------------------------------------ ------------------------------------

// xAngle ///////////////////////////////////////////////// ///////////////////////////////

//------------------------------------------------ ------------------------------------

double xAngle(double x1,double y1,double x2,double y2) // x1,x2 시간[] - y1,y2 가격

{

if(x1==0 || x2==0 || y1==y2){반환(0);}

if(y1==y2) {반환(0);}

//---

더블 PriceMAX=ChartGetDouble(0,CHART_PRICE_MAX,0);

이중 PriceMIN=ChartGetDouble(0,CHART_PRICE_MIN,0);

더블 Bar1proc=(더블)(ChartGetInteger(0,CHART_WIDTH_IN_BARS,0)*_Period*60)/100;

이중 Price1proc=((PriceMAX-PriceMIN)/_Point)/100;

x1=iBarShift(NULL,0,(날짜/시간)x1);

x2=iBarShift(NULL,0,(날짜/시간)x2);

이중 x1x2=MathAbs(x1-x2)*_Period*60;

이중 y1y2=MathAbs(y1-y2)/_Point;

더블 x1x2_proc=x1x2/Bar1proc;

이중 y1y2_proc=y1y2/Price1proc;

//---

더블 세타=MathArctan(y1y2_proc/x1x2_proc)*(180/3.1415926535);

if(y2<y1){theta=NormalizeDouble(세타*(-1),2);}

리턴(세타);

}

//+----------------------------------------------- --------------------+

각도를 계산하기 위한 순수한 형태의 기능, 자동 모드에서 차트의 눈금을 조정하여 직접 사용합니다. 완벽하게 작동합니다) 추세 전략에 관해서는 추세 전략의 강도와 대략적인 기간을 추정할 수 있습니다 각도로 추세.

여기:

더블 Bar1proc=(더블)(ChartGetInteger(0,CHART_WIDTH_IN_BARS,0)*_Period*60)/100;

이중 Price1proc=((PriceMAX-PriceMIN)/_Point)/100;

100으로 나누는 것은 중복됩니다. 최종 공식에서 세타를 계산할 때 분자와 분모에 100을 넣습니다. 그리고 그들은 줄어들고 있습니다.


여기:

이중 Price1proc=((PriceMAX-PriceMIN)/_Point)/100;

이중 y1y2=MathAbs(y1-y2)/_Point;

_Point로 나누는 것은 불필요합니다. 100으로 나누는 것과 같습니다.

최종 공식에서 double y1y2_proc=y1y2/Price1proc;

분자와 분모의 _Point가 취소됩니다.

이러한 단순화는 먼저 계산(프로세서 부하)을 줄이고 두 번째로 최종 결과의 정확도를 높일 수 있습니다.


=================================

또는 ChartTimePriceToXY 함수를 사용하여 그래픽 도구의 앵커 포인트에서 픽셀 값을 결정해 보십시오.

수평 및 수직 픽셀 수를 통해 삼각 함수를 더 쉽게 계산할 수 있습니다. 막대와 점의 변환 없이.

훨씬 쉬워야 합니다.


//------------------------------------------------ ------------------------------------

// xAngle ///////////////////////////////////////////////// ///////////////////////////////

//------------------------------------------------ ------------------------------------

double xAngle(datetime x1,double y1,datetime x2,double y2) // x1,x2 Time[] - y1,y2 가격

{

if(x1==0 || x2==0 || y1==y2){반환(0);}

정수 _x1, _y1, _x2, _y2;

ChartTimePriceToXY(0,0,x1,y1, _x1, _y1);

ChartTimePriceToXY(0,0,x2,y2, _x2, _y2);

더블 세타=MathArctan((더블)MathAbs(_y1-_y2)/(더블)MathAbs(_x1-_x2))*(180/3.1415926535);

if(y2<y1){theta=NormalizeDouble(세타*(-1),2);}

리턴(세타);

}

여기서 if(y2<y1){theta=NormalizeDouble(theta*(-1),2);} 결과에 따라 부호를 조정합니다.
 
Eugeni Neumoin :

여기:

.......

훨씬 쉬워야 합니다.

예, 이 모든 것은 사용자가 설정한 척도에 따라 다르기 때문에 완전히 쓸모가 없습니다. 이는 차트마다 다를 수 있습니다.

유일한 올바른 솔루션은 단위 시간당 가격 추세를 측정하는 것입니다.

"시간당 0.0001 유로달러" 추세는 규모와 플랫폼에 관계없이 모든 사람에게 정확히 동일하게 그려집니다.

 
George Merts :

예, 이 모든 것은 사용자가 설정한 척도에 따라 다르기 때문에 완전히 쓸모가 없습니다. 이는 차트마다 다를 수 있습니다.

유일한 올바른 솔루션은 단위 시간당 가격 추세를 측정하는 것입니다.

"시간당 0.0001 유로달러" 추세는 규모와 플랫폼에 관계없이 모든 사람에게 정확히 동일하게 그려집니다.

나는 스레드의 주제에주의를 기울이지 않았습니다. 경사 레이블이 추세 레이블과 평행하도록 각도를 계산하는 것이 흥미로웠습니다. 위에서 나는 각도를 계산하기 위한 단순화된 함수를 작성했습니다. 규모와 완전히 무관합니다. 차트의 축척 및 기타 속성을 변경할 때 비문을 왜곡하지 않으려면 CHARTEVENT_CHART_CHANGE를 사용할 수 있습니다.

=========

그림과 같이 선 근처에 비문을 표시하고 싶었습니다. 위의 기능을 사용하면 다음과 같이 됩니다.


 
Eugeni Neumoin :

그림과 같이 선 근처에 비문을 표시하고 싶었습니다. 위의 기능을 사용하면 다음과 같이 됩니다.

아름다운!
 
Eugeni Neumoin :

동의합니다 동의합니다 계산을 줄이기 위한 조정 및 계산에서 불필요한 제스처, 나 자신도 이것을 좋아하지 않지만 이 기능을 처음 만들 때 여러 가지 방법을 확인하고 다시 실행하지 않았습니다. 더 이상) 및 픽셀에 대해서는 개인적으로 가장 이상적인 각도 계산인 당신과 완전히 동의합니다. 여기 내 기능이 있습니다.

//------------------------------------------------ ------------------------------------

// xAnglePixels //////////////////////////////////////////////// ////////////////////////

//------------------------------------------------ ------------------------------------

double xAnglePixels(datetime x1,double y1,datetime x2,double y2) // x1,x2 Time[] - y1,y2 가격

{

if(x1==0 || x2==0 || y1==y2){반환(0);}

//---

정수 x[2], y[2];

ChartTimePriceToXY(0,0,x1,y1,x[0],y[0]);

ChartTimePriceToXY(0,0,x2,y2,x[1],y[1]);

//---

if(x[1]<x[0]){반환(-1000);}

//---

이중 x1x2=MathAbs(x[0]-x[1]);

이중 y1y2=MathAbs(y[0]-y[1]);

//---

이중 세타;

if(x1x2!=0){theta=MathArctan(y1y2/x1x2)*(180/3.1415926535);}

else{세타=90;}

if(y2<y1){theta=NormalizeDouble(theta*(-1),2);}else{theta=NormalizeDouble(theta,2);}

리턴(세타);

}

//------------------------------------------------ ----------------------------------

추신 if(x[1]<x[0]){return(-1000);} 함수는 내가 직접 사용했기 때문에 제거할 수 있으며, 보다 정확하게는 사용자 가 개체 .

//------

그건 그렇고, 차트의 비문에 대해 이것이 정확히 내가 사용하는 것입니다. 이전 스레드에서이 표시기의 작동 예를 보냈습니다. 거기에서 볼 수 있습니다.

//------

특별한 감사와 존경)

 
Eugeni Neumoin :

경사 레이블이 추세 레이블과 평행하도록 각도를 계산하는 것이 흥미로웠습니다. 위에서 나는 각도를 계산하기 위한 단순화된 함수를 작성했습니다. 규모와 완전히 무관합니다.

예, 이것은 완전히 다른 문제입니다. 여기서 작업은 추세를 결정하는 것이 아니라 모니터에 표시되는 직선의 기울기를 결정하는 것입니다. 그리고 이 경우 경로가 정확합니다. 글쎄, 그림에서 - 모든 것이 아름답습니다.
 
George Merts :
예, 이것은 완전히 다른 문제입니다. 여기서 작업은 추세를 결정하는 것이 아니라 모니터에 표시되는 직선의 기울기를 결정하는 것입니다. 그리고 이 경우 경로가 정확합니다. 글쎄, 그림에서 - 모든 것이 아름답습니다.
당신의 말을 기반으로 아이디어에 따라 추세선 을 만들 수 있으며 추세의 방향을 보여주고 탬버린으로 춤을 추지 않고 구성된 선에 대해 올바른 각도가 표시됩니다. 나는 그림에 예를 첨부했습니다. 내 로봇은 모든 규칙에 따라 빌드하지만 본질은 보입니다.
파일:
 
Daniil Kurmyshev :
당신의 말을 기반으로 아이디어에 따라 추세선 을 만들 수 있으며 추세의 방향을 보여주고 탬버린으로 춤을 추지 않고 구성된 선에 대해 올바른 각도가 표시됩니다. 나는 그림에 예를 첨부했습니다. 내 로봇은 모든 규칙에 따라 빌드하지만 본질은 보입니다.
그림은 계산을 시각화한 것입니다. 시각화의 비율을 왜곡할 수 있으며(차트 축척 변경) 그림이 크게 변경됩니다. 선이 각도를 도 단위로 변경합니다. 그리고 스케일 변경으로 인한 계산 결과는 변경되지 않습니다. 물론 추세선을 픽셀 단위로 계산하지 않는 한
 
Alexander Puzanov :
그림은 계산을 시각화한 것입니다. 시각화의 비율을 왜곡할 수 있으며(차트 축척 변경) 그림이 크게 변경됩니다. 선이 각도를 도 단위로 변경합니다. 그리고 스케일 변경으로 인한 계산 결과는 변경되지 않습니다. 물론 추세선을 픽셀 단위로 계산하지 않는 한
나는 당신에게 동의합니다. 그러나 당신은 각 TF에서 경향이 다르다는 것을 이해합니다. 작은 TF에서 커 보이는 경향이 큰 TF에서 작아지고 기울기가 변할 것이며 변화하는 경향의 표현 일뿐입니다. , 각도 측정 시스템이 아니라 치수 시스템이 변경되면 좋은 결과가 나오지 않습니다.
 
Daniil Kurmyshev :
나는 당신에게 동의합니다. 그러나 당신은 각 TF에서 경향이 다르다는 것을 이해합니다. 작은 TF에서 커 보이는 경향이 큰 TF에서 작아지고 기울기가 변할 것이며 변화하는 경향의 표현 일뿐입니다. , 각도 측정 시스템이 아니라 치수 시스템이 변경되면 좋은 결과가 나오지 않습니다.
기간을 변경하는 것은 그것과 아무 관련이 없습니다. 기간을 변경하면 계산이 변경됩니다. 그리고 스케일을 변경할 때(터미널 패널의 버튼 또는 +/- 버튼을 사용하여 때로는 차트를 스크롤하여) 계산에 아무 것도 변경되지 않으며 ° float xs는 여기서