5자리 감지 - 페이지 6

 
cameofx 2010.07.29 10:52

지금은 아래 기능을 사용하고 있으며 다양한 브로커 및 도구에서 사용할 수 있습니다.

 double vPoint; 
if ( Digits == 2 || Digits == 4 ) vPoint = Point ; else
if ( Digits == 3 || Digits == 5 ) vPoint = Point * 10 ; // I use this for my indies; call once on init() & use where Point supposed to be used in start() 

double Poin() 
{ 
   int d = Digits ;
   switch (d){
   case 2 : { return ( Point ); break ;}
   case 4 : { return ( Point ); break ; }
   case 3 : { return ( Point * 10 ); break ;}
   case 5 : { return ( Point * 10 ); break :}
   default : return ;
} // I just come up with this. Untested but should be ok/robust. To be used to replace Point for trade parameters calculations. 

건배 ~ 카메오

여기에 내가 사용하는 문제에 대한 대체 솔루션이 있습니다 ...

 int init()
  {
   double SymPoint;
   if ( Point == 0.00001 ) SymPoint = 0.0001 ; //5 digits
   else if ( Point == 0.001 ) SymPoint = 0.01 ; //3 digits
   else SymPoint = Point ; //Normal
   
   return ( 0 );
  }

그런 다음 Point 변수 대신 SymPoint 변수를 사용하십시오. 카메오와 매우 흡사하다.

 

좀 더 혼동을 주기 위해 BrocoTrader에는 다양한 증권에 대해 0~5자리의 증권이 있습니다...

 
kennyhubbard :

안녕하세요 7bit님

나는 당신이 방탄 코드를 만들고 시도하는 것이 옳다고 생각하지만 ....... 그러나 항상 한계가 있습니다.

Collective FX에 대한 데모 피드를 살펴봐야 합니다. 여기에서 각기 고유한 통화 쌍 접미사가 있는 다양한 유동성 공급자(여러 소스의 단일 집계 피드와 반대)의 결합된 독립 피드를 테스트하고 있습니다. 결국 접미사를 사용합니까?), 문제의 범위를 깨닫습니다. 이는 하나의 플랫폼 내에서 EURUSD_fx, EURUSDm 또는 EURUSD_dbfx 중에서 원하는 대로 선택할 수 있음을 의미합니다. 이 중 일부는 4자리 가격 책정과 다른 5자리 숫자로 구성되어 있기 때문에 이것만으로도 전략에 큰 구멍이 생길 것입니다.

"if (Digits == 3 || Digits == 5)"는 2가지 종류의 브로커, 즉 전체 pip 피드가 있는 브로커만 얻는다는 단순한 전제에서 작동한다는 점에서 찾을 수 있을 만큼 포괄적입니다. 그리고 1/10 핍 피드가 있는 것들. 이 사례는 2/3/4/5 통화 쌍 및 브로커를 다룹니다.

내 정보를 위해, 예외가 되는 경우를 본 적이 있습니까? Gold의 경우 항상 2자리 호가였고 새로운 1/10 핍 중개인은 3자리로 인용하므로 이 경우에도 잘 커버됩니다.

나는 당신이 발견한 예외를 그대로 처리하고 아마도 홀드올 솔루션을 찾으려고 시도하기보다 특정 문제를 하드 코드로 처리하는 것이 좋습니다.


이 대화가 나왔을 때 내가 알아차린 한 가지는 사람들이 접미사에 대해 이야기하지만 접두사는 결코 이야기하지 않는다는 것입니다. 접두사도 가능합니다. 접두사가 있는 브로커를 만났습니다.

이에 대한 내 생각은 여기에 있는 원본 포스터와 일치합니다. 저는 고객에게 가능한 한 견고한 제품 을 원합니다. 나중에 수정하기 위해 더 많은 코딩 위험을 감수하지 않아도 됩니다. 내 전체 코드는 한 번의 변경으로 래핑될 수 있으며 수정하기 위해 수천 줄의 코드를 검토하는 데 몇 개발자 시간이 소요될 수 있습니다. 따라서 처음에 올바르게 설정하면 다시 돌아가 수정해야 하는 위험과 비용을 줄일 수 있습니다. 나는 또한 이것이 버그라는 데 동의하지만 MQL의 약점만큼 우리 코드의 버그는 아닙니다.

그러나 나는 또한 해결책을 고민해 왔습니다. 내 솔루션 중 하나는 기호 목록을 살펴보고 하위 문자열을 사용하여 EURUSD를 찾는 것이었습니다. 그런 다음 입찰가를 얻습니다. 일단 입찰가가 정해지면 doubletostr을 수행한 다음 strlen이나 이와 유사한 문자열의 문자 수를 계산하는 방법을 알아낼 수 있습니다. 뒤쪽에 통증이 있지만 상당히 견고한 4 또는 5 자리 결정을 줄 수 있습니다. 그로부터 나는 골드와 같은 기이한 것들에 대한 기반을 세울 수 있었습니다.

이것은 이론일 뿐이며 아직 시도하지 않았습니다. 현재 프로젝트를 처리하기 위해 너무 바쁩니다.

 

내 EA에서 Pip 계산에 이 코드를 사용합니다. 이 Pip는 SL, TP, TS와 같은 pips에 입력된 extern bool을 처리하는 모든 곳에서 사용합니다. 쌍, DAX 1/2 십진수 ... 예, 이전 게시물과 비슷하게 보이지만 기능적 으로는 라이브...


Pip = Point ;
if ( Digits == 2 || Digits == 4 || Digits == 6 ) Pip = 100 * Point ;
else if ( Digits == 1 || Digits == 3 || Digits == 5 ) Pip = 10 * Point ; 

내 다른 indis에서도 JPY 기호를 찾아보십시오 ... :-)

Tmp_int = StringFind ( Symbol (), "JPY" , 0 );
if (Tmp_int< 0 ) Pip = 10000 ;
else Pip = 100 ;
 
seic :

내 EA에서 Pip 계산에 이 코드를 사용합니다. 이 Pip는 SL, TP, TS와 같은 pips에 입력된 extern bool을 처리하는 모든 곳에서 사용합니다. 쌍, DAX 1/2 십진수 ... 예, 이전 게시물과 비슷해 보이지만 기능적 으로는 라이브...


내 다른 indis에서도 JPY 기호를 찾아보십시오 ... :-)

JPY를 찾는 대신 각 통화에 대한 "포인트"를 찾고 싶습니다. 이것이 내가 시도한 것입니다.

   ObjectSetText ( "pi_Pair01" , MarketInfo (Pair01, MODE_POINT ));

따라서 예상은 Pair01에 저장된 쌍에 대한 해당 값을 제공하는 것입니다. 그러나 이것은 0만 반환합니다. 왜 그럴까요? 내 예에서 Pari01은 "AUDCAD"이고 지표는 EURUSD 차트에 첨부되어 있습니다.

추가 실험을 통해 이제 일부 통화에서는 작동하지만 다른 통화에서는 작동하지 않는다는 것을 알았습니다. 이것은 상당히 혼란스럽습니다. MODE_DIGITS가 더 잘 작동하는 것 같습니다. 어떻게 그렇게 될수 있니?

파이

 
seic :

내 EA에서 Pip 계산에 이 코드를 사용합니다. 이 Pip는 SL, TP, TS와 같은 pips에 입력된 extern bool을 처리하는 모든 곳에서 사용합니다. 쌍, DAX 1/2 십진수 ... 예, 이전 게시물과 비슷해 보이지만 기능적 으로는 라이브...

 if ( Digits == 2 || Digits == 4 || Digits == 6 ) Pip = 100 * Point ;

당신이 5자리 브로커에 있기 때문입니다. 4자리 브로커에서 PIP와 포인트는 동일 합니다.
TICK이란 무엇입니까? - MQL4 및 MetaTrader 4 - MQL4 프로그래밍 포럼

 

InstaForex에는 USDSEK 및 USDNOK의 경우 4자리 숫자가 있고 EURUSD의 경우 5자리입니다.


따라서 틱이 아닌 핍의 양을 얻으려면 모든 견적 통화에 대한 설정이 있는 배열이 필요하다고 생각합니다.