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

 
gmailer:
^ 감사합니다 - 그럴 수도 있습니다. 하의와 상의에 있는 "녹색 및 분홍색 점"을 제거하는 방법을 알고 있습니까?

죄송합니다. 실제로 그러한 점이 있는 다른 Stoch를 찾고 있었습니다. 내 첫 번째 게시물에 대한 답변으로 제안된 것은 OK였습니다. 감사해요!

 

단 하나의 조언:

정상적으로 작동하는 "브릭"( 함수 , 스니펫, 코드 일부)이 있으면 변경하지 마십시오. 기능은 입력을 변경할 수 있고 입력에 따라 작동하기 때문에 좋습니다. 그리고 모든 종류의 상황에서 기능을 테스트한 후에는 제대로 작동하는지 생각할 필요가 없습니다. 그렇게 하면 오류를 검색할 때 확인해야 하는 코드를 좁힐 수 있습니다(개발 시간을 크게 단축할 수 있음).

crsnape@btinternet.com:
안녕하세요 mladen 전적으로 동의합니다. 제공한 GetLots 기능이 제대로 작동합니다. 내 코드의 일부로 테스트했으며 작동했습니다.

나는 승패에 따라 위험 요소를 변경하고 싶기 때문에 단순히 변경했습니다. 나는 기본적으로 추가 자금 관리 규칙을 통합하는 기존 코드(또는 어쨌든 시도)에 대해 자세히 설명했습니다.

내 코드는 비밀이 아니라고 솔직히 말할 수 있습니다. 나는 많은 다른 사람들이 내가 하려고 하는 것을 고려하고 코드로 구현했다고 확신합니다. 하지만 개인적으로 너무 많은 시간을 들여 개발했기 때문에 프라이버시의 요소가 있다고 생각합니다.

나는 내 코드를 계속 검토할 것이고, 처음부터 배우고 일을 하는 것에 자부심을 느끼기 때문에 어떤 문제라도 스스로 시도하고 해결하고 싶습니다.

그러나 나는 당신의 마지막 단락을 이해합니다. 하나의 '위험' 변수를 사용하고 함수의 출력에 따라 이 위험을 변경할 것입니다.

어쨌든 다시 한 번 응답해 주셔서 감사합니다. 이 포럼은 솔직히 당신 없이는 똑같지 않을 것입니다. 당신은 나를 수없이 도와주었습니다.

건배 :-)
 

내가 확실하지 않은 것은 기능 대괄호와 그 안에 들어가는 내용입니다.

함수 내에서 함수를 작성하는 경우 이 함수 이름을 대괄호 안에 넣어야 합니까?

예를 들어 LastOpenTicket() 함수가 있고 GetLots라는 함수 내에서 호출되는 경우 GetLots(LastOpenTicket())처럼 대괄호 안에 LastOpenTicket()을 넣어야 합니까?

또한 ()도 거기에 넣어야합니까? LastOpenTicket(int number, int digit, int anotherone)이 이 모든 경우 GetLots Bracket 함수에도 포함되는 경우(예: GetLots(int number, int digit, int anotherone.. 및 기타 변수) 기능 등?)

 

...

1. {} 대괄호 쌍이 "시작"과 "끝"이라고 상상해 보세요.

2. mql에 중첩 함수를 작성할 수 없습니다(파스칼은 허용하지만 mql은 그렇지 않습니다. 중첩 함수는 다른 함수의 본문 내에서 함수를 선언합니다. 참조: 중첩 함수 - Wikipedia, 무료 백과사전 ). 코드의 어느 부분에서나 함수를 호출할 수 있습니다.

3. 해당 형식의 호출(예제 GetLots(LastOpenTicket())과 같은 직접 호출)을 사용하거나 LastOpenTicket()의 반환을 일부 변수에 할당한 다음 GetLots에 대한 호출에서 인수로 사용할 수 있습니다. ()

crsnape@btinternet.com:
내가 확실하지 않은 것은 기능 대괄호와 그 안에 들어가는 내용입니다.

함수 내에서 함수를 작성하는 경우 이 함수 이름을 대괄호 안에 넣어야 합니까?

예를 들어 LastOpenTicket() 함수가 있고 GetLots라는 함수 내에서 호출되는 경우 GetLots(LastOpenTicket())처럼 대괄호 안에 LastOpenTicket()을 넣어야 합니까?

또한 ()도 거기에 넣어야합니까? LastOpenTicket(int number, int digit, int anotherone)이 이 모든 경우 GetLots Bracket 함수에도 포함되는 경우(예: GetLots(int number, int digit, int anotherone.. 및 기타 변수) 기능 등?)
 

이 둘의 차이점은 무엇입니까? 있어요?

이중 GetLots(int number, int call, int specialcall, int order)

{

그리고..

더블 GetLots()

{

정수;

정수 호출;

정수 특수 호출;

정수 순서;

?

 

...

첫 번째는 인수를 수락하는 함수입니다.

두 번째는 인수가 없는 함수이므로 함수 본문 외부에서 "number", "call", "specialcall" 및 "order" 값을 변경할 수 없습니다.

함수 선언에 대한 몇 가지 더 유용한 정보는 이 스레드에서 찾을 수 있습니다. https://www.mql5.com/en/forum/173005

crsnape@btinternet.com:
이 둘의 차이점은 무엇입니까? 있어요?

이중 GetLots(int number, int call, int specialcall, int order)

{

그리고..

더블 GetLots()

{

정수;

정수 호출;

정수 특수 호출;

정수 순서;

?
 

나는 지난 며칠 동안 내 기능 을 가지고 놀았고 여전히 빈 결과를 얻고 있습니다. 말 그대로 머리카락을 뽑고 있습니다.

나는 당신이 제안한 대로 RiskSize를 계산하도록 함수를 변경했고(지금은 더 나은 시스템에 동의합니다) GetLots 함수에서 이를 사용했습니다. 이거 야:

//--- 롱 포지션 랏 계산 함수

이중 GetLotsLong(이중 SLDistanceLong)

{

새로 고침 비율();

이중 MinLots, MaxLots, LotStep;

이중 LotLong = 0;

int LotDigit = 2;

int 위험 = GetRiskLong(RiskLong);

MinLots = NormalizeDouble(MarketInfo(Symbol(), MODE_MINLOT), 2); // LotStep을 수용하려면 로트를 정규화해야 합니다.

MaxLots = NormalizeDouble(MarketInfo(Symbol(), MODE_MAXLOT), 2); // 정규화는 반올림하지 않지만 LotStep보다 큰 로트 부분을 자릅니다.

LotStep = NormalizeDouble(MarketInfo(Symbol(), MODE_LOTSTEP), 2); // 그렇게 하면 위험이 약간 줄어듭니다.

if (MarketInfo(Symbol(), MODE_DIGITS) == 3 || MarketInfo(Symbol(), MODE_DIGITS) == 5) SLDistanceLong *= 10.0;

if (LotStep == 1.00) LotDigit = 0;

if (LotStep == 0.10) LotDigit = 1;

if (LotStep == 0.01) LotDigit = 2;

if (AccountBalance() > AccountFreeMargin())

LotLong = NormalizeDouble(AccountFreeMargin() * (위험 / 100) / (SLDistanceLong * MarketInfo(Symbol(), MODE_TICKVALUE)), LotDigit);

else LotLong = NormalizeDouble(AccountBalance() * (위험 / 100) / (SLDistanceLong * MarketInfo(Symbol(), MODE_TICKVALUE)), LotDigit);

LotLong = NormalizeDouble(NormalizeDouble(LotsLong / LotStep, 0) * LotStep, LotDigit);

LotLong = MathMax(MathMin(LotsLong, MaxLots), MinLots);

반환(LotsLong);

}

또한 RiskLong에 대해 불평하고 있습니다. 변수가 정의되지 않았습니다. 그러나 이것은 호출하는 GetRiskLong 함수에서 정의됩니다.

제가 게시한 코드만으로는 도움이 되지 않는다면 보내드릴까요?

 

...

우선 장단기 겟 로트를 따로 만들 필요가 없습니다. 두 종류의 주문에 대해 하나의 기능(이미 제공됨)을 사용합니다(숏 및 롱 모두에 대한 로트 크기 계산은 정확히 동일해야 함) 다른 계산을 원할 경우 위험 또는 손절매 거리를 변경하십시오

발생하는 오류는 함수 내에서 선언된 변수가 함수 내에서만 "표시"되기 때문입니다. 당신이 말하고 있는 이름이라는 변수가 있는 함수를 호출하는 것은 중요하지 않습니다. 호출된 함수에만 국한되며 코드의 다른 부분은 이에 대해 "알지" 못하고 액세스할 수 없습니다.

crsnape@btinternet.com:
나는 지난 며칠 동안 내 기능을 가지고 놀았고 여전히 빈 결과를 얻고 있습니다. 말 그대로 머리카락을 뽑고 있습니다.

나는 당신이 제안한 대로 RiskSize를 계산하도록 함수를 변경했고(지금은 더 나은 시스템에 동의합니다) GetLots 함수에서 이를 사용했습니다. 이거 야:

//--- 롱 포지션 랏 계산 함수

이중 GetLotsLong(이중 SLDistanceLong)

{

새로 고침 비율();

이중 MinLots, MaxLots, LotStep;

이중 LotLong = 0;

int LotDigit = 2;

int 위험 = GetRiskLong(RiskLong);

MinLots = NormalizeDouble(MarketInfo(Symbol(), MODE_MINLOT), 2); // LotStep을 수용하려면 로트를 정규화해야 합니다.

MaxLots = NormalizeDouble(MarketInfo(Symbol(), MODE_MAXLOT), 2); // 정규화는 반올림하지 않지만 LotStep보다 큰 로트 부분을 자릅니다.

LotStep = NormalizeDouble(MarketInfo(Symbol(), MODE_LOTSTEP), 2); // 그렇게 하면 위험이 약간 줄어듭니다.

if (MarketInfo(Symbol(), MODE_DIGITS) == 3 || MarketInfo(Symbol(), MODE_DIGITS) == 5) SLDistanceLong *= 10.0;

if (LotStep == 1.00) LotDigit = 0;

if (LotStep == 0.10) LotDigit = 1;

if (LotStep == 0.01) LotDigit = 2;

if (AccountBalance() > AccountFreeMargin())

LotLong = NormalizeDouble(AccountFreeMargin() * (위험 / 100) / (SLDistanceLong * MarketInfo(Symbol(), MODE_TICKVALUE)), LotDigit);

else LotLong = NormalizeDouble(AccountBalance() * (위험 / 100) / (SLDistanceLong * MarketInfo(Symbol(), MODE_TICKVALUE)), LotDigit);

LotLong = NormalizeDouble(NormalizeDouble(LotsLong / LotStep, 0) * LotStep, LotDigit);

LotLong = MathMax(MathMin(LotsLong, MaxLots), MinLots);

반환(LotsLong);

}

또한 RiskLong을 불평합니다. 변수가 정의되지 않았습니다. 그러나 이것은 호출하는 GetRiskLong 함수에서 정의됩니다.

제가 게시한 코드만으로는 도움이 되지 않는다면 보내드릴까요?
 
mladen:
첫 번째는 인수를 수락하는 함수입니다.

두 번째는 인수가 없는 함수이므로 함수 본문 외부에서 "number", "call", "specialcall" 및 "order" 값을 변경할 수 없습니다.

함수 선언에 대한 몇 가지 더 유용한 정보는 이 스레드에서 찾을 수 있습니다. https://www.mql5.com/en/forum/173005

감사합니다. 따라서 GetLots라는 함수 내에서 GetRisk라는 함수를 호출하는 경우 값이 GetLots 함수 외부에서 계산되기 때문에 GetRisk 함수의 변수를 GetLots의 대괄호(...) 안에 넣어야 합니다.

 

...

이 방법을 시도해 보겠습니다.

2개의 질문(계정의 현재 $ 상태를 알고 있다고 가정):

질문 1 : 나는 (모른다) 핍스탑 손실을 감수할 의향이 있습니다. 내 로트 크기는 어떻게 되어야 합니까?

질문 2 : 100핍 손절매로 1%의 위험을 감수할 용의가 있습니다. 내 로트 크기는 어떻게 되어야 합니까?

당신은 내가 위험을 감수할 의향이 있는 위험 비율이나 내가 사용할 손절매를 모르기 때문에 첫 번째 질문에 대한 대답이 불가능하다는 것이 분명합니다. 그러나 두 번째 예에서는 로트 크기를 모두 알고 있기 때문에 로트 크기를 계산할 수 있습니다. 이제 그것들은 인수입니다. rsik%와 손절매가 다를 수 있다고 예측하기 때문에 함수가 호출될 때마다 함수에 "말할" 변수 인수로 로트 크기 계산에 제공합니다.

이것이 함수의 인수(매개변수)가 무엇인지 명확히 하기를 바랍니다. 각각의 모든 함수는 동일한 원칙에 따라 작동합니다. 계산의 일부가 변경될 수 있다고 예측하는 경우 함수에 대한 인수로 넣습니다.

다음은 코딩 기능의 몇 가지 예입니다. https://en.wikipedia.org/wiki/Function_%28computer_science%29

crsnape@btinternet.com:
감사합니다. 따라서 GetLots라는 함수 내에서 GetRisk라는 함수를 호출하는 경우 값이 GetLots 함수 외부에서 계산되기 때문에 GetRisk 함수의 변수를 GetLots의 대괄호(...) 안에 넣어야 합니다.