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

 

Artık bunu FOREX'te de kullanabilirsiniz ( _BTCUSD_i gibi herhangi bir "çarpık" sembolü alı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)
{
   string s_base = SymbolInfoString ( Symbol (), SYMBOL_CURRENCY_BASE );
   if ( StringLen (s_base) == 3)
  {
     int base_pos = StringFind (a_str, s_base, 0 );
     if (base_pos > - 1 )
    {
       switch (base_pos)
      {
         case 0 :
         case 1 :
         case 2 :
           return ( StringSubstr (a_str, base_pos, 6 ));
         break ;
         default :
          {
             string left_str = StringSubstr (a_str, base_pos - 3 , 3 );
             string right_str = StringSubstr (a_str, base_pos + 3 , 3 );
             if (right_str == "" )
            {
               return ( StringSubstr (a_str, base_pos - 3 , 6 ));
            }
             else
             if ( StringLen (right_str) < 3 )
            {
               return ( StringSubstr (a_str, base_pos - 3 , 6 ));
            }
             else
            {
               bool is_match = true ;
               uchar uch_array[];
               int result = StringToCharArray (right_str, uch_array, 0 , WHOLE_ARRAY , CP_ACP );
               if (result == 4 )
              {
                 for ( int i= 0 ; i < result - 1 ; i++)
                {
                   if ((uch_array[i] < 65 ) || (uch_array[i] > 90 ))
                  {
                    is_match = false ;
                     break ;
                  } 
                }
                 if (is_match == true )
                {
                   return ( StringSubstr (a_str, base_pos, 6 ));  
                }
                 else
                {
                  is_match = true ;
                  result = StringToCharArray (left_str, uch_array, 0 , WHOLE_ARRAY , CP_ACP );
                   if (result == 4 )
                  {
                     for ( int i= 0 ; i < result - 1 ; i++)
                    {
                       if ((uch_array[i] < 65 ) || (uch_array[i] > 90 ))
                      {
                        is_match = false ;
                         break ;
                      } 
                    }
                     if (is_match == true )
                    {
                       return ( StringSubstr (a_str, base_pos - 3 , 6 ));  
                    }  
                  } 
                }
              }  
            }
          }
         break ;  
      }
    }
  }
   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 );
}
//+------------------------------------------------------------------+
 
prostotrader :

Artık bunu FOREX'te de kullanabilirsiniz ( _BTCUSD_i gibi herhangi bir "çarpık" sembolü alır)

kod tabanına

 
prostotrader :

Uzun zaman önce Magic'i otomatik olarak almak için bir eklenti dosyası yazdım.

Görev neydi?

lütfen "Forex bitti" mesajının olup olmadığını kontrol edin. "kavisli" karakterlerde

"EURUSD" de görünmüyor.

Temel karakter bir çiftte her zaman önce mi gelir?

Özel semboller her şeye sahip olabilir. Muhtemelen, bu tür kontrolleri özel olanlar üzerinde çalıştırmak en uygunudur.


not

için grafik tutamağını kullanmak, grafiğin yanlışlıkla kapatılması durumunda siparişlerin kaybedileceği anlamına gelir.

 
fxsaber :

"EURUSD" de görünmüyor.

not

düzeltildi

ZY'ye eklendi

daha iyi bir şey yaz

 
prostotrader :

düzeltildi

Şu an çalışıyor. Şimdi konunun pratik yönü hakkında birkaç söz duymak istiyorum.


Not "AUDNZD"...

 
fxsaber :

Şu an çalışıyor. Şimdi konunun pratik yönü hakkında birkaç söz duymak istiyorum.


Not "AUDNZD"...

65535 ek büyü kullanma yeteneği ile grafikteki danışman için otomatik olarak benzersiz bir Büyü oluşturur

Katma

FOREX'im yok

GetForexName işlevini doğrulama olmadan yazdım

 
prostotrader :

65535 ek büyü kullanma yeteneği ile grafikteki danışman için otomatik olarak benzersiz bir Büyü oluşturur

Peki ya danışman kesilseydi, pozisyonlar/emirler olduğu anda grafiği kapatsaydı?


Böyle bir şeyin Forex için neden işe yaramadığını tam olarak anlamadım

 bool SymbolIsExist( const string Symb = NULL )
{
   ResetLastError ();

   SymbolInfoInteger ((Symb == NULL ) ? _Symbol : Symb, SYMBOL_CUSTOM );

   return (:: GetLastError () != ERR_MARKET_UNKNOWN_SYMBOL );
}

string GetForexName( const string Symb )
{
   return (SymbolIsExist(Symb) ? SymbolInfoString (Symb, SYMBOL_CURRENCY_BASE ) + SymbolInfoString (Symb, SYMBOL_CURRENCY_PROFIT ) : NULL );
}

void OnStart ()
{
   Print (GetForexName( _Symbol ));
}
 
prostotrader :

FOREX'im yok

Yapın - MQ-Demo.

 
fxsaber :

Peki ya danışman kesilseydi, pozisyonlar/emirler olduğu anda grafiği kapatsaydı?


Bir pozisyon varsa, grafik kapatıldığında tüm veriler elde edilebilir ve bu sembol için bekleyen emirler basitçe "çivilenebilir".

Daha iyisi, şimdiye kadar kimse gelmedi (aynı sembolde birkaç danışman açmak için)

 
fxsaber :

Not "AUDNZD"...

Roboforex AUDNZD'da çalışıyor