FOREX'te sembol adının maksimum uzunluğu - sayfa 2

 

Aslında FORESnikov için güzel bir şey yapmak istedim ama görünüşe göre kader değil

Uzun zaman önce Magic'i otomatik olarak elde etmek için bir eklenti dosyası yazdım, ama şimdi düzelttim

ve bunu forex için yapmaya karar verdi, ama görünüşe göre kader değil.

Birisi GetForexName işlevini eklerse, FOREX için de çalışacaktır.

 //+------------------------------------------------------------------+
//|                                                    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 );
}
//+------------------------------------------------------------------+

Son 2 bayt, bir EA'da birçok büyü kullanmak için kullanılır.

chart_id - bu belirli grafiği tanımlamaya yarar (istediğiniz kadar aynı sembolü açabilirsiniz)

Magic ile ilgili herhangi bir işlemden önce, büyünün bu danışmana ait olup olmadığını kontrol edecek olan IsMyMagic işleviniçağırmak sıkıcıdır.

 
prostotrader :

Çiftin kendisinden önce herhangi bir şeye sahip olabilecekse bir sembolün nasıl analiz edileceği açık değil :(

Kullanılacak bir dizi para birimi oluşturun, örneğin "EUR" "USD" "JPY"
Ardından, bu setten olası tüm kombinasyonların çiftlerini yapmak için işlevi kullanın, örneğin "EURUSD" "EURJPY" "USDEUR" "USDJPY" "JPYEUR" "JPYUSD"
Ve her bir kombinasyonla, analiz edilen sembol adına bu kombinasyonun bir tekrarı olup olmadığını kontrol edersiniz. Bir giriş var - altı harfli bir isim bulundu.

 
Andrei Fandeev :

Kullanılacak bir dizi para birimi oluşturun, örneğin "EUR" "USD" "JPY"
Ardından, bu setten olası tüm kombinasyonların çiftlerini yapmak için işlevi kullanın, örneğin "EURUSD" "EURJPY" "USDEUR" "USDJPY" "JPYEUR" "JPYUSD"
Ve her bir kombinasyonla, analiz edilen sembol adına bu kombinasyonun bir tekrarı olup olmadığını kontrol edersiniz. Bir olay var - altı harfli isim bulundu.

Herkes için güzel bir şey yapın, GetForexName işlevini ekleyin

 
prostotrader :

Teşekkürler, ancak çiftin sadece "çıplak" adını (6 karakter) almam gerekiyor.

Belki birinin hazır bir çözümü vardır?

Katma

Çiftin kendisinden önce herhangi bir şeye sahip olabilecekse bir sembolün nasıl analiz edileceği açık değil :(

fotokopi makineleri genellikle 2 parametre ön eki ve son eki kullanır (EURUSD'den önce veya sonra ek sembol)

 
prostotrader :

Teşekkürler, ancak çiftin sadece "çıplak" adını (6 karakter) almam gerekiyor.

Belki birinin hazır bir çözümü vardır?

Katma

Çiftin kendisinden önce herhangi bir şeye sahip olabilecekse bir sembolün nasıl analiz edileceği açık değil :(

DizeBul

 

komisyoncuya bağlı, beni bir tür uyuşukluk durumuna sokan bir vaka olduğunu hatırlıyorum - müşteri bir hata buldu ve sonra çıldırdım ve karakter tanıma için vahşi koltuk değneği yazmam gerektiğini düşündü

2016.10.16 13:08:51.633 2016.08.25 04:39 Uzman EURUSD(€) , M15: Sipariş Gönderme hatası 4106

2016.10.16 13:08:51.633 2016.08.25 04:40 Uzman EURUSD(€) , M15: OrderSend işlevi için bilinmeyen sembol adı EURUSD(ˆ)

 
prostotrader :

Forex'te esas olarak son ekleri olan semboller vardır, önekleri olan bu son derece nadirdir, ancak temel (çift) her zaman büyük harflerle yazılır ve tüm postscript'ler küçüktür, bu yüzden bundan başlayabilirsiniz.

 
Vitaly Muzichenko :

Forex'te esas olarak son ekleri olan semboller vardır, önekleri olan bu son derece nadirdir, ancak temel (çift) her zaman büyük harflerle yazılır ve tüm postscript'ler küçüktür, bu yüzden bundan başlayabilirsiniz.

Özellikle her şeyi aynı StringToLower veya StringToUpper vakasına dönüştürmek ve StringFind'i aramak için bir giriş parametresiyse, daha güvenilirdir. O zaman nereye ve neyin eklendiği önemli değil.

 

yalnızca döviz çiftleri kullanıyorsanız:

SymbolInfoString() işlevi için

ENUM_SYMBOL_INFO_STRING

tanımlayıcı

Tanım

Emlak Tipi

SYMBOL_BASIS

Türev için dayanak varlığın adı

sicim

SYMBOL_CURRENCY_BASE

Enstrümanın temel para birimi

sicim

SYMBOL_CURRENCY_PROFIT

kar para birimi

sicim

SYMBOL_CURRENCY_MARGIN

Teminatın hesaplandığı para birimi

sicim

SYMBOL_BANK

Mevcut teklif kaynağı

sicim

SYMBOL_DESCRIPTION

Sembolün dize açıklaması

sicim

SYMBOL_FORMULA

Özel bir sembolün fiyatını oluşturmak için formül

sicim

SYMBOL_ISIN

Uluslararası menkul kıymet tanımlama kodları sistemindeki alım satım sembolünün adı ISIN'dir (Uluslararası Menkul Kıymet Kimlik Numarası). Uluslararası Güvenlik Tanımlama Kodu, bir güvenliği benzersiz şekilde tanımlayan 12 basamaklı alfasayısal bir koddur. Bu sembol özelliğinin varlığı ticaret sunucusu tarafında belirlenir.

sicim

SYMBOL_PAGE

Sembol hakkında bilgi içeren web sayfasının adresi. Bu adres, terminalde sembol özelliklerini görüntülerken bir bağlantı olarak görüntülenecektir.

sicim

SYMBOL_PATH

Sembol ağacındaki yol

sicim

 
Konstantin Nikitin :

Özellikle her şeyi aynı StringToLower veya StringToUpper vakasına dönüştürmek ve StringFind'i aramak için bir giriş parametresiyse, daha güvenilirdir. O zaman nereye ve neyin eklendiği önemli değil.

Ama görevi anlamıyorum, uzunluğundan bağımsız olarak orada bir sembolü hemen değiştirmek neden imkansız?