초보자의 모험 - 페이지 7

 
niko :

CB에:


하이 플라이어! 나는 Tim의 작업으로 할 수 있는 모든 것을 했고 따라서 코드를 더 자세히 살펴보기로 결정했습니다.


나는 당신의 코드를 살펴보고 그 안에 있는 오류를 이해하고 수정하려고 노력했습니다. 문자열 fnGenerateSignal()에 대해 '불균형 괄호'로 오류를 줄이는 데 성공했습니다. 왜 이 경우에 언밸런스라고 하는지 모르겠습니다.


항상 그렇듯이 귀하의 코드 진행 상황에 대한 귀하의 생각에 감사드립니다! 아주 기본적인 것조차도 이해하지 못하는 많은 부분이 여전히 있음을 명심하십시오.

주석을 참조하십시오.

다음 사항을 확인했습니다.

- 변수가 매개변수로 전달될 것으로 예상하는 함수 를 선언했지만 실제로 함수 호출 시 전달하지 않았습니다. 지금 - 지금은 가능한 한 간단하게 유지합시다.

- 함수의 이름도 변수로 선언해야 한다고 생각하는 것 같았습니다. 함수를 사용하고 변수를 안팎으로 전달하는 방법은 다음과 같습니다.


선언하려면:

int abcdef(int x, string s) // abcdef라는 이름의 함수는 정수와 문자열의 입력을 받아들이고 출력으로 정수를 반환합니다(이 경우 0 또는 9).

{

함수는 x와 s로 작업을 수행합니다.

if (어떤 조건)

반환(9);

또 다른

리턴(0);

}


그리고 전화하려면:

...

myResponse = abcdef(myInteger, myString);

if (myResponse == 9)

{

ㅋㅋㅋㅋ

 

안녕, CB

고맙습니다. 이것은 내가 알아낼 수없는 부분입니다. 당신은 저에게 매우 명확하게 설명했습니다. 나는 지금 올바른 길을 가고 있다고 생각합니다.

CB, 질문1:

부울 fnOrderDuplicate()

{

iDuplicateOrders=0 // CB는 iDuplicateOrders를 int 또는 double로 선언하면 안 됩니까?

iOrders = OrdersTotal()-1 //이제 귀하의 도움으로 이해합니다. 이것이 OrdersTotal 함수 를 호출합니다. 그러나 다시 iOrders를 변수로 선언해서는 안 됩니까?

CB, 질문 2:

int fnTrade() // 함수에서 sSignal을 사용하기 때문에 이것이 "int fnTrade(string sSignal)"이 아닌 이유는 무엇입니까? ?

{ if(sSignal=="OP_BUY")

...

CB,질문3:

코드 끝에서 return(0) 및 }를 제거하도록 요청했습니다. 그러나 이것은 Start()가 일반적인 'return(0)으로 닫히지 않고 괄호가 닫히지 않음을 의미합니다. 모든 이전 괄호(내가 확인한 것에서)는 우리가 디자인한 특정 기능의 열기 및 닫기에 특화되어 있기 때문입니다. ?

 
niko :

안녕, CB

고맙습니다. 이것은 내가 알아낼 수없는 부분입니다. 당신은 저에게 매우 명확하게 설명했습니다. 나는 지금 올바른 길을 가고 있다고 생각합니다.

CB, 질문1:

부울 fnOrderDuplicate()

{

iDuplicateOrders=0 // CB는 iDuplicateOrders를 int 또는 double로 선언하면 안 됩니까?

iOrders = OrdersTotal()-1 //이제 귀하의 도움으로 이해합니다. 이것이 OrdersTotal 함수를 호출합니다. 그러나 다시 iOrders를 변수로 선언해서는 안 됩니까?

CB, 질문 2:

int fnTrade() // 함수에서 sSignal을 사용하기 때문에 이것이 "int fnTrade(string sSignal)"이 아닌 이유는 무엇입니까? ?

{ if(sSignal=="OP_BUY")

...

CB,질문3:

코드 끝에서 return(0) 및 }를 제거하도록 요청했습니다. 그러나 이것은 Start()가 일반적인 'return(0)으로 닫히지 않고 괄호가 닫히지 않음을 의미합니다. 모든 이전 괄호(내가 확인한 것에서)는 우리가 디자인한 특정 기능의 열기 및 닫기에 특화되어 있기 때문입니다. ?

Q1: 이 두 변수가 모두 정의되어 있습니다. 내가 제안한 변수를 보면 extern을 정의한 섹션으로 이동했습니다. 이렇게 하면 자동으로 모든 기능 에서 사용할 수 있게 됩니다.

Q2: sSignal 변수는 모든 함수 외부에서 선언된 경우 함수 호출에서 명시적으로 전달할 필요 없이 모든 함수에서 사용할 수 있습니다.

Q3: 아, 이제 당신의 오해가 보입니다. 왜 그 return 문과 중괄호를 거기에 넣었는지 궁금합니다. fnTrade() 문에 대한 내 의견으로 해결되었습니다. 거기에 리턴 콜과 닫는 대괄호를 추가하도록 요청한 것을 알 수 있습니다. 그 이유는 start() 함수 코드 블록 내에서 모든 함수를 (잘못) 선언했기 때문입니다.


CB

 
niko wrote >>

팀,

나는 당신이 코드에 대해 나에게 요청한 비트를 수행했습니다. 내 질문에 대한 자세한 답변을 제공하고 이 문제를 해결하는 데 도움이 되도록 코드 전체에 많은 주석을 작성해 주셔서 감사합니다. 어떻게 일들이 함께 패치되는지, 배열을 올바르게 사용하고 특정 기능을 호출하는 방법(전역 및 지역 변수의 역할)을 보기 시작했습니다.

최신 버전의 코드를 첨부했습니다.

한 가지 질문이 있습니다. 우리에게 구매/공매도 조건을 제공하기 위해 모든 항목(플래그 포함)을 포함하도록 EntryRules 함수를 만들지 않은 이유가 무엇입니까? 대신 나중에 항목 결정을 내리기 위해 플래그를 사용하여 호출합니다.

안녕 닉


나는 코드에서 몇 가지를 정리했고 희망적으로 당신의 질문에 대답했습니다. 이제 EntryFunction이 완료되었습니다. 코드에 표시된 대로 시작(메인) 함수에서 호출하고 표시된 대로 필요한 매개변수를 전달하기만 하면 됩니다. 몇 분이면 컴파일과 테스트를 할 수 있기를 바랍니다. 나는 당신이 싸워야 할 몇 가지 작은 버그가 있을 것으로 기대하지만 큰 문제는 없기를 바랍니다.


컴파일되면 테스터에서 EA를 실행하고 로그 파일을 살펴보고 이 단계에서 예상한 대로 작동하는지 확인하십시오. 각 통화 쌍에 대한 BUY 및 SELL 신호를 볼 수 있어야 합니다.


이 시점에서 코드가 약 75% 완성되었다고 말하고 싶습니다.


다음 단계는 주어진 통화 쌍 및 거래 방향에 대한 미결 주문을 확인하는 또 다른 함수를 작성하는 것입니다.


거래 기능에서 MT4 문서를 살펴보는 것이 좋습니다. OrdersTotal(), OrderSelect(), Order Symbol() 및 OrderType()이 이 작업의 후보로 보입니다.


EntryRules 함수에 플래그를 포함하여 모든 것을 포함하는 것에 대한 귀하의 질문에 대해, 나는 그 이유를 알 수 없습니다. EntryRules 기능을 수정해 보지 않으시겠습니까?

이미 수행한 작업을 컴파일, 실행 및 테스트한 후에 이 작업을 수행하는 것이 좋습니다.


문안 인사

 

CB: 고마워요. 이것은 저를 위해 상황을 더 명확히 하는 데 도움이 됩니다. 웬일인지 나는 모든 것이 시작 기능 내에 있어야한다고 생각했습니다.

질문: 매 틱마다 계산/업데이트되는 ema를 시작 함수 내에서 선언해야 하지 않습니까?

 

Hey Tim: 다시 한 번 도와주셔서 감사합니다. 오늘 저녁에 퇴근하자마자 일을 끝까지 처리하겠습니다. 당신과 CB와 함께 일하면서 나는 이제 어떻게 일을 정리할 것인지에 대한 더 많은 아이디어를 갖게 되었고 모든 것에 대해 더 유연하게 생각하기 시작했습니다.

 
niko :

CB: 고마워요. 이것은 저를 위해 일을 더 명확히 하는 데 도움이 됩니다. 웬일인지 나는 모든 것이 시작 기능 안에 있어야 한다고 생각했습니다.

질문: 매 틱마다 계산/업데이트되는 ema를 시작 함수 내에서 선언해야 하지 않습니까?

아니요. 함수 내에서 변수를 선언하면 해당 함수 내에서만 사용할 수 있습니다. 모든 함수 외부에서 선언하면 모든 함수에서 사용할 수 있습니다. 따라서 상단에서 ema 변수를 선언한 다음 시작 함수 내에서 이에 대해 계산할 수 있습니다.


CB

 
cloudbreaker wrote >>

아니요. 함수 내에서 변수를 선언하면 해당 함수 내에서만 사용할 수 있습니다. 모든 함수 외부에서 선언하면 모든 함수에서 사용할 수 있습니다. 따라서 상단에서 ema 변수를 선언한 다음 시작 함수 내에서 이에 대해 계산할 수 있습니다.

CB

CB 감사합니다, 이제 알겠습니다!

 

팀,


이제 터키에서 돌아왔습니다. 나는 Kusadasi에서 놀라운 시간을 보냈고 정말로 떠나고 싶지 않았습니다. 터키인은 영국인보다 훨씬 친절합니다. 나는 전에 거기에 가본 적이 없었음에도 불구하고 그곳에서 집처럼 느꼈습니다.


나는 우리가 디자인하고 있는 코드를 업그레이드하는데 지난 5시간 정도를 보냈다. 나는 붙어있다.

주요 수정 사항은 다음과 같습니다.

1. Order Count 함수를 만들고 시작 함수 내에서 호출했습니다. 아직 얻지 못한 비트가 있기 때문에 이것이 오류로 가득 차 있을 것으로 예상합니다(예: 통화 쌍 별로만 작동하도록 [c] 루프를 따르는지 확인하는 방법)

2. CurrencySymbol과 CurrencySym의 이름을 중간에 변경하면서 코드를 수정했습니다. 그러나 이것은 혼란 스러울 수 있습니다.

3. 시작 함수 내에서 EntryRules 함수를 호출했습니다.


//왜 예전 코드가 틀렸는지, 댓글, 논리적 사고를 바로잡는 데 도움이 되는지 계속 소개해주시면 크고 작은 실수를 수정해 주시면 정말 감사하겠습니다.


항상 애타게 당신의 수정 사항을 기다리고 있습니다!

 

이봐 CB,


며칠 동안 그에게서 소식을 듣지 못했기 때문에 Tim은 지금 휴가 중이라고 생각합니다. 따라서 나는 거래에 도움이 될 것이므로 귀하의 코드를 계속 사용하고 있습니다(지금 수동으로 전략을 거래하고 있으며 이른 시간에 일어나는 것을 의미함). 나는 당신이 요청한 대로 모든 코드를 수정했지만 어떤 이유로 여전히 오류를 반환합니다("=="와 관련하여 이번에는 매우 이상함).


또 다른 것은 시작 기능 이 닫히지 않았다는 것입니다. 그래서 나는 시작() 내의 첫 번째 함수 뒤에 "}"를 추가했습니다. 그렇게 하지 않으면 코드에서 후속 함수 문자열 fnGenerateSignal()과 함께 오류를 생성합니다(예기치 않은 함수 정의라고 함).


항상 감사합니다. 나는 당신의 의견/수정을 기대합니다!

새긴 금

파일: