코딩 도움말 - 페이지 38

 

...

표시기에서 이를 수행하는 유일한 방법은 일부 이벤트(키보드, 마우스, ...)가 감지될 때까지 무한 루프로 유지하는 것입니다.

그러나 그것은 또한 나머지 터미널 기능 의 실행이 중지됨을 의미합니다(충돌하는 나쁜 표시기가 있는 경우와 동일합니다 - 메타 트레이더를 차단함). 따라서 좋은 솔루션이 아닙니다. 일반적으로 코드가 일시 중지된 동안 다른 코드 실행을 허용하는 (잠자기) 기능(터미널의 나머지 항목이 작업을 수행하도록 허용하는 시간)은 표시기에서 비활성화되어 있을 수 없습니다. 솔루션에 사용

marley60:
알람이 있으면 "삐" 소리가 한 번 납니다. 내가 그것을 멈출 때까지 알람 소리를 재생할 가능성이 있습니까? (이유: 화장실이나 부엌에 있을 때 "삐" 소리가 들리지 않습니다.) 알람 소리를 노래로 대체했지만 한 번 재생/정지될 때까지 재생 중에서 선택하는 것을 선호합니다(예: 트레이드 스테이션).
 

인덱스에 대한 질문

안녕 믈라덴;

Ind[3][0][1] 과 같은 표시기를 호출 하는 것을 보았습니다. 첫 번째 및 두 번째 정의된 인덱스는 무엇을 의미합니까?

미리 감사합니다

케말

 

EA의 지그재그 문제

안녕,

나는 내 EA에서 표준 지그재그 인디를 사용합니다. 다음 코드를 사용하여 지그재그 노드를 결정합니다. 나는 때때로 MT4가 잘못된 시간 프레임에서 지그재그 노드를 반환한다는 것을 알아차렸습니다. 예를 들어 H1 지그재그 노드를 얻으려고 하면 MT4가 M15 지그재그 노드 값을 반환합니다. 이전에 그러한 문제가 발생한 사람이 있습니까? 지그재그와 가능한 문제 영역에 대해 더 많은 정보를 알고 계시다면 조언을 부탁드립니다.

감사합니다.

FF제이슨

참고: TF는 다른 시간 프레임에서 지그재그 노드를 가져오기 위해 다른 값을 제공하는 시간 프레임입니다. MT4는 특정 TF를 사용할 때 어떻게든 노드 값을 혼동했습니다.

void vGetNode2(int TF,double& lwnd2[2],double& hgnd2[2])

{ int t=0; int p=0; int q=0; double nd2i;

for (i=0; i<=150; i++)

{ nd2i=iCustom(NULL,TF,"ZigZag",13,8,5,0,i);

if (nd2i==iLow(NULL,TF,i)) {if (p<=1) {lwnd2[p]=nd2i; p++;}}

if (nd2i==iHigh(NULL,TF,i)) {if (q<=1) {hgnd2[q]=nd2i; q++;}}

if (p==2 && q==2) break;

}

return;

}

 

이전 주문의 S/L 이후 새 주문을 여는 방법은 무엇입니까?

이전 주문의 S/L 이후에 새로운 주문을 엽니다.
귀하에게;

EA가 S/L에 따라 주문을 마감한 후 새 주문이 열리도록 하는 프로그램을 알고 있는 기관이 있습니까?

문안 인사
 

...

한 시간 프레임의 지그재그 피크가 다른 시간 프레임의 지그재그 피크와 동일한 경우가 있을 수 있습니다(피크를 찾고 있기 때문에 특이한 경우는 아닙니다). 시간 프레임에 관한 한 해당 코드로 올바른 시간 프레임 값을 얻고 있습니다. 마지막 지그재그 값 4개를 얻으려면 코드를 한 번만 변경하면 됩니다. 그러면 코드는 다음과 같습니다.

void vGetNode2(int TF,double& lwnd2[2],double& hgnd2[2])

{

int p=0; int q=0; int max=iBarShift(NULL,TF,0); double nd2i;

for (int i=0; i<max; i++)

{

nd2i=iCustom(NULL,TF,"ZigZag",13,8,5,0,i);

if (nd2i==iLow(NULL,TF,i)) {if (p<=1) {lwnd2[p]=nd2i; p++;}}

if (nd2i==iHigh(NULL,TF,i)) {if (q<=1) {hgnd2[q]=nd2i; q++;}}

if (p==2 && q==2) break;

}

return;

}

[/PHP]

As you can see only the loop end is changed from "150" to "Bars-1"

novalight:
Hi,

I use standard Zigzag indy in my EA. I use the following code to determine the zigzag nodes. I noticed that sometimes the MT4 returns the zigzag nodes from the wrong time frame. For example, when I try to get H1 zigzag nodes, MT4returns M15 zigzag node values. Has anyone come across such problem before? If you know more info about zigzag and the possible problem area, please advise.

Many thanks.

FFJason

note: TF is the time frame which I feed different values for getting zigzag nodes from different time frame. Somehow MT4 mixed up the node values when a specific TF is used.

[PHP]

void vGetNode2(int TF,double& lwnd2[2],double& hgnd2[2])

{ int t=0; int p=0; int q=0; double nd2i;

for (i=0; i<=150; i++)

{ nd2i=iCustom(NULL,TF,"ZigZag",13,8,5,0,i);

if (nd2i==iLow(NULL,TF,i)) {if (p<=1) {lwnd2[p]=nd2i; p++;}}

if (nd2i==iHigh(NULL,TF,i)) {if (q<=1) {hgnd2[q]=nd2i; q++;}}

if (p==2 && q==2) break;

}

return;

}

 

EA의 지그재그 문제

안녕하세요 메이든님

당신의 도움을 주셔서 대단히 감사합니다.

나는 iBarShift에서 약간의 독서를했고 귀하의 iBarShift(NULL,TF,0) 는 차트의 총 막대 수 를 얻는 것 같습니다. iBarShift를 사용하려는 의도가 잘못 이해되면 저를 수정하십시오.

ZigZag가 잘못된 노드 값을 반환하고 검색 번호(150 사용)가 문제가 아닌 경우를 봅니다. 또한 일부 노드는 다른 시간 프레임에 대해 동일하지만 내가 발견한 오류는 두 개 이상의 노드이고 해당 막대 번호가 모두 다른 시간 프레임을 가리키고 있다는 것을 이해합니다. 그것이 나를 당혹스럽게 했던 문제였다.

오늘 저는 지그재그에서 더 수수께끼 같은 문제를 발견했습니다. 루틴에서 반환된 노드를 표시하기 위해 Alert를 사용하고 때때로 루틴이 올바른 노드 쌍과 해당 막대 번호를 반환하지만 다른 노드와 막대 번호는 모두 0인 것을 발견했습니다. 정말 이상합니다. 다음 코드를 사용하여 노드가 0 값이 아님을 확인하여 루틴을 더욱 향상시킵니다. MT4가 심장 박동이나 실속을 건너 뛰고 쓰레기를 EA에 버리지 않기를 바랍니다. 내가 이것을 말하는 이유는 내 프로그램이 SL 및 TP를 삽입하거나 OP 값을 수집하려고 할 때 경고 메시지를 표시하는 다른 EA가 있고 MT4가 이 단계를 건너뛰고 0 값을 반환하는 경우가 꽤 자주 발생했기 때문입니다. 이러한 인스턴스를 살펴보고 이러한 작업이 제대로 수행되는지 확인하려면 프로그램을 개선해야 합니다.

조언 부탁드립니다. 나는 나의 지혜의 끝에 있다. 귀하의 도움에 감사드립니다. 건배,

노바라이트

int iGetNode4(int TF, double& lwnd4, double& hgnd4, int& lwnd4bar, int& hgnd4bar)

{ lwnd4=0; hgnd4=0; lwnd4bar=0; hgnd4bar=0; int t=0,p=0; //node 4 = arrow

for (i=0; i<=120; i++)

{ double lowi=iLow(NULL,TF,i); double highi=iHigh(NULL,TF,i);

if (iCustom(NULL,TF,"ZigZag",80,35,12,0,i)==lowi && lowi!=0) {if (t==0) {lwnd4=iLow(NULL,TF,i); lwnd4bar=i; t++; if(lwnd4==0) Alert(lwnd4);}}

if (iCustom(NULL,TF,"ZigZag",80,35,12,0,i)==highi && highi!=0) {if (p==0) {hgnd4=iHigh(NULL,TF,i); hgnd4bar=i; p++;if (hgnd4==0) Alert(hgnd4);}}

if (t==1 && p==1) break;

}

if (lwnd4bar<hgnd4bar) return(1); //current node 4 is a low node for Long

if (lwnd4bar>hgnd4bar) return(-1); //current node 4 is a high node for Short

return;

}

[/PHP]

mladen:
You probably have a case when the ZigZag peak of one time frame is the same as the ZigZag peak of another time frame (which is not an unusual case since they are looking for peaks). As far as time frames are concerned, you are getting correct time frame values with that code. Maybe just one change in the code has to be done in order to ensure that you get 4 last ZigZag values, and then the code would be like this

[PHP]void vGetNode2(int TF,double& lwnd2[2],double& hgnd2[2])

{

int p=0; int q=0; int max=iBarShift(NULL,TF,0); double nd2i;

for (int i=0; i<max; i++)

{

nd2i=iCustom(NULL,TF,"ZigZag",13,8,5,0,i);

if (nd2i==iLow(NULL,TF,i)) {if (p<=1) {lwnd2[p]=nd2i; p++;}}

if (nd2i==iHigh(NULL,TF,i)) {if (q<=1) {hgnd2[q]=nd2i; q++;}}

if (p==2 && q==2) break;

}

return;

}

As you can see only the loop end is changed from "150" to "Bars-1"
 

...

iBarShift(NULL,TF,0) 현재 : 예, 대상 시간 프레임의 총 막대를 반환합니다. 그러나 루프는 그렇게 많이 실행되지 않으며 마지막 4개의 ZigZag 피크가 발견되는 즉시 존재합니다.

이제 인수를 위해 다음을 상상해 보십시오. 한 시간 프레임에 대해 함수를 호출하고 마지막 4개의 피크를 찾는 데 150개의 막대 제한이 있습니다. 작업을 수행한 다음 다른 시간 프레임을 살펴봅니다. 그리고 논쟁을 위해 네 번째 피크가 처음 150개 막대 밖에 있다고 상상해 보십시오. 무슨 일이 일어날 것. 어레이가 정리되지 않았기 때문에 이전에 검색한 시간 프레임에 대한 일부 결과는 150번째 막대에서 4개 피크가 모두 발견되지 않았고 이전에 발견된 피크 중 일부는 현재 검색된 시간 프레임에서 발견된 대로 남아 있기 때문에 여전히 존재합니다.

그것이 바로 마지막 4개의 피크를 실제로 찾는지 확인하기 위해 해당 코드를 추가하는 목적이었습니다. 때로는 10개의 막대가 때로는 1000개의 막대가 필요하기도 하지만(완전히 ZigZag에 따라 달라지며 고정된 막대 수가 아님) "막대" 시간을 반복하지 않습니다. 필요한 시간만 반복하고 4개의 피크가 모두 목표 시간 프레임에 있는지 확인합니다.

시간 프레임 혼동에 관한 한 나는 그것이 일어나고 있다고 생각하지 않습니다. 대상 시간 프레임에 대한 히스토리 파일이 열리는 방식(단순히 대상 시간 프레임의 분을 기호 이름에 추가하여)은 시간 프레임 매개변수가 변경되지 않은 경우 단일 루프에서 2개의 시간 프레임에서 데이터를 읽는 것을 불가능하게 만듭니다(단 1 이 경우 히스토리 파일이 열리고 다른 시간대의 데이터에 액세스할 수 없음).

novalight:
안녕 메이든,

당신의 도움을 주셔서 대단히 감사합니다.

나는 iBarShift에 대해 약간의 독서를 했고 귀하의 iBarShift(NULL,TF,0)는 차트의 총 막대 수를 얻는 것 같습니다. iBarShift를 사용하려는 의도를 잘못 이해했다면 정정해 주십시오.

ZigZag가 잘못된 노드 값을 반환하고 검색 번호(150 사용)가 문제가 아닌 경우를 봅니다. 또한 일부 노드는 다른 시간 프레임에 대해 동일하지만 내가 발견한 오류는 두 개 이상의 노드이고 해당 막대 번호가 모두 다른 시간 프레임을 가리키고 있다는 것을 이해합니다. 그것이 나를 당혹스럽게 했던 문제였다.

오늘 나는 지그재그에서 더 수수께끼 같은 문제를 발견했습니다. 루틴에서 반환된 노드를 표시하기 위해 Alert를 사용하고 때때로 루틴이 올바른 노드 쌍과 해당 막대 번호를 반환하지만 다른 노드와 막대 번호는 모두 0인 것을 발견했습니다. 정말 이상합니다. 다음 코드를 사용하여 노드가 0 값이 아님을 확인하여 루틴을 더욱 향상시킵니다. MT4가 심장 박동이나 실속을 건너 뛰고 쓰레기를 EA에 버리지 않기를 바랍니다. 내가 이것을 말하는 이유는 내 프로그램이 SL 및 TP를 삽입하거나 OP 값을 수집하려고 할 때 경고 메시지를 표시하는 다른 EA가 있고 MT4가 이 단계를 건너뛰고 0 값을 반환하는 경우가 꽤 자주 발생했기 때문입니다. 이러한 인스턴스를 살펴보고 이러한 작업이 제대로 수행되는지 확인하려면 프로그램을 개선해야 합니다.

조언 부탁드립니다. 나는 나의 지혜의 끝에 있다. 귀하의 도움에 감사드립니다. 건배,

노바라이트

int iGetNode4(int TF, double& lwnd4, double& hgnd4, int& lwnd4bar, int& hgnd4bar)

{ lwnd4=0; hgnd4=0; lwnd4bar=0; hgnd4bar=0; int t=0,p=0; //node 4 = arrow

for (i=0; i<=120; i++)

{ double lowi=iLow(NULL,TF,i); double highi=iHigh(NULL,TF,i);

if (iCustom(NULL,TF,"ZigZag",80,35,12,0,i)==lowi && lowi!=0) {if (t==0) {lwnd4=iLow(NULL,TF,i); lwnd4bar=i; t++; if(lwnd4==0) Alert(lwnd4);}}

if (iCustom(NULL,TF,"ZigZag",80,35,12,0,i)==highi && highi!=0) {if (p==0) {hgnd4=iHigh(NULL,TF,i); hgnd4bar=i; p++;if (hgnd4==0) Alert(hgnd4);}}

if (t==1 && p==1) break;

}

if (lwnd4bar<hgnd4bar) return(1); //current node 4 is a low node for Long

if (lwnd4bar>hgnd4bar) return(-1); //current node 4 is a high node for Short

return;

}

 

EA의 지그재그 문제

안녕 메이든,

너가 확실히 맞아! 내 코드를 검토한 결과 150은 큰 지그재그에 충분하지 않으며 4개의 노드가 모두 발견되지 않으면 어떤 노드가 맨 처음인지 마지막인지 식별하는 전체 논리가 엉망이 될 것입니다.

결론적으로 지그재그도 MT4도 문제가 없고, 검색수를 너무 작게 설정한 순전히 제 실수입니다. 귀하의 시간과 인내심, 그리고 더 중요한 것은 기꺼이 도와주신 데 대해 감사드립니다. . . . . . .

잘 지내세요 .....

노바라이트

mladen:
iBarShift(NULL,TF,0) 현재 : 예, 대상 시간 프레임의 총 막대를 반환합니다. 그러나 루프는 그렇게 많이 실행되지 않으며 마지막 4개의 지그재그 피크가 발견되는 즉시 존재합니다.

이제 인수를 위해 다음을 상상해 보십시오. 한 시간 프레임에 대해 함수를 호출하고 마지막 4개의 피크를 찾는 데 150개의 막대 제한이 있습니다. 작업을 수행한 다음 다른 시간 프레임을 살펴봅니다. 그리고 논쟁을 위해 네 번째 피크가 처음 150개 막대 밖에 있다고 상상해 보십시오. 무슨 일이 일어날 것. 어레이가 정리되지 않았기 때문에 이전에 검색한 시간 프레임에 대한 일부 결과는 150번째 막대에서 4개 피크가 모두 발견되지 않았고 이전에 발견된 피크 중 일부는 현재 검색된 시간 프레임에서 발견된 대로 남아 있기 때문에 여전히 존재합니다.

그것이 바로 마지막 4개의 피크를 실제로 찾는지 확인하기 위해 해당 코드를 추가하는 목적이었습니다. 때로는 10개의 막대가 필요할 때도 있지만 때로는 1000개(완전히 지그재그에 의존하고 고정된 막대 수가 아님)가 필요하지만 "막대" 시간을 반복하지는 않습니다. 필요한 시간만 반복하고 4개의 피크가 모두 목표 시간 프레임에서 오는지 확인합니다.

시간 프레임 혼동에 관한 한 나는 그것이 일어나고 있다고 생각하지 않습니다. 대상 시간 프레임에 대한 히스토리 파일이 열리는 방식(단순히 대상 시간 프레임의 분을 기호 이름에 추가하여)은 시간 프레임 매개변수가 변경되지 않은 경우 단일 루프에서 2개의 시간 프레임에서 데이터를 읽는 것을 불가능하게 만듭니다(단 1 이 경우 히스토리 파일이 열리고 다른 시간대의 데이터에 액세스할 수 없음).
 

코드 도움말

다음 두 플롯을 추가하기 위해 SnakeBorders 표시기에 코드를 추가할 수 있는 사람이 있습니까?

1. 흰색 범위의 중간을 그리는 선 플롯(그림에서 빨간색 선으로 표시됨).

2. 노란색 라인 플롯의 반대 극단을 플롯하는 라인 플롯(그림의 시안색 라인으로 표시됨). Snakeborders.mq4

파일:
sb.gif  39 kb
 

누군가 나를 위해 이 지표를 만드는 데 도움을 주세요.

내가 원하는 지표

상태

바디 캔들 가격이 ma 표시기 위를 교차하고 rsi > rsi 50 캔들 마감 후 매수 새 캔들이 하나의 파란색 화살표와 파란색 선을 시작하여 매도 시작

바디 캔들 가격이 하단 ma 표시기를 교차하고 캔들 종료 후 rsi < rsi 50일 때 매도 새로운 캔들이 하나 시작되면 매도 빨간색 화살표와 빨간색 선은 구매까지

값 변경에 대한 입력도 추가하십시오.

내 나쁜 영어로 미안

정말 감사합니다

사유: