표시기, 텍스트 간 DISTANCE 자동 관리에 대한 조언 필요(MT-4)

 

안녕하세요 친애하는 프로그래머!
문의하십시오:

지표 형태의 어드바이저 만들기! 그 작업은 차트에서 PATTERN을 찾고 막대 위에 텍스트를 작성하는 것입니다(여러 줄(!), 예:

라인 #1 "신호 이름"
라인 #2 "% 확률"
라인 #3 "아이콘"(화살표)

문제는 IF가 FIXED 줄 간격 = 예를 설정했다는 것입니다. 25핍, 그러면 m5에서 모든 것이 아름답습니다 ... 그리고 H1에서 = 선이 서로 맞춥니다(이것은 고정 텍스트의 문제(!!!)


알려주세요 - TF를 변경할 때 선 사이의 거리를 "자동 계산"하거나 차트를 왼쪽으로 약간 이동하거나 높이(????! !!)

..... 딱 한 가지만 떠오른다.

1) 차트의 현재 높이를 "가져오기"(최소 및 최대 가격):


2) 최대 가격 - 최소 가격 = "차트 높이(핍)"이며 항상 100%로 간주합니다.

3) "선 사이의 고정 거리(25핍)" 대신 - 거리를 백분율로 설정(예: 단락 2의 차트 높이의 2%)


..... 한 프로그래머와 이야기 - 그는 == 객체를 이동하지 마십시오 ... 글쎄, 그것은 불가능합니다 ....... 그래프를 스크롤 한 후 = 새 위치에 여러 줄 텍스트가 표시되도록 서로 어울리지 않는다는 것-친구 == 차트를 뒤집은 후에 필요합니다 == 모든 기호를 삭제하고 차트의 새 높이로 다시 그립니다(항목 2) (!)


.....그렇다면 나는 계속 똑똑해집니다 == OK, WHAT IF = 그래프의 화면 부분에만 그림을 그리세요 ???!

그는 말합니다 = ok, 그는 새로운 신호를 올바르게 쓸 것이고 남아있는 신호는 == 또는 다시 서로 맞을 것입니다. 또는 그 반대의 경우도 마찬가지입니다 = SINCE " 이미 그려진 개체는 이동할 수 없습니다." 하지만 삭제하고 다시 그리기만 하면 됩니다(!).


당신에게 질문 = 이미 유사한 사람이 발생 했습니까 ???????? 이 문제를 어떻게 해결하셨나요??? )))
(그래프의 모든 크기와 높이에서 = 여러 줄 텍스트가 줄 사이의 일반 거리로 돌아갑니다(눈으로 눈금자로 측정하는 경우 == 3mm) ... 즉, 줄 간격을 동적으로 만듭니다) ?? ??? )))))))))))

텍스트가 수평이고 2-3줄이면 시각적으로 편리하기 때문에 전체 비문을 한 줄에 45 *(!) 각도로 만들고 싶지 않습니다. :)

알려주세요(경험 공유)


덕분에))

 
Vitaliy Kostrubko :


이 단축 코드를 확인하면 도움이 될 것입니다. 모든 것은 Canvas에서 구현됩니다.

캔버스의 또 다른 장점은 MT4 및 MT5의 경우 코드가 거의 동일하다는 것입니다.

파일:
 
Vitaliy Kostrubko :

안녕하세요 친애하는 프로그래머!
조언해 주십시오:

...


덕분에))

캔버스에 그리기:

Документация по MQL5: Стандартная библиотека / Пользовательская графика / CCanvas
Документация по MQL5: Стандартная библиотека / Пользовательская графика / CCanvas
  • www.mql5.com
Стандартная библиотека / Пользовательская графика / CCanvas - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
앗... 니콜라이가 앞서갔어...
 

당신이 맞습니다.

 //подсчитывает количество пунктов цены в одном пикселе
double GetPointsInPixel( long eChartId, int eWindow)
   {
   double eMin= EMPTY_VALUE ;
   ChartGetDouble (eChartId, CHART_PRICE_MIN ,eWindow,eMin);
   if (eMin== EMPTY_VALUE ) return ( 0 );
   double eMax= EMPTY_VALUE ;
   ChartGetDouble (eChartId, CHART_PRICE_MAX ,eWindow,eMax);
   if (eMax== EMPTY_VALUE ) return ( 0 );
   long ePixels=- 1 ;
   ChartGetInteger (eChartId, CHART_HEIGHT_IN_PIXELS ,eWindow,ePixels);
   if (ePixels<= 0 ) return ( 0 );
   return ( double (eMax-eMin)/ePixels);
   }

이중 eIndent=GetPointsInPixel(eChartId,eWindow);

그런 다음 이벤트가 변경되면 이 값을 필요한 가격에 더하거나 빼십시오.

-기간 변경

- 그래프 증가/감소,

- 가격 규모를 축소합니다.

 
Nikolai Semko :

이 단축 코드를 확인하면 도움이 될 것입니다. 모든 것은 Canvas에서 구현됩니다.

캔버스의 또 다른 장점은 MT4 및 MT5의 경우 코드가 거의 동일하다는 것입니다.

알았어, 고마워)

 
Artyom Trishkin :
앗... 니콜라이가 앞서갔어...

...)))))) 가장 중요한 것은 생각이 일치한다는 것입니다))))
))))) 덕분에

 
Aleksei Stepanenko :

당신이 맞습니다.

이중 eIndent=GetPointsInPixel(eChartId,eWindow);

그런 다음 이벤트가 변경되면 이 값을 필요한 가격에 더하거나 빼십시오.

- 기간 변경

- 그래프 증가/감소,

- 가격 규모를 축소합니다.

감사합니다 )))))))))

 

Vitaliy Kostrubko :

알렉세이 스테파넨코 :

당신이 맞습니다.

이중 eIndent=GetPointsInPixel(eChartId,eWindow);

그런 다음 이벤트가 변경되면 이 값을 필요한 가격에 더하거나 빼십시오.

- 기간 변경

- 그래프 증가/감소,

- 가격 규모를 축소합니다.

감사합니다 )))))))))

그리고 그 불행한 컨설턴트에게 **** 코더의 예가 아니라 언어를 배워야 한다고 말하십시오.

 
Alexey Viktorov :

그리고 그 불행한 컨설턴트에게 **** 코더의 예가 아니라 언어를 배워야 한다고 말하십시오.

수락)))))
... 시간은 10년 동안 다양한 어드바이저를 프로그래밍한 경험이 있음을 보여줍니다(복잡성 수준이 다름) == 무화과 하나만으로는 전체 코딩 분야를 알 수 없습니다)
왜냐하면 이 10년 안에 - 당신은 전체 프로그래밍 언어의 2/3에서 슈퍼프로가 될 수 있고 ... 그리고 1/3은 전혀 모릅니다))
따라서 기분을 상하게하는 것은 불필요합니다)))), 그러나 이것을 연구하려면 1/3 == 개별 문제)).

.... "이윤을 가져다주는 CLEAN ALGORITHMS ... 그리고 "만화를 쓰는 것은 그의 관심사가 아닙니다 ...

그러나 나는 그에게 당신의 모범을 확실히 보여줄 것입니다))
덕분에))))

 
Vitaliy Kostrubko :

수락됨)))))))
... 시간은 10년 동안 다양한 어드바이저를 프로그래밍한 경험이 있음을 보여줍니다(복잡성 수준이 다름) == 무화과 하나만으로는 전체 코딩 분야를 알 수 없습니다)
왜냐하면 이 10년 안에 - 당신은 전체 프로그래밍 언어의 2/3에서 슈퍼프로가 될 수 있고 ... 그리고 1/3은 전혀 모릅니다))
따라서 기분을 상하게하는 것은 불필요합니다)))), 그러나 이것을 연구하려면 1/3 == 개별 문제)).

.... "이윤을 가져다주는 CLEAN ALGORITHMS ... 그리고 "만화를 쓰는 것은 그의 관심사가 아닙니다 ...

그러나 나는 그에게 당신의 모범을 확실히 보여줄 것입니다 ))
덕분에))))

당신은 나를 참조할 필요가 없습니다. 이 옵션은 내가 사용했지만 내가 말한 것이 아닙니다. 나는 그의 의견으로는 그 이름을 지지했을 뿐입니다.

그리고 "프로그래머"가 그래픽 개체를 움직일 수 없다고 말하면 이것은 프로그래머가 아니며 프로그래머의 패러디도 아니라 **** 코더입니다.