Double 대 FLOAT - 이해할 수 없는 MathFloor 오류 - 페이지 6

 
fxsaber :
네.
감사해요
 
Vladislav Andruschenko :
감사해요
첫 번째 페이지에서 솔루션은 이미 여섯 번째입니다.
 
fxsaber :
그렇다면 정규화 및 MathFloor 없이 작동하는 이유는 무엇입니까?
입력이 0.95라면?
 
Dmitry Fedoseev :
입력이 0.95라면?
이해하지 못했습니다.
 
Vladislav Andruschenko :
나는 당신이 얻는 것이 무엇인지 잘 이해하지 못할 수도 있지만, 이 옵션을 보세요
void OnStart ()
{
double ask2 = 1.55557 , ask3 = 1.55558 , bid = 1.55555 ;
   Print ( "(ask2 + bid)/2 = " , (ask2 + bid)/ 2 );
   Print ( "(ask3 + bid)/2 = " , (ask3 + bid)/ 2 );
     int avPrice_2 = ( int ) NormalizeDouble ((ask2/ _Point + bid/ _Point )/ 2 , 0 );
   int avPrice_3 = ( int ) NormalizeDouble ((ask3/ _Point + bid/ _Point )/ 2 , 0 );
   Print ( "avPrice_2 = " , avPrice_2);
Print ( "avPrice_3 = " , avPrice_3);
} /*******************************************************************/
결과
2017.02 . 27 00 : 03 : 54.453 00 (EURUSD.m,H1)        (ask2 + bid)/ 2 = 1.55556
2017.02 . 27 00 : 03 : 54.456 00 (EURUSD.m,H1)        (ask3 + bid)/ 2 = 1.555565
2017.02 . 27 00 : 03 : 54.456 00 (EURUSD.m,H1)        avPrice_2 = 155556
2017.02 . 27 00 : 03 : 54.456 00 (EURUSD.m,H1)        avPrice_3 = 155557
 

"우리는 Ask와 Bid를 취하고 평균 가격을 계산합니다. 스프레드가 홀수이면(3,5,7,9 등) 우리는 평균 가격을 Bid에 더 가깝게 동일시합니다."

작업이 설정되지 않았습니다.

- 이상한 퍼짐을 의미합니다. Point의 경우 1.3,..,9배 또는 Point 의 경우 1.3,..,17.57배? 반올림은 단일 세그먼트 내에서 작동합니다...

- "입찰가에 더 가깝다"는 것은 무엇을 의미합니까? 특히 스프레드가 Point보다 43배 큰 경우입니다. 입찰가를 무엇과 동일시합니까?

첫째, 문제에 대한 명확성이 필요하며 그래야만 명확한 결정을 내릴 수 있습니다.

동시에 우리는 짝수/홀수에 대해 이야기하고 있기 때문에 이 개념이 의미가 있는 정수로 넘어가는 것이 논리적일 것입니다.

double Ask , Bid ,Middle; // Уже известные курсы Ask и Bid, вычисляемый средний курс
int Mash,Spr; // Множитель перехода к целым числам. Для 4-разрядного EURUSD 10000. И целочисленный спред

Mash= MathRound ( 1.0 / _Point );
Spr= MathRound (( Ask - Bid )*Mash); // Целочисленный спред
// Придаем конкретность среднему курсу.  Предполагаем, что "ближе к Бид" значит "ближайший меньший среднего арифметического Ask и Bid, кратный Point"
Spr=Spr >> 1 ; // Целочисленный спред, деленный на 2 с отбрасыванием остатка
Middle= Bid +Spr*_ Point ;


// Если предположение неверно, канва последующих разборов такая
if ((Spr &   1 )  != 0 )) {   // Спред нечетный
  }
else {   // Спред четный
  }

 
매우 간단한 작업에서 비슷한 일이 저에게 일어났습니다. 스크립트는 시계열에서 EURUSD 당일 시가를 이중 배열로 읽은 다음 이 배열을 . 가격이 하나 이상인 한 모든 것이 좋았습니다. 그러나 0 년에 가격이 1 아래로 떨어졌을 때 때로는 자주는 아니지만 일년에 약 20 번 이상한 점이 나타나기 시작했습니다. 헛소리 같지만 아름답지는 않습니다. 나는 모든 곳에서 정규화를 수행했고 파일을 읽고 쓰기 전과 쓰기 전에 정규화를 사용하여 한 배열에서 다른 배열로 증류했습니다. 아무 것도 도움이 되지 않았습니다. 시계열에서 읽을 때 1을 추가하면 모든 것이 정상입니다. 일반적으로 나는 결국 그것에 질려 더블을 부동으로 변경하고 진정했습니다.
 
Vladimir :

"우리는 Ask와 Bid를 취하고 평균 가격을 계산합니다. 스프레드가 홀수이면(3,5,7,9 등) 우리는 평균 가격을 Bid에 더 가깝게 동일시합니다."

작업이 설정되지 않았습니다.

사실 작업은 간단해 보이죠? 그리고 학생이 할 수 있습니까? :-) 나도 그렇게 생각했다.

그러나 서버에서 받은 가격, 데이터 정규화 및 나머지 부분에는 의미하지 않는 어두운 구석이 있습니다.

저는 9년 동안 mql로 프로그래밍해 왔으며 올바르게 인식했기 때문에 정규화에 문제가 없었습니다. 1밀리포인트까지의 정확도는 항상 올바르게 작동했습니다.

하지만 과제가 있습니다. 높은 정밀도를 요구합니다.

그리고 조건이 있습니다.

즉:

  1. 우리는 ASK 및 BID 가격을 취합니다 - 평균 가격을 계산합니다 = 모든 것이 간단합니까? 확인.
  2. 따라서 스프레드가 홀수이면(예: 3포인트) 나머지 없이 나눌 수 없습니다. 맞습니까?

따라서 균형이 있는 경우(그리고 균등한 스프레드가 있는 경우! :-)) 가격을 최저점에 더 가깝게 평균화하도록 가격을 정상화해야 합니다. 입찰에.

예를 들어:

  • 물가 = 1.23455 입찰가 = 1.23457 스프레드 = 2 평균 가격: 1.23456
  • 물가 = 1.23455 입찰가 = 1.23458 스프레드 = 3 평균 가격: 1.23456
  • 물가 = 1.23455 입찰가 = 1.23459 스프레드 = 4 평균 가격: 1.23457

그리고 모든 것이 간단해 보이죠? 모든 것이 작동해야 하는데 내가 바보야? 그리고 나는 내가 바보가 아니길 바라며 이틀 동안 앉아 있었다. 꼬리와 복식, 트리블과 비블에 대한 이해 ..................................

하지만! 짝수 스프레드와 홀수 스프레드가 있는 동일한 공식으로 - 일부 상황에서는 - 공식이 작동하지 않았습니다. (위 참조) .

포함 하여 통화에는 작동할 수 있지만 석유에는 작동하지 않습니다.

JPY에서는 작동하고 USD에서는 작동하지 않을 수 있습니다.

아마도 그녀는 달의 영향을 보고 있는 것일까요? 아프리카의 날씨 ...........

그러나 공식이 작동한다고 확신하면 이 1밀리핍을 눈치채지 못합니다. 그리고 당신은 ..... 그리고 "Bam, bam, bang, bam" 을하고이 milipunktik은 도망 가기로 결정하거나 두 번째 milipunktik을 방해합니다.

임호.

당신은 저를 바보, 언더프로그래머, 모범생이라고 부를 수 있습니다.... 등등.

그러나 사실은 남아 있습니다.

다른 조합에서 - 이중 값을 사용하면 오류가 있습니다. 동시에 float로 모든 것이 명확합니다.

왜요? 나 자신을 깨달을 때까지. 도움이 매우 좋으며 항상 도움을 요청합니다. 이것은 정상입니다. 그리고 10년 후에는 커뮤니티에 도움을 요청할 수 있습니다. 이건 괜찮아. 그리고 나는 몇 가지 함정을 알고 있으면 도움 요청에 응답합니다. 이것은 정상입니다.

물론 이러한 테스트를 거친 후 왜 이런 일이 발생하는지 스스로 이해하기 위해 "추가 조사"를 수행 할 것입니다.

여러분의 친절과 도움에 감사드립니다.

 
Vladislav Andruschenko :

사실 작업이 간단해 보이죠? 그리고 학생이 할 수 있습니까? :-) 나도 그렇게 생각했다.

그러나 서버에서 받은 가격, 데이터 정규화 및 나머지 부분에는 의미하지 않는 어두운 구석이 있습니다.

저는 9년 동안 mql로 프로그래밍해 왔으며 올바르게 인식했기 때문에 정규화에 문제가 없었습니다. 1밀리포인트까지의 정확도는 항상 올바르게 작동했습니다.

하지만! 짝수 스프레드와 홀수 스프레드가 있는 동일한 공식으로 - 일부 상황에서는 - 공식이 작동하지 않았습니다. (위 참조) .

다른 조합에서 - 이중 값을 사용하면 오류가 있습니다. 동시에 float로 모든 것이 명확합니다.

Metaquote에 따른 데이터 정규화와 어떤 관련이 있습니까? 프로그래머를 위한 이 용어는 반올림이 아닌 완전히 다른 것을 의미합니다. IEEE 754 표준을 읽어보십시오. 예를 들면 다음과 같습니다. http://www.softelectro.ru/ieee754.html . 정규화되지 않은 실수는 4바이트 길이의 경우 최대 1.17549421*10^(-38), 8바이트 길이의 경우 최대 4..*10^(-324) 범위에 위치하며, 우리는 그들을 매우 드물게 만나고 이미 코스를 계산할 때 확실히 아닙니다. OrderSend를 호출한 다음 이 함수의 요구 사항에 따라 반올림해야 합니다. 작업에 필요한 경우가 아니면 반올림을 사용하지 마십시오.

오류는 double 또는 float 형식이 아니라 사용된 연산에서 발생합니다. 공식으로 문제를 풀지 못했다는 사실은 공식이 문제와 일치하지 않는다는 것을 나타냅니다. 더 이상은 없어. 정규화 없이 일반 계산 중에 어떤 오류가 발생하는지 알려주십시오(이것은 위의 내 게시물에서 발췌한 것입니다).

Spr= MathRound (( 묻기 - 입찰 )/ _Point ); Spr=Spr >> 1 ; 중간= 입찰가 + Spr*_ 포인트 ;

IEEE 754 - стандарт двоичной арифметики с плавающей точкой
  • Yashkardin Vladimir
  • www.softelectro.ru
double-precision длина числа, бит 32 64 смещенная экспонента (E), бит 8 11 остаток от мантиссы (M), бит 23 52 смещение 127 1023 двоичное денормализованое число (-1)S∙0,M∙exp2-127 ,где M-бинарное (-1)S∙0,M∙exp2-1023 ,где M-бинарное двоичное нормализованое число (-1)S∙1,M∙exp2(E-127) ,где M-бинарное (-1)S∙1,M∙exp2(E-1023) ,где M-бинарное...
 
Vladislav Andruschenko :

사실 작업은 간단해 보이죠? 그리고 학생이 할 수 있습니까? :-) 나도 그렇게 생각했다.

그러나 서버에서 받은 가격, 데이터 정규화 및 나머지 부분에는 의미하지 않는 어두운 구석이 있습니다.

저는 9년 동안 mql로 프로그래밍해 왔으며 올바르게 인식했기 때문에 정규화에 문제가 없었습니다. 1밀리포인트까지의 정확도는 항상 올바르게 작동했습니다.

하지만 과제가 있습니다. 높은 정밀도를 요구합니다.

그리고 조건이 있습니다.

즉:

  1. 우리는 ASK 및 BID 가격을 취합니다 - 평균 가격을 계산합니다 = 모든 것이 간단합니까? 확인.
  2. 따라서 스프레드가 홀수이면(예: 3포인트) 나머지 없이 나눌 수 없습니다. 맞습니까?

따라서 균형이 있는 경우(그리고 균등한 스프레드가 있는 경우! :-)) 가격을 최저점에 더 가깝게 평균화하도록 가격을 정상화해야 합니다. 입찰에.

예를 들어:

  • 물가 = 1.23455 입찰가 = 1.23457 스프레드 = 2 평균 가격: 1.23456
  • 물가 = 1.23455 입찰가 = 1.23458 스프레드 = 3 평균 가격: 1.23456
  • 물가 = 1.23455 입찰가 = 1.23459 스프레드 = 4 평균 가격: 1.23457

그리고 모든 것이 간단해 보이죠? 모든 것이 작동해야 하는데 내가 바보야? 그리고 나는 내가 바보가 아니길 바라며 이틀 동안 앉아 있었다. 꼬리와 복식, 트리블과 비블에 대한 이해 ..................................

하지만! 짝수 스프레드와 홀수 스프레드가 있는 동일한 공식으로 - 일부 상황에서는 - 공식이 작동하지 않았습니다. (위 참조) .

포함 하여 통화에는 작동할 수 있지만 석유에는 작동하지 않습니다.

JPY에서는 작동하고 USD에서는 작동하지 않을 수 있습니다.

아마도 그녀는 달의 영향을 보고 있는 것일까요? 아프리카의 날씨 ...........

그러나 공식이 작동한다고 확신하면 이 1밀리핍을 알아차리지 못합니다. 그리고 당신은 ..... 그리고 "Bam, bam, bang, bam" 을하고이 milipunktik은 도망 가기로 결정하거나 두 번째 milipunktik을 방해합니다.

임호.

당신은 저를 바보, 언더프로그래머, 모범생이라고 부를 수 있습니다.... 등등.

그러나 사실은 남아 있습니다.

다른 조합에서 - 이중 값을 사용하면 오류가 있습니다. 동시에 float로 모든 것이 명확합니다.

왜요? 나 자신을 깨달을 때까지. 도움이 매우 좋으며 항상 도움을 요청합니다. 이것은 정상입니다. 그리고 10년 후에는 커뮤니티에 도움을 요청할 수 있습니다. 이건 괜찮아. 그리고 나는 몇 가지 함정을 알고 있으면 도움 요청에 응답합니다. 이것은 정상입니다.

물론 이러한 테스트를 거친 후 왜 이런 일이 발생하는지 스스로 이해하기 위해 "추가 조사"를 수행 할 것입니다.

인내심과 도움을 주신 모든 분들께 감사드립니다.

목표에 따라 때로는 완전히 정수로 전환할 가치가 있습니다. 신경이 많이 쓰입니다 :-) 어쩐지 여러 레벨을 정확하게 표시해야 하는 작업이 있었는데 처음에는 더블에 지쳐서 0에서 전체 포인트로 모든 것을 옮기고 모든 것이 쉽고 간단하고 쉬워졌습니다. 오류 없이.