다른 사람이 당신을 대신해 하게 하면 아무 것도 배울 수 없습니다. 유일한 방법은 스스로 하여 이해할 수 있도록 하는 것입니다. 스스로 하는 유일한 방법은 코드의 각 줄을 검토하고, 분해하고, 알아내는 것뿐입니다. 정확히 무엇을 하고 있으며 이를 수행하는 몇 가지 방법이 있습니다.
for ( int i= 1 ;i<=limit ;i++)
{ if ( MathAbs (Close[i]-Open[i])/(High[i]-Low[i])< 0.50
) // what is this parentheses doing here ? How can you expect to write code that works if you are this sloppy about it ?
boring[i]=Close[i];
}
다음은 문제의 원인을 찾는 데 도움이 될 수 있는 모든 것입니다.
저널 탭을 확인했다고 하고 그 옆에 있는 전문가 탭을 보셨나요?
지난 주에 귀하의 코드로 인해 배열이 범위를 벗어났다고 이미 말씀드린 바 있습니다. 이것이 의미하는 바를 알아보기 위해 찾아보았습니까?
메타에디터에는 디버거를 사용하여 코드를 디버그하는 방법을 배울 수 있는 디버거가 있습니다.
Print()를 사용하면 코드가 실행될 때 변수의 값이 무엇인지 확인할 수 있습니다.
전문가 탭을 클릭했다면 지표가 이 선에서 0분할을 했으며 시간 프레임을 변경하는 것과는 아무 관련이 없다고 알려줍니다.
if ( MathAbs (Close[i]-Open[i])/(High[i]-Low[i])< 0.50
따라서 이것은 이 High[i]-Low[i]가 어떤 이유로 0이었음을 의미해야 합니다. 차트의 표시기를 보면 표시기가 값 중 일부를 그린 다음 눈금이 하나만 있는 막대에서 멈춘 것을 볼 수 있습니다. high[i] == low[i] 틱이 하나만 있으면 0 나누기가 발생합니다.
이제 high[i]-low[i]가 0이면 사용되지 않는지 확인하십시오.
int limit=rates_total-prev_calculated;
if (limit<= 0 ) limit= 300 ;
//---for ( int i= 1 ;i<=limit ;i++)
{
if (High[i] - Low[i] == 0 ) continue ;// --------------- skip this barif ( MathAbs (Close[i]-Open[i])/(High[i]-Low[i])< 0.50 )
{boring[i]=Close[i];
}}
//--- return value of prev_calculated for next callreturn (rates_total);
}
이제 전문가 탭에서 코드가 더 이상 0으로 나누지 않았지만 이 줄에 범위를 벗어난 배열 오류가 생성되었음을 알려줍니다.
if (high[i] - low[i] == 0 )
루프를 테스트하기 위해 모든 계산과 조건을 제거하면 어떻게 될까요?
int limit=rates_total-prev_calculated;
if (limit<= 0 ) limit= 300 ;
//---for ( int i= 1 ;i<=limit ;i++)
{
boring[i]=Close[i];
}
//--- return value of prev_calculated for next callreturn (rates_total);
}
이제 전문가 탭에서 어레이가 다시 범위를 벗어났다고 보고합니다. 이번에는 다음 줄에 있습니다.
boring[i]=Close[i];
이제 루프에서 price 배열이 사용될 때마다 코드로 인해 배열이 범위를 벗어납니다. 따라서 루프의 문제와 왜 Close[i], Low[i], High[i]가 범위를 벗어났는지 알아내십시오. 표시기가 차트의 끝까지 그리는 것을 볼 수 있으므로 오류는 가장 높은 배열 인덱스의 끝에 있어야 합니다.
int limit=rates_total-prev_calculated; // what is the value of limit in this calculation when prev_calulated == 0 ?
if (limit<= 0 ) limit= 300 ;
//---for ( int i= 1 ;i<=limit;i++) // how does the value of limit compare with the highest available Close[] array index ?
먼저 올바르게 작동하는 루프를 코딩하는 방법을 배우지 않고 지표를 만들려고 하는 것 같습니다. 이를 수행하는 방법에 대한 많은 예가 있습니다. 포함된 표시기의 코드를 보고 작동 방식을 정확히 이해할 때까지 실험한 다음 계산을 수행하기 전에 올바르게 작동하는 간단한 단일 선을 그리는 표시기를 만들어 보십시오.
int limit = - 1 ;
if ( prev_calculated == 0 ) limit = rates_total - 3000 ;// will calculate 3000 Barsif ( prev_calculated > 0 ) limit = rates_total-prev_calculated;
for ( int i= limit; i>=0; i--)
{
if (High[i] - Low[i] == 0 ) continue ;// --------------- skip this bar
// Please test it, check if it's OK;
// Put the indicator in a backtest EA, say MACDSample, to check it
설명해 주셔서 감사합니다.
이제 더 잘 보입니다.
SCFX
안녕,
나는 그 미친 오류로 머리를 긁적입니다.
시간 프레임을 변경하면 여전히 4행 코드의 이 간단한 표시기가 사라집니다.
미친듯이 여기 게시된 제안을 이미 적용했지만 여전히 실패했습니다.
기분이 너무 나빠...
도와주세요.
많은 감사,
SCFX
안녕,
나는 그 미친 오류로 머리를 긁적입니다.
시간 프레임을 변경하면 여전히 4행 코드의 이 간단한 표시기가 사라집니다.
미친듯이 여기 게시된 제안을 이미 적용했지만 여전히 실패했습니다.
기분이 너무 나쁨...
도와주세요.
많은 감사,
SCFX
답장해주셔서 감사합니다.
내 저널에는 그런 공지가 없지만 TF를 변경하면 이 표시기가 제거됩니다.
나는 아직 그것을 고칠 수 없습니다.
SCFX
2014.05.18 08:41:31.080 커스텀 인디케이터 H_889_boring GBPUSD,H1: 삭제됨
2014.05.18 08:41:25.441 사용자 지정 표시기 H_889_boring GBPUSD,H4: 성공적으로 로드됨
나는 아직 그것을 고칠 수 없습니다.
SCFX
그것은 당신이 열심히 노력하지 않기 때문입니다.
다른 사람이 당신을 대신해 하게 하면 아무 것도 배울 수 없습니다. 유일한 방법은 스스로 하여 이해할 수 있도록 하는 것입니다. 스스로 하는 유일한 방법은 코드의 각 줄을 검토하고, 분해하고, 알아내는 것뿐입니다. 정확히 무엇을 하고 있으며 이를 수행하는 몇 가지 방법이 있습니다.
다음은 문제의 원인을 찾는 데 도움이 될 수 있는 모든 것입니다.
전문가 탭을 클릭했다면 지표가 이 선에서 0분할을 했으며 시간 프레임을 변경하는 것과는 아무 관련이 없다고 알려줍니다.
따라서 이것은 이 High[i]-Low[i]가 어떤 이유로 0이었음을 의미해야 합니다. 차트의 표시기를 보면 표시기가 값 중 일부를 그린 다음 눈금이 하나만 있는 막대에서 멈춘 것을 볼 수 있습니다. high[i] == low[i] 틱이 하나만 있으면 0 나누기가 발생합니다.
이제 high[i]-low[i]가 0이면 사용되지 않는지 확인하십시오.
이제 전문가 탭에서 코드가 더 이상 0으로 나누지 않았지만 이 줄에 범위를 벗어난 배열 오류가 생성되었음을 알려줍니다.
if (high[i] - low[i] == 0 )
루프를 테스트하기 위해 모든 계산과 조건을 제거하면 어떻게 될까요?
이제 전문가 탭에서 어레이가 다시 범위를 벗어났다고 보고합니다. 이번에는 다음 줄에 있습니다.
이제 루프에서 price 배열이 사용될 때마다 코드로 인해 배열이 범위를 벗어납니다. 따라서 루프의 문제와 왜 Close[i], Low[i], High[i]가 범위를 벗어났는지 알아내십시오. 표시기가 차트의 끝까지 그리는 것을 볼 수 있으므로 오류는 가장 높은 배열 인덱스의 끝에 있어야 합니다.
먼저 올바르게 작동하는 루프를 코딩하는 방법을 배우지 않고 지표를 만들려고 하는 것 같습니다. 이를 수행하는 방법에 대한 많은 예가 있습니다. 포함된 표시기의 코드를 보고 작동 방식을 정확히 이해할 때까지 실험한 다음 계산을 수행하기 전에 올바르게 작동하는 간단한 단일 선을 그리는 표시기를 만들어 보십시오.
@scfx
고칠 수 있는 사람은 당신뿐입니다. 또는 https://www.mql5.com/en/job으로 이동합니다.
거기에 작업을 게시합니다.
...
당신이 옳더라도 그렇게 가혹할 필요는 없습니다. 제발 SDC.
당신이 옳더라도 그렇게 가혹할 필요는 없습니다. 제발 SDC.
lol 나는 내 게시물을 약간 수정했습니다 ;)
죄송합니다. 잘못 안내했습니다. 죄송합니다. 표시기는 다음과 같이 코딩할 수 있습니다.
차트에 막대가 3000개 미만이면 여전히 범위를 벗어 납니다.