CustomSymbolCreate

Söz konusu grupta belirtilen ada sahip özel bir sembol oluşturur.

bool  CustomSymbolCreate(
   const string     symbol_name,         // özel sembol adı
   const string     symbol_path="",      // sembolün içinde oluşacağı grubun adı
   const string     symbol_origin=NULL   // özel bir sembol oluşturmak için temel olarak kullanılan sembolün adı
   );

Parametreler

symbol_name

[in]  Özel sembol adı. Sembolün içinde bulunduğu grupları veya alt grupları içermemelidir.

symbol_path=""

[in]  Sembolün bulunduğu grubun ismi.

symbol_origin=NULL

[in]  Oluşturulan özel sembole özelliklerinin kopyalanacağı sembolün adı. Özel bir sembol oluşturulduktan sonra, uygun fonksiyonlar kullanılarak herhangi bir özellik değeri gerekli bir değerle değiştirilebilir.

Geri dönüş değeri

true – başarı, aksi takdirde – false. Hata hakkında bilgi edinmek için, GetLastError() fonksiyonunu çağırın.

Not

Tüm özel semboller farklı Özel bölümde oluşturulur. Bir grup adı belirtilmezse (CustomSymbolCreate fonksiyonunda symbol_path parametresi boş bir dize veya NULL içeriyorsa), Özel bölüm kökünde özel bir sembol oluşturulur. Burada, grupların ve alt grupların klasör ve alt klasörler olarak görüntülenebildiği dosya sistemi ile bir benzetme yapabiliriz

Sembol ve grup adları; noktalama işaretleri, boşluklar veya özel karakterler içermeyen Latin harflerini içerebilir (yalnızca ".", "_", "&" ve "#" içerebilir) <, >, :, ", /, |, ?, * karakterlerinin kullanılması önerilmez.

Özel sembol adı, içinde oluşturulduğu grubun adına bakılmaksızın benzersiz olmalıdır. Aynı ada sahip bir sembol zaten mevcutsa, CustomSymbolCreate() fonksiyonu 'false' değerini geri döndürürken, bir sonraki GetLastError() çağrısı 5300 hatasını (ERR_NOT_CUSTOM_SYMBOL) veya 5304 hatasını (ERR_CUSTOM_SYMBOL_EXIST) geri döndürür.

Sembol adının uzunluğu 31 karakteri geçmemelidir. Aksi takdirde; CustomSymbolCreate(), 'false' geri değerini döndürür ve 5302 - ERR_CUSTOM_SYMBOL_NAME_LONG hatasını etkinleştirir.

symbol_path parametresi iki şekilde ayarlanabilir:

  • isimsiz bir özel sembolün içinde olduğu grubun sadece bir ismi, örneğin - "CFD\\Metals" Hataları önlemek için bu seçeneği kullanmak en iyisidir.
  • veya <grup> ismi + grup ayırıcı "\\"+<özel sembol ismi>, örneğin - "CFD\\Metals\\Platinum". Bu durumda, grup adı özel sembolün tam adı ile bitmelidir. Uyumsuzluk durumunda, özel sembol hala oluşturulur, ancak amaçlanan grupta oluşturulmaz. Örneğin, eğer symbol_path="CFD\\Metals\\Platinum" ve symbol_name="platinum" (kayıt hatası), bu durumda "Custom\CFD\Metals\Platinum" grubunda "platinum" isimli bir özel sembol oluşturulur. SymbolInfoGetString ("platinum", SYMBOL_PATH) fonksiyonu "Custom\CFD\Metals\Platinum\platinum" değerini geri döndürür.

 

SYMBOL_PATH özelliğinin sonunda sembol adının bulunduğu yolu geri döndürür. Bu nedenle, birebir aynı grupta özel bir sembol oluşturmak istiyorsanız, değişiklik yapılmadan kopyalanamaz. Bu durumda, yukarıda açıklanan sonucu elde etmemek için sembol adını kesmek gerekir.

Eğer var olmayan bir sembol symbol_origin parametresi olarak ayarlanmışsa; özel sembol, symbol_origin parametresi ayarlanmamış gibi boş olarak oluşturulur. Bu durumda, 4301 - ERR_MARKET_UNKNOWN_SYMBOL hatası etkinleşir.

symbol_path parametre uzunluğu, "Custom\\", "\\" grup ayırıcıları ve sonunda belirtilmişse sembol adını dikkate alarak 127 karakteri geçmemelidir.

 

Örnek:

//+------------------------------------------------------------------+
//|                                           CustomSymbolCreate.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#define   CUSTOM_SYMBOL_NAME     Symbol()+".C"  // özel sembol adı
#define   CUSTOM_SYMBOL_PATH     "Forex"        // sembolün oluşturulacağı grubun adı
#define   CUSTOM_SYMBOL_ORIGIN   Symbol()       // özel sembolün temel alınacağı sembolün adı
 
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//--- özel sembol oluşturulamadıysa, bunu günlükte bildir
   if(!CustomSymbolCreate(CUSTOM_SYMBOL_NAMECUSTOM_SYMBOL_PATHCUSTOM_SYMBOL_ORIGIN))
     {
      Print("CustomSymbolCreate() failed. Error "GetLastError());
      return;
     }
 
//--- oluşturulan sembolün varlığını kontrol et ve oluşturulduğu grubu al
   bool   customfalse;
   bool   exist = SymbolExist(CUSTOM_SYMBOL_NAMEcustom);
   string path  = SymbolInfoString(CUSTOM_SYMBOL_NAMESYMBOL_PATH);
 
//--- sembol oluşturma sonucunu ve grubun adını (belirtilen ve sembol özelliklerinden elde edilen) günlüğe yazdır
   PrintFormat("Custom symbol '%s' created\n"+
               "Symbol '%s' is exist: %s\n"+
               "Symbol '%s' is custom: %s\n"+
               "Path specified in the settings: '%s'\n"+
               "Path returned from the 'SYMBOL_PATH' property: '%s'",
               CUSTOM_SYMBOL_NAME
               CUSTOM_SYMBOL_NAME, (string)exist
               CUSTOM_SYMBOL_NAME, (string)custom,
               CUSTOM_SYMBOL_PATH,
               path);
 
//--- iki saniye bekle, oluşturulan sembolü sil ve bunu günlüğe bildir
   Sleep(2000);
   ResetLastError();
   bool deleted = CustomSymbolDelete(CUSTOM_SYMBOL_NAME);
   Print(deleted ? StringFormat("Custom symbol '%s' removed"CUSTOM_SYMBOL_NAME) : StringFormat("CustomSymbolDelete() failed. Error ",GetLastError()));
   /*
   sonuç:
   Custom symbol 'EURUSD.Ccreated
   Symbol 'EURUSD.Cis existtrue
   Symbol 'EURUSD.Cis customtrue
   Path specified in the settings: 'Forex'
   Path returned from the 'SYMBOL_PATHproperty: 'Custom\Forex\EURUSD.C'
   Custom symbol 'EURUSD.Cremoved
   */
  }

 

Ayrıca bakınız

SymbolName, SymbolSelect, CustomSymbolDelete