Denetimler, cBot'lar, göstergeler ve eklentilerle ilgili belirli etkileşimleri etkinleştirir. Aşağıdaki kılavuzu kullanarak, doğrudan bir grafik üzerinde kolayca temel ve gelişmiş kullanıcı arayüzü denetimleri oluşturabilirsiniz.
Düğmeler, metin blokları, metin kutuları ve şekiller gibi popüler denetimleri temsil eden çeşitli yerleşik sınıflar vardır. Ancak, özel denetimler de oluşturabilirsiniz.
Yukarıdaki göstergeyi oluşturur ve bir örnek oluşturursanız, grafiğin tam ortasında gri bir Bana tıkla düğmesi görmelisiniz.
Denetimler ve grafik nesneleri arasındaki fark
Önceki bir bölümde grafik nesnelerini zaten ele almıştık. Denetimler, kullanıcıların cBot'lar ve göstergelerle etkileşim kurmasını sağlar. Tersine, grafik nesneleri işlem grafiğine veya ayrılmış bir gösterge çıktı penceresine bir şeyler çizme fırsatı sunar.
Grafik denetimleri ControlBase sınıfından türetilirken, grafik nesneleri ChartObject sınıfından türetilir.
Grafik denetimleri, farklı hizalama seçenekleri kullanılarak statik olarak konumlandırılır. Grafik nesneleri de aynı şekilde konumlandırılabilirken, konumları belirli X ve Y koordinatlarına bağlı olarak dinamik olarak da değişebilir.
Grafik nesnelerine benzer şekilde, grafik denetimleri hem ana grafiğe hem de herhangi bir gösterge çıktı penceresine (varsa) eklenebilir. Böyle bir konumlandırma örneği aşağıda verilmiştir:
Bir gösterge örneği oluşturduktan sonra, gösterge çıktı penceresinde Bana tıkla düğmesini görmelisiniz.
ColorPicker
ColorPicker denetimi, trader'ların cTrader'daki anahtar unsurlar veya nesneler için tercih ettikleri rengi seçmelerini sağlar. Örneğin, bir geliştirici, trend çizgileri çizen bir cBot'a ColorPicker denetimini entegre ederek kullanıcıların her bir trend çizgisi için tercih ettikleri rengi seçmelerini sağlayabilir. Bu kurulum, trader'ların çeşitli trend çizgisi türleri arasında ayrım yapmasını kolaylaştırır.
Grafiklere gösterge ekleyen bir eklenti de ColorPicker denetimini uygulayabilir, çünkü bu özellik kullanıcıların farklı gösterge çizgileri için bir renk seçmesine olanak tanır.
Kullanıcılar renk karesine tıkladığında, renk seçici görünür. Kullanıcılar daha sonra standart ve özel renkler arasında seçim yapabilir.
The DropZone denetimi, trader'ların cBot'lar, göstergeler veya eklentiler içeren sürükle ve bırak eylemleri gerçekleştirmesini sağlar. Bu denetimi algoritmanızda uygulamak için DropZone sınıfını kullanın. DropZone denetimi, diğer tüm denetimler gibi manipüle edilebilir.
Bir kullanıcı uyumlu bir dosyayı veya klasörü kutuya bıraktığında, Dropped olayı tetiklenir. Bir kullanıcı kutuya bir klasör veya birden fazla klasör bıraktığında, yalnızca FilterExtensions içinde belirtilen uzantılara sahip uyumlu dosyalar işlenir ve kopyalanır.
Not
Bırakılan dosyalar genellikle şu konuma kopyalanır ve kaydedilir: ..\Documents\cAlgo\Data\{AlgoType}\{AlgoName}\Selected Files\
cBot örnekleri için konum yukarıdakinden farklıdır: ..\Documents\cAlgo\Data\cBots\{cBotName}\{unique-instance-number}\Selected files\
Bu eklenti kodu, İşlem İzleme'ye bir DropZone denetimi nasıl ekleneceğini gösterir:
usingSystem;usingSystem.Drawing;usingcAlgo.API;usingcAlgo.API.Collections;usingcAlgo.API.Indicators;usingcAlgo.API.Internals;namespacecAlgo.Plugins{[Plugin(AccessRights = AccessRights.None)]publicclassTradeWatchTabSample:Plugin{protectedoverridevoidOnStart(){vartab=TradeWatch.AddTab("DropZone");var_border=newBorder{BorderThickness=3,BorderColor=Color.DarkGray,Opacity=0.7,HorizontalAlignment=HorizontalAlignment.Center,VerticalAlignment=VerticalAlignment.Center,Height=200,Width=350,BackgroundColor=Color.LightGray};var_textBlock=newTextBlock{Text="Drag your files here",Opacity=1,ForegroundColor=Color.DarkGray,FontSize=16,VerticalAlignment=VerticalAlignment.Center,HorizontalAlignment=HorizontalAlignment.Center};var_dropzone=newDropZone{FilterExtensions=newstring[]{"txt","algo","csv"},IsDirectoryDropAllowed=true,IsVisible=true,IsEnabled=true};_border.Child=_textBlock;_dropzone.Child=_border;// _dropzone.Child = _textBlock;tab.Child=_dropzone;_dropzone.Dropped+=Dropped_file;}privatevoidDropped_file(DroppedEventArgsobj){Print("File has been added!");}}}
ProgressBar
ProgressBar denetimi, devam eden bir işlemin ilerlemesini gösterir. İlerleme çubukları, algoritmaları daha kullanıcı dostu hale getirir ve trader'ların belirli işlemler için bekleme süresine ilişkin beklentilerini yönetmeye yardımcı olur.
cTrader Algo API, geliştiricilerin iki tür ProgressBar denetimi eklemesine olanak tanır: sonsuz denetim ve belirli denetim.
Sonsuz denetim
Sonsuz denetimi aşağıdaki durumlarda kullanmak isteyebilirsiniz:
Bir işlem için bekleme süresini belirleyemiyorsunuz.
Bir işlemin ilerlemesini algılayamıyorsunuz.
Bir işlemin ne kadar süreceğini belirtmek istemiyorsunuz.
Belirli denetim
Bu denetimi, bir işlem için bekleme süresini belirleyebildiğinizde ve kullanıcıların bu süreye dayalı bir gösterge görmesini istediğinizde kullanmak isteyebilirsiniz.
İşlemin ilerlemesini göstermek için Value özelliğini kullanarak bir değer ayarlayın. İlerleme çubuğu yüzdesini ayarlamak için Minimum ve Maximum özelliklerini kullanın.
Aşağıdaki eklenti kodu, hem sonsuz hem de belirli (yeşil) denetimler kullanarak bir ilerleme çubuğunun nasıl oluşturulacağını gösterir:
cTrader Algo API, kullanıcıların bir algoritma için dosya seçmesini sağlamak amacıyla OpenFileDialog arayüzünü sunar. Bir kullanıcı çıkan pencerede bir dosya seçtiğinde, dosya algoritmanın Selected files klasörüne kopyalanır. Bir algoritma, Selected files klasöründeki dosyalarla kısıtlama olmaksızın çalışabilir.
İpucu
Önemli veri dosyalarını, yedekleme veya yapılandırma dosyalarını, özel göstergeleri veya komut dosyalarını yüklemeniz gerektiğinde OpenFileDialog işlevini kullanın.
Aşağıdaki kod, bir göstergede OpenFileDialog iletişim kutusunun nasıl kullanılacağını gösterir:
cTrader Algo API, kullanıcıların bir algoritma için bir klasör belirtmesini sağlamak amacıyla OpenFolderDialog arayüzünü sunar. Bir kullanıcı çıkan pencerede bir klasör seçtiğinde, seçilen klasördeki tüm dosyalar ve dosyaları içeren klasörler algoritmanın Selected files klasörüne kopyalanır.
İpucu
Kritik veri dosyaları, yedekleme veya yapılandırma dosyaları, özel göstergeler veya komut dosyaları içeren bir klasörü yüklemeniz gerektiğinde OpenFolderDialog işlevini kullanın.
Seçilen dosyalar ve klasörler genellikle Selected files klasörüne kopyalanır, çünkü bir algoritma AccessRights değeri None olarak ayarlanmış olsa bile o klasördeki öğelerle çalışabilir.
Not
Bir algoritmanın Selected files klasörü genellikle şu yoldadır: ..\Documents\cAlgo\Data\{AlgoType}\{AlgoName}\Selected files\
Bir cBot örneği için Selected files klasörü yukarıdakinden farklıdır: ..\Documents\cAlgo\Data\cBots\{cBotName}\{Instance-Id}\Selected files\
Aşağıdaki kod, bir göstergede OpenFolderDialog iletişim kutusunun nasıl kullanılacağını gösterir:
usingSystem;usingcAlgo.API;namespacecAlgo{[Indicator(AccessRights = AccessRights.None, IsOverlay = true)]publicclassOpenFolderDialogExample:Indicator{privateOpenFolderDialog_openFolderDialog;protectedoverridevoidInitialize(){_openFolderDialog=newOpenFolderDialog(){InitialDirectory=Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),Title="My Open Folder Dialog Title"};varshowOpenFolderDialog=newButton{Text="Show Open Folder Dialog"};showOpenFolderDialog.Click+=showOpenFolderDialog_Click;varpanel=newStackPanel{Orientation=Orientation.Vertical,HorizontalAlignment=HorizontalAlignment.Center,VerticalAlignment=VerticalAlignment.Center};panel.AddChild(showOpenFolderDialog);Chart.AddControl(panel);}privatevoidshowOpenFolderDialog_Click(ButtonClickEventArgsobj){varresult=_openFolderDialog.ShowDialog();Print($"Result: {result} | FolderName: {_openFolderDialog.FolderName}");}publicoverridevoidCalculate(intindex){}}}
SaveFileDialog
cTrader Algo API, kullanıcıların dosyaları (yerel olarak) bilgisayarlarına kaydetmesini sağlamak amacıyla SaveFileDialog arayüzünü sunar. İlgili pencere göründüğünde, bir kullanıcı dosyayı kaydetmek istediği klasörü seçer ve dosya için bir ad girer. Dosya daha sonra belirtilen konuma kaydedilir.
İpucu
Aşağıdakilerden herhangi birini yapmanız gerektiğinde SaveFileDialog işlevini kullanın:
Performans raporlarını, geriye dönük test sonuçlarını, yapılandırma dosyalarını veya optimizasyon verilerini kaydedin.
İşlem günlüklerini, operasyon günlüklerini veya genel kullanıcı etkinliği verilerini dışa aktarın.
Özel göstergeleri, grafikler ve görselleştirmeler için verileri veya bir strateji için parametreleri depolayın.
Aşağıdaki kod, bir göstergede SaveFileDialog iletişim kutusunun nasıl kullanılacağını gösterir:
usingSystem;usingcAlgo.API;usingSystem.Text;namespacecAlgo{[Indicator(AccessRights = AccessRights.None, IsOverlay = true)]publicclassSaveFileDialogExample:Indicator{privateSaveFileDialog_saveFileDialog;protectedoverridevoidInitialize(){_saveFileDialog=newSaveFileDialog(){InitialDirectory=Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),Title="My Save File Dialog Title"};varshowSaveFileDialogText=newButton{Text="Show Save File Dialog (Set Content as text)"};varshowSaveFileDialogBytes=newButton{Text="Show Save File Dialog (Set Content as bytes)"};showSaveFileDialogText.Click+=showSaveFileDialogText_Click;showSaveFileDialogBytes.Click+=showSaveFileDialogBytes_Click;varpanel=newStackPanel{Orientation=Orientation.Vertical,HorizontalAlignment=HorizontalAlignment.Center,VerticalAlignment=VerticalAlignment.Center};panel.AddChild(showSaveFileDialogText);panel.AddChild(showSaveFileDialogBytes);Chart.AddControl(panel);}privatevoidshowSaveFileDialogText_Click(ButtonClickEventArgsobj){varresult=_saveFileDialog.ShowDialog();Print($"Result: {result}");if(result!=FileDialogResult.Cancel){_saveFileDialog.WriteToFile("Test in text");}}privatevoidshowSaveFileDialogBytes_Click(ButtonClickEventArgsobj){varresult=_saveFileDialog.ShowDialog();Print($"Result: {result}");if(result!=FileDialogResult.Cancel){_saveFileDialog.WriteToFile(Encoding.UTF8.GetBytes("Test in bytes"));}}publicoverridevoidCalculate(intindex){}}}
Sürüklenebilir denetimler
Grafik alanı sürüklenebilir denetimi
ChartDraggable ve ChartDraggables arayüzleri, diğer denetimleri ve farklı öğeleri bir grafiğe barındırabilen sürüklenebilir bir denetim eklemenizi sağlayan türler sunar. Bu sürüklenebilir denetimler, kullanıcıların çeşitli grafik öğeleriyle etkileşim kurmasını kolaylaştırır.
Not
Sürüklenebilir bir denetim, yalnızca eklendiği grafik içinde taşınabilir veya yeniden konumlandırılabilir.
Bu kod, bir grafik içinde taşınabilen iki denetim ekleyen bir göstergenin nasıl oluşturulacağını gösterir:
usingSystem;usingcAlgo.API;usingcAlgo.API.Collections;usingcAlgo.API.Indicators;usingcAlgo.API.Internals;namespacecAlgo{[Indicator(AccessRights = AccessRights.None)]publicclassDragControl:Indicator{protectedoverridevoidInitialize(){vardraggable=Chart.Draggables.Add();vardraggable2=IndicatorArea.Draggables.Add();draggable.Child=GetDraggableChildWebView();draggable2.Child=GetDraggableChildText();draggable.LocationChanged+=draggable_LocationChanged;draggable2.LocationChanged+=draggable2_LocationChanged;}publicoverridevoidCalculate(intindex){// Calculate value at specified index// Result[index] = }privateStackPanelGetDraggableChildWebView(){varstackPanel=newStackPanel{HorizontalAlignment=HorizontalAlignment.Center,VerticalAlignment=VerticalAlignment.Center,BackgroundColor=Color.Gold};varwebView=newWebView(){Height=500,Width=300};webView.Loaded+=webView_Loaded;stackPanel.AddChild(webView);returnstackPanel;}privateStackPanelGetDraggableChildText(){varstackPanel=newStackPanel{HorizontalAlignment=HorizontalAlignment.Center,VerticalAlignment=VerticalAlignment.Center,BackgroundColor=Color.Gold};vartext_block=newTextBlock{Text="Testing draggable controls",Margin=5,ForegroundColor=Color.Black,FontWeight=FontWeight.ExtraBold};stackPanel.AddChild(text_block);returnstackPanel;}privatevoidwebView_Loaded(WebViewLoadedEventArgsobj){obj.WebView.NavigateAsync("https://www.youtube.com/");}privatevoiddraggable_LocationChanged(ChartDraggableLocationChangedEventArgsobj){Print($"Draggable '{obj.Draggable.Id}' location changed to: ({obj.Draggable.X}, {obj.Draggable.Y})");}privatevoiddraggable2_LocationChanged(ChartDraggableLocationChangedEventArgsobj){Print($"Draggable '{obj.Draggable.Id}' location changed to: ({obj.Draggable.X}, {obj.Draggable.Y})");}}}
Uygulama penceresi sürüklenebilir denetimi
ApplicationDraggable ve ApplicationDraggables arayüzleri, tüm cTrader uygulama penceresi boyunca ayrı ayrı taşınabilen kayan denetimler eklemek için kullanılan türleri sağlar. Bu tür denetimler, etkileşimli ve dinamik kullanıcı arayüzleri oluşturmanızı sağlar.
Not
Üç algoritma türünden yalnızca eklentilerin uygulama genelinde sürüklenebilir denetimleri uygulamasına izin verilir.
Bu kod, tüm cTrader kullanıcı arayüzü boyunca taşınabilen iki ayrı pencerede bir WebView bileşeni ve metin bloğu ekleyen bir eklentinin nasıl oluşturulacağını gösterir:
TabControl sınıfı, bir algoritma için birden çok sekme oluşturmanızı sağlayan türler sunar. Bu sekmeler, ilgili öğeleri bir arada tutmak veya işlevler için ayrı görünümler sunmak amacıyla kullanılabilir.
Bu kod, Aktif Sembol Paneline eklenen bir eklentide sekmelerin nasıl kullanılacağını gösterir:
Özel bir denetim, özünde birkaç önceden tanımlanmış denetimden oluşan bir denetimdir. Başka bir deyişle, içeriğini diğer denetimlerin oluşturduğu bir denetimdir.
Özel denetimler, yerleşik denetimlere benzer şekilde yeniden kullanılabilir sınıflar olarak işlev görür.
usingcAlgo.API;namespaceChartControlsTest{[Indicator(IsOverlay = true, AccessRights = AccessRights.None)]publicclassChartControls:Indicator{[Parameter("# Of Text Areas", DefaultValue = 4)]publicintNumberOfTextAreas{get;set;}protectedoverridevoidInitialize(){varpanel=newWrapPanel{Orientation=Orientation.Horizontal,HorizontalAlignment=HorizontalAlignment.Center,VerticalAlignment=VerticalAlignment.Center};for(inti=0;i<NumberOfTextAreas;i++){vartextArea=newTextArea{HorizontalAlignment=HorizontalAlignment.Right,VerticalAlignment=VerticalAlignment.Stretch,Margin=5,};panel.AddChild(textArea);}Chart.AddControl(panel);}publicoverridevoidCalculate(intindex){}}publicclassTextArea:CustomControl{privatereadonlyTextBox_textBox;publicTextArea(){_textBox=newTextBox{TextAlignment=TextAlignment.Left,TextWrapping=TextWrapping.Wrap,AcceptsReturn=true,AcceptsTab=true,Width=300,Height=200,};AddChild(_textBox);}}}
Bu göstergenin bir örneği, ana grafiğin tam ortasında dört metin kutusu görüntülemelidir.
Denetimleri panellerle düzenleyin
Denetimlerle çalışmayı daha kolay hale getirmek için, birkaç denetimi kullanıcı arayüzünde kendi konumuna sahip ayrı bir gruba yerleştirmek isteyebilirsiniz. Bunu yapmak için Panels sınıfını ve türevlerini kullanabilirsiniz.
Bir paneli, içeriği başka denetimler olan bir denetim olarak düşünün. cTrader, temel Panels sınıfından (ki bu sınıfın kendisi Control sınıfından miras alır) miras alan beş farklı sınıfı destekler:
Canvas
DockPanel
Grid
StackPanel
WrapPanel
Yukarıdaki sınıfların her biri, aşağıda tartışıldığı gibi farklı panel düzenleri ve konumlandırma stratejileri kullanır.
Tuval
Tuval, denetimlerin belirli X ve Y koordinatlarına göre konumlandırılmasına olanak tanıyan bir paneldir.
Özellikle, X ve Y eksenleri, grafik nesneleri veya çizimler tarafından kullanılanlardan farklıdır. Canvas sınıfı tarafından kullanılan X ve Y koordinatları, grafiğin sol üst köşesinden (0, 0) başlayarak sayısal değerleri temsil eder.
usingcAlgo.API;namespaceChartControlsTest{[Indicator(IsOverlay = true, AccessRights = AccessRights.None)]publicclassChartControls:Indicator{[Parameter(DefaultValue = "Click Me")]publicstringText{get;set;}[Parameter(DefaultValue = 0)]publicdoubleLeft{get;set;}[Parameter(DefaultValue = 0)]publicdoubleTop{get;set;}[Parameter(DefaultValue = 0)]publicdoubleMargin{get;set;}[Parameter(DefaultValue = 10)]publicdoublePadding{get;set;}protectedoverridevoidInitialize(){varbutton=newButton{Text=Text,Left=Left,Top=Top,Margin=Margin,Padding=Padding};button.Click+=Button_Click;varcanvas=newCanvas();/* We add our button control to the canvas panel. */canvas.AddChild(button);// We add our canvas panel to the chart.Chart.AddControl(canvas);}privatevoidButton_Click(ButtonClickEventArgsobj){obj.Button.Text="You clicked me, thanks";}publicoverridevoidCalculate(intindex){}}}
Yukarıdaki göstergenin bir örneğini oluşturduğunuzda, grafiğin sol üst köşesinde Bana tıkla düğmesini görmelisiniz.
Bir denetimin Top özelliği, Y eksenindeki konumunu belirler. Buna karşılık, Left özelliği, X eksenindeki konumunu tanımlar.
Yukarıdaki kod ayrıca Padding ve Margin özelliklerini de kullanır. Padding, denetim içeriği ile dış kenarlıkları arasındaki mesafeyi ifade eder. Margin, denetim ile üst öğesinin kenarlıkları arasındaki mesafedir. Padding ve Margin özellikleri, yalnızca tuval sınıfı için değil, tüm paneller için geçerlidir. Denetimleriniz arasındaki boşluğu yönetmek için kullanışlıdırlar.
Çoğu durumda, Canvas sınıfı yalnızca az sayıda denetimi gruplandırmak için kullanılır.
Yerleştirme paneli
DockPanel sınıfı, bir denetimi grafikte statik bir konuma yerleştirmek (dock) için kullanılır. Dört olası yerleştirme konumu vardır:
Üst
Alt
Sol
Sağ
Her denetimin bir Dock özelliği vardır. DockPanel sınıfını kullanırken, bir denetimi bir DockPanel içine konumlandırmak için bu özelliği kullanabilirsiniz. Bu, aşağıdaki örnekte gösterilmiştir:
usingcAlgo.API;namespaceChartControlsTest{[Indicator(IsOverlay = true, AccessRights = AccessRights.None)]publicclassChartControls:Indicator{[Parameter(DefaultValue = Dock.Top)]publicDockTextBoxDock{get;set;}[Parameter(DefaultValue = Dock.Bottom)]publicDockButtonDock{get;set;}privateTextBox_textBox;protectedoverridevoidInitialize(){_textBox=newTextBox{Margin=5,Text="Write here...",ForegroundColor=Color.Yellow,Dock=TextBoxDock,Width=200};varbutton=newButton{Text="Tell what I wrote?",Dock=ButtonDock,Width=200};button.Click+=Button_Click;vardockPanel=newDockPanel{HorizontalAlignment=HorizontalAlignment.Center,VerticalAlignment=VerticalAlignment.Center,};dockPanel.AddChild(_textBox);dockPanel.AddChild(button);Chart.AddControl(dockPanel);}privatevoidButton_Click(ButtonClickEventArgsobj){obj.Button.Text=$"You wrote: {_textBox.Text}";}publicoverridevoidCalculate(intindex){}}}
Bu göstergenin bir örneğini oluşturduğunuzda, grafiğin merkezinde bir metin alanı ve tıklanabilir bir düğme içeren bir yerleştirme paneli görmelisiniz.
Yerleştirme panellerinin yatay veya dikey olarak doldurulabileceğini unutmayın. Bu hizalamaların ikisini aynı anda kullanamazsınız. Yerleştirme paneli yönü, bir DockPanel içindeki ilk denetim ayarlanırken otomatik olarak belirlenir. İlk denetimin Dock özelliği Top veya Bottom olarak ayarlanırsa, tüm DockPanel dikey olarak yönlendirilir ve bunun tersi de geçerlidir.
Yığın paneli
Yığın panelleri, basitlikleri ve kullanılabilirlikleri nedeniyle en sık kullanılan denetimlerden biridir. Yığın panelleri, alt denetimleri yatay veya dikey olarak tek tek hizalar. Aşağıda gösterildiği gibi, yalnızca yönünü ayarlamanız gerekir ve sınıf geri kalanını yönetir:
Bir gösterge örneği oluşturduktan sonra, ana grafiğin sağ alt köşesinde iki metin alanı ve bir Gönder düğmesi içeren yatay bir yığın paneli görmelisiniz.
Sarma paneli
Sarma panelleri çoğunlukla yığın panelleriyle aynıdır. Ancak, bir sarma panelinin tüm öğelerini sığdırmak için yeterli alan olmadığında, kalan denetimleri Y eksenindeki bir sonraki satıra otomatik olarak sarar.
Izgara
Izgaraları, belirli sayıda sütun ve satıra sahip elektronik tablolar olarak düşünün. Izgaraları kullanırken, her ayrı hücreye denetim ekleyebilirsiniz.
Aşağıda gösterildiği gibi, Grid sınıfının bir örneğini oluşturduğunuzda, satır ve sütun sayısını integer argümanları olarak geçirirsiniz. Yeni alt öğeler veya denetimler eklerken, benzer şekilde alt satır ve sütun sayısını belirtmeniz gerekir.
Yukarıdaki göstergenin bir örneğini oluşturduğunuzda, grafiğin tam merkezinde 10x2'lik bir ızgara görmelisiniz.
Denetimleri fiyat ve zaman koordinatları içinde konumlandırma
Panel denetimlerine ek olarak, cTrader denetimler için fiyat ve zaman koordinatlarının doğrudan grafik alanında belirtilmesine olanak tanır. AddControl() ve MoveControl() yöntemleri, algo geliştiricilerine bu işlevselliği sağlar.
Grafik denetimlerinizin koordinatlarını tercihlerinize göre yönetmek için aşağıdaki yöntem aşırı yüklemelerini kullanın.
Mutlak çubuk dizini ve fiyat (x, y) koordinatlarında grafiğe veya gösterge alanına bir grafik denetimi eklemek için.
Mutlak zaman (x) koordinatında grafiğe veya gösterge alanına bir grafik denetimi eklemek için.
1
voidAddControl(ControlBasecontrol,DateTimetime)
Mutlak zaman (x) koordinatında grafiğe veya gösterge alanına bir grafik denetimi taşımak için.
1
voidMoveControl(ControlBasecontrol,DateTimetime)
Mutlak çubuk dizini (x) koordinatında grafiğe veya gösterge alanına bir grafik denetimi eklemek için.
1
voidAddControl(ControlBasecontrol,intbarIndex)
Mutlak çubuk dizini (x) koordinatında grafiğe veya gösterge alanına bir grafik denetimi taşımak için.
1
voidMoveControl(ControlBasecontrol,intbarIndex)
Mutlak fiyat (y) koordinatında grafiğe veya gösterge alanına bir grafik denetimi eklemek için.
1
voidAddControl(ControlBasecontrol,doubley)
Mutlak fiyat (y) koordinatında grafiğe veya gösterge alanına bir grafik denetimi taşımak için.
1
voidMoveControl(ControlBasecontrol,doubley)
ControlBase parametre sınıfı, yukarıdaki imzalar uyarınca çağrılacak yöntem için başka herhangi bir alt sınıfı (Control, Button, vb.) içerebilir.
Aşağıdaki cBot örneği, grafikteki son çubuğun üzerine Bana tıkla! düğmesini ekler. Düğme, eklenen her yeni çubukla birlikte ileriye doğru hareket ettirilir. Düğmeye tıkladıktan sonra ekranda bir mesaj kutusu belirir.
Olası performans sorunları nedeniyle bir grafiğe eklenecek kök denetim sayısı 100 ile sınırlıdır. Bu sınırlama yalnızca bir algoritma örneği ve fiyata ve çubuklara bağlı denetimler için geçerlidir.
İç boşluk ve kenar boşluğu özellikleri
Margin özelliği, bir Control nesnesinin kenarlıkları ile üst öğesi (bir grafik, bir panel, bir kenarlık vb.) arasındaki boşluğu tanımlar.
Buna karşılık, Padding özelliği, denetim içeriği ile kenarlıkları arasındaki boşluğu belirler. Özellik değerlerini, farklı kenarlar için hepsinin farklı olacak şekilde değiştirebilirsiniz.
usingcAlgo.API;namespaceChartControlsTest{[Indicator(IsOverlay = true, AccessRights = AccessRights.None)]publicclassChartControls:Indicator{[Parameter(DefaultValue = "Click Me")]publicstringText{get;set;}[Parameter(DefaultValue = 0)]publicdoubleLeft{get;set;}[Parameter(DefaultValue = 0)]publicdoubleTop{get;set;}[Parameter(DefaultValue = 0, Group = "Margin")]publicdoubleLeftMargin{get;set;}[Parameter(DefaultValue = 0, Group = "Margin")]publicdoubleTopMargin{get;set;}[Parameter(DefaultValue = 0, Group = "Margin")]publicdoubleRightMargin{get;set;}[Parameter(DefaultValue = 0, Group = "Margin")]publicdoubleBottomMargin{get;set;}[Parameter(DefaultValue = 5, Group = "Padding")]publicdoubleLeftPadding{get;set;}[Parameter(DefaultValue = 5, Group = "Padding")]publicdoubleTopPadding{get;set;}[Parameter(DefaultValue = 5, Group = "Padding")]publicdoubleRightPadding{get;set;}[Parameter(DefaultValue = 5, Group = "Padding")]publicdoubleBottomPadding{get;set;}protectedoverridevoidInitialize(){varbutton=newButton{Text=Text,Left=Left,Top=Top,Margin=newThickness(LeftMargin,TopMargin,RightMargin,BottomMargin),Padding=newThickness(LeftPadding,TopPadding,RightPadding,BottomPadding)};button.Click+=Button_Click;varcanvas=newCanvas();canvas.AddChild(button);Chart.AddControl(canvas);}privatevoidButton_Click(ButtonClickEventArgsobj){obj.Button.Text="You clicked me, thanks";}publicoverridevoidCalculate(intindex){}}}
Bu göstergenin bir örneği, grafiğin sol üst köşesinde gri bir Bana tıkla düğmesi oluşturacaktır. Farklı kenar boşluğu ve iç boşluk değerlerinin denetimin nasıl görüntülendiğini tam olarak nasıl değiştirdiğini görmek için Örnek ekle veya Parametreleri değiştir pencerelerindeki parametreleri değiştirin.
Stiller
Stilleri kullanırken, birkaç farklı denetim türüne benzer bir görünüm verebilirsiniz. Bu, çok sayıda (beş veya daha fazla) denetimle uğraşırken özellikle kullanışlıdır.
Style sınıfı, Margin veya BackgroundColor gibi denetimlerin farklı özellikleri için değerler ayarlamaya olanak tanır. Daha sonra, bu değerleri birden çok başka denetim için bir şablon olarak yeniden kullanabilirsiniz.
Style sınıfını hiç kullanmadan birden çok denetim için tutarlı bir görünüm de oluşturabiliriz.
usingcAlgo.API;namespaceChartControlsTest{[Indicator(IsOverlay = true, AccessRights = AccessRights.None)]publicclassChartControls:Indicator{protectedoverridevoidInitialize(){vartextBoxStyle=newStyle();textBoxStyle.Set(ControlProperty.ForegroundColor,Color.Red);textBoxStyle.Set(ControlProperty.Margin,5);textBoxStyle.Set(ControlProperty.FontFamily,"Cambria");textBoxStyle.Set(ControlProperty.FontSize,12);textBoxStyle.Set(ControlProperty.Width,150);// Here we change the foreground color to Yellow if mouse hover over the textboxtextBoxStyle.Set(ControlProperty.ForegroundColor,Color.Yellow,ControlState.Hover);varfirstTextBox=newTextBox{Text="Type...",Style=textBoxStyle};varsecondTextBox=newTextBox{Text="Type...",Style=textBoxStyle};varthirdTextBox=newTextBox{Text="Type...",Style=textBoxStyle};varpanel=newStackPanel{Orientation=Orientation.Vertical,HorizontalAlignment=HorizontalAlignment.Center,VerticalAlignment=VerticalAlignment.Center};panel.AddChild(firstTextBox);panel.AddChild(secondTextBox);panel.AddChild(thirdTextBox);Chart.AddControl(panel);}publicoverridevoidCalculate(intindex){}}}
Görsel
Image kontrolü, yerel olarak depolanan bir görseli görüntülemek için kullanılabilir. Image kontrolü, .NET Bitmap sınıfını kullanır, bu da aşağıdaki gibi popüler görsel formatlarının çoğunu desteklediği anlamına gelir:
.PNG
.JPG
.BMP
.GIF
.TIFF
Daha fazla bilgi edinmek için .NET Bitmap sınıfı belgelerine bakın.
Bir Image kontrolünü kullanmak için Source özelliğini bir bayt dizisindeki (byte[]) görsel dosyası verilerine ayarlayın.
Yukarıdaki göstergenin bir örneğini başlattıktan sonra ana grafikte yeni bir şey görmemelisiniz. Ancak, (Görsel Dosya Yolu) parametresinin değeri olarak geçerli bir dosya yolu girerseniz, seçilen görseli ekranın ortasında görüntülenmiş olarak görmelisiniz.
Görselleri depolamak ve Image kontrolü aracılığıyla görüntülemek için proje kaynaklarınızı da kullanabilirsiniz. Bunu yapmak için Visual Studio'da proje kaynaklarını açın ve Kaynaklar sekmesine geçin. İçinde yeni bir kaynak oluşturun ve mevcut bir görseli ekleyin. Daha sonra, bu görseli Project_Name_Space.Properties.Resources._Image_Name özelliği aracılığıyla herhangi bir Image kontrolünde kaynak olarak kullanabileceksiniz.
Örnek olarak aşağıdaki görseli kopyalayın ve sisteminize "image.png" olarak kaydedin:
cTrader'da yeni bir gösterge oluşturun, adını "Görsel Örneği" olarak ayarlayın ve Visual Studio aracılığıyla açın. Daha sonra, logo göstergesi projesini bir kaynak olarak ekleyin. Bunu yapmak için projenize sağ tıklayın, Özellikler'i seçin ve Kaynaklar'a tıklayın, ardından Derleme kaynaklarını oluştur ve yönet'e tıklayın. logo.png dosyasını yeni açılan sekmeye kopyalayın.
Aşağıdaki kodu gösterge ana kaynak kodu dosyanıza kopyalayın: