WPF
Windows Presentation Foundation (WPF), .NET'in bir parçası olan bir Windows kullanıcı arayüzü (UI) çözümüdür. İlk olarak 2006'da geliştirilen bu çözüm, WinForms için bir halef olarak tasarlanmıştır. Ek bilgi için resmi belgelerine başvurun.
WPF, zengin ve gelişmiş kullanıcı arayüzleri oluşturmaya olanak tanır. Microsoft tarafından geliştirilen XML tabanlı bir dil olan XAML'i kullanarak kodu kullanıcı arayüzünden ayırır. cTrader Windows bir WPF uygulamasıdır ve gördüğünüz tüm kullanıcı arayüzü öğeleri bu çözüm tarafından desteklenmektedir.
WPF kullanımı, neredeyse piksel mükemmelliğinde, zengin özelliklere sahip kullanıcı arayüzleri geliştirmeye olanak tanır. Ancak, WPF'nin öğrenme eğrisi diktir. Nispeten basit kullanıcı arayüzü öğeleri oluşturmak isterseniz, grafik kontrollerini veya WinForms kullanmak isteyebilirsiniz.
Not
WinForms veya WPF kullanan algoritmalar yalnızca Windows makinelerinde çalıştırılabilir.
WPF'yi cBot'lar ve göstergelerle kullanmak için, cTrader derleyicinizi değiştirin ve gömülü derleyiciden .NET SDK derleyicisine geçin.
Projenizi yapılandırma
WinForms benzer şekilde, WPF'yi cBot'larınız ve göstergelerinizle kullanmadan önce gösterge veya cBot proje dosyanızda bazı değişiklikler yapmanız gerekecektir. WPF yalnızca Windows'ta çalıştığı için, göstergenizin veya cBot projenizin hedef çerçevesini .NET'in Windows varyantına değiştirmeniz gerekecektir.
Bunu yapmak için, proje dosyanızı Visual Studio'da açın ve içeriğini aşağıdakilerle değiştirin:
1 2 3 4 5 6 7 8 9 10 | |
UseWpf etiketini ekledik ve TargetFramework değerini net6.0-windows olarak değiştirdik.
Ardından, AccessRights sınıf parametresinin değerini FullAccess olarak değiştirin. Bu değişiklik yapılmadığı sürece, uzantınızın WPF ile çalışmak için yeterli erişim hakları olmayacaktır.
Yukarıdaki değişiklikleri yaptıktan sonra projenizi yeniden oluşturun.
WPF kullanarak bir pencere oluşturun ve gösterin
Özel bir pencere oluşturma süreci, özel bir WinForm oluşturmaya benzer.
Projenizi yapılandırdıktan sonra, sağ tıklayın, Ekle'yi seçin ve ardından Pencere (WPF)... seçeneğini belirleyin.

Yeni açılan pencerede, WPF penceresi seçeneğini belirleyin. Pencere adını MainWindow olarak ayarlayın ve Ekle düğmesine tıklayın. Yeni WPF penceresi proje çözüm gezgininizde görünecektir. İki dosyası olacaktır: bir .XAML dosyası ve arka uç kodunu içeren bir .cs dosyası.
.XAML dosyasını açın ve arka plan rengini "SlateGray" olarak değiştirmek için aşağıdaki kodu kopyalayıp yapıştırın.
1 2 3 4 5 6 7 8 9 10 | |
Aşağıdaki kodu gösterge ana kaynak dosyanıza yapıştırın:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | |
Yeni bir WPF penceresi eklediğinizde, göstergenizin veya cBot'unuzun ad alanını (örneğin cAlgo) kullanacaktır. Pencere arka uç kodunu içeren .cs dosyasında, bunu WPF_Test olarak değiştirin ve gösterge kodunuzdaki using ifadesiyle eşleştiğinden emin olun.
Göstergeyi Visual Studio'dan veya cTrader Algo kullanarak yeniden oluşturun.
Derleme işlemi tamamlandıktan sonra, bir gösterge örneği oluşturun. Özel pencerenizin başlatıldıktan hemen sonra göründüğünü görmelisiniz.

Bir işlem paneli görüntüleyin
Bu örnekte, WPF kullanarak basit bir işlem paneli oluşturacağız. Yeni bir cBot oluşturun ve adını WPF Trading Panel olarak ayarlayın.
Yeni robotunuzu Visual Studio'da açın ve yukarıda belirtildiği gibi yeni bir WPF kaynağı ekleyin. Pencere adını MainWindow olarak ayarlayın.

Daha sonra, pencerenin .XAML dosyasını açın ve aşağıdaki kodu içine yapıştırın:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | |
Ardından, arka uç .cs dosyasını açın ve aşağıdaki kodu yapıştırın:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | |
Artık cBot'umuzu kullanarak özel penceremizi başlatmaya hazırız. cBot kaynak dosyasını açın ve aşağıdaki kodu ekleyin:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
Kodunuzu Visual Studio kullanarak yeniden oluşturun ve cBot'unuzun bir örneğini oluşturun. Çalıştırın ve aşağıdaki pencere görünmelidir.

Pencerede, semboller listesinden bir sembol seçin ve Yürüt'e tıklayın. İşlem panelimiz biraz basit olsa da, amaçlandığı gibi çalışır. Bunu karmaşık WPF kontrolleri oluşturmak için bir şablon olarak kullanabilirsiniz.
Penceremizin .xaml.cs dosyasındaki kod, cBot'umuza talimat göndermekten sorumludur. Pencereleriniz için arka uç kodu geliştirirken şu yönergeleri izleyin:
BeginInvokeOnMainThread()yöntemini kullanarak bir cBot veya gösterge ile etkileşimleri yönetmek için bir hizmet oluşturun.- Karmaşık WPF kontrolleri oluşturuyorsanız, MVVM, IoC kullanın ve iş mantığı bileşenlerinizi kullanıcı arayüzünden ayırın (örneğin, Prism) kullanarak).
Kullanıcı arayüzü için özel bir iş parçacığı kullanma
WinForms ve WPF pencereleri STA işaretli bir iş parçacığı içinde çalışmalıdır, aksi takdirde çalışmazlar. Daha fazla bilgi için resmi belgelere başvurun.
Zaten çalışmakta olan bir iş parçacığının ApartmentState özelliğini değiştiremezsiniz. Ana cBot veya gösterge iş parçacığı STA işaretli olmadığı için, WinForms ve WPF için yeni bir STA işaretli iş parçacığı kullanmanız gerekir.
API üyelerine kullanıcı arayüzü iş parçacığından erişin
Daha önce açıkladığımız gibi, WPF kontrollerinizi çalıştırmak için ayrı, özel bir iş parçacığı kullanmanız gerekir. Yalnızca bu iş parçacığında çalışan kod, pencere denetimlerine ve özelliklerine erişebilecektir.
Aynı durum tüm algoritmik API üyeleri için de geçerlidir. API iş parçacığı açısından güvenli değildir, bu nedenle kullanıcı arayüzü iş parçacığından API üyelerine erişemezsiniz. Bunun yerine, göstergenizin veya cBot kodunuzdaki BeginInvokeOnMainThread() yöntemini kullanarak işi göndermeniz gerekir.
Bu, göstergeniz veya cBot'unuz ile bir WPF penceresi arasında veri alışverişi yapmak isterseniz sorunlara yol açabilir. Bu sorunu çözmek için, cBot'unuz veya göstergeniz ile kullanıcı arayüzüyle ilgili iş parçacıkları arasındaki etkileşimleri yönetmek üzere bir proxy sınıfı oluşturabilirsiniz.