오류, 버그, 질문 - 페이지 1380

 
Sergey Zhukov :
신청서를 작성했지만 3일 이상 아무도 쳐다보지 않았습니다.
신청번호가 어떻게 되나요?
 
Alexander :
신청번호가 어떻게 되나요?
#1302121 | 2015.09.14 18:17
신호: 통계 문제
 

더블의 영원한 테마 =)

개발자들에게 두 가지 표준 기능을 추가하도록 요청합니다.

다음 사양을 제안합니다.

====

RP

이 함수는 상품의 가격 단계에 맞춰 정렬될 값을 반환합니다.

더블 RP (

       symbol_name , // 기호 이름
    더블                      // 평준화할 가격
);

옵션

symbol_name

[인] 문자.

【인】 양수입니다.

반환 값

거래 상품 의 가격 단계로 반올림한 가장 가까운 숫자 .

...

예시:

입력 값:

symbol_name=ES-...

= 2000.55

출력 = 2000.50

(도구 ES = 0.25의 가격 단계)


입력 값:

symbol_name=SPX

= 2000.55

출력 = 2000.63

(SPX 상품에서 가격 단계는 ES와 마찬가지로 0.25이지만 동시에 기본 이동이 있으며 견적에는 13,38,63,88과 같은 소수 부분만 포함될 수 있습니다.)


입력 값:

symbol_name=RTS

= 82055.55

출력에서 = 82060

(기기 RTS의 가격 단계 = 10)

... 글쎄, 등등.


더 관심이 가는 두 번째 기능:

====

Rv

이 함수는 기기의 볼륨 단계에 맞춰지고 SYMBOL_VOLUME_MIN에서 SYMBOL_VOLUME_MAX 범위에 있는 값을 반환합니다.

더블 Rv (

       symbol_name , // 기호 이름
    더블                      // 평준화할 로트
);

옵션

symbol_name

[인] 문자.

【인】 양수입니다.

반환 값

거래 상품의 거래량 단계로 반올림한 가장 가까운 숫자 . 숫자는 SYMBOL_VOLUME_MAX보다 크지 않고 SYMBOL_VOLUME_MIN보다 작지 않습니다 .

...

======


이러한 기능에서 기대하는 주요 속성은 이 기능이 세계의 모든 거래 수단 및 모든 입력 값에 대해 유효해야 한다는 것입니다.

누군가가 기성품 솔루션을 가지고 있다면 개발자가 수행하는 동안 공유하십시오.

그들이 아직 존재하지 않는다는 것이 이상합니다 =/

 

귀하의 의견에서 문제를 해결하면 가장 어리석고 서투른 기능을 제거했지만 많은 입력 값을 엉망으로 만들었습니다.

기능 코드:

 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 Возвращает кол-во значимых цифр после запятой
 вернёт 0 если число без значимой десятичной дробной части
 вернёт -1 в случае ошибки во время разбора строки на массив
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
int GetDigits( double n)
{
   ushort array[];
   string st=( string )n;                                         // явным образом формируем строку из числа
   int len= StringLen (st);
   if (len< 3 ) return ( 0 );                                         // число не может быть дробным если строка получилась меньше трёх символов
   if ( StringToShortArray (st,array)!=len+ 1 ) return (- 1 );         // разбираем строку на массив символов
   for ( int i= 0 ;i<len;i++) if (array[i]== '.' ) return (len-i- 1 );   // ищем в строке точку и если она есть, возвращаем кол-во символов от точки до конца строки
   return ( 0 );
}

요점은 내가 분수의 중요한 부분을 결정하는 전체 치질을 컴파일러가 연산자 = (문자열)로 대체하는 방법으로 어리석게 옮겼다는 것입니다.

그러나 이 형식에서 코드는 printf()의 g-type과 거의 유사한 문자열 형식 을 지정합니다. 즉, 긴 분수의 경우 문자열은 과학 형식으로 출력됩니다.

지수 형식이 없고 오른쪽에 추가 숫자가 없고 치질 =) 없이 문자열에 대한 출력을 n에 대해 어떻게 달성할 수 있습니까?

그리고 또 다른 질문: 소수점 이하 자릿수는 항상 점으로 구분됩니까, 아니면 기본적으로 시스템 설정에서 쉼표나 다른 것이 있을 수 있습니까?

 
Fry :

귀하의 의견에서 문제를 해결하면 가장 어리석고 서투른 기능을 제거했지만 많은 입력 값을 엉망으로 만들었습니다.

기능 코드:

요점은 내가 어리석게도 분수의 중요한 부분을 결정하는 번거로움을 컴파일러가 연산자 =(문자열)로 대체하는 방법으로 옮겼다는 것입니다.

그러나 이 형식에서 코드는 printf()의 g-type과 거의 유사한 문자열 형식 을 지정합니다. 즉, 긴 분수의 경우 문자열은 과학 형식으로 출력됩니다.

지수 형식이 없고 오른쪽에 추가 숫자가 없고 치질 =) 없이 문자열에 대한 출력을 n에 대해 어떻게 달성할 수 있습니까?

그리고 또 다른 질문: 소수점 이하 자릿수는 항상 점으로 구분됩니까, 아니면 기본적으로 시스템 설정에서 쉼표나 다른 것이 있을 수 있습니까?

그리고 포인트()보다 디지트 정렬이 안되나요???
 
Vladimir Pastushak :
그리고 포인트()보다 디지트 정렬이 안되나요???

볼륨 단계의 정확도를 반환하는 최소한 DigitsLot() 도 있어야 합니다.

아마도 내가 당신의 힌트를 잘못 이해했을 것입니다. Point() 또는 Digits()를 통해 원하는 것을 얻을 수 있는 합리적인 방법이 있습니까?


그러나 위에서 설명한 두 가지 기능(가격 및 로트에 대한 유효한 레벨러)은 매우 필요합니다.

나는 외환 키친에서 볼륨이 가장 자주 0.01 단계로 허용되고 내일 무슨 일이 일어날지 아무도 신경 쓰지 않지만 터미널은 개발 중이라는 것을 이해합니다.

점점 더 많은 도구가 있습니다. 로트의 정수 단계를 허용하지 않는 모든 수제 공예품은 더 이상 작동하지 않습니다. 최소 로트, 예를 들어 1/4이 없을 것이라고 누가 말했습니까? 예, 몇 가지 옵션이 있습니다.

이 결정은 개발자 또는 절대적(모든 값에 대해)이어야 하며 그렇지 않으면 신뢰할 수 없습니다.


그리고 견적에 대해. 요청을 보낼 때 서버는 정상화(기호로 절단)하기 위해 고르지 않은 가격 값도 수락하지만 다른 작업도 있습니다.

잘린 쓰레기가 아니라 어떤 번호에서든 모든 악기에 대해 가능한 견적을 얻을 수 있어야 한다는 데 동의하십시오.

 
Fry :

귀하의 의견에서 문제를 해결하면 가장 어리석고 서투른 기능을 제거했지만 많은 입력 값을 엉망으로 만들었습니다.

기능 코드:

...
나 자신을 수정합니다. 이것은 작동하는 것 같습니다.
 /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
Возвращает кол-во значимых цифр после запятой для чисел с точностью до 8 знаков 
   Вернёт 0 если число целое (в пределах 8 знаков после запятой) 
   Вернёт -1 в случае ошибки во время разбора строки на массив
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
int GetDigits( double n)
{
   ushort array[];
   if ( StringToShortArray ( StringFormat ( "%.8f" ,n),array)< 10 ) return (- 1 ); // число в строку и разбираем строку на массив символов
   int r= ArraySize (array)- 2 ;                                           // размер массива минус ноль-терминатор и минус нулевая база указателя 
   for (;r> 0 && array[r]== '0' ;r--);                                     // ищем справа не ноль
   for ( int l= 0 ;l<=r;l++) if (array[l]== '.' ) return (r-l);                 // ищем слева точку и если она есть, возвращаем кол-во символов от точки до не нуля справа
   return ( 0 );
}

내가 완전히 나쁘다고 생각하지 마십시오. 순전히 수학적 문제를 위해 고집스럽게 숫자에서 문자열을 만듭니다.

처음에는 솔직히 로그로 해보려고 했는데 못생겼다 =(

 
Fry :
나 자신을 수정합니다. 이것은 작동하는 것 같습니다.

내가 완전히 나쁘다고 생각하지 마십시오. 순전히 수학적 문제를 위해 고집스럽게 숫자에서 문자열을 만듭니다.

처음에는 솔직히 로그로 해보려고 했는데 못생겼다 =(

만일을 대비하여 다시 한 번 묻겠습니다. 왜 NormalizeDouble() _Point _Digits ????????

왜 자전거를 만들고 있습니까?

 
Vladimir Pastushak :

만일을 대비하여 다시 한 번 묻겠습니다. 왜 NormalizeDouble() _Point _Digits ????????

왜 자전거를 만들고 있습니까?

혹시나 해서 다시 답변드립니다. "NormalizeDouble() _Point _Digits"를 사용하여 SYMBOL_VOLUME_STEP 의 정밀도를 아는 방법을 설명해 주시겠습니까?

또는 양수에서 SYMBOL_VOLUME_STEP의 배수를 얻는 방법은 무엇입니까?

다음 결과를 얻는 방법:

2000.55(기호 ES) -----> 2000.50

2000.55(기호 SPX) -----> 2000.63

1055.5555(RTS 기호) ------> 1060

오늘(그리고 가급적이면 내일) MT5 터미널에서 사용할 수 있는 세계의 모든 기호에 대해

"????????"

개발자는 2가지 기능만 추가하고 터미널이 발전함에 따라 개선할 수 있지만 다양한 거래 상품의 모든 기능을 알지는 못합니다. 일반적으로 사용 가능한 견적은 어디에서 확인할 수 있습니까? 그리고 NormalizeDouble()의 결과가 아니라 정확히 QUOTE를 가져와야 합니다.

이 자전거가 이미 존재하는 경우 - 특정 구현을 찌르면 감사할 것입니다. 내가 이미 발견한 것은 일부 캐릭터에서 작동하지 않습니다.

 
Fry :

...

2000.55(기호 ES) -----> 2000.50

2000.55(기호 SPX) -----> 2000.63

1055.5555(RTS 기호) ------> 1060

...

이 세 가지 기호에 대해 SYMBOL_VOLUME_STEP 을 표시하십시오.
사유: