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

 
       // AO
       if (ao) {
         CopyTime (symbol_name[st],ao_time_frame, 1 , 1 ,time_buf);
         if (symbol_ao_timebar[st]!=time_buf[ 0 ]) {
            symbol_ao_timebar[st]=time_buf[ 0 ];
             double ao_buf[];
             CopyBuffer (symbol_ao_handle[st], 0 ,enter_bar, 2 ,ao_buf);
             if (ao_buf[ 1 ]>ao_buf[ 0 ]&&ao_buf[ 0 ]< 0 ) symbol_ao_signal[st]= 0 ;
             if (ao_buf[ 1 ]<ao_buf[ 0 ]&&ao_buf[ 0 ]> 0 ) symbol_ao_signal[st]= 1 ;
            }
         } else symbol_ao_signal[st]= 2 ;
      
       // AC
       if (ac) {
         CopyTime (symbol_name[st],ac_time_frame, 1 , 1 ,time_buf);
         if (symbol_ac_timebar[st]!=time_buf[ 0 ]) {
            symbol_ac_timebar[st]=time_buf[ 0 ];
             double ac_buf[];
             CopyBuffer (symbol_ac_handle[st], 0 ,enter_bar, 2 ,ac_buf);
             if (ac_buf[ 1 ]>ac_buf[ 0 ]&&ac_buf[ 0 ]< 0 ) symbol_ac_signal[st]= 0 ;
             if (ac_buf[ 1 ]<ac_buf[ 0 ]&&ac_buf[ 0 ]> 0 ) symbol_ac_signal[st]= 1 ;
            }      
         } else symbol_ac_signal[st]= 2 ;
안녕하세요. 여기 질문이 있습니다. 코드 조각이 있습니다. 누가 말한다. 더 정확하게 말하면 AO와 AC 표시기가 같은 평면에 있을 때만 매수 또는 매도해야 한다고 말해야 합니다. 0 이하에서 매수하고 0 이상에서 판매합니다.
그렇습니까? 고수님들의 도움 부탁드립니다.
질문은 기본적으로 무엇입니다. 이것은 식물성 기름의 정상적인 코드입니까 아니면 쓰레기입니까?
 
MASTERXAYS :
안녕하세요. 여기 질문이 있습니다. 코드 조각이 있습니다. 누가 말한다. 더 정확하게 말하면 AO와 AC 표시기가 같은 평면에 있을 때만 매수 또는 매도해야 한다고 말해야 합니다. 0 이하에서 매수하고 0 이상에서 판매합니다.
그렇습니까? 고수님들 도와주세요.
질문은 기본적으로 무엇입니다. 이것은 식물성 기름의 정상적인 코드입니까 아니면 쓰레기입니까?

나는 접근 자체 를 " 식물성 기름에 대한 쓰레기 "라고 부를 것입니다.

가격이 지표를 따르는 것을 본 적이 있습니까? 이것이 B. Williams의 지표라는 점을 고려할 가치가 있으며, 아시다시피 그는 Forex에서 거래하지 않았으며 본질 자체는 오래 전에 구식이었습니다.

 
-Aleks- :
죄송합니다. 이 영점 조정을 어떻게 합니까?
같은 방식으로 단순 유형의 무효화도 마찬가지입니다. 그들에게 값 0을 할당함으로써. 필수 필드 에 값 0이 할당 되자 마자 역 연산 StructToTime()을 사용하십시오.
 
MASTERXAYS :
안녕하세요. 여기 질문이 있습니다. 코드 조각이 있습니다. 누가 말한다. 더 정확하게 말하면 AO와 AC 표시기가 같은 평면에 있을 때만 매수 또는 매도해야 한다고 말해야 합니다. 0 이하에서 매수하고 0 이상에서 판매합니다.
그렇습니까? 고수님들의 도움 부탁드립니다.
질문은 기본적으로 무엇입니다. 이것은 식물성 기름의 정상적인 코드입니까 아니면 쓰레기입니까?

신호를 구성하는 코드가 설명된 내 기사 를 읽으십시오. 하지만 개인적으로 시그널 함수를 이런 식으로 작성합니다.

 ENUM_ORDER_TYPE GetSignal( int i, ENUM_TIMEFRAMES tf)
  {
   double bbup[ 1 ];
   double bbdw[ 1 ];
   double rsi[ 1 ];
   double macd[ 2 ];
   double stoh[ 2 ];
   double Close [ 2 ];

   if (IND01[i]== INVALID_HANDLE || IND01[i]== 0 ){IND01[i]= iBands (m_symbol,tf,BB_period, 0 , 2 , PRICE_CLOSE ); return ( WRONG_VALUE );}
   if (IND02[i]== INVALID_HANDLE || IND02[i]== 0 ){IND02[i]= iRSI (m_symbol,tf,RSI_period, PRICE_CLOSE ); return ( WRONG_VALUE );}
   if (IND03[i]== INVALID_HANDLE || IND03[i]== 0 ){IND03[i]= iMACD (m_symbol,tf,MACD_fast_ema_period,MACD_slow_ema_period, 9 , PRICE_CLOSE ); return ( WRONG_VALUE );}
   if (IND04[i]== INVALID_HANDLE || IND04[i]== 0 ){IND04[i]= iStochastic (m_symbol,tf,ST_Kperiod,ST_Dperiod,ST_slowing, MODE_SMA , STO_LOWHIGH ); return ( WRONG_VALUE );}

   if ( CopyBuffer (IND01[i], 1 , 0 , 1 ,bbup)< 1 ) return ( WRONG_VALUE );
   if ( CopyBuffer (IND01[i], 2 , 0 , 1 ,bbdw)< 1 ) return ( WRONG_VALUE );
   if ( CopyBuffer (IND02[i], 0 , 0 , 1 ,rsi)< 1 ) return ( WRONG_VALUE );
   if ( CopyBuffer (IND03[i], 0 , 0 , 2 ,macd)< 2 ) return ( WRONG_VALUE );
   if ( CopyBuffer (IND04[i], 0 , 0 , 2 ,stoh)< 2 ) return ( WRONG_VALUE );
   if ( CopyClose (m_symbol,tf, 0 , 2 , Close )< 2 ) return ( WRONG_VALUE );

   if ( Close [ 0 ]<bbdw[ 0 ]&& Close [ 1 ]>bbdw[ 0 ]&&  stoh[ 1 ]>stoh[ 0 ]&&  stoh[ 0 ]< 20   &&  rsi[ 0 ]< 30   &&  macd[ 1 ]<macd[ 0 ]) return ( ORDER_TYPE_BUY );
   if ( Close [ 0 ]>bbup[ 0 ]&& Close [ 1 ]<bbup[ 0 ]&&  stoh[ 1 ]<stoh[ 0 ]&&  stoh[ 0 ]> 80   &&  rsi[ 0 ]> 70   &&  macd[ 1 ]>macd[ 0 ]) return ( ORDER_TYPE_SELL );

   return ( WRONG_VALUE );
  }
 
Aleksey Lebedev :

1이 되며 두 시간 모두 먼저 하루 종일 반올림한 다음 뺍니다.

표현에서 모든 숫자가 반올림되었다고 생각하는 이유는 무엇입니까? 반올림도 없습니다. 여기서 변수에는 반올림된 숫자가 할당됩니다. 동의합니다.

예, 그리고 만약 내가 반올림한다면, 나는 예를 보여주었습니다. 오늘의 현재 막대와 어제 계산된 - TF 1시간 - 그들의 차이는 반올림에 대해 0이 될 것입니다... 글쎄, 아마도 당신이 항상 반올림을 강요한다면 . ..

알렉세이 코지친 :
같은 방식으로 단순 유형의 무효화도 마찬가지입니다. 그들에게 값 0을 할당함으로써. 필수 필드 에 값 0이 할당 되자 마자 역 연산 StructToTime()을 사용하십시오.

감사합니다-다시 이해하려고 노력하겠습니다-도움말의 예가 성공적이지 않습니다 ...

 
-Aleks- :

표현에서 모든 숫자가 반올림되었다고 생각하는 이유는 무엇입니까? 반올림도 없습니다. 여기서 변수에는 반올림된 숫자가 할당됩니다. 동의합니다.

그리고 내가 반올림한다면 나는 예를 보여주었습니다 - 오늘의 현재 막대와 어제 계산 된 - TF 1 시간 - 반올림에 대해 그 차이는 0이 될 것입니다 ... 글쎄, 아마도 항상 반올림을 강요한다면 ...

정수(int, long, datetime 등)를 나눌 때 결과는 정수입니다. 나머지는 폐기됩니다. 오늘 00:00 과 어제 23:59:59 의 차이는 1일이 됩니다.

 

MQL4를 알려주세요...
표시기가 M5에서 작동하는지 알 수 없습니다. 코드에서 H1의 이전 막대의 높음 또는 낮음을 어떻게 참조할 수 있습니까?
Type iHigh(NULL, PERIOD_H1 , i) ... 요점은 현재 M5 캔들이 이전 시간의 고가를 돌파했는지(M5 차트에 위/아래 화살표를 놓음) 확인하는 것입니다.


 
MQL4 표시기 코드에서 문자열 교체
 for (i=pos; i<rates_total; i++) 

 for (i=pos; i<rates_total- 1 ; i++) 
표시기가 현재(불완전한) 막대에서 계산되지 않는다는 사실로 이어집니다. 이 막대 아래에는 표시줄 이 없습니다.
MQL5에서 현재 막대에서 이러한 교체로 인해 이상한 표시기 값이 표시되며 때로는 0.0000에 불과합니다.
이것들로 무엇을 할 수 있습니까?
 
MikeZv :

MQL4를 알려주세요...
표시기가 M5에서 작동하는지 알 수 없습니다. 코드에서 H1의 이전 막대의 높음 또는 낮음을 어떻게 참조할 수 있습니까?
Type iHigh(NULL, PERIOD_H1 , i) ... 요점은 현재 M5 캔들이 이전 시간의 고가를 돌파했는지(M5 차트에 위/아래 화살표를 놓음) 확인하는 것입니다.


MikeZv :
MQL4 표시기 코드에서 문자열 교체

표시기가 현재(불완전한) 막대에서 계산되지 않는다는 사실로 이어집니다. 이 막대 아래에는 표시줄 이 없습니다.
MQL5에서는 현재 막대에서 이러한 대체를 사용하여 이상한 표시기 값을 얻습니다. 때로는 0.0000에 불과합니다.
이것들로 무엇을 할 수 있습니까?

표시기 버퍼를 어떻게 왜곡하는지 알 수 없습니다. 여기에서는 Juna만이 도움이 될 것입니다.

추가됨:

디버깅하는 동안 시계열 배열 time[i]에 어떤 값이 포함되어 있는지 확인하여 막대 계산을 시작하는 끝과 "0" 막대가 있는 위치를 이해할 수 있습니다.

 
Karputov Vladimir

표시기 버퍼를 어떻게 왜곡하는지 알 수 없습니다. 여기에서는 Juna만이 도움이 될 것입니다.
... 어디에서 막대 계산을 시작하고 "0" 막대가 있는 곳에서 시작합니다.

Vladimir, 첫 번째 질문에 답변해 주셔서 감사합니다. 이 기능을 놓쳤습니다...

MT4와 MT5에 동일한 표시기를 넣었습니다(물론 코드는 각 플랫폼에 맞게 조정됨).
제로바까지는 같은 값을 가지므로 한쪽 끝에서 볼 수 있습니다... :)
그리고 MT4에서 현재 막대의 계산을 끄면 MT5에서 현재 막대 아래에 아무 것도 그려지지 않습니다. 잘못된 값입니다.

파일:
mvt_Vlt.mq4  5 kb
mvt_Vlt.mq5  5 kb
사유: