코딩하는 방법? - 페이지 306

 

안녕,

나는 함수 와 함께 아무데도 가지 않고 있었고, 나는 그것들을 수없이 확인했지만 소용이 없었습니다. 그래서 내 코드의 각 단계에서 많은 Print() 메시지를 작성하기로 결정했습니다. 실제로 GetLots 기능만큼 멀리 가지 못하고 내 구매 및 판매 기준을 확인할 때 실패합니다. 이상하게도 나는 코드의 이 부분을 변경하지 않았지만 뭔가가 빠졌습니다. 하지만 적어도 지금은 어디에 초점을 맞춰야 하는지 압니다!

 

모두들 안녕,

오늘 일찍 코드를 테스트했으며 비교적 잘 작동했습니다. 코드 또는 백테스트 기준(날짜 등)을 변경하지 않고 1시간 후에 백테스트를 수행했는데 결과가 전혀 다르므로 결과가 전혀 다릅니다. 왜 이런 일이 일어났는지 궁금합니다. 예를 들어 MT4 연결?

 

...

매개변수를 변경하지 않은 경우 다음을 확인하십시오. 백 테스트를 실행할 때 저널 탭을 열고 일부 오류가 작성되었는지 확인하십시오. 주문 실행 의 오류는 잘못된 결과의 원인이 될 수 있습니다. 또한 구매 및 판매 기준이 다음과 같은지 확인하십시오.

crsnape@btinternet.com:
안녕하세요 여러분, 오늘 일찍 코드를 테스트했으며 비교적 잘 작동했습니다. 코드 또는 백테스트 기준(날짜 등)을 변경하지 않고 1시간 후에 백테스트를 수행했는데 결과가 전혀 다르므로 결과가 전혀 다릅니다. 왜 이런 일이 일어났는지 궁금합니다. 예를 들어 MT4 연결?
 

내 일지에 오류가 없습니다. 첫 번째 항목은 다음과 같습니다.

2012.07.22 15:35:37 H4 기간 EA EURUSD,H4: 성공적으로 로드됨

다음과 같은 방대한 목록이 있습니다.

2012.07.22 15:47:07 TestGenerator: 일치하지 않는 데이터 오류(2012.07.19 12:00에서 볼륨 제한 56304 초과)

그리고 마지막으로:

2012.07.22 15:47:07 H4 기간 EA 입력: MagicNumber=42; RiskRewardRatio=3; D1SlowMAP 기간=200; D1FastMAP 기간=50; FastMACDPeriod=12; 느린MACDPeriod=26; 신호 주기=9; DNCP 기간=120; SL_Period=10;

그러나 그 이후에는 아무 것도 없습니다.

내 테스트는 2012년 1월 4일부터 2012년 7월 21일까지 수행되었습니다.

 

...

그런 다음 진입 조건에 문제가 있습니다(EA가 주문을 열려고 시도한 적이 없음).

crsnape@btinternet.com:
내 일지에 오류가 없습니다. 첫 번째 항목은 다음과 같습니다.

2012.07.22 15:35:37 H4 기간 EA EURUSD,H4: 성공적으로 로드됨

다음과 같은 방대한 목록이 있습니다.

2012.07.22 15:47:07 TestGenerator: 일치하지 않는 데이터 오류(2012.07.19 12:00에서 볼륨 제한 56304 초과)

그리고 마지막으로:

2012.07.22 15:47:07 H4 기간 EA 입력: MagicNumber=42; RiskRewardRatio=3; D1SlowMAP 기간=200; D1FastMAP 기간=50; FastMACDPeriod=12; 느린MACDPeriod=26; 신호 주기=9; DNCP 기간=120; SL_Period=10;

그러나 그 이후에는 아무 것도 없습니다.

내 테스트는 2012년 1월 4일부터 2012년 7월 21일까지 수행되었습니다.
 

예, 위치를 입력하기 전에 이상합니다. 내 코드에 처음부터 끝까지 일부 print()가 작성되어 있고 내 코드의 맨 처음부터 기록하기 위해 저널에 아무것도 기록되지 않습니다. 현재 바에서 이전 포지션이 이미 열렸는지 확인 하는 것도 아닙니다.

if ((GlobalVariableGet(barsGV) == 0) || (GlobalVariableGet(barsGV) < 막대))

{

GlobalVariableSet(HasOrderedGV, false);

GlobalVariableSet(barsGV,Bars);

}

//--- 롱포지션(BUY) 가능성 확인

if (GlobalVariableGet(HasOrderedGV) == false)

{

인쇄("테스트");

if(... 진입 조건...

 

...

귀하의 EA가 어떤 단계에서 주문을 개시하려고 시도했다면 저널에 기록되었을 것입니다(오류 여부는 중요하지 않습니다. 오류가 있는 경우 오류가 있을 수 있습니다. 거기에 기록)

그러나 거기에 아무 것도 쓰여 있지 않기 때문에 귀하의 EA가 실제로 주문을 열려고 시도하는 단계에 도달하지 않았으며 EA에서 충족되어야 하는 일련의 조건이 실제로 주문을 여는 단계에 도달하지 않은 경우에만 발생할 수 있음을 의미합니다. 주문하다. 따라서 조건을 명확히 해야 합니다. 실행될 것으로 알고 있는 가장 간단한 조건에서 시도한 다음 조건을 추가합니다. 그렇게 하면 주문을 열지 못하게 하는 단계를 식별할 수 있습니다.

crsnape@btinternet.com:
예, 위치를 입력하기 전에 이상합니다. 내 코드에 처음부터 끝까지 일부 print()가 작성되어 있고 내 코드의 맨 처음부터 기록하기 위해 저널에 아무것도 기록되지 않습니다. 현재 바에서 이전 포지션이 이미 열렸는지 확인하는 것도 아닙니다.

if ((GlobalVariableGet(barsGV) == 0) || (GlobalVariableGet(barsGV) < 막대))

{

GlobalVariableSet(HasOrderedGV, false);

GlobalVariableSet(barsGV,Bars);

}

//--- 롱포지션(BUY) 가능성 확인

if (GlobalVariableGet(HasOrderedGV) == false)

{

인쇄("테스트");

if(... 진입 조건...
 

if 명령 뒤에 Print()를 몇 개 더 넣었고 이 시점에서 실패했다고 생각합니다. 특히 이 시점 이후에 내 저널이 인쇄를 중지할 때 빨간색 선이 더 그렇습니다.

//--- 전역 변수

문자열 HasOrderedGV = "has_ordered_GV";

문자열 barGV = "bars_GV";

//--- 주문이 이미 H4 시간 블록에 배치되었는지 확인합니다.

if ((GlobalVariableGet(barsGV) == 0) || (GlobalVariableGet(barsGV) < 막대))

{

GlobalVariableSet(HasOrderedGV, false);

글로벌변수셋(barsGV,바);

}

Print("현재 바에 대해 이미 주문이 접수되었는지 확인합니다. ", HasOrderedGV);

//--- 롱포지션(BUY) 가능성 확인

if (GlobalVariableGet(HasOrderedGV) == false)

{

나는 이 코드를 온라인에서 발견하고 그것을 내에서 사용했습니다. 그러나 그것이 효과가 있을지 지금 궁금합니다. 전역 변수 barGV는 문자열로 선언되지만 첫 번째 줄에서 0을 참조합니다. 이게 옳은 거니?

 

...

해당 코드는 처음 실행될 때 정상적으로 작동합니다.

0은 다음과 같은 이유로 테스트됩니다.

이중 GlobalVariableGet([/TD] [TD] 문자열 이름)

"기존 전역 변수의 값을 반환하거나 오류가 발생하면 0을 반환합니다."

전역 변수 값 검색 시 오류는 전역 변수가 아직 생성되지 않은 경우입니다. 그러나 내가 말했듯이, 그 코드는 처음 실행될 때 괜찮습니다. 문제는 다음과 같습니다. 테스트를 실행하고 테스트가 끝날 때 barGV가 5000으로 설정되어 있다고 상상해 보십시오. 이제 EA를 다시 실행하면 막대가 항상 barGV 값(여전히 5000임)보다 작아집니다. 코드(코드)는 다르게 작성해야 합니다. 다음과 같은 것을 사용하십시오.

글로벌변수셋(barsGV,0);

init()에서 연속 테스트에서도 정상적으로 작동해야 합니다. 그러나 오류일 수 있는 EA를 시작할 때 현재 표시줄에 열린 주문이 없는 것처럼 인위적으로 "척"합니다. 그 목적을 위해 전역 변수를 사용하는 것보다 현재 막대에서 열린 주문을 계산하는 함수를 사용하는 것이 훨씬 낫습니다(여러 가지 이유로)

________________________________________________

추신: 이와 같은 전역 변수를 사용하면 EA의 여러 인스턴스를 사용할 수 없습니다(각 전역 변수는 다른 코드에서 볼 수 있습니다. 모든 코드: EA,script, Indicator ..., 따라서 이름이 고유하지 않은 경우 동시에 모든 동일한 전역 변수를 읽고 설정하는 EA의 혼합 위험)

crsnape@btinternet.com:
if 명령 뒤에 Print()를 몇 개 더 넣었고 이 시점에서 실패했다고 생각합니다. 특히 이 시점 이후에 내 저널이 인쇄를 중지할 때 빨간색 선이 더 그렇습니다.

//--- 전역 변수

문자열 HasOrderedGV = "has_ordered_GV";

문자열 barGV = "bars_GV";

//--- 주문이 이미 H4 시간 블록에 배치되었는지 확인

if ((GlobalVariableGet(barsGV) == 0) || (GlobalVariableGet(barsGV) < 막대))

{

GlobalVariableSet(HasOrderedGV, false);

GlobalVariableSet(barsGV,Bars);

}

Print("현재 바에 대해 이미 주문이 접수되었는지 확인합니다. ", HasOrderedGV);

//--- 롱포지션(BUY) 가능성 확인

if (GlobalVariableGet(HasOrderedGV) == false)

{

나는 이 코드를 온라인에서 발견하고 그것을 내에서 사용했습니다. 그러나 그것이 효과가 있을지 지금 궁금합니다. 전역 변수 barGV는 문자열로 선언되지만 첫 번째 줄에서 0을 참조합니다. 이게 옳은 거니?
 

아, 알 겠어요. 전역 변수는 값을 메모리에 저장하기 때문입니다. 따라서 백 테스팅 이 완료되고 5000에서 말했듯이 이것은 백 테스팅을 다시 실행하더라도 메모리에 저장되므로 BarsGV가 5000 미만이 아니기 때문에 false를 반환하지 않습니까? 이런, 깊다.

또한 오류가 발생하면 HasOrderedGV를 false로 설정하여 나머지 코드를 계속할 수 있습니까?

내가 당신을 올바르게 이해 했습니까?

BTW- 이것이 허용됩니까?

GlobalVariableSet(HasOrderedGV, 거짓);

MQL4 Book에서는 다음과 같이 말합니다.

datetime GlobalVariableSet([/TD] [TD] 문자열 이름, 이중 값)

내 인스턴스의 두 번째 값은 bool이 아닌 double입니까?