모든 쌍을 현재 상품으로 정규화할 건가요?
dsma2 = NormalizeDouble(SMA[2] - SMA[3], _Digits); // 사이트 2-3의 MA dsma1 = NormalizeDouble(SMA[1] - SMA[2], _Digits); // 사이트 1-2의 MA
현재 상품으로 모든 쌍을 정규화할 것인가요?
그리고 경고가 없도록 올바르게 구현하는 방법은 무엇인가요?
원래 버전에서는 다음과 같습니다:
int Digits_ = SymbolInfoInteger(Symbol_, SYMBOL_DIGITS) + 4;
dsma2 = NormalizeDouble(SMA[2] - SMA[3], Digits_); // 사이트 2-3의 MA
dsma1 = NormalizeDouble(SMA[1] - SMA[2], Digits_); // 사이트 1-2의 MA
경고 없이 구현하는 올바른 방법은 무엇인가요?
원래 버전에서는 다음과 같습니다:
4가 +4와 무슨 관련이 있나요? 논리적으로 이렇게 해야 합니다.
int Digits_ = SymbolInfoInteger(Symbol_, SYMBOL_DIGITS); dsma2 = NormalizeDouble(SMA[2] - SMA[3], Digits_); // 사이트 2-3의 MA dsma1 = NormalizeDouble(SMA[1] - SMA[2], Digits_); // 사이트 1-2의 MA
경고를 피하려면 다음과 같이 변환해야 합니다.
int Digits_ = (int)SymbolInfoInteger(Symbol_, SYMBOL_DIGITS);
하지만 동일한 설정으로 코레벨링된 쌍을 거래할 때 멀티상품의 의미가 사라지지 않나요? 거의 같은 시기에 하락이 발생할 것으로 예상되며 이는 문제가 될 수 있습니다. 하지만 안타깝게도 모든 통화쌍이 코렐레이션되어 있기 때문에 피할 수 없는 문제일 수 있습니다. 저는 실제로 EUR/USD GBP/USD 쌍을 함께 거래하지만 하나는 추세 추종자, 다른 하나는 반전, 고점 및 저점 유형의 EA를 사용합니다.
경고를 받지 않으려면 다음과 같이 변환해야 합니다.
request.volume = Money_M();
이 EA는 체계적인 코드의 좋은 예이며 훌륭한 코멘트가 있습니다. 하지만 Money_M()이라는 로트 크기 함수와 관련하여 한 가지 질문이 있습니다. 이 뒤에 있는 의사 결정 트리는 무엇이며 어디에 있나요?
지원 사이트에서 검색을 시도했지만 참조를 찾을 수 없었고 관련 클래스에 연결되어 있지 않은 것 같았습니다.
double Money_M() { double Lots=AccountInfoDouble(ACCOUNT_FREEMARGIN)/100000*10; Lots=MathMin(5,MathMax(0.1,Lots)); if(Lots<0.1) Lots=NormalizeDouble(Lots,2); else { if(Lots<1) Lots=NormalizeDouble(Lots,1); else Lots=NormalizeDouble(Lots,0); } return(Lots); }
이 함수는 거래 랏의 크기를 계산하는 데 사용됩니다.
double Lots=AccountInfoDouble(ACCOUNT_FREEMARGIN)/100000*10;
이 문자열은 거래 랏의 계산된 크기입니다. 계산은 여유 자금(ACCOUNT_FREEMARGIN)에서 수행됩니다. 위험 = 사용 가능한 여유 자금의 10%.
Lots=MathMin(5,MathMax(0.1,Lots));이 줄에서는 거래 랏의 정규화가 실행됩니다. 0.1 <= 랏 <= 5.0
Multik:
다중 통화 어드바이저.
Author: Andrey Kornishkin