FOREX에서 기호 이름의 최대 길이 - 페이지 2

 

사실 FORESnikov를 위해 좋은 일을 하고 싶었지만 운명은 아닌 것 같습니다.

오래전에 자동으로 매직을 얻기 위한 플러그인 파일을 작성했는데 지금은 수정했습니다.

그리고 외환을 위해 그것을 하기로 결정했지만 분명히 운명은 아닙니다.

누군가 GetForexName 함수 를 추가하면 FOREX에서도 작동합니다.

 //+------------------------------------------------------------------+
//|                                                    AutoMagic.mqh |
//|                                 Copyright 2017-2018 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
//version   "1.01
#define FORTS
//---
struct SYMBOL_MAGIC
{
   long ch_id;
   ulong magic;
};
SYMBOL_MAGIC symb_magic;
//-------------------------------------------------------------------+
// Split string function                                             |
//+------------------------------------------------------------------+
string SplitString( const string a_str, ulong &a_month, ulong &a_year)
  {
   int str_size= StringLen (a_str);
   int str_tire= StringFind (a_str, "-" );
   int str_tochka= StringFind (a_str, "." , str_tire);
   if ((str_tire> 0 ) && (str_tochka> 0 ) &&(str_size > 0 ))
     {
      a_month= ulong ( StringToInteger ( StringSubstr (a_str,str_tire+ 1 ,str_tochka-str_tire- 1 )));
      a_year = ulong ( StringToInteger ( StringSubstr (a_str,str_tochka+ 1 ,str_size-str_tochka- 1 )));
       if ((a_month > 0 ) && (a_year > 0 )) return ( StringSubstr (a_str, 0 , str_tire));
     }
   return ( "" );
  }
//-------------------------------------------------------------------+
// Get FOREX symbol function                                       |
//+------------------------------------------------------------------+
string GetForexName( const string a_str)
{
   //??????? Из любого названия пары функция долна возвращать ТОЛЬКО саму пару (н-р UERUSD)
   return ( "" );
}  
//-------------------------------------------------------------------+
// Get Magic function                                                |
//+------------------------------------------------------------------+
ulong GetMagic( const string a_symbol)
{
//--- Get ChartID
  symb_magic.ch_id = ChartID ();
//---
   if ( SymbolSelect ( Symbol (), true ) == false )
  {
     Print ( __FUNCTION__ , ": Нет такого символа!" );
     return ( 0 );
  }  
#ifdef FORTS
//--- Test symdol
   if ( StringLen (a_symbol)> 10 )
  {
     Print ( __FUNCTION__ , ": Не правильный символ!" );
     return ( 0 );
  }
   if (symb_magic.ch_id != 0 )
  {
     ulong month = 0 ;
     ulong year = 0 ;
     string new_str=SplitString(a_symbol,month,year);
     if ( StringLen (new_str)> 0 )
    {
      symb_magic.magic = 0 ;
       uchar char_array[];
       int result= StringToCharArray (new_str,char_array, 0 , WHOLE_ARRAY , CP_ACP );
       if (result> 0 )
      {
         ulong value;
         for ( int i = 0 ; i < result - 1 ; i++)
        {
          value= ulong (char_array[i]);
          value<<=( 56 -(i* 8 ));
          symb_magic.magic += value;
        }
        month<<= 24 ;
        symb_magic.magic += month;
        year<<= 16 ;
        symb_magic.magic += year;
         ulong a_chid = ulong (symb_magic.ch_id);
        a_chid<<= 16 ;
         return (symb_magic.magic&=symb_magic.ch_id);
      }
    }
  }
#else
   string in_str = GetForexName(a_symbol);
   if (in_str != "" )
  { 
    symb_magic.magic = 0 ;
     uchar char_array[];
     int result= StringToCharArray (a_symbol,char_array, 0 , WHOLE_ARRAY , CP_ACP );
     if (result> 0 )
    {
       ulong value;
       for ( int i = 0 ; i < 6 ; i++)
      {
        value= ulong (char_array[i]);
        value<<=( 56 -(i* 8 ));
        symb_magic.magic += value;
      }  
       ulong a_chid = ulong (symb_magic.ch_id);
      a_chid<<= 16 ;
       return (symb_magic.magic&=symb_magic.ch_id);
    }
  }
#endif    
   return ( 0 ); 
}
//-------------------------------------------------------------------+
// Is my magic function                                              |
//+------------------------------------------------------------------+
bool IsMyMagic( const ulong m_magic, const long chart_id)
{
   if (symb_magic.ch_id == chart_id)
  {
     ulong stored_magic=symb_magic.magic;
    stored_magic>>= 16 ;
     ulong in_magic = m_magic;
    in_magic>>= 16 ;
     if (in_magic == stored_magic) return ( true );
  }
   return ( false );
}
//+------------------------------------------------------------------+

마지막 2바이트는 하나의 EA에서 많은 마법을 사용하는 데 사용됩니다.

chart_id - 이 특정 차트를 식별하는 역할을 합니다(동일한 기호를 원하는 만큼 열 수 있음).

Magic과 관련된 작업을 하기 전에 IsMyMagic 함수 를 호출하는 것은 지루합니다.

 
prostotrader :

쌍 자체 전에 무엇이든 가질 수 있는 경우 기호를 분석하는 방법이 명확하지 않습니다.

사용할 통화 배열을 만듭니다(예: "EUR" "USD" "JPY").
그런 다음 함수를 사용하여 이 세트에서 가능한 모든 조합의 쌍을 만듭니다(예: "EURUSD" "EURJPY" "USDEUR" "USDJPY" "JPYEUR" "JPYUSD").
그리고 각 조합에 대해 분석된 기호의 이름에 이 조합이 있는지 확인합니다. 항목이 있습니다 - 여섯 글자 이름이 있습니다.

 
Andrei Fandeev :

사용할 통화 배열을 만듭니다(예: "EUR" "USD" "JPY").
그런 다음 함수를 사용하여 이 세트에서 가능한 모든 조합의 쌍을 만듭니다(예: "EURUSD" "EURJPY" "USDEUR" "USDJPY" "JPYEUR" "JPYUSD").
그리고 각 조합에 대해 분석된 기호의 이름에 이 조합이 있는지 확인합니다. 6글자의 이름이 발견되었습니다.

모두에게 좋은 일을 하고 GetForexName 기능을 추가하세요.

 
prostotrader :

감사합니다. 하지만 쌍의 "네이키드" 이름만 얻으면 됩니다(6자).

누군가 준비된 솔루션이 있습니까?

추가됨

쌍 자체 전에 무엇이든 가질 수 있는 경우 기호를 분석하는 방법이 명확하지 않습니다.

복사기는 종종 2개의 매개변수 접두사와 접미사를 사용합니다(EURUSD 전후에 추가 기호)

 
prostotrader :

감사합니다. 하지만 쌍의 "네이키드" 이름만 얻으면 됩니다(6자).

누군가가 준비된 솔루션을 가지고 있습니까?

추가됨

쌍 자체 전에 무엇이든 가질 수 있는 경우 기호를 분석하는 방법이 명확하지 않습니다.

문자열 찾기

 

그것은 브로커에 따라 다릅니다. 나는 일종의 혼미에 빠지게 한 경우가 있었던 것을 기억합니다. 클라이언트가 오류를 제안한 다음 내가 미쳤고 문자 인식을 위해 야생 목발을 작성해야 한다고 생각했습니다.

2016.10.16 13:08:51.633 2016.08.25 04:39 Expert EURUSD(€) ,M15: OrderSend 오류 4106

2016.10.16 13:08:51.633 2016.08.25 04:40 Expert EURUSD(€) ,M15: OrderSend 기능 에 대한 알 수 없는 기호 이름 EURUSD(ˆ)

 
prostotrader :

외환에는 주로 접미사가 있는 기호가 있으며 접두사가 있는 경우는 극히 드물지만 기본(쌍)은 항상 대문자로 작성되고 모든 포스트스크립트는 소문자로 되어 있으므로 이것부터 시작할 수 있습니다.

 
Vitaly Muzichenko :

외환에는 주로 접미사가 있는 기호가 있고 접두사가 있는 경우는 극히 드물지만 기본(쌍)은 항상 대문자로 작성되고 모든 포스트스크립트는 작아서 이것부터 시작할 수 있습니다.

특히 모든 것을 동일한 StringToLower 또는 StringToUpper 케이스 로 캐스팅하고 StringFind를 찾는 입력 매개변수인 경우 더 안정적입니다. 그러면 어디에 무엇이 추가되는지는 중요하지 않습니다.

 

통화 쌍만 사용하는 경우:

SymbolInfoString() 함수의 경우

ENUM_SYMBOL_INFO_STRING

식별자

설명

속성 유형

SYMBOL_BASIS

파생 상품의 기초 자산 이름

SYMBOL_CURRENCY_BASE

상품의 기준 통화

SYMBOL_CURRENCY_PROFIT

이익 통화

SYMBOL_CURRENCY_MARGIN

담보가 계산되는 통화

SYMBOL_BANK

현재 견적 소스

SYMBOL_DESCRIPTION

기호의 문자열 설명

SYMBOL_FORMULA

사용자 지정 기호의 가격을 구성하는 공식

SYMBOL_ISIN

국제 증권 식별 코드 시스템에서 거래 기호의 이름은 ISIN(국제 증권 식별 번호)입니다. 국제 보안 식별 코드는 보안을 고유하게 식별하는 12자리 영숫자 코드입니다. 이 기호 속성의 존재 여부는 거래 서버 측에서 결정됩니다.

SYMBOL_PAGE

기호에 대한 정보가 있는 웹 페이지 주소입니다. 이 주소는 터미널에서 기호 속성을 볼 때 링크로 표시됩니다.

SYMBOL_PATH

심볼 트리의 경로

 
Konstantin Nikitin :

특히 모든 것을 동일한 StringToLower 또는 StringToUpper 케이스 로 캐스팅하고 StringFind를 찾는 입력 매개변수인 경우 더 안정적입니다. 그러면 어디에 무엇이 추가되는지는 중요하지 않습니다.

근데 과제가 이해가 안되는데 길이에 상관없이 바로 심볼로 대체가 안되는 이유