MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1274

 
alex_xss :

1) 개인적으로 동의하고, 제 의지라면 그냥 잘라서 코드에 넣지 못하게 하고 싶습니다. 하지만 안돼)

2) 고맙긴 한데 거기에 답이 없어서 ( OBJ_VLINE 객체 를 통해 여기저기서 풀고 나한테는 안맞음) 나름의 방식으로 파고든다

좋아하는 캔버스에 격자를 만들 수 있습니다. 캔버스를 차트의 배경(또는 전면)으로 놓고 그 위에 그린 다음 기하학/가격/시간 바인딩을 따릅니다.

거대하지만 맛과 시간의 차와 함께 아름답게 나올 수 있습니다.

 
Maxim Kuznetsov :

좋아하는 캔버스에 격자를 만들 수 있습니다. 캔버스를 차트의 배경(또는 전면)으로 놓고 그 위에 그린 다음 기하학/가격/시간 바인딩을 따릅니다.

거대하지만 취향과 시간의 차가 있다면 아름답게 나올 수 있습니다.

간단한 캔버스 예제를 작성할 수 있습니까? 플리즈

나는 그것에 대해 전혀 모른다. 나는 차트 크기의 직사각형과 그 위에 수직선을 원한다.

 
alex_xss :

간단한 캔버스 예제를 작성할 수 있습니까? 플리즈

나는 그것에 대해 전혀 모른다. 나는 차트 크기의 직사각형과 그 위에 수직선을 원한다.

@Nikolai Semko 에게 전화해야 합니다. 그는 캔버스와 훨씬 더 강한 친구입니다. 그 동안 그는 가는 길에 - 그의 프로필을 봐 캔버스에 많은 것들이 있습니다

 
alex_xss :

간단한 캔버스 예제를 작성할 수 있습니까? 플리즈

나는 그것에 대해 전혀 모른다. 나는 차트 크기의 직사각형과 그 위에 수직선을 원한다.

재미있는. 이 결함은 MT4에만 있으며 수직선 에만 있습니다.

유일한 미스터리는 그것이 방해하는 이유입니다. 나는 결코 눈치 채지 못했을 것입니다.

그리고 문제를 해결하는 가장 좋은 방법을 이해하기 위해 문제를 더 자세히 공식화할 수 있습니다. 캔버스와 그래픽 개체의 상호 작용에는 뉘앙스가 있습니다.
그건 그렇고, 가능한 해결책 중 하나는 머리를 바꾸는 것입니다. ))
왜냐하면 색상 변경이 목발이라고 생각한다면 캔버스를 사용하는 것이 더욱 목발이 될 것입니다.
나는 당신의 지도자가 가상의 인물이거나 우화라는 것을 인정하지만. ))

 

alex_xss
:

간단한 캔버스 예제를 작성할 수 있습니까? 플리즈

나는 그것에 대해 전혀 모른다. 나는 차트 크기의 직사각형과 그 위에 수직선을 원한다.


성능 면에서 최적은 아니지만(다시 그리기가 필요한 것보다 더 자주 발생합니다. 코드를 복잡하게 만들기에는 너무 게으름), 작동 옵션입니다.

화면 크기(예: 1920x1080)에 대해 캔버스를 구현하고 다시 그리지 않을 수 있습니다. 메모리만 8MB를 먹습니다.
그건 그렇고, 그리드 색상을 변경해도 도움이 되지 않습니다.

 #include <Canvas\iCanvas.mqh> //https://www.mql5.com/en/code/23840

int OnInit ()
  {
   return ( INIT_SUCCEEDED );
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//---
   
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent ( const int id,
                   const long &lparam,
                   const double &dparam,
                   const string &sparam)
  {
   if (id== CHARTEVENT_CHART_CHANGE ) DrawGrid();
  }
//+------------------------------------------------------------------+
void DrawGrid() {
  Canvas.Erase( 0 );
   if ( ChartGetInteger ( 0 , CHART_SHOW_GRID )) {
      Canvas.SetBack( false );
       ChartSetInteger ( 0 , CHART_FOREGROUND , 0 , true );
       uint clr = ColorToARGB (( color ) ChartGetInteger ( 0 , CHART_COLOR_GRID ), 255 );
       for ( int y= 0 ;y<W.Height;y++)
       if (y% 6 < 2 || y% 6 > 4 ) {
         for ( int x= 32 ;x<W.Width;x+= 32 )
         Canvas.m_pixels[y*W.Width+x]=clr;
      } 
  }
  Canvas.Update();
}
파일:
 
누군가 배열(문자열)을 알파벳순으로 정렬하는 기능이 있습니까?
 
Aleksey Vyazmikin :
누군가 배열(문자열)을 알파벳순으로 정렬하는 기능이 있습니까?

옛날 옛적에 Saber가 썼던 것이 있습니다.

 //===============================================================================================
//--------------------------------- Сортирует строковой массив ---------------------------------+
//===============================================================================================
void ArraySortStr( string &Str[]) {
 string Min;
 int jMin, Size = ArraySize (Str);
   for ( int i= 0 ; i<Size- 1 ;i++) {
   Min = Str[i];
   jMin = i;
     for ( int j=i+ 1 ; j<Size; j++)
     if (Str[j] < Min) {
       Min = Str[j];
       jMin = j;
      }
     if (jMin > i) {
       Str[jMin] = Str[i];
       Str[i] = Min;
     }
   }
 }
 
Vitaly Muzichenko :

옛날 옛적에 Saber가 썼던 것이 있습니다.

고맙습니다.

 
Maxim Kuznetsov :

수직선 에만 있습니다.

유일한 미스터리는 그것이 방해하는 이유입니다. 나는 결코 눈치 채지 못했을 것입니다.

그리고 문제를 해결하는 가장 좋은 방법을 이해하기 위해 문제를 더 자세히 공식화할 수 있습니다. 캔버스와 그래픽 개체의 상호 작용에는 뉘앙스가 있습니다.
그건 그렇고, 가능한 해결책 중 하나는 머리를 바꾸는 것입니다. ))
왜냐하면 색상 변경이 목발이라고 생각한다면 캔버스를 사용하는 것이 더욱 목발이 될 것입니다.
나는 당신의 지도자가 가상의 인물이거나 우화라는 것을 인정하지만. ))

예, 멋진 농담, 거의 일주일을 보냈습니다) 엉덩이 화상)

글쎄, 왜 귀찮게. 그리기에 삼각형을 사용하는 표시기가 있습니다. 모든 것이 아름답게 밝혀지고 색상이 이미 선택되어 그런 잼을 보았습니다.
지표는 개인적인 용도가 아니며 그러한 버그로 릴리스하는 것은 넌센스입니다. 내가 초보자이기 때문에 꽤 gemorno인 전체 렌더링을 변경하거나 버그를 수정하십시오.

그리드의 색상을 변경하는 것은 도움이 되지 않습니다. 당신이 올바르게 지적했듯이, 저는 이미 직접 했습니다.) 처음에는 일부 색상 조합에서 도움이 될 것 같았습니다.

그리드의 색상을 변경하는 것은(도움이 되었다면) 용납될 수 없는 일입니다. 사용자가 이에 영향을 줄 수 있기 때문에 갑자기 색상을 변경하고 싶어하기 때문입니다.
이 기능을 차단하는 옵션도 사용자에게 적합하지 않습니다. 이유는 분명하다고 생각합니다))

작업: 사용자가 화면에서 그리드를 볼 수 있도록 하려면 활성화된 경우 항상 동일한 색상입니다. 수직 그리드 + 음영 개체가 있는 MT4 버그를 고려합니다. 뭘 더 추가해야할지 모르겠어

사실 위에서 작성한 varik이 적합합니다. 연마할 수 있습니다. 당신은 황금 남자입니다!! 그저 감사하다는 말밖에 표현할 길이 없습니다. 당신의 도움에 대해 별 다섯 개를 줄 수 있습니다.

몇 가지 간단한 질문:
약한 컴퓨터에서 강한 지연이 발생합니까? 나는 이것이 어리석은 질문이라는 것을 알고 있지만 어떤 대답도 환영합니다
" 그냥 8MB의 메모리가 먹어 치울 것입니다 ." - RAM에 대해 이야기하고 있지 않은 것 같습니다.)) 그것에 대해 말하면 8MB는 하찮은 것입니다.
iCanvas는 필수입니다. 일반적인 것은 작동하지 않습니까? 사용자가 여전히 "이 파일은 거기에, 이 파일은 거기에 간다"라고 말하는 것뿐입니다. 그들은 벙어리, 그들은 무엇을 어디로 밀어야하는지 이해하지 못합니다)

 
좋은 하루에요

조언을 부탁드립니다 - 답변 vorpos

메타 트레이더에는 Bulls.mq4 표시기가 있습니다.
추가 버퍼가 있는 이유는 무엇이며 중간 변수를 사용할 수 없는 이유는 무엇입니까?
dd = iMA(NULL,0,InpBullsPeriod,0,MODE_EMA,PRICE_CLOSE,i);
ExtBullsBuffer[i]=dd;

문제는 ExtBullsBuffer[i]가 iMA 함수 결과의 계산된 값을 저장하는 데만 사용되며 다음 줄에서 이 값이 표시기 버퍼의 요소에 할당된다는 것입니다. ExtBullsBuffer는 다른 곳에서는 사용되지 않습니다. 이 중간 버퍼 ExtBullsBuffer가 그림에서 녹색으로 표시된 것처럼 변수뿐만 아니라 여기에 필요한 이유는 무엇입니까?
***
사유: