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

 

안녕하세요 여러분, 저는 이미 따옴표의 정확성에 괴로워했습니다. 정규화 등이 있습니다.

       float  AUTOPRICE;
       float  askP= NormalizeDouble ( Ask , Digits )/ NormalizeDouble ( Point , Digits );
       float  bidP= NormalizeDouble ( Bid , Digits )/ NormalizeDouble ( Point , Digits );
       float  Averab=((askP+bidP))/ 2.0 ;
      AUTOPRICE= MathFloor (Averab)* Point ;
       Print ( "FLOAT  " + "  askP=" +askP+ " bidP=" +bidP+ " Averab=" + DoubleToString (Averab, 10 )+ " AUTOPRICE=" + DoubleToString (AUTOPRICE, 10 ));

       double  AUTOPRICE2;
       double  askP2= NormalizeDouble ( Ask , Digits )/ NormalizeDouble ( Point , Digits );
       double  bidP2= NormalizeDouble ( Bid , Digits )/ NormalizeDouble ( Point , Digits );
       double  Averab2=((askP2+bidP2))/ 2.0 ;
      AUTOPRICE2= MathFloor (Averab2)* Point ;
       Print ( "DOUBLE  " + "  askP2=" +askP2+ " bidP2=" +bidP2+ " Averab2=" + DoubleToString (Averab2, 10 )+ " AUTOPRICE=" + DoubleToString (AUTOPRICE2, 10 ));

퍼짐:2

2017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - 더블 테스트 MATHFLOOR EURUSD,M30: DOUBLE AskP2=5010102AUTOICEP2= 105140AUTOICE0PR2.0050104

2017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: FLOAT askP=1059143 bidP=1051415030 Averab= 1050020PRICE.0




퍼짐:3

2017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - 더블 테스트 MATHFLOOR EURUSD,M30: 더블 AskP2=50104bidP2= 105140AUTOICEPR2.5050004

2017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: FLOAT AskP=1059144 bidP=1051415030 Averab= 1050042.0PRICE


퍼짐:4

2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - 이중 테스트 MATHFLOOR EURUSD,M30: 이중 AskP2=5010102AUTOICEP2= 105140AUTOICEPR3.0050104

2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - 이중 테스트 MATHFLOOR EURUSD,M30: FLOAT AskP=1094145 bidP=1051415080PRICE=005141 Averab= 1050030PRICE.0

퍼짐:5

2017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - 이중 테스트 MAHFLOOR EURUSD,M30: DOUBLE askP2=500103bidP2= 1051403AUTOICE0PR0PR5050004

2017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - 더블 테스트 MAHFLOOR EURUSD,M30:   FLOAT AskP=105146 bidP=105141 Averab=105143.5000000000 AUTOPRICE= 1.0514299870

이 추가 표지판은 터널 끝 어딘가에 있습니다.............

 
       double askP= NormalizeDouble ( Ask , Digits )/ NormalizeDouble ( Point , Digits );
       double bidP= NormalizeDouble ( Bid , Digits )/ NormalizeDouble ( Point , Digits );

       double Averab=((askP+bidP)* 1 )/ 2.0 ;
       Print ("askP="+askP+" bidP="+bidP+" Averab="+Averab+" MathFloor (( int )Averab)="+ MathFloor (( int )Averab));

스프레드 = 2

AskP=105143 bidP=105141 Averab= 105142 MathFloor ((int)Averab)= 105142

스프레드=3

AskP=105144 bidP=105141 Averab= 105142.5 MathFloor((int)Averab)= 105142

4의 스프레드와 함께!!!!

AskP=105145 bidP=105141 Averab= 105143 MathFloor((int)Averab)= 105142

왜요?

 
Vladislav Andruschenko :

안녕하세요 여러분, 저는 이미 따옴표의 정확성에 괴로워했습니다. 정규화 등이 있습니다.

어떻게든 double과 int가 무엇인지 이해할 수 있어야 합니다. 유형 캐스팅이 작동하는 방식.

MathMod 및 MathFloor를 사용 하지 않았습니다. 작성된 내용 뒤에 무엇이 있는지 전혀 이해하지 못하는 코드가 많이 있습니다.

이중 숫자를 인쇄하는 것은 아무 것도 아닙니다. 실제 double 값을 인쇄하려면 해당 바이트를 확인해야 합니다.

 

수동으로 작성하지 않기 위해 인쇄만 하고,

그 자체로 변수는 내가 기대하는 결과를 제공하지 않습니다.

유형 캐스팅 , int 및 이중 정규화는 도움 없이 수행한 것입니다.

현재 나는 모든 옵션을 시도했기 때문에 절망에 빠져 있습니다. 제대로 작동하지 않는 코드 1000개 중 1개를 노출했습니다.

하지만 도움을 주셔서 감사합니다.

내가 원하는 것을 성취해 보세요. 나중에 코드를 보여줄 필요가 없습니다. 작동 여부를 알려주세요.

우리는 묻고 입찰합니다.

평균 가격을 계산합니다.

스프레드가 홀수(3,5,7,9 등)이면 평균 가격을 입찰가에 더 가깝게 동일시합니다.

예를 들어:

Bid=1.55555 Ask=1.55557 평균 가격= 1.55556 스프레드=2

Bid=1.55555 Ask=1.55558 평균 가격= 1.55556 스프레드=3

그러면 모든 것이 올바르게 될 것입니다.

그러나 스프레드가 4,5,6,7일 때 - 이 정확도는 당신을 위해 미지의 영역에 들어갈 것입니다. 숫자가 잘못된 위치에 떠 있게 됩니다.

 
Vladislav Andruschenko :
       double askP= NormalizeDouble ( Ask , Digits )/ NormalizeDouble ( Point , Digits );
       double bidP= NormalizeDouble ( Bid , Digits )/ NormalizeDouble ( Point , Digits );

       double Averab=((askP+bidP)* 1 )/ 2.0 ;
       Print ("askP="+askP+" bidP="+bidP+" Averab="+Averab+" MathFloor (( int )Averab)="+ MathFloor (( int )Averab));

스프레드 = 2

AskP=105143 bidP=105141 Averab= 105142 MathFloor((int)Averab)= 105142

스프레드=3

AskP=105144 bidP=105141 Averab= 105142.5 MathFloor((int)Averab)= 105142

4의 스프레드와 함께!!!!

AskP=105145 bidP=105141 Averab= 105143 MathFloor((int)Averab)= 105142

왜요?

어떻게 든 비슷한 상황이있었습니다. 그러면 내 마음은 이미 분노로 끓어 오르고있었습니다. double을 float로 바꾸는 것이 도움이 되었는데, 왜 나는 아직도 모릅니다.

 
sibirqk :
어떻게 든 비슷한 상황이있었습니다. 그러면 내 마음은 이미 분노로 끓어 오르고있었습니다. double을 float로 바꾸는 것이 도움이 되었는데, 왜 나는 아직도 모릅니다.

감사합니다 해볼께요 .. . . . 제 뇌도 이미 끓어올랐습니다.

네!!! 그것이 작동하는 방식입니다! 다 괜찮아.

float askP= NormalizeDouble ( Ask , Digits )/ NormalizeDouble ( Point , Digits );
float bidP= NormalizeDouble ( Bid , Digits )/ NormalizeDouble ( Point , Digits );
float Averab=((askP+bidP))/ 2.0 ;

감사해요.! 더 이상 어떻게 해야할지 모르겠어....

 
#define ALPHA 0.1

int askP = ( int )( Ask / Point + ALPHA);
int bidP = ( int )( Bid / Point + ALPHA);

이것이 MathFloor 가 쟁기질하는 방법입니다.

int MyMathFloor( const double Num )
{
   return (( int )((Num > 0 ) ? Num : Num - 1 ));
}
 
double Averab = NormalizeDouble ((Ask + Bid)/(2.0 * Point), Digits);
 
fxsaber :
#define ALPHA 0.1

int askP = ( int )( Ask / Point + ALPHA);
int bidP = ( int )( Bid / Point + ALPHA);

이것이 MathFloor가 쟁기질하는 방법입니다.

int MyMathFloor( const double Num )
{
   return (( int )((Num > 0 ) ? Num : Num - 1 ));
}

다른 스프레드에서? 포함, 2,3,4,5,6,7?

내가 당신의 방법을 더 일찍 시도했기 때문에 (비록   + 알파 ). 2.3 스프레드에서는 모든 것이 정상이지만 4.5에서는 이미 결함이 있습니다.

안드레이 딕 :
double Averab = NormalizeDouble (( Ask + Bid )/ 2.0 , Digits );

정규화, 이것이 내가 함수에서 한 첫 번째 작업이지만 불행히도 특정 스프레드에서 실패하기 시작합니다.

 
Vladislav Andruschenko :

정규화, 이것이 내가 함수에서 한 첫 번째 작업이지만 불행히도 특정 스프레드에서 실패하기 시작합니다.

고쳤습니다. 지금 시도하십시오.
 
Vladislav Andruschenko :

우리는 묻고 입찰합니다.

평균 가격을 계산합니다.

스프레드가 홀수이면(3,5,7,9 등) 우리는 평균 가격을 입찰가에 더 가깝게 동일시합니다.

#define ALPHA 0.1

int DoubleToInt( const double Num )
{
   return (( int )(Num + ALPHA));
}

void OnStart ()
{
   double NewPrice = DoubleToInt(( Ask + Bid ) / ( 2 * Point )) * Point ;

   Print (NewPrice);
}