MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 106 1...99100101102103104105106107108109110111112113...1953 새 코멘트 Alexey Viktorov 2017.02.05 10:26 #1051 -Aleks- : 반올림 문제 해결 방법을 알려주세요! 나머지 없이 쉼표 수를 제거해야 합니다. 반올림하고 거듭제곱해도 전체 문제가 해결되지 않습니다. 어떻게 해야 합니까? 예를 들어 1.44430이고 144430이 필요합니다. 코드의 일부 - 있는 그대로 NormalizeDouble(Low[1],Digits)*MathPow(10,(Digits+1)*1-1) _Point로 나누면 됩니다. Aleksey Vyazmikin 2017.02.05 11:28 #1052 Alexey Viktorov : _Point로 나누면 됩니다. 잘못된 결과 인쇄, 원본은 161188(1.61188)입니다. 귀하의 161187 인쇄 방법은 1.6119를 제공합니다(소수점 다섯 자리가 있는 경우 낮음[1]을 인쇄할 때 반올림하는 이유는 무엇입니까?), 내 버전은 161188입니다. 하지만 작업을 복잡하게 만들면 long Calc= NormalizeDouble ( Close [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 3 - 1 )+ NormalizeDouble ( High [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 2 - 1 )+ NormalizeDouble ( Low [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 1 - 1 ); 그런 다음 숫자 161184의 마지막 부분 - 즉. 4단위 차이 이 표현식의 옵션은 유사한 값을 생성합니다. long CalcX= NormalizeDouble ( Close [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 3 - 1 )+ NormalizeDouble ( High [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 2 - 1 )+ Low [ 1 ]/ Point ; 무엇이 잘못되었고 어떻게 고칠지에 대한 생각이 있습니까? Any questions from newcomers OrderSend error 3 Coding help Alexey Viktorov 2017.02.05 15:08 #1053 -Aleks- : 잘못된 결과 인쇄, 원본은 161188(1.61188)입니다. 귀하의 161187 인쇄 방법은 1.6119를 제공합니다(소수점 다섯 자리가 있는 경우 낮음[1]을 인쇄할 때 반올림하는 이유는 무엇입니까?), 내 버전은 161188입니다. 하지만 작업을 복잡하게 만들면 long Calc= NormalizeDouble ( Close [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 3 - 1 )+ NormalizeDouble ( High [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 2 - 1 )+ NormalizeDouble ( Low [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 1 - 1 ); 그런 다음 숫자 161184의 마지막 부분 - 즉. 4단위 차이 이 표현식의 옵션은 유사한 값을 생성합니다. long CalcX= NormalizeDouble ( Close [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 3 - 1 )+ NormalizeDouble ( High [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 2 - 1 )+ Low [ 1 ]/ Point ; 무엇이 잘못되었고 어떻게 고칠지에 대한 생각이 있습니까? 이렇게 시작합니다. /********************Script program start function*******************/ void OnStart (){ string i = DoubleToString ( SymbolInfoDouble ( _Symbol , SYMBOL_BID )/ _Point , 0 ); Print (i); Print ( SymbolInfoDouble ( _Symbol , SYMBOL_BID )/ _Point );} /*******************************************************************/ Aleksey Vyazmikin 2017.02.05 15:39 #1054 Alexey Viktorov : 이렇게 실행합니다. /********************Script program start function*******************/ void OnStart (){ string i = DoubleToString ( SymbolInfoDouble ( _Symbol , SYMBOL_BID )/ _Point , 0 ); Print (i); Print ( SymbolInfoDouble ( _Symbol , SYMBOL_BID )/ _Point );} /*******************************************************************/ 예, 문자열 변수(이전)를 통해 올바른 숫자를 얻었지만 0이 추가되었습니다. 161188.00000000 제거하는 방법은 무엇입니까? Alexey Viktorov 2017.02.05 16:01 #1055 -Aleks- : 예, 문자열 변수(이전)를 통해 올바른 숫자를 얻었지만 0이 추가되었습니다. 161188.00000000 제거하는 방법은 무엇입니까? 내 코드에는 0이 없습니다. 어떻게 쓰여졌는지 보십시오. Aleksey Vyazmikin 2017.02.05 16:18 #1056 Alexey Viktorov : 내 코드에는 0이 없습니다. 어떻게 쓰여졌는지 보십시오. 감사합니다. 저는 0을 놓쳤습니다. 결과는 그런 디자인이었습니다 string CalcX= DoubleToString ( Close [ 1 ]/ _Point , 0 )+ DoubleToString ( High [ 1 ]/ _Point , 0 )+ DoubleToString ( Low [ 1 ]/ _Point , 0 ); Print ( "CalcX=" ,CalcX); 이제 이 숫자를 다시 구성 요소로 분해해야 합니다. 문자열을 숫자 로 변환하려고 할 때 161188 대신 잘못된 숫자 161184를 다시 잡습니다. long testX = StringToDouble (CalcX); Print ( "testX=" ,testX); 분명히 선을자를 필요가 있지만 최적으로 올바르게 수행하는 방법은 무엇입니까? [삭제] 2017.02.05 16:28 #1057 -Aleks- : 예, 문자열 변수(이전)를 통해 올바른 숫자를 얻었지만 0이 추가되었습니다. 161188.00000000 제거하는 방법은 무엇입니까? 구분 기호 "."를 사용하여 문자열을 구문 분석합니다. Andrey Koldorkin 2017.02.05 18:52 #1058 Artyom Trishkin : 그래서... 템플릿을 보여주세요. 그러면 거기에 무엇이 있는지 어떻게 압니까? //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit () { //--- indicator buffers mapping //--- return ( INIT_SUCCEEDED ); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate ( const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- //--- return value of prev_calculated for next call return (rates_total); } //+------------------------------------------------------------------+ Any questions from newcomers SuperTrend Questions from Beginners MQL5 Lovkacher 2017.02.05 19:09 #1059 추세선 의 두 번째 시간 좌표가 브레이크 아웃 또는 터치에 따라 설정되도록 표시기를 구현하는 방법을 아는 사람을 알려주십시오. 즉, 추세선이 있고 그 시작이 특정 위치에 있고 두 번째 좌표의 시간은 임의대로 설정되지만 선이 캔들과 교차하는 지점에서 끝이 나야 합니다. 그림에 표시된 표시기에서 허용하는 대로 Alexey Viktorov 2017.02.05 19:29 #1060 -Aleks- : 감사합니다. 저는 0을 놓쳤습니다. 결과는 그런 디자인이었습니다 string CalcX= DoubleToString ( Close [ 1 ]/ _Point , 0 )+ DoubleToString ( High [ 1 ]/ _Point , 0 )+ DoubleToString ( Low [ 1 ]/ _Point , 0 ); Print ( "CalcX=" ,CalcX); 이제 이 숫자를 다시 구성 요소로 분해해야 합니다. 문자열을 숫자 로 변환하려고 할 때 161188 대신 잘못된 숫자 161184를 다시 잡습니다. long testX = StringToDouble (CalcX); Print ( "testX=" ,testX); 분명히 선을자를 필요가 있지만 최적으로 올바르게 수행하는 방법은 무엇입니까? 아무 것도 구문 분석할 필요가 없습니다. 일반 숫자를 보기 위해 문자열로 변환합니다. 계산을 위해 아무것도 할 필요가 없습니다. 음, 저항할 수 없는 변태 욕구가 있는 경우 문자열을 다시 숫자 StringToDouble()로 변환하고 _Point에 필요한 문자 수(아마도 _Digits)로 정규화하여 곱합니다. 1...99100101102103104105106107108109110111112113...1953 새 코멘트 트레이딩 기회를 놓치고 있어요: 무료 트레이딩 앱 복사용 8,000 이상의 시그널 금융 시장 개척을 위한 경제 뉴스 등록 로그인 공백없는 라틴 문자 비밀번호가 이 이메일로 전송될 것입니다 오류 발생됨 Google으로 로그인 웹사이트 정책 및 이용약관에 동의합니다. 계정이 없으시면, 가입하십시오 MQL5.com 웹사이트에 로그인을 하기 위해 쿠키를 허용하십시오. 브라우저에서 필요한 설정을 활성화하시지 않으면, 로그인할 수 없습니다. 사용자명/비밀번호를 잊으셨습니까? Google으로 로그인
반올림 문제 해결 방법을 알려주세요!
나머지 없이 쉼표 수를 제거해야 합니다. 반올림하고 거듭제곱해도 전체 문제가 해결되지 않습니다. 어떻게 해야 합니까?
예를 들어 1.44430이고 144430이 필요합니다.
코드의 일부 - 있는 그대로
NormalizeDouble(Low[1],Digits)*MathPow(10,(Digits+1)*1-1)
_Point로 나누면 됩니다.
잘못된 결과 인쇄, 원본은 161188(1.61188)입니다. 귀하의 161187 인쇄 방법은 1.6119를 제공합니다(소수점 다섯 자리가 있는 경우 낮음[1]을 인쇄할 때 반올림하는 이유는 무엇입니까?), 내 버전은 161188입니다.
하지만 작업을 복잡하게 만들면
long Calc=
NormalizeDouble ( Close [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 3 - 1 )+
NormalizeDouble ( High [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 2 - 1 )+
NormalizeDouble ( Low [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 1 - 1 );
그런 다음 숫자 161184의 마지막 부분 - 즉. 4단위 차이
이 표현식의 옵션은 유사한 값을 생성합니다.
NormalizeDouble ( Close [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 3 - 1 )+
NormalizeDouble ( High [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 2 - 1 )+
Low [ 1 ]/ Point ;
무엇이 잘못되었고 어떻게 고칠지에 대한 생각이 있습니까?
잘못된 결과 인쇄, 원본은 161188(1.61188)입니다. 귀하의 161187 인쇄 방법은 1.6119를 제공합니다(소수점 다섯 자리가 있는 경우 낮음[1]을 인쇄할 때 반올림하는 이유는 무엇입니까?), 내 버전은 161188입니다.
하지만 작업을 복잡하게 만들면
long Calc=
NormalizeDouble ( Close [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 3 - 1 )+
NormalizeDouble ( High [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 2 - 1 )+
NormalizeDouble ( Low [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 1 - 1 );
그런 다음 숫자 161184의 마지막 부분 - 즉. 4단위 차이
이 표현식의 옵션은 유사한 값을 생성합니다.
NormalizeDouble ( Close [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 3 - 1 )+
NormalizeDouble ( High [ 1 ], Digits )* MathPow ( 10 ,( Digits + 1 )* 2 - 1 )+
Low [ 1 ]/ Point ;
무엇이 잘못되었고 어떻게 고칠지에 대한 생각이 있습니까?
void OnStart ()
{
string i = DoubleToString ( SymbolInfoDouble ( _Symbol , SYMBOL_BID )/ _Point , 0 );
Print (i);
Print ( SymbolInfoDouble ( _Symbol , SYMBOL_BID )/ _Point );
} /*******************************************************************/
이렇게 실행합니다.
void OnStart ()
{
string i = DoubleToString ( SymbolInfoDouble ( _Symbol , SYMBOL_BID )/ _Point , 0 );
Print (i);
Print ( SymbolInfoDouble ( _Symbol , SYMBOL_BID )/ _Point );
} /*******************************************************************/
예, 문자열 변수(이전)를 통해 올바른 숫자를 얻었지만 0이 추가되었습니다. 161188.00000000 제거하는 방법은 무엇입니까?
예, 문자열 변수(이전)를 통해 올바른 숫자를 얻었지만 0이 추가되었습니다. 161188.00000000 제거하는 방법은 무엇입니까?
내 코드에는 0이 없습니다. 어떻게 쓰여졌는지 보십시오.
감사합니다. 저는 0을 놓쳤습니다.
결과는 그런 디자인이었습니다
DoubleToString ( Close [ 1 ]/ _Point , 0 )+
DoubleToString ( High [ 1 ]/ _Point , 0 )+
DoubleToString ( Low [ 1 ]/ _Point , 0 );
Print ( "CalcX=" ,CalcX);
이제 이 숫자를 다시 구성 요소로 분해해야 합니다.
문자열을 숫자 로 변환하려고 할 때 161188 대신 잘못된 숫자 161184를 다시 잡습니다.
Print ( "testX=" ,testX);
분명히 선을자를 필요가 있지만 최적으로 올바르게 수행하는 방법은 무엇입니까?
예, 문자열 변수(이전)를 통해 올바른 숫자를 얻었지만 0이 추가되었습니다. 161188.00000000 제거하는 방법은 무엇입니까?
그래서... 템플릿을 보여주세요. 그러면 거기에 무엇이 있는지 어떻게 압니까?
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit ()
{
//--- indicator buffers mapping
//---
return ( INIT_SUCCEEDED );
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
//---
//--- return value of prev_calculated for next call
return (rates_total);
}
//+------------------------------------------------------------------+
감사합니다. 저는 0을 놓쳤습니다.
결과는 그런 디자인이었습니다
DoubleToString ( Close [ 1 ]/ _Point , 0 )+
DoubleToString ( High [ 1 ]/ _Point , 0 )+
DoubleToString ( Low [ 1 ]/ _Point , 0 );
Print ( "CalcX=" ,CalcX);
이제 이 숫자를 다시 구성 요소로 분해해야 합니다.
문자열을 숫자 로 변환하려고 할 때 161188 대신 잘못된 숫자 161184를 다시 잡습니다.
Print ( "testX=" ,testX);
분명히 선을자를 필요가 있지만 최적으로 올바르게 수행하는 방법은 무엇입니까?
음, 저항할 수 없는 변태 욕구가 있는 경우 문자열을 다시 숫자 StringToDouble()로 변환하고 _Point에 필요한 문자 수(아마도 _Digits)로 정규화하여 곱합니다.