Bond online trading system
Anda akan melihat kadang-kadang seorang investor atau trader dapat menggunakan kata buy sementara yang lain menggunakan kata long. Beberapa mungkin mengatakan menjual dan yang lain mengatakan singkat. Apa bedanya Bisa sangat sedikit, atau banyak, semua pada waktu bersamaan. Reksa dana obligasi berinvestasi pada instrumen hutang yang dikeluarkan oleh pemerintah dan atau perusahaan. Sebagian besar dana ini dirancang untuk memberikan pendapatan bunga bagi pemegang saham dalam bentuk dividen yang mewakili total pembayaran bunga yang dilakukan oleh semua obligasi dalam portofolio dana. Analisis fundamental adalah dasar investasi yang solid. Ini membantu Anda menentukan kesehatan perusahaan yang mendasarinya dengan memeriksa nomor inti bisnis: laporan pendapatan, rilis pendapatan, neraca, dan indikator kesehatan ekonominya lainnya. Dari dasar-dasar ini, para investor mengevaluasi apakah saham tersebut di bawah atau terlalu tinggi. Analisis fundamental mulai Anda akan melihat kadang-kadang seorang investor atau trader dapat menggunakan kata buy sementara yang lain menggunakan kata long. Beberapa mungkin mengatakan menjual dan yang lain mengatakan singkat. Apa bedanya Bisa sangat sedikit, atau banyak, semua pada waktu bersamaan. Anda bisa menyebut diri Anda sebagai Investor Obligasi Veteran jika Anda adalah peserta pasar dengan keterampilan menengah. Anda telah secara aktif mempertahankan portofolio obligasi Anda sendiri setidaknya selama satu atau dua tahun. Veteran memiliki pendekatan investasi konservatif untuk mendapatkan uang yang telah mereka berikan pada obligasi, namun mereka dengan hati-hati meneliti investasi obligasi. Sebaliknya, jika Anda takut mengungkap implikasi pajak dari trading Anda, berikan banyak waktu untuk mendapatkan terus masalah ini. Dengan hanya beberapa dasar di bawah ikat pinggang Anda, Anda akan siap untuk bermitra dengan akuntan pajak Anda dan mengelola pajak perdagangan Anda lebih banyak Strategi Bond yang Unggul Beli Obligasi Korporasi Strategi Sesuai dengan namanya, obligasi perusahaan dikeluarkan oleh perusahaan - biasanya besar, yang diperdagangkan . Perusahaan meminjam uang dari investor untuk mendanai inisiatif bisnis. Strategi Obligasi Lebih Banyak Beli Obligasi Korporasi Strategi Sesuai dengan namanya, obligasi korporasi dikeluarkan oleh perusahaan - biasanya besar, diperdagangkan secara publik. Perusahaan meminjam uang dari investor untuk mendanai inisiatif bisnis. Buy Municipal BondMunicipal bonds (juga dikenal sebagai munis) diterbitkan oleh negara bagian, kota, kabupaten dan badan pemerintah lainnya di bawah tingkat federal untuk mengumpulkan uang untuk perbaikan publik. Forum Jaringan Trader Bond Tools Ucapkan pendapat Anda tentang sekuritas yang Anda jual dan hubungkan dengan pedagang lain di Jaringan kami. Laporan PenelitianMelakukan pasar untuk gagasan investasi baru dengan riset MarketGrader. Pusat Penghasilan Tetap Tentukan strategi pendapatan tetap ideal Anda, baik jangka pendek maupun jangka panjang. Blog Jaringan Trader Pelajari pikiran Anda tentang sekuritas yang Anda jual dan hubungkan dengan pedagang lain di Jaringan kami. Pilihan melibatkan risiko dan tidak sesuai untuk semua investor. Untuk informasi lebih lanjut, tinjau pilihan Karakteristik dan Resiko brosur Pilihan Standar yang tersedia di tradekingODD sebelum Anda memulai opsi perdagangan. Pilihan investor mungkin kehilangan seluruh jumlah investasinya dalam waktu yang relatif singkat. Perdagangan online memiliki risiko inheren karena respon sistem dan waktu akses yang bervariasi karena kondisi pasar, kinerja sistem dan faktor lainnya. Seorang investor harus memahami risiko ini dan tambahan sebelum melakukan trading. 4,95 untuk ekuitas online dan perdagangan opsi, tambahkan 65 sen per kontrak opsi. TradeKing mengenakan tambahan 0,35 per kontrak pada produk indeks tertentu dimana biaya penukaran biaya. Lihat FAQ kami untuk rinciannya. TradeKing menambahkan 0,01 per saham pada keseluruhan pesanan untuk harga saham kurang dari 2,00. Lihat halaman Komisi dan Biaya untuk komisi perdagangan broker, saham dengan harga murah, spread opsi, dan surat berharga lainnya. Kutipan ditunda minimal 15 menit, kecuali dinyatakan lain. Data pasar didukung dan diimplementasikan oleh SunGard. Data fundamental perusahaan disediakan oleh Factset. Perkiraan penghasilan yang diberikan oleh Zacks. Data reksa dana dan ETF yang diberikan oleh Lipper dan Dow Jones Company. Pembelian bebas komisi untuk menutup penawaran tidak berlaku untuk perdagangan multi-kaki. Strategi pilihan beberapa langkah melibatkan risiko tambahan dan banyak komisi. Dan dapat menyebabkan perlakuan pajak yang kompleks. Silakan berkonsultasi dengan penasihat pajak Anda. Volatilitas tersirat mewakili konsensus pasar terhadap tingkat volatilitas harga saham di masa depan atau probabilitas mencapai titik harga tertentu. Orang-orang Yunani mewakili konsensus pasar mengenai bagaimana opsi tersebut akan bereaksi terhadap perubahan pada variabel tertentu yang terkait dengan penentuan harga kontrak opsi. Tidak ada jaminan bahwa perkiraan volatilitas tersirat atau orang Yunani akan benar. Investor harus mempertimbangkan tujuan investasi, risiko, biaya dan pengeluaran reksa dana atau dana yang diperdagangkan di bursa (ETFs) secara hati-hati sebelum melakukan investasi. Prospektus reksadana atau ETF berisi informasi ini dan lainnya, dan dapat diperoleh melalui email servicetradeking. Hasil investasi akan berfluktuasi dan tunduk pada volatilitas pasar, sehingga saham investor, jika ditebus atau dijual, mungkin bernilai lebih atau kurang dari biaya awal mereka. ETF memiliki risiko yang sama dengan saham. Beberapa dana khusus yang diperdagangkan di bursa dapat dikenai risiko pasar tambahan. Platform Tradeed Fixed Income disediakan oleh Knight BondPoint, Inc. Semua tawaran (penawaran) yang diajukan pada platform Knight BondPoint adalah perintah limit dan jika dieksekusi hanya akan dieksekusi terhadap penawaran (penawaran) pada platform Knight BondPoint. Knight BondPoint tidak mengarahkan pesanan ke tempat lain untuk tujuan penanganan dan eksekusi pesanan. Informasi yang didapat dari sumber yang diyakini bisa diandalkan namun, keakuratan atau kelengkapannya tidak terjamin. Informasi dan produk disediakan berdasarkan basis usaha terbaik saja. Harap baca Syarat dan Ketentuan Pendapatan Tetap secara penuh. Investasi pendapatan tetap tunduk pada berbagai risiko termasuk perubahan tingkat suku bunga, kualitas kredit, valuasi pasar, likuiditas, pembayaran di muka, pelunasan awal, kejadian perusahaan, konsekuensi pajak dan faktor lainnya. Simbol konten, penelitian, alat, dan saham atau opsi hanya untuk tujuan pendidikan dan ilustrasi dan tidak menyiratkan rekomendasi atau ajakan untuk membeli atau menjual keamanan tertentu atau terlibat dalam strategi investasi tertentu. Proyeksi atau informasi lain mengenai kemungkinan berbagai hasil investasi bersifat hipotetis, tidak dijamin untuk akurasi atau kelengkapan, tidak mencerminkan hasil investasi aktual dan bukan jaminan hasil di masa depan. Konten pihak ketiga mana pun termasuk Blog, Catatan Perdagangan, Pos Forum, dan komentar tidak mencerminkan pandangan TradeKing dan mungkin belum ditinjau oleh TradeKing. All-Stars adalah pihak ketiga, tidak mewakili TradeKing, dan dapat mempertahankan hubungan bisnis independen dengan TradeKing. Testimoni mungkin tidak mewakili pengalaman klien lain dan tidak menunjukkan kinerja atau kesuksesan di masa depan. Tidak ada pertimbangan yang dibayarkan untuk testimonial yang ditampilkan. Dokumentasi pendukung untuk klaim apa pun (termasuk klaim yang dibuat atas nama opsi program atau keahlian opsi), perbandingan, rekomendasi, statistik, atau data teknis lainnya, akan diberikan sesuai permintaan. Semua investasi melibatkan risiko, kerugian dapat melebihi investasi yang diinvestasikan, dan kinerja terakhir dari produk keamanan, industri, sektor, pasar, atau keuangan tidak menjamin hasil atau pengembalian di masa depan. TradeKing menyediakan layanan bagi para broker dengan layanan perantara diskon, dan tidak memberikan rekomendasi atau saran investasi, keuangan, hukum atau pajak. Anda sendiri bertanggung jawab untuk mengevaluasi manfaat dan risiko yang terkait dengan penggunaan sistem, layanan, atau produk TradeKings. Untuk daftar lengkap pengungkapan yang terkait dengan konten online, silakan kunjungi penerbit tradekingeducationdisclosures. Perdagangan valuta asing (Forex) ditawarkan kepada investor mandiri melalui TradeKing Forex. TradeKing Forex, Inc dan TradeKing Securities, LLC terpisah, namun berafiliasi. Rekening Forex tidak dilindungi oleh Securities Investor Protection Corp. (SIPC). Perdagangan valas melibatkan risiko kerugian yang signifikan dan tidak sesuai untuk semua investor. Meningkatkan leverage akan meningkatkan resiko. Sebelum memutuskan untuk melakukan perdagangan forex, Anda harus mempertimbangkan dengan hati-hati tujuan keuangan, tingkat pengalaman investasi, dan kemampuan untuk mengambil risiko finansial. Setiap opini, berita, penelitian, analisis, harga atau informasi lain yang terkandung di dalamnya bukan merupakan saran investasi. Baca pengungkapan penuh. Harap perhatikan bahwa kontrak emas dan perak spot tidak tunduk pada peraturan berdasarkan Undang-Undang Pertukaran Komoditas A. S. TradeKing Forex, Inc bertindak sebagai broker untuk memperkenalkan GAIN Capital Group, LLC (GAIN Capital). Akun forex Anda dipegang dan dipelihara di GAIN Capital yang berfungsi sebagai agen kliring dan counterparty untuk perdagangan Anda. GAIN Capital terdaftar dengan Commodity Futures Trading Commission (CFTC) dan merupakan anggota National Futures Association (NFA) (ID 0339826). TradeKing Forex, Inc. adalah anggota National Futures Association (ID 0408077). Copy 2017 TradeKing Group, Inc. Semua hak dilindungi undang-undang. TradeKing Group, Inc. adalah anak perusahaan yang sepenuhnya dimiliki oleh Ally Financial, Inc. Securities yang ditawarkan melalui TradeKing Securities, LLC, anggota FINRA dan SIPC. Forex yang ditawarkan melalui TradeKing Forex, LLC, anggota NFA. Sistem Perdagangan: Apa itu Sistem Perdagangan 13 Sistem perdagangan hanyalah sekelompok peraturan atau parameter spesifik, yang menentukan titik masuk dan keluar untuk ekuitas tertentu. Poin-poin ini, yang dikenal sebagai sinyal, sering ditandai pada grafik secara real time dan mendorong segera eksekusi perdagangan. Berikut adalah beberapa alat analisis teknis yang paling umum digunakan untuk membangun parameter sistem perdagangan: Moving averages (MA) 13 Stochastic 13 Oscillators 13 Kekuatan Relatif 13 Bollinger Band Seringkali, dua atau lebih dari bentuk indikator ini akan digabungkan dalam penciptaan. Sebuah peraturan Misalnya, sistem crossover MA menggunakan dua parameter rata-rata bergerak, jangka panjang dan jangka pendek, untuk menciptakan aturan: beli bila jangka pendek melintasi di atas jangka panjang, dan jual bila sebaliknya benar. Dalam kasus lain, aturan hanya menggunakan satu indikator. Misalnya, sistem mungkin memiliki peraturan yang melarang pembelian kecuali kekuatan relatifnya berada di atas tingkat tertentu. Tapi itu adalah kombinasi dari semua jenis peraturan yang membuat sistem perdagangan. Sistem Rata-rata Moving Average Moving Moving Menggunakan 5 dan 20 Moving Averages Karena keberhasilan sistem secara keseluruhan bergantung pada seberapa baik kinerja peraturan, trader sistem menghabiskan waktu untuk mengoptimalkannya. Untuk mengelola risiko. Meningkatkan jumlah yang diperoleh per perdagangan dan mencapai stabilitas jangka panjang. Hal ini dilakukan dengan memodifikasi parameter yang berbeda dalam setiap aturan. Misalnya, untuk mengoptimalkan sistem crossover MA, trader akan menguji untuk melihat rata-rata pergerakan (10 hari, 30 hari, dll.) Yang terbaik, dan kemudian menerapkannya. Tapi optimasi dapat memperbaiki hasil hanya dengan margin kecil - kombinasi parameter yang digunakan yang pada akhirnya akan menentukan keberhasilan sebuah sistem. Keuntungan Jadi, mengapa Anda ingin mengadopsi sistem perdagangan Dibutuhkan semua emosi dari perdagangan - Emosi sering disebut sebagai salah satu kekurangan terbesar dari investor individual. Investor yang tidak mampu mengatasi kerugian menebak keputusan mereka dan akhirnya kehilangan uang. Dengan mengikuti sistem yang telah dikembangkan sebelumnya, pedagang sistem dapat melupakan kebutuhan untuk membuat keputusan begitu sistem dikembangkan dan dikembangkan, perdagangan tidak bersifat empiris karena bersifat otomatis. Dengan mengurangi inefisiensi manusia, pedagang sistem dapat meningkatkan keuntungan. Ini bisa menghemat banyak waktu - Setelah sistem yang efektif dikembangkan dan dioptimalkan. Sedikit pun tidak ada usaha yang dibutuhkan oleh trader. Komputer sering digunakan untuk mengotomatisasi tidak hanya generasi sinyal, tapi juga perdagangan sebenarnya, jadi trader terbebas dari menghabiskan waktu untuk analisis dan melakukan perdagangan. Mudah jika Anda membiarkan orang lain melakukannya untuk Anda - Membutuhkan semua pekerjaan yang dilakukan untuk Anda Beberapa perusahaan menjual sistem perdagangan yang telah mereka kembangkan. Perusahaan lain akan memberi sinyal yang dihasilkan oleh sistem perdagangan internal mereka dengan biaya bulanan. Hati-hati, meskipun - banyak dari perusahaan-perusahaan ini yang curang. Perhatikan baik-baik saat hasilnya dipuji. Bagaimanapun, mudah untuk menang di masa lalu. Carilah perusahaan yang menawarkan percobaan, yang memungkinkan Anda menguji sistem secara real-time. Kerugian Weve melihat keuntungan utama bekerja dengan sistem perdagangan, namun pendekatannya juga memiliki kekurangannya. Sistem perdagangan rumit - Ini adalah kelemahan terbesar mereka. Pada tahap perkembangan, sistem perdagangan menuntut pemahaman yang kuat tentang analisis teknis, kemampuan untuk membuat keputusan empiris dan pengetahuan menyeluruh tentang bagaimana parameter bekerja. Tetapi bahkan jika Anda tidak mengembangkan sistem trading Anda sendiri, penting untuk mengenal parameter yang membentuk akun yang Anda gunakan. Mendapatkan semua keterampilan ini bisa menjadi tantangan. Anda harus dapat membuat asumsi yang realistis dan menerapkan sistem secara efektif - Pedagang sistem harus membuat asumsi yang realistis mengenai biaya transaksi. Ini akan terdiri dari lebih dari biaya komisi - perbedaan antara harga eksekusi dan harga pengisian adalah bagian dari biaya transaksi. Ingat, seringkali tidak mungkin untuk menguji sistem secara akurat, menyebabkan tingkat ketidakpastian saat membawa sistem hidup. Masalah yang terjadi saat hasil simulasi sangat berbeda dengan hasil aktual yang dikenal sebagai slippage. Efektif menangani selip bisa menjadi hambatan utama untuk menerapkan sistem yang berhasil. Perkembangan dapat menjadi tugas yang memakan waktu - Banyak waktu dapat berkembang dalam sistem perdagangan agar berjalan dan bekerja dengan baik. Merancang konsep sistem dan mempraktikkannya melibatkan banyak pengujian, yang memerlukan beberapa saat. Backtesting historis memakan waktu beberapa menit, pengujian kembali saja tidak cukup. Sistem juga harus kertas diperdagangkan secara real time untuk memastikan kehandalan. Akhirnya, selip dapat menyebabkan pedagang melakukan beberapa revisi terhadap sistem mereka bahkan setelah penerapan. Apakah Mereka Bekerja Ada sejumlah penipuan internet yang terkait dengan sistem perdagangan, namun ada juga banyak sistem yang sah dan sukses. Mungkin contoh yang paling terkenal adalah yang dikembangkan dan diimplementasikan oleh Richard Dennis dan Bill Eckhardt, yang merupakan Original Turtle Traders. Pada tahun 1983, keduanya memiliki perselisihan mengenai apakah seorang pedagang baik lahir atau dibuat. Jadi, mereka membawa beberapa orang dari jalanan dan melatih mereka berdasarkan Sistem Perdagangan Kura-kura yang sekarang terkenal. Mereka mengumpulkan 13 pedagang dan akhirnya menghasilkan 80 tahunan selama empat tahun ke depan. Bill Eckhardt pernah berkata, siapapun dengan kecerdasan rata-rata bisa belajar berdagang. Ini bukan ilmu roket. Namun, jauh lebih mudah mempelajari apa yang harus Anda lakukan dalam trading daripada melakukannya. Sistem perdagangan menjadi semakin populer di kalangan pedagang profesional, manajer investasi dan investor perorangan - mungkin ini adalah bukti seberapa baik mereka bekerja. Dengan Penipuan Saat mencari untuk membeli sistem perdagangan, sulit untuk menemukan bisnis yang dapat dipercaya. . Tapi kebanyakan penipuan bisa terlihat oleh akal sehat. Misalnya, garansi 2.500 tahunan sangat keterlaluan karena menjanjikan bahwa dengan hanya 5.000 Anda bisa menghasilkan 125.000 dalam satu tahun. Dan kemudian melalui peracikan selama lima tahun, 48,828,125,000 Jika ini benar, tidakkah si pencipta menukar usahanya untuk menjadi miliarder Tawaran lain, bagaimanapun, lebih sulit untuk memecahkan kode, namun cara yang umum untuk menghindari penipuan adalah dengan mencari sistem yang Menawarkan percobaan gratis Dengan cara itu Anda bisa mengetes sistemnya sendiri. Jangan pernah membabi buta mempercayai bisnis yang ditawarkan tentang Ini juga merupakan ide bagus untuk menghubungi orang lain yang telah menggunakan sistem ini, untuk melihat apakah mereka dapat menegaskan keandalan dan profitabilitasnya. Kesimpulan Mengembangkan sistem perdagangan yang efektif sama sekali bukan tugas yang mudah. Ini memerlukan pemahaman yang kuat tentang banyaknya parameter yang ada, kemampuan untuk membuat asumsi dan waktu yang realistis dan dedikasi untuk mengembangkan sistem. Namun, jika dikembangkan dan digunakan dengan benar, sistem perdagangan bisa menghasilkan banyak keuntungan. Hal ini dapat meningkatkan efisiensi, waktu luang dan yang terpenting, meningkatkan keuntungan Anda. Sistem Trading: Merancang Sistem Anda - Bagian 1Trading Systems: 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 mengharuskan 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. Now the question becomes where to put the Content-Based Router . We could simply have the CTIB Channel Adapter forward all of the messages to the Pricing Gateway on a single Message Channel . This is bad for two reasons we would be splitting up the business logic between C and Java, and we would lose the benefit of the separate Message Channel s on the TIB side allowing us to avoid filtering later in the data flow. Looking at our Java components, we could either place it in the Pricing Gateway or create an intermediary component between the Pricing Gateway and the client. In theory, if we persisted the bond-based separation of Message Channel s all the way to the client, the Pricing Gateway would rebroadcast pricing information with the same channel structure as the Pricing Gateway and Analytics Engine. This means a duplication of all of the bond dedicated TIB channels in JMS. Even if we create an intermediary component between the Pricing Gateway and the client, the Pricing Gateway will still have to duplicate all of the channels in JMS. On the other hand, implementing logic directly in the Pricing Gateway allows us to avoid duplicating the large number of channels in JMSallowing us to create a much smaller number of channels in the order of one per trader. The Pricing Gateway registers itself through the CTIB Channel Adapter as a consumer for each bond of every trader in the system. Then the Pricing Gateway will forward each specific client only the messages related to that particular trader. This way, we only use a small number of Message Channel s on the JMS end, while maximizing the benefit of the separation on the TIB end. The complete Market Data Flow to the client The Message Channel layout discussion is a good example of how integrating patterns is important. The goal here was to figure out how to effectively use the Message Channel s. Saying you use a pattern isnt enough. You need to figure out how to best implement it and incorporate into your system to solve the problems at hand. Additionally, this example shows business forces in action. If we could implement business logic in any of our components, we could have gone with the per trader approach and implemented an overall more simple approach with many less channels. Selecting a Message Channel Now that we know the mechanics of the communication between the JavaJMS components and the C TIBCO components, and we have seen some Message Channel structuring, we need to decide which type of JMS Message Channel s the Java components should use to communicate. Before we can choose between the different Message Channels available in JMS, lets look at the high level message flow of the system. We have two gateways (Pricing and Contribution) communicating with the client. Market data flows to the client from the Pricing Gateway which sends it out to the Contribution Gateway. The client application sends message to the Pricing Gateway to alter the analytics being applied to each bond. The Contribution Gateway also sends messages to the Client application relaying the status of the price updates to the different trading venues. The system message flow The JMS specification describes two Message Channel types, Point-to-Point Channel (JMS Queue ) and Publish-Subscribe Channel (JMS Topic ). Recall that the case for using publish-subscribe is to enable all interested consumers to receive a message while the case for using point-to-point is to ensure that only one eligible consumer receives a particular message. Many systems would simply broadcast messages to all client applications, leaving each individual client application to decide for itself whether or not to process a particular message. This will not work for our application since there are a large number of market data messages being sent to each client application. If we broadcast market data updates to uninterested trader, we will be unnecessarily wasting client processor cycles deciding whether or not to process a market data update. Point-to-Point Channel s initially sound like a good choice since the clients are sending messages to unique servers and visa versa. But it was a business requirement that traders may be logged in to multiple machines at the same time. If we have a trader logged in at two workstations simultaneously and a point-to-point price update is sent, only one of the two client applications will get the message. This is because only one consumer on a Point-to-Point Channel can receive a particular message. Notice that only the first of each group of a traders client applications receives the message. Point-to-Point Messaging for Price Updates We could solve this using the Recipient List pattern, which publishes messages to a list of intended recipients, guaranteeing that only clients in the recipient list will receive messages. Using this pattern, the system could create recipient lists with all client application instances related to each trader. Sending a message related to a particular trader would in turn send the message to each application in the recipient list. This guarantees all client application instances related to a particular trader would receive the message. The downside of this approach is that it requires quite a bit of implementation logic to manage the recipients and dispatch messages. Recipient List for Price Updates Even though point-to-point could be made to work, lets see if there is a better way. Using Publish-Subscribe Channel s, the system could broadcast messages on trader specific channels rather than client application specific channels. This way, all client applications processing messages for a single trader would receive and process the message. Publish-Subscribe Messaging for Price Updates The downside of using Publish-Subscribe Channel s is that unique message processing is not guaranteed with the server components. It would be possible for multiple instances of a server component to be instantiated and each instance process the same message, possibly sending out invalid prices. Recalling the system message flow, only a single communication direction is satisfactory with each Message Channel . Server-to-client communication with publish-subscribe is satisfactory while client-to-server communication is not and client-server communication with point-to-point is satisfactory while server-client is not. Since there is no need to use the same Message Channel in both directions, we can use each Message Channel only one direction. Client-to-server communication will be implemented with point-to-point while server-to-client communication will be implemented with publish-subscribe. Using this combination of Message Channel s, the system benefits from direct communication with the server components using point-to-point messaging and the multicast nature of publish-subscribe without either of the drawbacks. Message flow with Channel Types Problem Solving With Patterns Patterns are tools and collections of patterns are toolboxes. They help solve problems. Some think that patterns are only useful during design. Following the toolbox analogy, this is like saying that tools are only useful when you build a house, not when you fix it. The fact is that patterns are a useful tool throughout a project when applied well. In the following sections we will use the same pattern exploration process we used in the previous section to solve problems in our now working system. Flashing Market Data Updates Traders want table cells to flash when new market data is received for a bond, clearly indicating changes. The Java client receives messages with new data which triggers a client data cache update and eventually flashing in the table. The problem is that updates come quite frequently. The GUI thread stack is becoming overloaded and eventually freezing the client since it cant respond to user interaction. We will assume that the flashing is optimized and concentrate on the data flow of messages through the updating process. An examination of performance data shows the client application is receiving several updates a second some updates occurred less than a millisecond apart. Two patterns that seem like they could help slow down the message flow are Aggregator and Message Filter. A first thought is to implement a Message Filter to control the speed of the message flow by throwing out updates received a small amount of time after the reference message. As an example, lets say that we are going to ignore messages within 5 milliseconds of each other. The Message Filter could cache the time of the last acceptable message and throw out anything received within the next 5 milliseconds. While other applications may not be able to withstand data loss to such an extent, this is perfectly acceptable in our system due to the frequency of price updates. Time based Message Filter The problem with this approach is that not all data fields are updated at the same time. Each bond has approximately 50 data fields displayed to the user including price. We realize that not every field is updated in every message. If the system ignores consecutive messages, it may very well be throwing out important data. The other pattern of interest is the Aggregator . The Aggregator is used to manage the reconciliation of multiple, related messages into a single message, potentially reducing the message flow. The Aggregator could keep a copy of the bond data from the first aggregated message, then update only new or changed fields successive messages. Eventually the aggregated bond data will be passed in a message to the client. For now, lets assume that the Aggregator will send a message every 5 milliseconds like the Message Filter . Later, well explore another alternative. Aggregator with partial successive updates The Aggregator . like any other pattern, is not a silver bullet it has its pluses and minuses that need to be explored. One potential minus is that implementing an Aggregator would reduce the message traffic by a great amount in our case only if many messages are coming in within a relatively short time regarding the same bond. On the other hand, we would accomplish nothing if the Java client only receives updates for one field across all of the traders bonds. For example, if we receive 1000 messages in a specified timeframe with 4 bonds of interest, we would reduce the message flow from 1000 to 4 messages over that timeframe. Alternatively, if we receive 1000 messages in the same timeframe with 750 bonds of interest, we will have reduced the message flow from 1000 to 750 messages relatively little gain for the amount of effort. A quick analysis of the message updates proves that the Java client receives many messages updating fields of the same bond, and therefore related messages. So, Aggregator is in fact a good decision. Whats left is to determine how the Aggregator will know when to send a message it has been aggregating. The pattern describes a few algorithms for the Aggregator to know when to send the message. These include algorithms to cause the aggregator to send out its contents after a certain amount of time has elapsed, after all required fields in a data set have been completed, and others. The problem with all of these approaches is that the aggregator is controlling the message flow, not the client. And the client is the major bottleneck in this case, not the message flow. This is because the Aggregator is assuming the consumers of its purged messages (the client application in this case) are Event-Driven Consumer s, or consumers that rely on events from an external source. We need to turn the client into a Polling Consumer . or a consumer that continuously checks for messages, so the client application can control the message flow. We can do this by creating a background thread that continuously cycles through the set of bonds and updates and flashes any changes that have occurred since the last iteration. This way, the client controls when messages are received and as a result, guarantees that it will never become overloaded with messages during high update periods. We can easily implement this by sending a Command Message to the Aggregator initiating an 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 System
Comments
Post a Comment