초보자의 질문 MQL5 MT5 MetaTrader 5 - 페이지 481

 
안녕하세요!

누군가가 아이콘을 그리는 코드의 예를 가지고 있습니까? 예를 들어 표시기 차트의 화살표, 선이 교차할 때, 두 개의 선이 있는 경우 또는 "0" 선이 교차할 때 또는 다른 기준에 대해? 바람직하게는, 자체 크기 조정 표시기 창의 위쪽 및 아래쪽 경계 에 있습니다.
 
Sergei Vladimirov :
다운로드를 클릭합니다. 마지막 2048개의 막대만 자동으로 로드되고 나머지는 제거해야 합니다.
'로드' 이후에 이렇게 나왔네요...
 
Mike :
'로드' 이후에 이렇게 나왔네요...
히스토리 아카이브가 있는 폴더를 강제로 지우고 터미널을 실행 한 다음 모든 인용문을 다운로드하십시오.
 
Leo59 :
안녕하세요!

누군가가 아이콘을 그리는 코드의 예를 가지고 있습니까? 예를 들어 표시기 차트의 화살표, 선이 교차할 때, 두 개의 선이 있는 경우 또는 "0" 선이 교차할 때 또는 다른 기준에 대해? 바람직하게는, 자체 크기 조정 표시기 창의 위쪽 및 아래쪽 경계 에 있습니다.

여기 내 칠면조가 있습니다. 아마도 도움이 될 것입니다. MT4용 코드는 그대로 올립니다. 아직 로그 작업이 있습니다.

 void PlotArrowUP( int i)
{
     string sup = "\xE9" ; //233
     datetime dt = iTime( NULL , 0 , i); 
     double dprice = (WindowPriceMax()-WindowPriceMin())/( 100.0 /ArrowOffsetInPercentOfScreen); //настроить масштаб под свои нужды
     ObjectCreate ( "arr1" +ArrowIdx, OBJ_TEXT , 0 , dt, FastBuffer[i]-dprice);   
    ObjectSetText( "arr1" +ArrowIdx, sup, ArrowFontSize, "Wingdings" , ColorArrowUp);
    ArrowIdx++;
     if (EnableLogFile)
    {
         string dts = TimeToStr( TimeCurrent (), TIME_DATE | TIME_MINUTES | TIME_SECONDS );
         FileWrite (LogFile1, dts, "  call PlotArrowUp(i) i=" , i, "  FastBuffer[i]=" , FastBuffer[i]);
    }
}

void PlotArrowDown( int i)
{
     string sup = "\xEA" ; //234
     datetime dt = iTime( NULL , 0 , i); 
     double dprice = (WindowPriceMax()-WindowPriceMin())/( 100.0 /ArrowOffsetInPercentOfScreen);
    dprice*= 2.0 ;
     ObjectCreate ( "arr0" +ArrowIdx, OBJ_TEXT , 0 , dt, FastBuffer[i]+dprice);   
    ObjectSetText( "arr0" +ArrowIdx, sup, ArrowFontSize, "Wingdings" , ColorArrowDown);
    ArrowIdx++;
     if (EnableLogFile)
    {
         string dts = TimeToStr( TimeCurrent (), TIME_DATE | TIME_MINUTES | TIME_SECONDS );
         FileWrite (LogFile1, dts, "  call PlotArrowDown(i) i=" , i, "  FastBuffer[i]=" , FastBuffer[i]);
    }
}
 
알렉세이 볼찬스키 :

Вот из моего индюка, может, поможет. Код для МТ4, выкладываю, как есть. Там еще работа с логами.

Alex의 답변에 감사드립니다!

귀하의 예에서 이것은 객체를 통한 것입니다. 흥미롭게도, 배율이 변경될 때 항상 창의 위쪽 및 아래쪽 경계에 있도록 배열을 통해 이 작업을 수행할 수 있습니까?
 
Leo59 :
알렉세이 볼찬스키 :
Alex님의 답변 감사합니다!

귀하의 예에서 이것은 객체를 통한 것입니다. 흥미롭게도, 배율이 변경될 때 항상 창의 위쪽 및 아래쪽 경계에 있도록 배열을 통해 이 작업을 수행할 수 있습니까?

배열에 대해 이해하지 못합니다. 댓글을 보고 추가했습니다

 ObjectCreate ( "arr0" +ArrowIdx, OBJ_TEXT , 0 , dt, FastBuffer[i]+dprice);
// "arr0"+ArrowIdx - формируем уникальное имя стрелки
// FastBuffer[i]+dprice - тут формируется цена, на которой будет рисоваться стрелка
   
ObjectSetText( "arr0" +ArrowIdx, sup, ArrowFontSize, "Wingdings" , ColorArrowDown);
ArrowIdx++; // для каждой стрелки нужно уникальное имя

또한 위쪽 테두리에 그려야 하는 경우 다음을 수행합니다.

 ObjectCreate ( "arr0" +ArrowIdx, OBJ_TEXT , 0 , dt,  ChartGetDouble (0, CHART_PRICE_MAX ,0); 

그리고 에디터에서 도움말을 읽어보면 예제와 함께 자세히 설명되어 있습니다.

MQL4 참조 / 표준 상수, 열거 및 구조 / 차트 상수 / 차트 작업의 예

 
Alexey Volchanskiy :

배열에 대해 이해하지 못합니다. 댓글을 보고 추가했습니다

또한 위쪽 테두리에 그려야 하는 경우 다음을 수행합니다.

그리고 에디터에서 도움말을 읽어보면 예제와 함께 자세히 설명되어 있습니다.

MQL4 참조 / 표준 상수, 열거 및 구조 / 차트 상수 / 차트 작업의 예

변화와 함께

WindowPriceMax() и WindowPriceMin()

개체는 창 테두리에서 지정된 거리에서 강제로 다시 그려야 합니다.

 
Leo59 :

변화와 함께

개체는 창 테두리에서 지정된 거리에서 강제로 다시 그려야 합니다.

오래된 물건은 이전 가격으로 제자리에 남아 있습니다. 테두리로 이동해야 하는 경우 펜으로 다시 그려야 합니다. 나는 당신의 문제를 모릅니다.

OnChartEvent 를 통해 창 변경 사항을 추적할 수 있습니다.

 
Alexey Volchanskiy :

오래된 물건은 이전 가격으로 제자리에 남아 있습니다. 테두리로 이동해야 하는 경우 펜으로 다시 그려야 합니다. 나는 당신의 문제를 모릅니다.

OnChartEvent를 통해 창 변경 사항을 추적할 수 있습니다.

언뜻보기에 작업은 3 페니만큼 간단합니다. 하지만!....
표시기 창에는 진폭이 다른 "0"을 기준으로 매달린 오실레이터 라인이 있습니다.
실제로 작업은 다음과 같습니다.
- 아래에서 위로 "0"을 교차할 때 표시창의 하단 경계선에 화살표를 그리고,
- "0"을 위에서 아래로 교차할 때 표시창의 위쪽 테두리 에 화살표를 그리고,
- 표시기 창에서 오실레이터 차트를 자체 스케일링할 때 화살표는 표시기 창의 경계에 자동으로 남아 있어야 합니다.
저것들. 히스토리 차트를 앞뒤로 스크롤하거나 수평 눈금을 변경할 때 화살표는 항상 표시기 창의 경계에 있습니다.
 
Leo59 :
언뜻보기에 작업은 3 페니만큼 간단합니다. 하지만!....
표시기 창에는 진폭이 다른 "0"을 기준으로 매달린 오실레이터 라인이 있습니다.
실제로 작업은 다음과 같습니다.
- 아래에서 위로 "0"을 교차할 때 표시창의 하단 경계선에 화살표를 그리고,
- "0"을 위에서 아래로 교차할 때 표시창의 위쪽 테두리 에 화살표를 그리고,
- 표시기 창에서 오실레이터 차트를 자체 스케일링할 때 화살표는 표시기 창의 경계에 자동으로 남아 있어야 합니다.
저것들. 히스토리 차트를 앞뒤로 스크롤하거나 수평 눈금을 변경할 때 화살표는 항상 표시기 창의 경계에 있습니다.

작업은 매우 간단합니다.

창을 변경하거나 스크롤할 때 OnChartEvent가 호출되고 매개변수가 없는 이벤트가 전달됩니다.

차트 변경 이벤트 CHARTEVENT_CHART_CHANGE

이러한 이벤트가 발생하면 왼쪽 및 오른쪽에 표시되는 막대를 결정하고 이러한 제한 내에서 표시기 창의 모든 화살표를 찾습니다. 찾으면 원하는 테두리로 이동합니다. 화살표 생성 시 UpArrow*****, DownArrow*****와 같은 이름을 부여하여 분석에 방해가 되지 않도록 합니다. 그런 다음 ChartRedraw를 호출하면 됩니다.

사유: