Pola perdagangan sistem perdagangan


Sistem Trading: Merancang Sistem Anda - Bagian 1 13 Bagian sebelumnya dari tutorial ini membahas elemen-elemen yang membentuk sistem perdagangan dan membahas kelebihan dan kekurangan penggunaan sistem semacam itu dalam lingkungan live trading. Pada bagian ini, kami membangun pengetahuan itu dengan memeriksa pasar mana yang sangat sesuai untuk perdagangan sistem. Kami kemudian akan melihat secara lebih mendalam berbagai genre sistem perdagangan. Perdagangan di Pasar yang Berbeda Pasar Ekuitas Pasar ekuitas mungkin adalah pasar yang paling umum diperdagangkan, terutama di kalangan pemula. Di arena ini, pemain besar seperti Warren Buffett dan Merrill Lynch mendominasi, dan strategi investasi nilai dan pertumbuhan tradisional sejauh ini adalah yang paling umum. Namun demikian, banyak institusi telah berinvestasi secara signifikan dalam perancangan, pengembangan dan implementasi sistem perdagangan. Investor individu mengikuti tren ini, meski perlahan. Berikut adalah beberapa faktor penting yang perlu diingat saat menggunakan sistem perdagangan di pasar ekuitas: 13 Sejumlah besar ekuitas yang tersedia memungkinkan trader untuk menguji sistem pada berbagai jenis ekuitas - mulai dari saham over-the-counter (OTC) yang sangat volatile hingga Non-volatile blue chips. Keefektifan sistem perdagangan dapat dibatasi oleh rendahnya likuiditas beberapa ekuitas, terutama isu-isu OTC dan pink sheet. Komisi bisa makan menjadi keuntungan yang dihasilkan oleh perdagangan yang sukses, dan bisa meningkatkan kerugian. Ekuitas OTC dan lembar merah muda sering dikenakan biaya komisi tambahan. Sistem perdagangan utama yang digunakan adalah mereka yang mencari nilai - yaitu sistem yang menggunakan parameter yang berbeda untuk menentukan apakah keamanan bernilai undervalued dibandingkan dengan kinerja masa lalu, rekan-rekannya, atau pasar pada umumnya. Pasar Valuta Asing Pasar valuta asing, atau forex. Adalah pasar terbesar dan paling likuid di dunia. Pemerintah dunia, bank dan institusi besar lainnya membukukan triliunan dolar di pasar forex setiap hari. Mayoritas pedagang institusional di forex mengandalkan sistem perdagangan. Hal yang sama berlaku untuk individu di forex, tapi beberapa perdagangan berdasarkan laporan ekonomi atau pembayaran bunga. Berikut adalah beberapa faktor penting yang perlu diingat saat menggunakan sistem perdagangan di pasar forex: Likuiditas di pasar ini - karena volume yang sangat besar - Membuat sistem perdagangan lebih akurat dan efektif. Tidak ada komisi di pasar ini, hanya spread. Karena itu, jauh lebih mudah melakukan transaksi tanpa menambah biaya. Dibandingkan dengan jumlah ekuitas atau komoditas yang tersedia, jumlah mata uang untuk perdagangan terbatas. Namun karena tersedianya pasangan mata uang eksotis - yaitu, mata uang dari negara-negara yang lebih kecil - kisaran dalam hal volatilitas tidak harus terbatas. Sistem perdagangan utama yang digunakan di forex adalah tren yang mengikuti tren (pepatah populer di pasar adalah trennya adalah teman Anda), atau sistem yang membeli atau menjual berjejer. Ini karena indikator ekonomi sering menyebabkan pergerakan harga besar pada satu waktu. Futures Equity, forex, dan pasar komoditas semuanya menawarkan perdagangan berjangka. Ini adalah kendaraan yang populer untuk sistem perdagangan karena jumlah leverage yang lebih tinggi tersedia dan meningkatnya likuiditas dan volatilitas. Namun, faktor-faktor ini dapat memotong dua arah: keduanya dapat memperkuat keuntungan Anda atau menguatkan kerugian Anda. Untuk alasan ini, penggunaan futures biasanya disediakan untuk pedagang sistem perorangan dan institusional tingkat lanjut. Hal ini karena sistem perdagangan yang mampu memanfaatkan pasar berjangka memerlukan penyesuaian yang jauh lebih besar, menggunakan indikator yang lebih maju dan membutuhkan waktu lebih lama untuk dikembangkan. Jadi, Yang Terbaik Yang sampai ke investor individu untuk menentukan pasar mana yang paling sesuai untuk perdagangan sistem - masing-masing memiliki kelebihan dan kekurangan masing-masing. Kebanyakan orang lebih mengenal pasar ekuitas, dan keakraban ini membuat pengembangan sistem perdagangan menjadi lebih mudah. Namun, forex umumnya dianggap sebagai platform unggulan untuk menjalankan sistem perdagangan - terutama di kalangan pedagang yang lebih berpengalaman. Apalagi jika trader memutuskan untuk memanfaatkan leverage dan volatilitas yang meningkat, alternatif futures selalu terbuka. Pada akhirnya, pilihannya terletak di tangan pengembang sistem. Tip Sistem Trading Trend-Following Systems Metode yang paling umum dalam trading sistem adalah tren - sistem berikut. Dalam bentuknya yang paling mendasar, sistem ini hanya menunggu pergerakan harga yang signifikan, kemudian membeli atau menjual ke arah itu. Sistem bank jenis ini dengan harapan pergerakan harga ini akan mempertahankan tren. Moving Average Systems Sering digunakan dalam analisa teknikal. Rata bergerak adalah indikator yang hanya menunjukkan harga rata-rata stok selama periode waktu tertentu. Inti dari tren berasal dari pengukuran ini. Cara yang paling umum untuk menentukan masuk dan keluar adalah crossover. Logika di balik ini sederhana: tren baru terbentuk saat harga turun di atas atau di bawah harga historisnya yang rata-rata (tren). Berikut adalah bagan yang menggambarkan harga (garis biru) dan MA 20 hari (garis merah) IBM: Sistem Pelarian Konsep mendasar di balik jenis sistem ini serupa dengan sistem rata-rata bergerak. Idenya adalah bahwa ketika baru tinggi atau rendah didirikan, pergerakan harga kemungkinan besar akan berlanjut ke arah pelarian. Salah satu indikator yang bisa digunakan dalam menentukan breakout adalah hamparan Bollinger Band sederhana. Bollinger Bands menunjukkan rata-rata harga tinggi dan rendah, dan jerawat terjadi saat harga memenuhi tepi band. Berikut adalah grafik yang menampilkan harga (garis biru) dan Bollinger Bands (garis abu-abu) Microsoft: Kekurangan Sistem Trend-Following: Pengambilan Keputusan Empiris Diperlukan - Saat menentukan tren, selalu ada elemen empiris untuk dipertimbangkan: durasi Tren bersejarah. Misalnya, rata-rata bergerak bisa selama 20 hari terakhir atau selama lima tahun terakhir, jadi pengembang harus menentukan yang mana yang terbaik untuk sistem. Faktor lain yang harus ditentukan adalah tinggi rata-rata dan titik terendah dalam sistem pelarian. Lagging Nature - Moving averages and breakout system akan selalu tertinggal. Dengan kata lain, mereka tidak akan pernah bisa mencapai puncak atau bawah tren. Ini pasti menghasilkan penyitaan keuntungan potensial, yang terkadang bisa menjadi signifikan. Efek Whipsaw - Diantara kekuatan pasar yang berbahaya bagi keberhasilan sistem berikut tren, ini adalah salah satu yang paling umum. Efek whipsaw terjadi ketika rata-rata bergerak menghasilkan sinyal palsu - yaitu, ketika rata-rata turun hanya sampai kisaran, maka tiba-tiba berbalik arah. Hal ini dapat menyebabkan kerugian besar kecuali jika ada teknik penghentian dan teknik manajemen risiko yang efektif. Pasar Sideways - Sistem berikut tren, pada dasarnya, mampu menghasilkan uang hanya di pasar yang benar-benar melakukan tren. Namun, pasar juga bergerak sideways. Tinggal dalam rentang tertentu untuk jangka waktu yang panjang. Volatilitas Ekstrim Dapat Terjadi - Kadang-kadang, sistem mengikuti tren mungkin mengalami beberapa volatilitas ekstrim, namun pedagang harus tetap menggunakan sistemnya. Ketidakmampuan untuk melakukannya akan mengakibatkan kegagalan terjamin. Countertrend Systems Pada dasarnya, tujuannya dengan sistem countertrend adalah membeli pada harga terendah dan menjual di level tertinggi. Perbedaan utama antara sistem trend dan berikut adalah sistem countertrend tidak mengoreksi diri sendiri. Dengan kata lain, tidak ada waktu yang ditentukan untuk keluar dari posisi, dan ini menghasilkan potensi turun yang tidak terbatas. Jenis Sistem Countertrend Berbagai jenis sistem dianggap sebagai sistem countertrend. Idenya di sini adalah untuk membeli ketika momentum dalam satu arah mulai memudar. Hal ini paling sering dihitung dengan menggunakan osilator. Misalnya, sinyal dapat dihasilkan bila indikator stokastik atau indikator kekuatan relatif lainnya berada di bawah titik-titik tertentu. Ada jenis lain dari sistem perdagangan countertrend, tapi semuanya memiliki tujuan mendasar yang sama - untuk membeli rendah dan menjual tinggi. Kerugian dari Countertrend Mengikuti Sistem: E mpirical Decision-Making Required - Sebagai contoh, salah satu faktor yang harus diputuskan oleh pengembang sistem adalah poin di mana indikator kekuatan relatif memudar. Volatilitas Ekstrim Dapat Terjadi - Sistem ini mungkin juga mengalami beberapa volatilitas ekstrem, dan ketidakmampuan untuk bertahan dengan sistem meskipun volatilitas ini akan mengakibatkan kegagalan terjamin. Kelemahan Tak Terbatas - Seperti yang telah disebutkan sebelumnya, ada potensi turun yang tidak terbatas karena sistemnya tidak mengoreksi diri (tidak ada waktu yang ditentukan untuk keluar dari posisi). Kesimpulan Pasar utama yang sistem perdagangannya sesuai adalah pasar ekuitas, forex dan futures. Masing-masing pasar memiliki kelebihan dan kekurangan. Dua genre utama sistem perdagangan adalah sistem mengikuti tren dan sistem countertrend. Terlepas dari perbedaan mereka, kedua jenis sistem, dalam tahap perkembangannya, memerlukan pengambilan keputusan empiris dari pihak pengembang. Selain itu, sistem ini tunduk pada volatilitas ekstrim dan ini mungkin menuntut beberapa stamina - sangat penting bahwa pedagang sistem bertahan dengan sistemnya selama masa-masa ini. Dalam angsuran berikut, mari kita lihat lebih dekat bagaimana merancang sistem perdagangan dan mendiskusikan beberapa perangkat lunak yang digunakan trader sistem untuk membuat hidup mereka lebih mudah. Sistem Perdagangan: Merancang Sistem Anda - Pola Pola 2Messaging 187 Pola Integrasi dalam Praktik 187 Studi Kasus: Sistem Perdagangan Obligasi (Oleh Jonathan Simon) Sangat mudah untuk menjauhkan diri Anda dari kumpulan pola atau bahasa pola yang besar. Pola adalah abstraksi sebuah gagasan dalam bentuk yang dapat digunakan kembali. Seringkali, sifat pola generik yang sangat generik yang membuat mereka sangat berguna juga membuat mereka sulit dipahami. Terkadang hal terbaik untuk membantu memahami pola adalah contoh dunia nyata. Bukan skenario dibikin dari apa yang bisa terjadi tapi apa yang sebenarnya terjadi dan apa yang akan terjadi. Bab ini menerapkan pola untuk memecahkan masalah dengan menggunakan proses penemuan. Sistem yang akan kita bahas adalah sistem perdagangan obligasi yang saya kerjakan selama dua tahun sejak disain awal melalui produksi. Kami akan mengeksplorasi skenario dan masalah yang dihadapi dan bagaimana mengatasinya dengan pola. Ini menyangkut proses pengambilan keputusan memilih suatu pola, serta bagaimana menggabungkan dan menyesuaikan pola yang sesuai dengan kebutuhan sistem. Dan ini semua dilakukan dengan mempertimbangkan kekuatan yang dihadapi dalam sistem nyata termasuk kebutuhan bisnis, keputusan klien, persyaratan arsitektur dan teknis, serta integrasi sistem warisan. Maksud dari pendekatan ini adalah untuk memberikan pemahaman yang lebih jelas tentang pola itu sendiri melalui aplikasi praktis. Membangun Sistem Sebuah bank investasi utama Wall Street menetapkan untuk membangun sistem penetapan harga obligasi dalam upaya merampingkan alur kerja dari meja perdagangan obligasi mereka. Saat ini, pedagang obligasi harus mengirim harga untuk sejumlah besar obligasi ke beberapa tempat perdagangan yang berbeda, masing-masing dengan antarmuka pengguna sendiri. Tujuan dari sistem ini adalah untuk meminimalisir perkiraan harga seluruh obligasi mereka yang dikombinasikan dengan fungsionalitas analitik lanjutan yang spesifik untuk pasar obligasi dalam satu antarmuka pengguna yang dienkapsulasi. Ini berarti integrasi dan komunikasi dengan beberapa komponen melalui berbagai protokol komunikasi. Aliran tingkat tinggi dari sistem terlihat seperti ini: Pertama, data pasar masuk ke sistem. Data pasar adalah data mengenai harga dan sifat lain dari obligasi yang mewakili apa yang orang mau beli dan jual obligasinya di pasar bebas. Data pasar segera dikirim ke mesin analisis yang mengubah data. Analytics mengacu pada fungsi matematika untuk aplikasi keuangan yang mengubah harga dan atribut obligasi lainnya. Ini adalah fungsi generik yang menggunakan variabel input untuk menyesuaikan hasil fungsi dengan ikatan tertentu. Aplikasi klien yang akan berjalan di setiap desktop trader akan mengkonfigurasi mesin analisis berdasarkan per trader, mengendalikan secara spesifik analisis untuk setiap obligasi yang ditawarkan oleh pedagang. Begitu analisis diterapkan pada data pasar, data yang dimodifikasi dikirim ke berbagai tempat perdagangan dimana pedagang dari perusahaan lain dapat membeli atau menjual obligasi tersebut. Arsitektur dengan Pola Dengan ikhtisar alur kerja sistem ini, kita dapat mendekati beberapa masalah arsitektural yang kita hadapi selama proses perancangan. Mari kita lihat apa yang kita ketahui sampai saat ini. Pedagang membutuhkan aplikasi yang sangat responsif pada workstation Windows NT dan Solaris. Oleh karena itu, kami memutuskan untuk menerapkan aplikasi klien sebagai klien tebal Jawa karena independensi platform dan kemampuannya untuk merespon dengan cepat masukan pengguna dan data pasar. Di sisi server, kita mewarisi komponen warisan C yang sistem kita akan memanfaatkannya. Komponen data pasar berkomunikasi dengan infrastruktur pesan TIBCO Information Bus (TIB). Kami mewarisi komponen berikut: Market Data Price Feed Server. Menerbitkan data pasar yang masuk ke TIB. Mesin Analytics. Melakukan analisis terhadap data pasar yang masuk dan menyiarkan data pasar yang dimodifikasi ke TIB. Server Kontribusi Melakukan semua komunikasi dengan tempat trading. Tempat perdagangan adalah komponen pihak ketiga yang tidak dikendalikan oleh bank. Subsistem Data Legacy Subsistem Kontribusi Legacy Kita perlu memutuskan bagaimana subsistem yang terpisah (Jawa tebal klien, data pasar, dan kontribusi) akan berkomunikasi. Kita bisa memiliki klien tebal berkomunikasi langsung dengan server warisan, tapi itu memerlukan terlalu banyak logika bisnis pada klien. Sebagai gantinya, buatlah sepasang gerbang Java untuk berkomunikasi dengan server warisan Gateway Harga untuk data pasar sebagai Gerbang Kontribusi karena mengirim harga ke tempat perdagangan. Ini akan mencapai enkapsulasi logika bisnis yang bagus yang berkaitan dengan area ini. Komponen saat ini dalam sistem ditunjukkan di bawah ini. Koneksi ditandai sebagai. Menunjukkan bahwa kita masih tidak yakin bagaimana beberapa komponen akan berkomunikasi. Sistem dan komponennya Pertanyaan komunikasi pertama adalah bagaimana mengintegrasikan klien tebal Jawa dan dua komponen server Java untuk bertukar data. Mari kita lihat empat gaya integrasi yang disarankan dalam buku ini: File Transfer. Database Bersama Permintaan Prosedur Jarak Jauh. Dan Olahpesan. Kami dapat menyingkirkan Database Bersama segera karena kami ingin membuat lapisan abstraksi antara klien dan database dan tidak ingin memiliki kode akses database di klien. Transfer File juga dapat dikesampingkan karena minimal latency diperlukan untuk memastikan harga saat ini dikirim ke tempat perdagangan. Ini memberi kita pilihan antara Remote Procedure Invocation atau Messaging. Platform Java menyediakan dukungan built-in untuk Remote Remote Procedure Doocation and Messaging. Integrasi RPC-style dapat dicapai dengan menggunakan Remote Method Invocation (RMI), CORBA, atau Enterprise Java Beans (EJB). Java Messaging Service (JMS) adalah API umum untuk integrasi gaya pesan. Jadi kedua gaya integrasi itu mudah diimplementasikan di Jawa. Jadi yang akan bekerja lebih baik untuk proyek ini, Remote Procedure Invocation atau Messaging. Hanya ada satu contoh Gateway Harga dan satu contoh dari Gateway Kontribusi dalam sistem ini, namun biasanya Klien Tebal secara bersamaan terhubung ke layanan ini (satu untuk setiap pedagang obligasi yang kebetulan masuk log pada waktu tertentu). Selanjutnya, bank ingin ini menjadi sistem harga generik yang bisa dimanfaatkan pada aplikasi lain. Jadi selain sejumlah Think Web yang tidak diketahui, mungkin ada sejumlah aplikasi lain yang tidak diketahui yang menggunakan data harga yang keluar dari Gateways. Klien Tebal (atau aplikasi lain yang menggunakan data harga) dapat dengan mudah menggunakan RPC untuk melakukan panggilan ke Gateways untuk mendapatkan data harga dan meminta pemrosesan. Namun, data harga akan terus dipublikasikan, dan beberapa klien tertentu hanya tertarik pada data tertentu, sehingga mendapatkan data yang relevan ke klien yang tepat pada waktu yang tepat bisa menjadi sulit. Klien bisa memilih Gateways, tapi itu akan menghasilkan banyak biaya overhead. Akan lebih baik bagi Gateways untuk membuat data tersedia bagi klien begitu tersedia. Namun, ini mengharuskan setiap Gateway untuk melacak klien mana yang saat ini aktif, dan yang menginginkan data tertentu, kapan data baru tersedia (yang akan terjadi berkali-kali per detik), Gateway harus membuat Sebuah RPC untuk setiap klien yang tertarik untuk menyampaikan data ke klien. Idealnya, semua klien harus diberi tahu secara bersamaan, jadi setiap RPC perlu dibuat dengan benang konkurennya sendiri. Ini bisa berhasil, tapi semakin rumit sangat cepat. Pesan sangat menyederhanakan masalah ini. Dengan pesan Kita dapat menentukan saluran terpisah untuk berbagai jenis data harga. Kemudian, ketika Gateway mendapatkan data baru, itu akan menambahkan pesan yang berisi data tersebut ke Saluran Publish-Subscribe untuk jenis data tersebut. Sementara itu, semua klien yang tertarik dengan jenis data tertentu akan mendengarkan saluran untuk jenis itu. Dengan cara ini, Gateways dapat dengan mudah mengirimkan data baru kepada siapapun yang tertarik, tanpa perlu mengetahui berapa banyak aplikasi pendengar yang ada atau apa adanya. Klien masih perlu untuk dapat memanggil perilaku di Gateways juga. Karena hanya ada dua Gateway, dan klien mungkin bisa memblokir sementara metode ini dipanggil secara bersamaan, seruan client-to-Gateway ini dapat dengan mudah diimplementasikan dengan menggunakan RPC. Namun, karena kami telah menggunakan pesan untuk komunikasi Gateway-ke-klien, pesan mungkin sama baiknya dengan cara menerapkan komunikasi dari client-to-gateway. Karena itu, semua komunikasi antara Gateways dan klien akan terlaksana melalui pesan. Karena semua komponen ditulis di Jawa, JMS menyajikan pilihan yang mudah untuk sebagai sistem pesan. Ini secara efektif membuat Bus Pesan atau arsitektur yang memungkinkan sistem masa depan berintegrasi dengan sistem saat ini dengan sedikit atau tanpa perubahan pada infrastruktur pesan. Dengan cara ini, fungsi bisnis aplikasi dapat dengan mudah digunakan oleh aplikasi lain yang dikembangkan bank. Komponen Java Berkomunikasi dengan JMS JMS hanyalah sebuah spesifikasi dan kita perlu memutuskan sistem pesan yang sesuai dengan JMS. Kami memutuskan untuk menggunakan JMS IBM MQSeries karena bank tersebut adalah toko IBM, menggunakan server aplikasi WebSphere dan banyak produk IBM lainnya. Akibatnya, kami akan menggunakan MQSeries karena kami telah memiliki infrastruktur pendukung di tempat dan lisensi situs produk. Pertanyaan selanjutnya adalah bagaimana menghubungkan sistem pesan MQSeries dengan server Kontribusi C mandiri dan server Data Market and Analytics Engine TIBCO. Kami membutuhkan cara bagi konsumen MQSeries untuk memiliki akses ke pesan TIB. Tapi bagaimana mungkin kita bisa menggunakan pola Message Translator untuk menerjemahkan pesan TIB ke pesan MQSeries. Meskipun klien C untuk MQSeries berfungsi sebagai Penerjemah Pesan. Menggunakannya akan mengorbankan independensi server JMS. Dan walaupun TIBCO memang memiliki API Java, arsitek dan manajer pelanggan telah menolaknya. Akibatnya, pendekatan Message Translator harus ditinggalkan. Jembatan dari server TIB ke server MQSeries membutuhkan komunikasi antara C dan Java. Kita bisa menggunakan CORBA, tapi bagaimana dengan pesannya Melihat lebih dekat pola Message Translator menunjukkan bahwa ini terkait dengan Adaptor Saluran dalam penggunaan protokol komunikasi. Inti dari Adapter Saluran adalah menghubungkan sistem non-pesan ke sistem pesan. Sepasang adapter saluran yang menghubungkan dua sistem pesan adalah Messaging Bridge. Tujuan dari Messaging Bridge adalah untuk mentransfer pesan dari satu sistem pesan ke sistem pesan lainnya. Inilah yang sedang kita lakukan dengan kompleksitas bahasa Java yang ditambahkan ke dalam komunikasi C. Kita bisa menerapkan cross language Messaging Bridge menggunakan kombinasi Channel Adapter s dan CORBA. Kami akan membangun dua server Channel Adapter yang ringan, satu di C yang mengelola komunikasi dengan TIB, dan satu di Jawa mengelola komunikasi dengan JMS. Kedua Adaptor Saluran ini. Yang merupakan Message Endpoint sendiri, akan saling berkomunikasi via CORBA. Seperti pilihan kami untuk MQSeries, kami akan menggunakan CORBA daripada JNI karena ini adalah standar perusahaan. Jembatan perpesanan menerapkan terjemahan pesan yang disimulasikan secara efektif antara sistem pesan yang tampaknya tidak kompatibel dan bahasa yang berbeda. Message Translator menggunakan Channel Adapters Diagram selanjutnya menunjukkan perancangan sistem saat ini termasuk Gateways dan komponen lainnya. Ini adalah contoh aplikasi pola yang bagus. Kami menggabungkan dua Adaptor Saluran dengan protokol non-pesan untuk menerapkan pola Message Translator, yang secara efektif menggunakan satu pola untuk menerapkan pola lain. Selain itu, kami mengubah konteks Saluran Adapter untuk menghubungkan dua sistem pesan dengan protokol terjemahan lintas bahasa non-pesan daripada menghubungkan sistem pesan ke sistem non-pesan. Sistem saat ini dengan Saluran Penyelarasan Adaptor Saluran Kunci untuk bekerja dengan pola tidak hanya mengetahui kapan harus menggunakan pola itu, tetapi juga cara menggunakannya secara efektif. Setiap implementasi pola harus mempertimbangkan secara spesifik platform teknologi serta kriteria desain lainnya. Bagian ini menerapkan proses penemuan yang sama untuk menemukan penggunaan yang paling efisien dari Saluran Publish-Subscribe dalam konteks server data pasar yang berkomunikasi dengan mesin analisis. Data pasar real time berasal dari umpan data pasar, server C yang menyiarkan data pasar di TIB. Umpan data pasar menggunakan Saluran Peluncuran Publish terpisah untuk masing-masing obligasi. Ini adalah harga penerbitan. Ini mungkin tampak sedikit ekstrem karena setiap ikatan baru membutuhkan saluran barunya sendiri. Tapi ini tidak terlalu parah karena Anda sebenarnya tidak perlu membuat saluran di TIBCO. Sebaliknya, saluran direferensikan oleh kumpulan topik hierarkis yang disebut subjek. Server TIBCO kemudian memfilter satu pesan mengalir menurut subjek, mengirimkan setiap subjek unik ke satu saluran virtual. Hasilnya adalah saluran pesan yang sangat ringan. Kami dapat membuat sistem yang menerbitkan beberapa saluran dan pelanggan hanya bisa mendengarkan harga yang mereka minati. Ini mengharuskan pelanggan menggunakan Filter Pesan atau Konsumen Selektif untuk memfilter keseluruhan arus data dengan harga menarik, menentukan apakah setiap pesan Harus diproses seperti yang diterima. Mengingat bahwa data pasar dipublikasikan di saluran khusus obligasi, pelanggan dapat mendaftar untuk mendapatkan pembaruan pada serangkaian obligasi. Ini secara efektif memungkinkan pelanggan untuk memfilter secara selektif berlangganan saluran dan hanya menerima pembaruan minat daripada memutuskan setelah pesan diterima. Penting untuk dicatat bahwa menggunakan beberapa saluran untuk menghindari penyaringan adalah penggunaan saluran pesan yang tidak standar. Namun, dalam konteks teknologi TIBCO, kami benar-benar memutuskan apakah akan menerapkan atau menyaring filter atau memanfaatkan penyaringan saluran yang dibuat ke TIBCO - daripada apakah akan menggunakan begitu banyak saluran? Komponen berikutnya yang perlu disain adalah mesin analisis, server CTIB lain yang akan memodifikasi data pasar dan menyiarkannya kembali ke TIB. Meskipun berada di luar cakupan pengembangan JavaJMS kami, kami bekerja sama dengan tim C untuk merancangnya karena kami adalah pelanggan utama mesin analisis. Masalah yang dihadapi adalah menemukan struktur saluran yang paling efisien menyalurkan ulang data pasar yang baru dimodifikasi. Karena kita sudah memiliki satu Saluran Pesan khusus per ikatan yang diwarisi dari umpan harga data pasar, akan menjadi logis untuk memodifikasi data pasar dan menyiarkan ulang data pasar yang dimodifikasi pada Saluran Pesan khusus obligasi. Tapi ini tidak akan berhasil karena analisis yang mengubah harga obligasi adalah spesifik pedagang. Jika kami menyiarkan ulang data yang dimodifikasi pada Saluran Pesan ikatan. Kita akan menghancurkan integritas data dengan mengganti data pasar generik dengan data trader tertentu. Di sisi lain, kita bisa memiliki jenis pesan yang berbeda untuk data pasar pedagang tertentu yang kita publikasikan di saluran yang sama sehingga pelanggan dapat memutuskan pesan mana yang mereka minati untuk menghindari kerusakan integritas data. Tapi kemudian klien harus menerapkan filter mereka sendiri untuk memisahkan pesan untuk pedagang lain. Selain itu, akan ada peningkatan yang substansial dalam pesan yang diterima oleh pelanggan, yang menempatkan beban yang tidak perlu pada mereka. Ada dua pilihan: Satu Saluran per Trader: Setiap pedagang memiliki saluran yang ditunjuk untuk data pasar yang dimodifikasi. Dengan cara ini, data pasar asli tetap utuh dan setiap aplikasi pedagang dapat mendengarkan spesifik para pedagang Message Channel untuk update harga yang dimodifikasi. One Channel per trader per Bond: Buat satu Message Channel per-trader per-bond semata-mata untuk data pasar yang dimodifikasi dari obligasi itu. Sebagai contoh, data pasar untuk obligasi ABC akan dipublikasikan di channel Bond ABC sedangkan data pasar yang dimodifikasi untuk trader A akan dipublikasikan di Message Channel Trader A, ABC Bond, data pasar yang dimodifikasi untuk trader B pada Trader B, Bond ABC, dan Begitu seterusnya Satu saluran per pedagang Satu saluran per obligasi per pedagang Ada kelebihan dan kekurangan masing-masing pendekatan. Pendekatan per-obligasi, misalnya, menggunakan lebih banyak Saluran Pesan. Dalam skenario terburuk, jumlah Message Channel akan menjadi jumlah total obligasi dikalikan dengan jumlah pedagang. Kita dapat menempatkan batas atas pada jumlah saluran yang akan dibuat karena kita tahu bahwa hanya ada sekitar 20 pedagang dan mereka tidak pernah memiliki harga lebih dari beberapa ratus obligasi. Ini menempatkan batas atas di bawah kisaran 10.000, yang tidak begitu aneh dibandingkan dengan hampir 100.000 Message Channel yang digunakan oleh umpan harga data pasar. Selain itu, karena kami menggunakan TIB dan Message Channel cukup murah, jumlah Message Channel tidak menjadi masalah parah. Di sisi lain, jumlah Message Channel yang sebenarnya bisa menjadi masalah dari perspektif manajemen. Setiap kali sebuah ikatan ditambahkan saluran untuk masing-masing trader harus dijaga. Ini bisa parah dalam sistem yang sangat dinamis. Sistem kita, bagaimanapun, pada dasarnya statis. Ini juga memiliki infrastruktur untuk mengelola Kanal Pesan secara otomatis. Ini dikombinasikan dengan arsitektur warisan dari komponen warisan yang menggunakan pendekatan serupa meminimalkan sisi negatifnya. Ini bukan berarti kita harus membuat jumlah Message Channel yang tidak terlalu berlebihan. Sebaliknya, kita bisa menerapkan pendekatan arsitektural yang menggunakan sejumlah besar Message Channel saat ada alasan. Dan ada alasan dalam hal ini yang sampai ke lokasi logika. Jika kami menerapkan pendekatan per pedagang, Analytics Engine memerlukan logika untuk mengelompokkan saluran input dan output. Ini karena saluran masukan dari Analytics Engine adalah per obligasi dan saluran Pesan keluaran akan menjadi per pedagang, yang memerlukan Mesin Analytics untuk mengarahkan semua masukan analisis dari beberapa ikatan untuk pedagang tertentu ke saluran pesan keluaran khusus pedagang. Ini secara efektif mengubah mesin analisis menjadi Router Berbasis Konten untuk menerapkan logika perutean kustom untuk aplikasi kami. Mengikuti struktur Message Bus, Analytics Engine adalah server generik yang dapat digunakan oleh beberapa sistem lain di. Jadi kita tidak ingin awan dengan fungsi spesifik sistem. Di sisi lain, pendekatan per-obligasi bekerja karena gagasan seorang pedagang yang memiliki analisis output dari harga obligasi adalah praktik yang diterima perusahaan. Pendekatan per-obligasi membuat pemisahan Message Market dari umpan data pasar tetap utuh, sambil menambahkan beberapa lagi Saluran Pesan. Sebelum mencapai klien, kami menginginkan Router Berbasis Konten menggabungkan beberapa saluran ini menjadi sejumlah saluran yang mudah dikelola. Kami tidak ingin aplikasi klien berjalan di desktop pedagang untuk mendengarkan ribuan atau puluhan ribu Message Channel. Sekarang pertanyaannya menjadi tempat meletakkan Content-Based Router. Kami bisa saja memasang Adaptor Saluran CTIB ke semua pesan ke Gateway Penentuan Harga pada satu Saluran Pesan. Ini buruk karena dua alasan kita akan membagi logika bisnis antara C dan Java, dan kita akan kehilangan keuntungan dari Message Channel yang terpisah di sisi TIB sehingga kita dapat menghindari penyaringan nanti dalam arus data. Melihat komponen Java kami, kami dapat menempatkannya di Gateway Harga atau membuat komponen perantara antara Gateway Harga dan klien. Secara teori, jika kita mempertahankan pemisahan Message Channel yang berbasis ikatan sampai ke klien, Gateway Penetapan Harga akan menyalurkan ulang informasi harga dengan struktur saluran yang sama dengan Gateway Harga dan Mesin Analytics. Ini berarti duplikasi semua saluran TIB yang didedikasikan untuk obligasi di JMS. Bahkan jika kita membuat komponen perantara antara Gateway Harga dan klien, Gateway Harga tetap harus menduplikat semua saluran di JMS. Di sisi lain, menerapkan logika secara langsung di Gateway Harga memungkinkan kita menghindari duplikasi sejumlah besar saluran di JMS yang memungkinkan kita membuat jumlah saluran yang jauh lebih kecil sesuai urutan satu per pedagang. Gateway Harga mencatat dirinya sendiri melalui Adaptor Saluran CTIB sebagai konsumen untuk setiap ikatan setiap pedagang di sistem. Kemudian Gateway Harga akan meneruskan setiap klien tertentu hanya pesan yang terkait dengan pedagang tertentu itu. Dengan cara ini, kita hanya menggunakan sejumlah kecil Message Channel pada akhir JMS, sekaligus memaksimalkan manfaat pemisahan pada akhir TIB. Alur Data Market yang lengkap ke klien Diskusi tata letak Saluran Pesan adalah contoh bagus tentang bagaimana mengintegrasikan pola penting. Tujuannya di sini adalah untuk mengetahui cara menggunakan Kanal Pesan secara efektif. Mengatakan Anda menggunakan pola isnt cukup. Anda perlu mencari cara untuk menerapkannya dengan sebaik-baiknya dan memasukkannya ke dalam sistem Anda untuk memecahkan masalah yang dihadapi. Selain itu, contoh ini menunjukkan kekuatan bisnis dalam tindakan. Jika kita bisa menerapkan logika bisnis di komponen mana pun, kita bisa melakukannya dengan pendekatan per pedagang dan menerapkan pendekatan yang lebih sederhana secara keseluruhan dengan lebih sedikit saluran. Memilih Saluran Pesan Sekarang kita mengetahui mekanisme komunikasi antara komponen JavaJMS dan komponen TIBCO C, dan kita telah melihat beberapa struktur Message Channel, kita perlu memutuskan jenis JMS Message Channel yang mana komponen Java harus digunakan untuk berkomunikasi. . Sebelum kita dapat memilih antara Message Channels yang berbeda yang tersedia di JMS, mari kita lihat aliran pesan tingkat tinggi dari sistem. Kami memiliki dua gateway (Harga dan Kontribusi) yang berkomunikasi dengan klien. Data pasar mengalir ke klien dari Gateway Harga yang mengirimkannya ke Gateway Kontribusi. Aplikasi klien mengirimkan pesan ke Gateway Harga untuk mengubah analisis yang diterapkan pada setiap obligasi. The Contribution Gateway juga mengirimkan pesan ke aplikasi Client yang menyampaikan status update harga ke berbagai tempat perdagangan. Aliran pesan sistem Spesifikasi JMS menggambarkan dua jenis Saluran Pesan, Saluran Point-to-Point (Antrian JMS) dan Saluran Publikasikan-Langganan (JMS Topic). Ingat bahwa kasus penggunaan berlangganan publikasi adalah untuk memungkinkan semua konsumen yang tertarik untuk menerima pesan sementara kasus untuk menggunakan point-to-point adalah memastikan bahwa hanya satu konsumen yang memenuhi syarat menerima pesan tertentu. Banyak sistem hanya akan menyiarkan pesan ke semua aplikasi klien, membiarkan setiap aplikasi klien individual memutuskan sendiri apakah akan memproses pesan tertentu atau tidak. Ini tidak akan berfungsi untuk aplikasi kami karena ada sejumlah besar pesan data pasar yang dikirim ke setiap aplikasi klien. Jika kita menyiarkan update data pasar ke trader yang tidak tertarik, kita tidak perlu membuang-buang siklus prosesor klien yang memutuskan apakah akan memproses update data pasar atau tidak. Point-to-Point Channel pada awalnya terdengar seperti pilihan yang baik karena klien mengirim pesan ke server dan versa unik. Tapi itu adalah persyaratan bisnis bahwa pedagang mungkin masuk ke beberapa mesin secara bersamaan. Jika kita memiliki seorang trader login di dua workstation secara bersamaan dan update harga point-to-point dikirim, hanya satu dari dua aplikasi klien yang akan mendapatkan pesannya. Ini karena hanya satu konsumen di Point-to-Point Channel yang bisa menerima pesan tertentu. Perhatikan bahwa hanya yang pertama dari setiap kelompok aplikasi klien pedagang yang menerima pesan tersebut. Pesan Point-to-Point untuk Pembaruan Harga Kita bisa menyelesaikannya dengan menggunakan pola Daftar Penerima, yang menerbitkan pesan ke daftar penerima yang dituju, yang menjamin bahwa hanya klien dalam daftar penerima yang akan menerima pesan. Dengan menggunakan pola ini, sistem bisa membuat daftar penerima dengan semua contoh aplikasi klien yang terkait dengan masing-masing trader. Mengirim pesan yang terkait dengan pedagang tertentu pada gilirannya akan mengirim pesan ke setiap aplikasi dalam daftar penerima. Ini menjamin semua contoh aplikasi klien yang terkait dengan trader tertentu akan menerima pesan tersebut. Kelemahan dari pendekatan ini adalah bahwa ia memerlukan sedikit logika pelaksanaan untuk mengelola penerima dan mengirim pesan. Daftar Penerima untuk Pembaruan Harga Meskipun point-to-point dapat dilakukan untuk bekerja, mari kita lihat apakah ada cara yang lebih baik. Dengan menggunakan Publish-Subscribe Channel s, sistem dapat menyiarkan pesan pada saluran khusus pedagang daripada saluran spesifik aplikasi klien. Dengan cara ini, semua aplikasi client memproses pesan untuk satu trader akan menerima dan memproses pesan. Publish-Subscribe Messaging for Price Updates Kelemahan dari penggunaan Publish-Subscribe Channel s adalah pemrosesan pesan yang unik tidak dijamin dengan komponen server. Mungkin beberapa contoh komponen server harus instantiated dan setiap instance memproses pesan yang sama, mungkin mengirimkan harga yang tidak valid. Mengingat aliran pesan sistem, hanya satu arah komunikasi yang memuaskan dengan setiap Saluran Pesan. Komunikasi antar-klien dengan berlangganan publikasi memuaskan sementara komunikasi client-to-server tidak dan komunikasi client-server dengan point-to-point memuaskan sementara server-client tidak. Karena tidak perlu menggunakan Saluran Pesan yang sama di kedua arah, kita dapat menggunakan setiap Saluran Pesan hanya satu arah. Komunikasi client-to-server akan diimplementasikan dengan point-to-point sedangkan komunikasi antar client akan diimplementasikan dengan publish-subscribe. Dengan menggunakan kombinasi Message Channel ini, sistem ini mendapatkan keuntungan dari komunikasi langsung dengan komponen server menggunakan pesan point-to-point dan sifat multicast dari penerbitan-berlangganan tanpa salah satu kekurangannya. Aliran pesan dengan Jenis Saluran Pemecahan Masalah Dengan Pola Pola adalah alat dan koleksi pola adalah kotak peralatan. Mereka membantu memecahkan masalah. Beberapa orang berpikir bahwa pola hanya berguna selama disain. Mengikuti analogi toolbox, ini seperti mengatakan bahwa alat hanya berguna saat Anda membangun rumah, bukan saat Anda memperbaikinya. Faktanya adalah bahwa pola adalah alat yang berguna selama sebuah proyek bila diterapkan dengan baik. Pada bagian berikut, kami akan menggunakan proses eksplorasi pola yang sama dengan yang kami gunakan di bagian sebelumnya untuk memecahkan masalah dalam sistem kerja sekarang. Pembaruan Data Pasar Berkedip Pedagang ingin sel tabel berkedip saat data pasar baru diterima untuk sebuah ikatan, menunjukkan perubahan dengan jelas. Klien Java menerima pesan dengan data baru yang memicu update data cache klien dan akhirnya berkedip dalam tabel. Masalahnya adalah bahwa update datang cukup sering. Tumpukan thread GUI menjadi kelebihan beban dan akhirnya membekukan klien karena tidak dapat merespons interaksi pengguna. Kita akan mengasumsikan bahwa flashing dioptimalkan dan berkonsentrasi pada aliran data pesan melalui proses update. Pemeriksaan data kinerja menunjukkan bahwa aplikasi klien menerima beberapa update pada beberapa update yang terjadi kurang dari satu milidetik. Dua pola yang sepertinya bisa membantu memperlambat arus pesan adalah Aggregator dan Message Filter. Pemikiran pertama adalah menerapkan Filter Pesan untuk mengendalikan kecepatan arus pesan dengan membuang pembaruan yang diterima dalam jumlah kecil setelah pesan referensi. Sebagai contoh, katakanlah kita akan mengabaikan pesan dalam waktu 5 milidetik satu sama lain. Filter Pesan dapat menyimpan waktu pesan terakhir yang dapat diterima dan membuang apa pun yang diterima dalam 5 milidetik berikutnya. Sementara aplikasi lain mungkin tidak dapat menahan kehilangan data sedemikian rupa, ini sangat dapat diterima di sistem kami karena frekuensi pembaruan harga. Filter Pesan Berbasis Waktu Masalah dengan pendekatan ini adalah tidak semua bidang data diperbarui pada waktu yang bersamaan. Setiap obligasi memiliki sekitar 50 bidang data yang ditampilkan kepada pengguna termasuk harga. Kami menyadari bahwa tidak setiap bidang diperbarui dalam setiap pesan. Jika sistem mengabaikan pesan berturut-turut, mungkin akan membuang data penting. Pola bunga lainnya adalah Aggregator. Aggregator digunakan untuk mengelola rekonsiliasi beberapa pesan terkait menjadi satu pesan, yang berpotensi mengurangi arus pesan. Aggregator dapat menyimpan salinan data obligasi dari pesan gabungan pertama, kemudian memperbarui hanya pesan baru atau berubah yang berurutan. Akhirnya data obligasi gabungan akan dilewatkan dalam pesan ke klien. Untuk saat ini, mari kita asumsikan bahwa Aggregator akan mengirim pesan setiap 5 milidetik seperti Message Filter. Belakangan, jelajahi alternatif lain. Agregator dengan update berurutan parsial The Aggregator. Seperti pola lainnya, bukan peluru perak yang memiliki kelebihan dan kekurangannya yang perlu dieksplorasi. Salah satu potensi minus adalah bahwa menerapkan Agregator akan mengurangi lalu lintas pesan dalam jumlah besar dalam kasus kami hanya jika banyak pesan masuk dalam waktu yang relatif singkat mengenai ikatan yang sama. Di sisi lain, kita tidak akan menyelesaikan apa-apa jika klien Java hanya menerima update untuk satu bidang di semua ikatan pedagang. Misalnya, jika kita menerima 1000 pesan dalam jangka waktu tertentu dengan 4 ikatan bunga, kita akan mengurangi arus pesan dari 1000 menjadi 4 pesan selama jangka waktu tersebut. Sebagai alternatif, jika kita menerima 1000 pesan dalam rentang waktu yang sama dengan 750 obligasi yang menarik, kita akan mengurangi arus pesan dari 1.000 menjadi 750 pesan yang relatif sedikit keuntungan untuk jumlah usaha. Analisis cepat tentang pembaruan pesan membuktikan bahwa klien Java menerima banyak pesan untuk memperbarui bidang dari ikatan yang sama, dan karena itu pesan terkait. Jadi, Aggregator sebenarnya adalah keputusan yang bagus. Yang tersisa adalah menentukan bagaimana Aggregator akan tahu kapan harus mengirim pesan yang telah digabungkan. Pola tersebut menggambarkan beberapa algoritma bagi Aggregator untuk mengetahui kapan harus mengirim pesan. Ini termasuk algoritma yang menyebabkan agregator mengirimkan isinya setelah jangka waktu tertentu berlalu, setelah semua bidang yang dibutuhkan dalam kumpulan data selesai, dan yang lainnya. Masalah dengan semua pendekatan ini adalah bahwa agregator mengendalikan arus pesan, bukan klien. Dan klien adalah hambatan utama dalam kasus ini, bukan aliran pesan. Hal ini karena Aggregator mengasumsikan konsumen dari pesan yang dibersihkan (aplikasi klien dalam kasus ini) adalah Konsumen yang Didorong oleh Aktivitas, atau konsumen yang bergantung pada kejadian dari sumber eksternal. Kita perlu mengubah klien menjadi Konsumen Polling. Atau konsumen yang terus menerus mengecek pesan, sehingga aplikasi client bisa mengendalikan aliran pesan. Kita bisa melakukan ini dengan membuat thread latar belakang yang terus menerus berputar melalui himpunan ikatan dan update dan berkedip setiap perubahan yang telah terjadi sejak iterasi terakhir. Dengan cara ini, klien mengontrol saat pesan diterima dan sebagai hasilnya, menjamin bahwa tidak akan pernah menjadi kelebihan beban dengan pesan selama periode pembaruan tinggi. Kita dapat dengan mudah menerapkannya dengan mengirimkan Pesan Perintah ke Aggregator yang memulai update. The Aggregator will respond with a Document Message containing the set of updated fields that the client will process. The choice of Aggregator over Message Filter is clearly a decision based solely on the business requirements of our system. Each could help us solve our performance problems, but using the Message Filter would solve the problem at cost of the system data integrity. Major Production Crash With the performance of the flashing fixed, we are now in production. One day the entire system goes down. MQSeries crashes, bringing several components down with it. We struggle with the problem for a while and finally trace it back to the MQSeries dead letter queue (an implementation of the Dead Letter Channel ). The queue grows so large that it brings down the entire server. After exploring the messages in the dead letter queue we find they are all expired market data messages. This is caused by slow consumers, or consumers that do not process messages fast enough. While messages are waiting to be processed, they time out (see the Message Expiration pattern) and are sent to the Dead Letter Channel . The excessive number of expired market data messages in the dead letter queue is a clear indication that the message flow is too great messages expire before the target application can consume them. We need to fix the message flow and we turn to patterns for help slowing down the message flow. A reasonable first step is to explore solving this problem with the Aggregator as we recently used this pattern to solve the similar flashing market data control rate problem. The system design relies on the client application to immediately forward market data update messages to the trading venues. This means the system cannot wait to collect messages and aggregate them. So the Aggregator must be abandoned. There are two other patterns that deal with the problem of consuming messages concurrently: Competing Consumers and Message Dispatcher . Starting with Competing Consumers . the benefit of this pattern is the parallel processing of incoming messages. This is accomplished using several consumers on the same channel. Only one consumer processes each incoming message leaving the others to process successive messages. Competing Consumers . however, will not work for us since we are using Publish-Subscribe Channel s in server-to-client communication. Competing Consumers on a Publish-Subscribe Channel channel means that all consumers process the same incoming message. This results in more work without any gain and completely misses the goal of the pattern. This approach also has to be abandoned. On the other hand, the Message Dispatcher describes an approach whereby you add several consumers to a pool. Each consumer can run its own execution thread. One main Message Consumer listens to the Channel and delegates the message on to an unoccupied Message Consumer in the pool and immediately returns to listening on the Message Channel . This achieves the parallel processing benefit of Competing Consumers . but works on Publish-Subscribe Channel s. The Message Dispatcher in context Implementing this in our system is simple. We create a single JMSListener called the Dispatcher, which contains a collection of other JMSListener s called Performers. When the onMessage method of the Dispatcher is called, it in turn picks a Performer out of the collection to actually process the message. The result of which is a Message Listener (the Dispatcher) that always returns immediately. This guarantees a steady flow of message processing regardless of the message flow rate. Additionally, this works equally well on a Publish-Subscribe Channel s as it does on a Point-to-Point Channel s. With this infrastructure, messages can be received by the client application at almost any rate. If the client application is still slow to process the message after receiving them, the client application can deal with the delayed processing and potentially outdated market data rather than the messages expiring in the JMS Message Channel . The crash discussed in this section and the fix using the Message Dispatcher is an excellent example of the limits of applying patterns. We encountered a performance problem based on a design flaw not allowing the client to process messages in parallel. This greatly improved the problem, but did not completely fix it. This is because the real problem was the client becoming a bottleneck. This couldnt be fixed with a thousand patterns. We later addressed this problem by refactoring the message flow architecture to route messages directly from the Pricing Gateway to the Contribution Gateway. So patterns can help design and maintain a system, but dont necessarily make up for poor upfront design. Throughout this chapter, we have applied patterns to several different aspects of a bond trading system including solving initial upfront design problems and fixing a nearly job threatening production crash with patterns. We also saw these patterns as they already exist in third party product, legacy components, and our JMS and TIBCO messaging systems. Most importantly, these are real problems with the same types of architectural, technical and business problems we experience as we design and maintain our own systems. Hopefully reading about applying patterns to this system helps give you a better understanding of the patterns as well as how to apply them to your own systems. Want to keep up-to-date Follow My Blog . Want to read more in depth Check out My Articles . Want to see me live See where I am speaking next . Find the full description of this pattern in: Enterprise Integration Patterns Gregor Hohpe and Bobby Woolf ISBN 0321200683 650 pages Addison-Wesley From Enterprise Integration to Enterprise Transformation: My new book describes how architects can play a critical role in IT transformation by applying their technical, communication, and organizational skills with 37 episodes from large-scale enterprise IT. Parts of this page are made available under the Creative Commons Attribution license. You can reuse the pattern icon, the pattern name, the problem and solution statements (in bold), and the sketch under this license. Other portions of the text, such as text chapters or the full pattern text, are protected by copyright. Messaging Patterns 187 Integration Patterns in Practice 187 Case Study: Bond Trading SystemI am in the process of designing a trading application which will use a Markets API to place orders on the Market. This isnt a complex high performance algorithmic trading application of the kind found in investment banks. This is just a small personal application which will trade maybe two or three times a day depending on market conditionstrends The application will consist (roughly) of the following modulespackages: Strategies - The actual trading algorithms Analytics - The classes for analysing the live prices amp orders on the market to produce buysell signals Services - The classes used to maintain a connection to the market, retrieve market information and place buysell orders. So far, everything required for the application seems to be available on the internet: Apache CXF for generating the Java classes used for accessing the markets web services. Apache Maths for the performing the pricing analytics Wikipedia for the various design patterns i. e. Factory, SubjectObserver, State, etc. Where Im really stuck however is with the algorithms. Ive decided to use the State pattern to partition, into logical groupings, the various pieces of logic which should be performed when certain market conditions are met. The problem is that Im beginning to see that it is very likely that each state class will contain an explosion of if else statements: I cant help but feel Im missing something here and that there must exist some framework or design pattern I dont know about which enables the developer to encapsulate all the inputs and outputs of a given business context into a finite number of business actions inputoutput on which business rulesalgorithms can be built. Yaitu. Rather than having to hardcode the algorithms Im hoping that it should be possible to make the application into a rules processor of some sort. Unfortunately I dont know where to start on this. I hope Ive explained my dilema clearly enough, if you would like me to clarify anything please let me know. Thank you asked Oct 8 09 at 22:48

Comments