포럼을 어지럽히 지 않도록 모든 초보자 질문. 프로, 놓치지 마세요. 너 없이는 아무데도 - 6. - 페이지 501

 

안녕 모두.

새 빌드에서 표시기의 시작 부분에 대해 설명하십시오. 나는 주기를 시작하는 데 관심이 있습니다(올바른 방법). 여기에 BolingerBands의 코드를 삽입했습니다. 질문 이 있는 곳에 댓글을 달아주세요 // 이것은 무엇을 의미합니까? 그리고 왜?

튜토리얼의 모든 내용은 https://book.mql4.com/ru/samples/icustom 이전과 동일합니다.

 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[])
  {
   int i,pos;
//---
   if (rates_total<=InpBandsPeriod || InpBandsPeriod<= 0 )    //что это значит ?
       return ( 0 );
//--- counting from 0 to rates_total
   ArraySetAsSeries (ExtMovingBuffer, false );                //что это значит ?
   ArraySetAsSeries (ExtUpperBuffer, false );                 //что это значит ?
   ArraySetAsSeries (ExtLowerBuffer, false );                 //что это значит ?
   ArraySetAsSeries (ExtStdDevBuffer, false );                //что это значит ?
   ArraySetAsSeries (close, false );
//--- initial zero
   if (prev_calculated< 1 )                                  //что это значит ?
     {
       for (i= 0 ; i<InpBandsPeriod; i++)                      //что это значит ?
        {
         ExtMovingBuffer[i]= EMPTY_VALUE ;                   //что это значит ?
         ExtUpperBuffer[i]= EMPTY_VALUE ;                    //что это значит ?
         ExtLowerBuffer[i]= EMPTY_VALUE ;                    //что это значит ?
        }
     }
//--- starting calculation
   if (prev_calculated> 1 )                                   //что это значит ?
      pos=prev_calculated- 1 ;                               //что это значит ?
   else                                                    //что это значит ?
      pos= 0 ;//что это значит ?
//--- main cycle
   for (i=pos; i<rates_total && ! IsStopped (); i++)          //что это значит ?
     {
       //--- 
      
       //код индикатора в цикле
      
       //---
     }
//---- OnCalculate done. Return new prev_calculated.
   return (rates_total);
  }
 

그리고 문서를 읽으시겠습니까? 이해할 수 없는 표정을 짓고 매직키 F1을 누르거나 사이트에서 읽어보세요.

https://docs.mql4.com/ru/array/arraysetasseries

https://docs.mql4.com/en/basis/function/events#oncalculate

 

안녕하세요. 도움을 요청하는데 이 상황에서 마술사를 알아볼 수 없습니다.

내가 제시한 코드에서 buf 0을 화면에 그려야 하고 buf 1은 그려지지 않지만 배열의 추가 처리 및 다른 버퍼(예: buf 2)로의 출력을 고려합니다. 다음 줄에 buf 1을 숨깁니다.

SetIndexBuffer (0,Buf0);

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1);

SetIndexBuffer(1,Buf1);

SetIndexStyle(1,DRAW_NONE); // 원한다 숨다 이것 라인

그런데 인디케이터 설정시 계산차이로 인해 오프셋이 나오네요...

질문: buf 0이 정상적으로 그려지도록 이 차이를 어떻게든 제거할 수 있습니까?
파일:
testbuf.mq4  2 kb
 
clubsmi :

안녕하세요. 도움을 요청하는데 이 상황에서 마술사를 알아볼 수 없습니다.

내가 제시한 코드에서 buf 0을 화면에 그려야 하고 buf 1은 그려지지 않지만 배열의 추가 처리 및 다른 버퍼(예: buf 2)로의 출력을 고려합니다. 다음 줄에 buf 1을 숨깁니다.

SetIndexBuffer(0,Buf0);

SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1);

SetIndexBuffer(1,Buf1);

SetIndexStyle(1,DRAW_NONE); // 원한다 숨다 이것 라인

그런데 인디케이터 설정시 계산차이로 인해 오프셋이 나오네요...

질문: buf 0이 정상적으로 그려지도록 이 차이를 어떻게든 제거할 수 있습니까?

INDICATOR_DATA 및 INDICATOR_CALCULATIONS에 대해 읽어보기

그 전에 #property indicator_buffers 및 IndicatorBuffers(10); 10은 내 표시기에서 가져온 것이며 ME 509 빌드에서와 같이 버퍼 수가 제한되지 않는다는 것을 보여주기 위해 삭제하지 않았습니다.

 
나는 F1을 자주 누른다. 그러나 약한 프로그래머에게 모든 것이 항상 명확한 것은 아닙니다. 예 - ArraySetAsSeries -> AS_SERIES 플래그를 지정된 동적 배열 객체 로 설정합니다. 배열 요소는 시계열 에서와 같이 인덱싱됩니다.

옵션

정렬[]

[in][out] 설정할 숫자 배열입니다.

깃발

【인】 배열 인덱싱 방향입니다.

반환 값

성공하면 true를 반환하고 그렇지 않으면 false를 반환합니다.

그러나 for(i=0; i<InpBandsPeriod; i++) 및 for(i= InpBandsPeriod ; i<0; i--) 에서 무엇이 그리고 어떻게 될 것인지를 제공합니다. true 및 false 루프에 반영되는지 여부입니다. 5xx 빌드에서는 그렇지 않았습니다. 어쩌면 없이 ArraySetAsSeries 이지만 기본값은 무엇입니까 ? 아니면 아닐 수도 있습니다.

 

감사합니다 AlexeyVik, 그것을 알아 냈습니다 ...

빌드 509가 포함된 이전 mql4 언어가 얼마나 오래 지속되는지 알려주실 수 있나요? 새 빌드에서 언어를 배우려면 서둘러야 합니까?

 
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//|    ot - время открытия             ( 0   - любое время открытия)           |
//+----------------------------------------------------------------------------+
bool ExistPositions( string sy= "" , int op=- 1 , int mn=- 1 , datetime ot= 0 ) {
   int i, k= OrdersTotal ();
 
   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) {
     if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) {
       if ( OrderSymbol ()==sy || sy== "" ) {
         if ( OrderType ()== OP_BUY || OrderType ()== OP_SELL ) {
           if (op< 0 || OrderType ()==op) {
             if (mn< 0 || OrderMagicNumber ()==mn) {
               if (ot<= OrderOpenTime ()) return ( True );
            }
          }
        }
      }
    }
  }
   return ( False );
}

김의 기능이 작동하지 않습니다 ...

 if (IsNewBar()== true )
{
if (ExistPositions( NULL ,- 1 , 44444 ,- 1 )== false )
           {
       
                  trade= true ;
                         
             if (trade!= false )
              {
                    
                        OpenPosition( Symbol (), OP_BUY , 0.1 , Ask -sl* Point , Ask +tp* Point , 44444 );

                        trade= false ;
                       }
                   
      }
  }            
       }   

동일한 마법을 가진 더 이상 위치가 없는 경우 위치를 열어야 하며 ..... 그리고 그들은 나를 위해 각각의 새로운 막대에서 열립니다 .......

 
Zver4991 :


김의 기능이 작동하지 않습니다 ...

동일한 마법을 가진 더 이상 위치가 없다면 위치를 열어야 하고 ..... 그리고 그들은 나를 위해 각각의 새로운 막대에서 열립니다 .......


ot - 개점 시간 ( 0 - 임의 개점 시간)을 보세요. 그리고 당신은?

 
gince :


ot - 개점 시간 ( 0 - 임의 개점 시간)을 보세요. 그리고 당신은?

그리고 왜

trade= true ; if (trade!= false )  .......
                          

열리지 않으면 열다

 
gince :


ot - 개점 시간 ( 0 - 임의 개점 시간)을 보세요. 그리고 당신은?


그래서 그녀는 오픈 시간이 무엇이든간에 그런 마법으로 다른 열린 자리 가 있는지 확인해야합니다 ..... 간단한 마법 제한 .... 즉

if (ExistPositions( NULL ,- 1 , 44444 ,- 1 )== false )//이 마법으로 열린 위치가 없으면 조치를 취하십시오 ......

....또는 나는 뭔가를 따라가지 못하고 있다.... 나는 포지션이 언제 열렸는지 상관하지 않기 때문에 -1이다. 바 그리고 닫혀있는 경우는 그런 마술사와 함께 열려있는 포즈가 없을 때만 포즈를 열 수 있다는 조건이 있기 때문에

더 간단하다면 포지션을 열고 닫을 때까지 기다리십시오.... 그것이 닫힐 때, 우리는 그것을 다시 열고 확실히 각 막대에 그러한 마법으로 포지션을 열면 안됩니다.... 왜냐하면 다시 조건에서 그것은 그런 마술사에게 빈 자리가 있는지 확인하도록 설정되어 있습니다.