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

 

다른 초보자의 질문

안녕하세요, 저는 프로그래밍에 익숙하지 않지만 거래에 익숙하지 않습니다. 한동안 아무 것도 게시하지 않았고 지금은 EA 개발을 시작한 이후로 많은 질문이 있습니다. 먼저 지표를 만드는 것부터 시작했고, 내가 원하는 대로 되면 더 나아가겠습니다. 찾을 수 있는 모든 설명서를 읽었으므로 이제 코딩을 진행할 차례입니다.

죄송합니다. 잘못된 스레드라면 그런 질문을 어디에 게시해야 하는지 알려주세요.

지금 당장은 2가지, 아마도 기본적인 질문이 있습니다.

1. MA를 사용하는 많은 지표에서 차트에 막대가 몇 개인지 확인하는 선이 표시됩니다. 따라서 MA200이 필요하고 차트에 예를 들어 100개의 막대만 있는 경우 iMA200이 작동합니까? 제 생각에는 그렇습니다. 확인했는데 어떤 차트에서도 문제 없이 MA가 그려졌으므로 이것은 Metaquotes가 지금 수정한 오래된 버그라고 생각합니다. 그렇다면 MA를 그리거나 iMA 기능을 사용하기 위해 차트에 막대가 몇 개 있는지 확인하는 포인트가 있습니까?

2. 닫기와 iClose의 차이점은 무엇입니까? 내가 이해하는 바에 따르면 Close는 현재 차트의 막대 종가만 반환할 수 있고 iClose는 모든 통화 쌍 및 기간의 종가를 반환할 수 있습니다. 그리고 두 경우 모두 마지막으로 닫힌 막대를 얻으려면 인덱스 [1]을 사용해야 합니다. 내가 보고 있는 것이 맞습니까?

고맙습니다.

 

이미 그렇게 했습니다. 아래에서 빨간색으로 강조 표시된 부분을 참조하세요.

//--- 이전 매도 주문 이 수익성이 있는지 판단

문자열 GetWinLossPreviousShort(int LastOpenTicket, 문자열 WinLossPreviousShort)

{

if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

if (OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W";

반환(WinLossPreviousShort);

}

if ((OrderProfit() < 0 && OrderType() == OP_SELL) || LastOpenTicket() == -1)

{

WinLossPreviousShort = "L";

반환(WinLossPreviousShort);

}

}

}

여전히 완전히 비어 있습니다.

머리를 긁적입니다. 코드를 붙여넣지 않았기 때문에 귀하의 도움이 제한적이라는 것을 압니다. 하지만 위의 코드가 당신에게 괜찮아 보이나요?

또한 아래 첫 번째 줄에서 () 뒤에 LastOpenTicket을 참조해야 합니까?

문자열 GetWinLossPreviousShort(int LastOpenTicket, 문자열 WinLossPreviousShort)

 

...

마지막으로 열린 티켓의 티켓 번호를 인수로 사용하여 해당 함수 를 호출하는 경우 파란색 줄 뒤의 코드는 실행되지 않습니다(LastOpenTicket 번호가 -1이면 OrderSelect()는 실패합니다. LastOpenTicket() 함수 결과), 코드는 파란색 선 뒤 블록을 실행하지 않습니다.

crsnape@btinternet.com:
이미 그렇게 했습니다. 아래에서 빨간색으로 강조 표시된 부분을 참조하세요.

//--- 이전 매도 주문이 수익성이 있는지 판단

문자열 GetWinLossPreviousShort(int LastOpenTicket, 문자열 WinLossPreviousShort)

{

if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

if (OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W";

반환(WinLossPreviousShort);

}

if ((OrderProfit() < 0 && OrderType() == OP_SELL) || LastOpenTicket() == -1)

{

WinLossPreviousShort = "L";

반환(WinLossPreviousShort);

}

}

}

여전히 완전히 비어 있습니다.

머리를 긁적입니다. 코드를 붙여넣지 않았기 때문에 귀하의 도움이 제한적이라는 것을 압니다. 하지만 위의 코드가 당신에게 괜찮아 보이나요?

또한 아래 첫 번째 줄에서 () 뒤에 LastOpenTicket을 참조해야 합니까?

문자열 GetWinLossPreviousShort(int LastOpenTicket, 문자열 WinLossPreviousShort)
 

이해하고 있는지 잘 모르겠습니다.

if ((OrderProfit() < 0 && OrderType() == OP_SELL) || LastOpenTicket() == -1)

따라서 위 줄에서 LastOpenTicket() 함수 를 호출하기 때문에 해당 함수의 나머지 부분이 실행되지 않고 OrderSelect()가 실패합니다. 내가 당신을 따르고 있는 것이 맞습니까?

 

...

다음을 가정해 보겠습니다.

- 이전 주문이 없었습니다.

- LastOpenedTicket()은 결과적으로 -1(이전 주문 없음)을 반환했습니다.

- 그 결과로 함수를 호출합니다.

주문 티켓 -1이 존재하지 않고 주문 선택 뒤에 있는 코드가 실행되지 않기 때문에 OrderSelect()가 실패합니다. LastOpenTicket이 > -1인 경우에도 LastOpenTicket() == -1인 "파란색 선 조건"은 코드의 해당 부분에 도달할 수 있는 유일한 방법이 LastOpenTicket이 > -1일 때이므로 결코 참이 될 수 없습니다.

이것이 내가 "세 번째 상태: "Na"를 제안한 이유입니다. 사실 시작하는 "이전 주문 없음" 상태로 인해 3개의 상태가 있기 때문입니다.

crsnape@btinternet.com:
이해하고 있는지 잘 모르겠습니다.

if ((OrderProfit() < 0 && OrderType() == OP_SELL) || LastOpenTicket() == -1)

따라서 위의 줄에서 LastOpenTicket() 함수를 호출하기 때문에 해당 함수의 나머지 부분이 실행되지 않고 OrderSelect()가 실패합니다. 내가 당신을 따르고 있는 것이 맞습니까?
 

몇 가지 코딩 질문, 아마도 초보자의

안녕하세요, 저는 프로그래밍에 익숙하지 않지만 거래에 익숙하지 않습니다. 나는 내 EA를 구축하고 있지만 먼저 지표 구축으로 시작했고, 일단 내가 원하는 대로 되면 더 나아갈 것입니다. 나는 내가 찾을 수 있는 모든 매뉴얼을 읽고 지금 그것을 코딩하고 있다.

조언을 주시면 감사하겠습니다 - 여러분 모두는 지금 제가 있는 곳에서 시작했습니다...

지금 당장은 2가지, 아마도 기본적인 질문이 있습니다.

1. MA를 사용하는 일부 지표에서 차트에 막대가 몇 개인지 확인하는 선이 표시됩니다. 따라서 MA200이 필요하고 차트에 예를 들어 100개의 막대만 있는 경우 iMA200이 작동합니까? 제 생각에는 그렇습니다. 확인했는데 어떤 차트에서도 문제 없이 모든 MA가 그려졌기 때문에 이것은 Metaquotes가 지금 수정한 오래된 문제라고 생각합니다. 그렇다면 MA를 그리거나 iMA 기능을 사용하기 위해 차트에 막대가 몇 개 있는지 확인하는 포인트가 있습니까?

2. 닫기와 iClose의 차이점은 무엇입니까? 내가 이해하는 바에 따르면 Close는 현재 차트의 막대 종가만 반환할 수 있고 iClose는 모든 통화 쌍 및 기간의 종가를 반환할 수 있습니다. 그리고 두 경우 모두 마지막으로 닫힌 막대를 얻으려면 인덱스 [1]을 사용해야 합니다. 그 맞습니까?

고맙습니다.

 

이와 같이?

//--- 이전 매도 주문 이 수익성이 있는지 판단

문자열 GetWinLossPreviousShort(int LastOpenTicket, 문자열 WinLossPreviousShort)

{

if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

if (OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W";

반환(WinLossPreviousShort);

}

if (OrderProfit() < 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "L";

반환(WinLossPreviousShort);

}

if (LastOpenTicket() == -1)

{

WinLossPreviousShort = "해당 사항 없음";

반환(WinLossPreviousShort);

}

}

}

아니면 이거? 빨간색으로 변경됩니다.

//--- 이전 매도 주문이 수익성이 있는지 판단

문자열 GetWinLossPreviousShort(int LastOpenTicket, int LastTicket, 문자열 WinLossPreviousShort)

{

if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

if (OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W";

반환(WinLossPreviousShort);

}

if (OrderProfit() < 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "L";

반환(WinLossPreviousShort);

}

if (마지막 티켓 == -1)

{

WinLossPreviousShort = "해당 사항 없음";

반환(WinLossPreviousShort);

}

}

}

 

아, 마침내 클릭했습니다. -1이 존재하지 않기 때문에 -1인 티켓 번호에 OrderSelect를 사용할 수 없습니다. 티켓은 0부터 올라갑니다.

OrderSend 함수 외부에서 LastOpenTicket을 선언해야 합니까?

 

...

다음과 같이 시도하십시오.

string GetWinLossPreviousShort (int LastOpenTicket, int LastTicket, string WinLossPreviousShort)

{

if (LastTicket == -1)

{

WinLossPreviousShort = "NA";

return (WinLossPreviousShort);

}

//

//

// if LastTicket == -1 no need even to try to execute the code bellow

// you already have exited for case when it is -1, so the code bellow

// will be executed properly

//

//

if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

if (OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W";

return (WinLossPreviousShort);

}

if (OrderProfit() < 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "L";

return (WinLossPreviousShort);

}

}
 

감사합니다 mladen, 아래 코드는 기본적으로 귀하의 코드와 동일합니까? 나는 당신이 당신의 마지막을 게시할 때 이것을 입력했습니다! :-)

편집됨-

//--- 이전 매도 주문 이 수익성이 있는지 판단

문자열 GetWinLossPreviousShort(int LastOpenTicket, int LastTicket, 문자열 WinLossPreviousShort)

{

if (OrderSelect(LastOpenTicket(), SELECT_BY_TICKET, MODE_TRADES) == TRUE)

{

if (OrderProfit() >= 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "W";

반환(WinLossPreviousShort);

}

if (OrderProfit() < 0 && OrderType() == OP_SELL)

{

WinLossPreviousShort = "L";

반환(WinLossPreviousShort);

}

}

if (마지막 티켓 == -1)

{

WinLossPreviousShort = "해당 사항 없음";

반환(WinLossPreviousShort);

}

}