백테스트 중 발견된 문제점과 근본 원인을 찾지 못함! - 페이지 5 12345 새 코멘트 Keith Watford 2015.05.14 19:51 #41 jollydragon : . 나는 아직도 봉우리가 사라지는 것을 볼 수 없습니다. "재초기화"하는 방법은 무엇입니까? 시간 프레임을 변경하여 다시 초기화할 수 있습니다. 또는 표시기 입력 창을 열고 확인을 클릭합니다. moonsboy 2015.05.15 00:34 #42 검라이 2015.05.14 21:51 # You can re-initialise by either changing timeframesor 표시기 입력 창을 열고 확인을 클릭합니다. 해보고 나니 봉우리 위치가 바뀐다는 말과 같은 의미로 이해가 됩니다. 옳은? 친애하는 검라이, moonsboy 2015.05.15 00:47 #43 WHRoeder : 모든 반복(첫 번째 제외)에서 Fish1 은 이전 버퍼 요소의 값이지만 ExtBuffer1[limit] 로 초기화하지 않습니다. 따라서 초기 반복의 경우(limit == 막대일 때) ExtBuffer1[0] = 1.1* ExtBuffer1[1] 을 설정합니다. 그러나 후속 틱의 경우(limit == 1일 때) ExtBuffer1[0] = 1.1* 0.00001 로 설정합니다. 친애하는 WHRoeder님, 대단히 감사합니다. 귀하의 지시에 따라 문제가 조금 더 잘 보입니다. 그러나 더 명확히 하기 위해 몇 가지 질문이 더 필요할 수 있습니다. 1. "double Fish1=0.00001; "이 모든 함수의 시작 부분에 정의되어 있는 것을 볼 수 있습니다. 따라서 전역 변수여야 하며 새로운 후속 틱이 와도 마지막 ExBuffer1[0]으로 할당되었음을 이해합니다. 아니면 새 틱이 올 때마다 자동으로 "0.00001"로 복구됩니까? 2. 이제 모든 막대가 단일 눈금 또는 여러 후속 눈금으로 다르게 칠해졌는데 라이브 M1 차트에서 .., bar[8], ..., bar[1]이 다시 칠해진 것을 볼 수 있는 이유는 무엇입니까? 방해 없이? 3. 새로 고침 후 피크 위치가 변경된 이유는 무엇입니까? 4. 라이브 M1 차트에서 일부 피크(약 959870576)가 " EMPTY_VALUE "(2147483647)보다 훨씬 적게 형성된 것을 볼 수 있는 이유는 무엇입니까? 5. 새 막대가 나오면 이전 ExtBuffer1[0]이 자동으로 ExtBuffer1[1]로 변경됩니다. 옳은? 6. 잠재적인 재초기화 또는 재도장을 방지하는 방법은 무엇입니까? 어쩌면 나는 여전히 몇 가지 중요한 점에서 혼란스럽고 도움이 될 수 있도록 큰 인내심이 필요합니다! 질문에 하나하나 도움을 주시면 정말 감사하겠습니다! 다중 기간 표시기 세뇌. 거래: 수동 및 Metatrader 5로 시작하는 방법 moonsboy 2015.05.15 04:42 #44 친애하는 WHRoeder, GumRai, 귀하의 게시물을 다시 읽은 후 이해에 따라 아래 코드로 내 지표를 업데이트했습니다. 백 테스트에 사용한 후 결과는 지표와 훨씬 더 일치합니다. 그러나 아직 2가지 문제가 있습니다. 아래 스크린샷을 참조하세요. 1. 첫 주문부터 4개의 지표 신호 이후에 거래가 이루어집니다. 2. 표시기 신호보다 4바 앞서서 한 번의 주문 변경이 발생합니다. 아래는 업데이트된 표시기 코드입니다. #property copyright "Copyright 2015, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.50" #property strict #property indicator_separate_window #property indicator_buffers 2 extern int period= 35 ; extern double smooth= 0.3 ; datetime lastAlertTime; double ExtBuffer0[]; double ExtBuffer1[]; double ExtValue[]; double Value1= 0 ,Buffer0_1= 0 ; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int OnInit () { IndicatorBuffers( 3 ); SetIndexBuffer ( 0 ,ExtBuffer0); SetIndexStyle( 0 , DRAW_LINE , STYLE_SOLID , 1 , clrWhiteSmoke ); SetIndexBuffer ( 1 ,ExtBuffer1); SetIndexStyle( 1 , DRAW_LINE , STYLE_SOLID , 1 , clrGoldenrod ); SetIndexBuffer ( 2 ,ExtValue); IndicatorShortName( " Solar Joy ^v^ " ); ArraySetAsSeries (ExtBuffer0, true ); ArraySetAsSeries (ExtBuffer1, true ); ArraySetAsSeries (ExtValue, true ); SetIndexDrawBegin( 1 ,period); return ( INIT_SUCCEEDED ); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ int deinit() { return ( 0 ); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ 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[]) { if (rates_total<=period) return ( 0 ); int i,limit; double price,MinL,MaxH; if (prev_calculated<rates_total- 1 ) limit=rates_total-period- 1 ; else limit= 1 ; for (i=limit- 1 ; i>= 0 ; i--) { MaxH = High[iHighest( NULL , 0 ,MODE_HIGH,period,i)]; MinL = Low[iLowest( NULL , 0 ,MODE_LOW,period,i)]; price=(High[i]+Low[i])/ 2 ; if (limit== 1 ) { Value1=ExtValue[ 1 ]; Buffer0_1=ExtBuffer0[ 1 ]; } ExtValue[i]=( 1 -smooth)*( 2 *(price-MinL)/(MaxH-MinL)- 1.0 ) + smooth*Value1; ExtValue[i]= MathMin ( MathMax (ExtValue[i],- 0.999 ), 0.999 ); // Value=Value>0.999?0.999:Value<-0.999?-0.999:Value; ExtBuffer0[i]=( 1 -smooth)* MathLog (( 1 +ExtValue[i])/( 1 -ExtValue[i]))+smooth*Buffer0_1; Value1=ExtValue[i]; Buffer0_1=ExtBuffer0[i]; if (ExtBuffer0[i]> 0 ) ExtBuffer1[i]= 3 ; else ExtBuffer1[i]=- 3 ; } return (rates_total); } //+------------------------------------------------------------------+ William Roeder 2015.05.15 11:51 #45 jollydragon : 1. "double Fish1=0.00001;"이 모든 함수의 시작 부분에 정의되어 있는 것을 볼 수 있습니다. 따라서 전역 변수여야 하며 새로운 후속 틱이 와도 마지막 ExBuffer1[0]으로 할당되었음을 이해합니다. 아니면 새 틱이 올 때마다 자동으로 "0.00001"로 복구됩니까? 아니요. "하지만 ExtBuffer1[limit] 로 초기화하지 않습니다"의 어떤 부분이 불분명합니까? if (prev_calculated<rates_total- 1 ) { limit=rates_total-period- 1 ; Fish1= 0.00001 ; } else { limit= 1 ; Fish1=ExtBuffer0[ 1 ]; } for (i=limit- 1 ; i>= 0 ; i--) { ExtBuffer1[i]= 1.1 *Fish1; Fish1=ExtBuffer1[i]; if (Fish1>= EMPTY_VALUE ) Fish1= 1 ; } 개인적으로 저는 차트/버퍼가 시계열이기 때문에 Rates_total/prev_calculated/OnCalculate 인수는 가증하다고 생각하며 이전 방식으로 수행할 것입니다. int counted = IndicatorCounted(); limit = Bars - MathMax (counted, period- 1 ); // Lookback period-1 Fish1 = counted == 0 ? 0.00001 : ExtBuffer0[limit]; for (i=limit- 1 ; i>= 0 ; i--) 12345 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
. 나는 아직도 봉우리가 사라지는 것을 볼 수 없습니다. "재초기화"하는 방법은 무엇입니까?
시간 프레임을 변경하여 다시 초기화할 수 있습니다.
또는
표시기 입력 창을 열고 확인을 클릭합니다.
You can re-initialise by either changing timeframes
or
표시기 입력 창을 열고 확인을 클릭합니다.
해보고 나니 봉우리 위치가 바뀐다는 말과 같은 의미로 이해가 됩니다. 옳은?
친애하는 검라이,
모든 반복(첫 번째 제외)에서 Fish1 은 이전 버퍼 요소의 값이지만 ExtBuffer1[limit] 로 초기화하지 않습니다.
따라서 초기 반복의 경우(limit == 막대일 때) ExtBuffer1[0] = 1.1* ExtBuffer1[1] 을 설정합니다.
그러나 후속 틱의 경우(limit == 1일 때) ExtBuffer1[0] = 1.1* 0.00001 로 설정합니다.
친애하는 WHRoeder님,
대단히 감사합니다. 귀하의 지시에 따라 문제가 조금 더 잘 보입니다.
그러나 더 명확히 하기 위해 몇 가지 질문이 더 필요할 수 있습니다.
1. "double Fish1=0.00001; "이 모든 함수의 시작 부분에 정의되어 있는 것을 볼 수 있습니다.
따라서 전역 변수여야 하며 새로운 후속 틱이 와도 마지막 ExBuffer1[0]으로 할당되었음을 이해합니다.
아니면 새 틱이 올 때마다 자동으로 "0.00001"로 복구됩니까?
2. 이제 모든 막대가 단일 눈금 또는 여러 후속 눈금으로 다르게 칠해졌는데 라이브 M1 차트에서 .., bar[8], ..., bar[1]이 다시 칠해진 것을 볼 수 있는 이유는 무엇입니까? 방해 없이?
3. 새로 고침 후 피크 위치가 변경된 이유는 무엇입니까?
4. 라이브 M1 차트에서 일부 피크(약 959870576)가 " EMPTY_VALUE "(2147483647)보다 훨씬 적게 형성된 것을 볼 수 있는 이유는 무엇입니까?
5. 새 막대가 나오면 이전 ExtBuffer1[0]이 자동으로 ExtBuffer1[1]로 변경됩니다. 옳은?
6. 잠재적인 재초기화 또는 재도장을 방지하는 방법은 무엇입니까?
어쩌면 나는 여전히 몇 가지 중요한 점에서 혼란스럽고 도움이 될 수 있도록 큰 인내심이 필요합니다! 질문에 하나하나 도움을 주시면 정말 감사하겠습니다!
친애하는 WHRoeder, GumRai,
귀하의 게시물을 다시 읽은 후 이해에 따라 아래 코드로 내 지표를 업데이트했습니다.
백 테스트에 사용한 후 결과는 지표와 훨씬 더 일치합니다. 그러나 아직 2가지 문제가 있습니다. 아래 스크린샷을 참조하세요.
1. 첫 주문부터 4개의 지표 신호 이후에 거래가 이루어집니다.
2. 표시기 신호보다 4바 앞서서 한 번의 주문 변경이 발생합니다.
아래는 업데이트된 표시기 코드입니다.
1. "double Fish1=0.00001;"이 모든 함수의 시작 부분에 정의되어 있는 것을 볼 수 있습니다.
따라서 전역 변수여야 하며 새로운 후속 틱이 와도 마지막 ExBuffer1[0]으로 할당되었음을 이해합니다.
아니면 새 틱이 올 때마다 자동으로 "0.00001"로 복구됩니까?
개인적으로 저는 차트/버퍼가 시계열이기 때문에 Rates_total/prev_calculated/OnCalculate 인수는 가증하다고 생각하며 이전 방식으로 수행할 것입니다.