코딩 도움말 - 페이지 61

 
mladen:
해당 표시기는 평활화를 위해 "뱀력"(중심 TMA)을 사용하고 있으며 다시 계산하지 않고 그대로 유지하기 위해 변경할 수 없습니다. 중심 TMA의 "다시 칠하지 않는"(끝이 가리키는) 버전은 간단한 LWMA이지만 중심 TMA와 동일한 결과를 기대하지는 않습니다. 중심 TMA에 대한 추가 정보는 여기에서 읽을 수 있습니다. https://www.mql5.com/en/forum/181241 해당 코드를 변경하거나 개선할 때 해당 코드의 기초는 디컴파일된 코드입니다. 나는 누군가가 디컴파일된 코드를 변경할지 의심스럽다.

많은 도움이 되는 정보를 주신 Mladen님 감사합니다.

 

안녕,

웹에서 이 표시기를 다운로드했지만 연결하면 2단계의 별도 창이 표시되지만 막대는 표시되지 않습니다.

고칠 수 있도록 도와주시겠습니까?

고맙습니다

오실레이터.mq4

파일:
 

다시오,

그것은 또 다른 태양풍 표시기일 뿐입니다(누군가가 무언가를 변경하려고 시도했습니다).

dasio:
안녕,

웹에서 이 표시기를 다운로드했지만 연결하면 2단계의 별도 창이 표시되지만 막대는 표시되지 않습니다.

고칠 수 있도록 도와주시겠습니까?

고맙습니다

오실레이터.mq4
 
mladen:
dasio, 그것은 또 다른 태양풍 표시기일 뿐입니다(누군가가 무언가를 바꾸려고 했습니다).

고맙습니다. 그러나 백테스트 를 시작하면 막대가 나타납니다. 어떻게 가능할까요?

고맙습니다

 

다시오

전문가 및 저널 탭에 오류가 있으면 확인하십시오. 내 브로커 데이터에서는 작동하므로 브로커 데이터에서 무슨 일이 일어나고 있는지 알 수 없습니다( 제로 나누기 또는 이와 유사한 것).

dasio:
고맙습니다. 그러나 백테스트를 시작하면 막대가 나타납니다. 어떻게 가능할까요? 고맙습니다
 

믈라덴 ,

코드를 작성하거나 다른 사람의 코드를 볼 때 코드의 품질을 어떻게 평가합니까?코드를 작성할 때 코드의 견고성을 테스트하는 방법은 무엇입니까?감사합니다.

 

:)

내 두 가지 주요 기준은 다음과 같습니다.

- 단순성(코드를 단순하게 만들면 개발, 향상 및 디버그가 더 쉬워짐)

- 깔끔함(코드를 무더기에 던지기만 하면 작동한다고 생각하는 사람은 일정 시간이 지나면 자신의 코드를 볼 필요가 없습니다. 또한 지저분한 코드를 디버깅하는 것은 그 자체로 이야기입니다)

그 두 가지가 충족되었을 때만 다시 살펴보고 "읽는" 것이지만 품질에 액세스하기 위해 수행할 수 있는 작업은 매우 긴 이야기입니다. 프로세스가 객관적인 것보다 훨씬 주관적인 것 같습니다...

nevar:
Mladen, 코드를 작성하거나 다른 사람의 코드를 볼 때 코드의 품질을 어떻게 평가합니까?코드를 작성할 때 코드의 견고성을 테스트하는 방법은 무엇입니까?감사합니다.
 
drofwarc:
안녕,

iFractals를 호출하는 표시기를 적용하고 대신 조정 가능한 기간 기능이 있는 사용자 지정 프랙탈 표시기를 호출하려고 합니다. 내가 적응하려는 지표가 첨부되어 있습니다. "프랙탈의 이전보다 가까운 상대"라고 합니다.

닫기상대jtoz이전의프랙탈.mq4

코드는 가격이 이전 프랙탈 최고점을 돌파하면 위쪽 화살표를 그리고 반대 방향으로 아래쪽 화살표를 표시합니다.

iCustom으로 호출하려는 표시기도 첨부되어 있습니다. "프랙탈 - 조정 가능"이라고 합니다.

프랙탈___조정 가능.mq4

아래는 조정 가능한 프랙탈을 호출하도록 원래 표시기를 수정하려는 시도입니다. 코드는 높고 낮은 프랙탈에 점을 성공적으로 표시하고 내가 원하는 대로 프랙탈 기간을 조정할 수 있습니다. 문제는 이전의 높고 낮은 프랙탈 수준의 중단을 표시하기 위한 화살표에 있습니다. 나는 그들이 올바르게 음모를 꾸미게 할 수 없습니다.

도움을 주시면 대단히 감사하겠습니다.

안부 인사,

드로프와크

int start()

{

int counted_bars = IndicatorCounted();

if (counted_bars > 0) counted_bars--;

int limit = Bars - counted_bars;

for(int i=limit; i>0; i--)

{

UpFractalsBuffer=iCustom(NULL,0,"Fractal - Adjustable", dist, arrowPosition, 0, i); //-Draw the high fractal

if (UpFractalsBuffer!=0) //-If it is available, put in the array of fractals for higher levels

HighLevel=iCustom(NULL,0,"Fractal - Adjustable", dist, arrowPosition, 2, i);

if(Close>HighLevel)

UpArrowBuffer=(Low-(PipBuffer)*Poin); //Arrows

DownFractalsBuffer=iCustom(NULL,0,"Fractal - Adjustable", dist, arrowPosition, 1, i); //-Draw the low fractal

if(DownFractalsBuffer!=0) //- If it is available put in the array of lower levels

LowLevel=iCustom(NULL,0,"Fractal - Adjustable", dist, arrowPosition, 3, i);

if(Close<LowLevel)

DownArrowBuffer=(High+(PipBuffer)*Poin);//Arrows

}

return(0);

}

결국 이것을 해결했습니다. 문제는 버퍼 혼합이었습니다.

 

신호 사이에 표시기가 n개의 막대를 건너뛰도록 하는 코드

안녕하세요 여러분,

Sleep()을 사용하거나 타임스탬프를 기록하고 다른 신호를 허용하기 전에 타임스탬프 이후 n초 동안 대기하여 거래 사이에 EA를 일시 중지할 수 있다는 것을 알고 있습니다.

그러나 지표에 대해 동일한 작업을 수행할 수 있습니까?

예를 들어, 두 이동 평균 의 교차점에 화살표를 표시하는 표시기가 다른 화살표를 표시하기 전에 교차 후 n개의 막대를 건너뛰도록 하고 싶습니다. 즉, n개의 막대가 지나가기 전에 또 다른 십자가가 발생하면 표시기가 십자가를 무시하고 화살표를 표시하지 않습니다.

나는 이것을 수행하는 지표를 찾기 위해 광범위하게 검색했지만 운이 없었습니다.

내가 코드를 공부할 수 있도록 누군가가 이미 이 기능이 있는 표시기를 게시할 수 있습니까? 또는 이 제안에 대해 작동하는 코드의 예를 제공하여 구현하려고 할 수 있습니다.

많은 감사,

드로프와크

 

정상적으로 표시되지 않습니다. 아무도 문제를 해결하는 데 도움을 줄 수 있습니까?

#속성 표시기_분리_창

#속성 표시기_버퍼 1

#property indicator_color1 빨간색

#속성 표시기_최대 100

#속성 표시기_레벨1 70

#속성 표시기_레벨2 50

#속성 표시기_레벨3 30

#속성 표시기_최소 0

//---- 입력 매개변수

extern int rsiperiod = 14 ;

extern int 단기 = 5 ;

extern int 중간 기간 = 8;

extern int Longperiod = 13;

extern int mamode = 2 ;

//---- 버퍼

이중 RSI[];

이중 ShortRSI[];

이중 중간RSI[];

이중 LongRSI[];

이중 SMRSI[];

정수 기간 ;

//+----------------------------------------------- -------------------+

//| 커스텀 인디케이터 초기화 기능 |

//+----------------------------------------------- -------------------+

정수 초기화()

{

//---- 표시기

표시 버퍼(5);

SetIndexBuffer(0,SMRSI);

SetIndexBuffer(1,RSI);

SetIndexBuffer(2,ShortRSI);

SetIndexBuffer(3,MiddleRSI);

SetIndexBuffer(4,LongRSI);

//---- DataWindow의 이름 및 표시기 하위 창 레이블

IndicatorShortName("SMRSI("+rsiperiod+","+Shortperiod+","+Middleperiod+","+Longperiod +","+mamode+")");

SetIndexDrawBegin(0,rsiperiod+longperiod);

기간=단기+중기+장기;

리턴(0);

}

//+----------------------------------------------- -------------------+

//| 사용자 지정 표시기 반복 기능 |

//+----------------------------------------------- -------------------+

정수 시작()

{

int counted_bars=IndicatorCounted();

int i, 제한;

if(counted_bars<0) return(-1);

if(counted_bars>0) counted_bars--;

한도 = Bars-counted_bars;

for( i=limit; i>=0; i--) RSI=iRSI(NULL,0,rsiperiod,0,i);

for( i=limit; i>=0; i--) ShortRSI=iMAOnArray(RSI,0,Shortperiod,0,mamode,i);

for( i=limit; i>=0; i--) MiddleRSI=iMAOnArray(RSI,0,Middleperiod,0,mamode,i);

for( i=limit; i>=0; i--) LongRSI=iMAOnArray(RSI,0,Longperiod,0,mamode,i);

for( i=limit; i>=0; i--) { if(period!=0) SMRSI=(Shortperiod/period)*ShortRSI+(Middleperiod/period)*MiddleRSI+(Longperiod/period)*LongRSI;}

반환(0);

}

//+----------------------------------------------- -------------------+