Tuesday 31 October 2017

Design Modelli Stock Trading System


Trading Systems: la progettazione del sistema - Parte 1 13 La sezione precedente di questa guida ha esaminato gli elementi che compongono un sistema commerciale e discussi i vantaggi e gli svantaggi di usare un tale sistema in un ambiente di trading dal vivo. In questa sezione, si costruisce su quella conoscenza esaminando quali mercati sono particolarmente adatti alla negoziazione del sistema. Ci sarà poi dare un'occhiata più approfondita ai diversi generi di sistemi di negoziazione. Trading in diversi mercati mercati azionari Il mercato azionario è probabilmente il mercato più comune al commercio, in particolare tra i novizi. In questo campo, i grandi giocatori come Warren Buffett e Merrill Lynch dominare, e le strategie di valore e di investimento di crescita tradizionali sono di gran lunga il più comune. Tuttavia, molte istituzioni hanno investito in modo significativo nella progettazione, sviluppo e implementazione di sistemi di trading. I singoli investitori si stanno unendo questa tendenza, anche se lentamente. Qui ci sono alcuni fattori chiave da tenere a mente quando si utilizzano sistemi di negoziazione dei mercati azionari: 13 La grande quantità di titoli disponibili consente agli operatori di testare i sistemi su diversi tipi di azioni - tutto, dalle scorte estremamente volatili over-the-counter (OTC) per non volatili blue chips. L'efficacia dei sistemi di trading può essere limitata dalla scarsa liquidità di alcuni titoli azionari, in particolare le questioni OTC e foglio rosa. Le commissioni possono mangiare in profitti generati dalle operazioni di successo, e possono aumentare le perdite. OTC e titoli azionari foglio rosa spesso incorrono commissioni aggiuntive. I principali sistemi di trading utilizzati sono quelli che cercano valore - cioè i sistemi che utilizzano parametri diversi per determinare se un titolo è sottovalutato rispetto al suo rendimento passato, suoi coetanei, o il mercato in generale. I mercati dei cambi il mercato dei cambi, o forex. è il più grande e liquido mercato del mondo. I mondi governi, banche e altri grandi istituti commerciali trilioni di dollari sul mercato forex ogni giorno. La maggior parte degli operatori istituzionali sul forex si basano su sistemi di trading. Lo stesso vale per gli individui sul forex, ma alcuni il commercio sulla base di rapporti economici o payouts. Here interesse sono alcuni fattori chiave da tenere a mente quando si utilizzano sistemi di trading nel mercato forex: La liquidità in questo mercato - a causa del volume enorme - rende i sistemi di negoziazione più accurata ed efficace. Non ci sono commissioni in questo mercato, si diffonde solo. Pertanto, la sua molto più facile fare molte transazioni senza aumentare i costi. Rispetto alla quantità di azioni o materie prime disponibili, il numero di valute per il commercio è limitata. Ma a causa della disponibilità di coppie di valute esotiche - che è, le valute dei paesi più piccoli - la gamma in termini di volatilità non è necessariamente limitato. I principali sistemi di negoziazione utilizzati in forex sono quelli che seguono le tendenze (un detto popolare nel mercato è il trend è tuo amico), o sistemi che acquistano o vendono su sblocchi. Questo perché gli indicatori economici spesso causano ampi movimenti di prezzo in una sola volta. Futures su titoli azionari, i mercati del forex, e delle materie prime tutte offrono futures trading. Questo è un veicolo importante per sistema di trading a causa della maggiore quantità di leva a disposizione e la maggiore liquidità e volatilità. Tuttavia, questi fattori possono tagliare in entrambe le direzioni: possono o amplificare i vostri guadagni o amplificare le perdite. Per questo motivo, l'utilizzo di futures è solitamente riservato per gli operatori di sistema individuali e istituzionali avanzate. Questo perché i sistemi di trading in grado di capitalizzare sul mercato a termine richiedono molto maggiore personalizzazione, utilizzano indicatori più avanzate e ci vuole molto più tempo per svilupparsi. Quindi, che è meglio la sua fino al singolo investitore per decidere quale mercato è più adatto alla negoziazione sistema - ognuno ha i suoi vantaggi e svantaggi. La maggior parte delle persone sono più familiarità con i mercati azionari, e questa familiarità rende lo sviluppo di un sistema commerciale più facile. Tuttavia, forex è comunemente pensato per essere la piattaforma superiore per eseguire sistemi di trading - in particolare tra gli operatori più esperti. Inoltre, se un commerciante decide di capitalizzare su una maggiore leva finanziaria e la volatilità, il futuro alternativa è sempre aperta. In definitiva, la scelta è nelle mani dei developer. Types sistema di sistemi di trading Trend-Seguendo il metodo più comune di Trading System Systems è il sistema di tendenza - sui passi. Nella sua forma più fondamentale, questo sistema attende semplicemente per un significativo movimento dei prezzi, allora acquista o vende in quella direzione. Questo tipo di sistema le banche sulla speranza che questi movimenti di prezzo sarà mantenere il trend. Spostamento Sistemi medio utilizzato frequentemente in analisi tecnica. una media mobile è un indicatore che mostra semplicemente il prezzo medio di uno stock in un periodo di tempo. L'essenza delle tendenze deriva da questa misura. Il modo più comune per determinare entrata e di uscita è un crossover. La logica alla base di questo è semplice: una nuova tendenza viene stabilito quando il prezzo scende al di sopra o al di sotto della sua media storica dei prezzi (trend). Qui è una tabella che traccia sia il prezzo (linea blu) e 20 giorni MA (linea rossa) di IBM: Breakout Systems Il concetto fondamentale alla base di questo tipo di sistema è simile a quello di un sistema di media mobile. L'idea è che quando un nuovo alto o basso è stabilito, il movimento di prezzo è più probabile che continui nella direzione del breakout. Un indicatore che può essere utilizzato per determinare sblocchi è un semplice sovrapposizione Bollinger Band. Bande di Bollinger mostrano le medie dei prezzi alti e bassi, e si verificano sblocchi quando il prezzo soddisfa i bordi delle bande. Ecco un grafico che traccia prezzo (linea blu) e fasce di Bollinger (linee grigie) di Microsoft: Svantaggi di Trend-seguenti sistemi: empirica decisionale richiesto - Nel determinare le tendenze, c'è sempre un elemento empirico da considerare: la durata di la tendenza storica. Ad esempio, la media mobile potrebbe essere per gli ultimi 20 giorni o per gli ultimi cinque anni, quindi lo sviluppatore deve determinare quale è meglio per il sistema. Altri fattori da definire sono le temperature medie e bassi nei sistemi di breakout. In ritardo di sviluppo Natura - Medie mobili e sistemi di breakout saranno sempre in ritardo. In altre parole, possono mai colpito all'inizio esatta o inferiore di una tendenza. Ciò si traduce inevitabilmente in una perdita di potenziali profitti, che a volte può essere significativo. Whipsaw Effect - Tra le forze di mercato che sono dannosi per il successo dei sistemi trend-following, questo è uno dei più comuni. L'effetto whipsaw si verifica quando la media mobile genera un segnale falso - cioè, quando scende la media solo in campo, poi inverte improvvisamente direzione. Questo può portare a perdite enormi a meno efficaci stop loss e le tecniche di gestione del rischio sono impiegati. Di mercato laterale - sistemi di trend-following sono, per natura, in grado di fare soldi solo nei mercati che in realtà fanno tendenza. Tuttavia, i mercati si muovono anche lateralmente. rimanendo entro un certo intervallo per un periodo prolungato di tempo. Estrema volatilità può verificarsi - Di tanto in tanto, i sistemi di trend-following potrebbero verificarsi alcuni estrema volatilità, ma il commerciante deve attaccare con il suo sistema. L'incapacità di farlo si tradurrà in un fallimento assicurato. Sistemi controtendenza In sostanza, l'obiettivo con il sistema controtendenza è quello di acquistare al più basso basso e vendere al più alto alto. La differenza principale tra questo e il sistema di trend-following è che il sistema controtendenza non è auto-correzione. In altre parole, non c'è tempo impostato per uscire posizioni, e questo si traduce in un potenziale inconveniente illimitato. Tipi di controtendenza sistemi a molti diversi tipi di sistemi sono considerati sistemi di controtendenza. L'idea è quella di acquistare quando lo slancio in un senso inizia a dissolvenza. Questo è più spesso calcolata utilizzando oscillatori. Ad esempio, un segnale può essere generato quando stocastico o altri indicatori di forza relativa scendono sotto certi punti. Ci sono altri tipi di sistemi di trading controtendenza, ma tutti condividono lo stesso obiettivo fondamentale - per comprare basso e vendere alto. Svantaggi di controtendenza seguenti sistemi: E mpirical decisionale richiesto - Per esempio, uno dei fattori che lo sviluppatore sistema deve decidere è i punti in cui gli indicatori di forza relativa dissolvenza. Estrema volatilità può verificarsi - Questi sistemi possono anche sperimentare un po 'di estrema volatilità, e l'incapacità di rimanere con il sistema, nonostante questa volatilità si tradurrà in un fallimento assicurato. Downside illimitato - Come accennato in precedenza, vi è un potenziale illimitato aspetto negativo perché il sistema non è auto-correzione (non c'è tempo impostato per uscire posizioni). Conclusione I principali mercati per i quali i sistemi di negoziazione sono adatti sono i mercati azionari, forex e futures. Ciascuno di questi mercati ha i suoi vantaggi e svantaggi. I due generi principali di sistemi di negoziazione sono il trend-following e dei sistemi di controtendenza. Nonostante le loro differenze, entrambi i tipi di sistemi, nelle loro fasi di sviluppo, richiedono decisioni empirica da parte dello sviluppatore. Inoltre, questi sistemi sono soggetti a estrema volatilità e questo può richiedere qualche resistenza - è essenziale che l'operatore di sistema bastone con il suo sistema durante questi periodi. Nel seguito rata, e dare un'occhiata più da vicino a come progettare un sistema commerciale e discutere alcuni dei software che gli operatori di sistema usano per rendere la vita più facile. Trading Systems: la progettazione del sistema - Patterns Parte 2Messaging 187 modelli di integrazione in pratica 187 Case Study: James Bond Trading System (Jonathan Simon) è facile prendere le distanze da una vasta collezione di modelli o di una lingua modello. I modelli sono l'astrazione di un'idea in una forma riutilizzabile. Spesso, la natura molto generico di modelli che li rende così utile li rende anche difficile da afferrare. A volte la cosa migliore per aiutare a capire i modelli è un esempio del mondo reale. Non uno scenario artificioso di quello che potrebbe accadere, ma ciò che realmente accade e che cosa accadrà. Questo capitolo si applica modelli per risolvere i problemi utilizzando un processo di scoperta. Il sistema si discuterà è un sistema di scambio di legame che ho lavorato con per due anni dal progetto iniziale fino alla produzione. Esploreremo scenari e problemi che sono stati incontrati e come risolverli con i modelli. Ciò comporta il processo decisionale di scegliere un modello, nonché come combinare e regolare modelli per soddisfare le esigenze del sistema. E questo è tutto fatto tenendo conto delle forze incontrate in sistemi reali, tra cui i requisiti di business, le decisioni del cliente, i requisiti architettonici e tecnici, così come l'integrazione dei sistemi legacy. L'intento di questo approccio è quello di fornire una migliore comprensione dei modelli stessi attraverso l'applicazione pratica. Costruire un sistema di un'importante banca d'investimento di Wall Street si propone di costruire un sistema di tariffazione legame, nel tentativo di semplificare il flusso di lavoro del loro scrivania scambio di obbligazioni. Attualmente, i commercianti di obbligazioni devono inviare i prezzi per un gran numero di obbligazioni a varie sedi di negoziazione diversi, ciascuno con la propria interfaccia utente. L'obiettivo per il sistema è quello di ridurre al minimo le minuzie di prezzi di tutti i loro legami in combinazione con funzionalità analitiche avanzate specifiche per il mercato obbligazionario in un'unica interfaccia utente incapsulato. Ciò significa integrazione e comunicazione con più componenti su vari protocolli di comunicazione. Il flusso elevato livello del sistema assomiglia a questo: In primo luogo, i dati di mercato entra nel sistema. I dati di mercato sono dati per quanto riguarda il prezzo e le altre proprietà del legame rappresentando ciò che le persone sono disposte a comprare e vendere l'obbligazione per sul mercato libero. I dati di mercato viene immediatamente inviato al motore di analisi che altera i dati. Analytics si riferisce a funzioni matematiche per applicazioni finanziarie che alterano i prezzi e altri attributi di obbligazioni. Queste sono funzioni generiche che utilizzano le variabili di input per adattare i risultati della funzione per un particolare legame. L'applicazione client che verrà eseguito su ogni computer commerciante configurare il motore di analisi in base al commerciante, che controlla le specifiche delle analisi per ogni obbligazione il commerciante sta valutando. Una volta che le analisi vengono applicati ai dati di mercato, i dati modificati vengono inviati a varie sedi di negoziazione dove i commercianti provenienti da altre imprese possono acquistare o vendere titoli. Architettura con i modelli Con questa panoramica del flusso di lavoro del sistema, siamo in grado di avvicinare alcuni dei problemi architettonici che incontriamo durante il processo di progettazione. Diamo un'occhiata a quello che sappiamo fino ad oggi. I commercianti hanno bisogno di un applicazione molto reattivo su entrambe le workstation di Windows NT e Solaris. Pertanto, abbiamo deciso di implementare l'applicazione client come una spessa client Java a causa della sua indipendenza dalla piattaforma e la sua capacità di rispondere rapidamente agli input dell'utente e dati di mercato. Sul lato server, stiamo ereditando componenti legacy C che il nostro sistema utilizzerà. I componenti di dati di mercato comunicano con l'infrastruttura di messaggistica TIBCO Information Bus (TIB). Stiamo ereditando i seguenti componenti: Dati di mercato Prezzo feed Server. Pubblica i dati di mercato in entrata al TIB. Analytics motore. Esegue analisi sui dati di mercato in entrata e trasmette i dati di mercato modificati al TIB. Contributo Server. Esegue tutte le comunicazioni con le sedi di negoziazione. Le sedi di negoziazione sono componenti di terze parti non controllati dalla banca. Legacy Dati di mercato Subsystem Legacy Contributo sottosistema dobbiamo decidere come i sottosistemi separati (Java client di spessore, dati di mercato, e di contribuzione) stanno per comunicare. Potremmo avere il client di spessore comunicare direttamente con il server legacy, ma ciò richiederebbe logica di business troppo sul client. Invece, ben costruire un paio di gateway Java per comunicare con l'eredità serversThe prezzi gateway per i dati di mercato di un contributo Gateway per l'invio di prezzi per le sedi di negoziazione. Questo raggiungerà bella incapsulamento della logica di business legate a queste aree. I componenti attuali del sistema sono riportati di seguito. I collegamenti contrassegnati come. indicano che siamo ancora sicuri di come alcuni dei componenti comunicherà. Il sistema ei suoi componenti La prima domanda di comunicazione è come integrare il client di spessore Java e le due componenti server Java al fine di scambiare dati. Vediamo i quattro stili di integrazione suggerite in questo libro: File Transfer. Database condiviso. Invocazione procedura remota. e messaggistica. Siamo in grado di escludere database condiviso immediatamente perché abbiamo voluto creare un livello di astrazione tra il cliente e la banca dati e non voglio avere il codice di accesso al database nel client. File Transfer può allo stesso modo essere esclusa in quanto è necessario latenza minima per garantire prezzi correnti vengono inviati alle sedi di negoziazione. Questo ci lascia con una scelta tra Remote Procedure Invocazione o Messaggi. La piattaforma Java fornisce il supporto integrato per entrambi Remote Procedure Invocazione e messaggistica. Integrazione RPC-style può essere realizzato utilizzando Remote Method Invocation (RMI), Fagioli CORBA, o Enterprise Java (EJB). Il Java Messaging Service (JMS) è l'API comune per l'integrazione di messaggistica in stile. Così entrambi gli stili di integrazione sono facili da implementare in Java. Quindi, quale funzionerà meglio per questo progetto, Remote Procedure Invocazione o Messaggi. C'è una sola istanza di Gateway pricing e un'istanza del contributo Gateway nel sistema, ma di solito molti thick client si collegano contemporaneamente a questi servizi (uno per ogni operatore legame che sembra essere registrato in un determinato momento). Inoltre, la banca vorrebbe che questo è un sistema di prezzi generico che può essere utilizzato in altre applicazioni. Quindi, oltre ad un numero imprecisato di clienti pensano, ci può essere un numero imprecisato di altre applicazioni che utilizzano i dati dei prezzi che escono i gateway. Un thick client (o altra applicazione che utilizza i dati sui prezzi) possono abbastanza facilmente utilizzare RPC per effettuare chiamate ai gateway per ottenere dati sui prezzi e richiamare l'elaborazione. Tuttavia, dati relativi ai prezzi verranno costantemente pubblicati, e di alcuni clienti sono interessati solo alcuni dati, in modo da ottenere i dati relativi ai clienti corretti in modo tempestivo potrebbe essere difficile. I clienti potrebbero interrogare i gateway, ma che creerà un sacco di spese generali. Sarebbe meglio per i gateway per rendere i dati disponibili per i clienti non appena è disponibile. Questo, tuttavia, richiederà ogni Gateway per tenere traccia di quali clienti sono attualmente attive, e che vogliono i dati quali particolari poi, quando un nuovo pezzo di dati diventa disponibile (che avverrà numerose volte al secondo), il gateway dovrà fare un RPC a ciascun cliente interessato per passare i dati al client. Idealmente, tutti i clienti devono essere notificate simultaneamente, in modo che ogni RPC deve essere fatto in proprio thread concorrente. Questo può funzionare, ma è sempre molto complicato molto veloce. Messaging semplifica notevolmente questo problema. Con Messaging. possiamo definire canali separati per i vari tipi di dati dei prezzi. Poi, quando un Gateway ottiene un nuovo pezzo di dati, si aggiungerà un messaggio contenente i dati per il Publish-Subscribe Channel per quel tipo di dati. Nel frattempo, tutti i clienti interessati a un certo tipo di dati ascolto sul canale per quel tipo. In questo modo, i gateway possono facilmente inviare i nuovi dati a chi è interessato, senza la necessità di sapere quante applicazioni ascoltatore ci sono o quello che sono. I clienti hanno ancora bisogno di essere in grado di richiamare comportamento nel gateway pure. Poiché ci sono sempre solo due porte, e il cliente può probabilmente bloccare mentre il metodo viene richiamato in modo sincrono, queste invocazioni client-to-gateway possono abbastanza facilmente essere implementate utilizzando RPC. Tuttavia, dato che stiamo già utilizzando la messaggistica per la comunicazione Gateway-to-client, i messaggi sono probabilmente solo un buon modo per implementare la comunicazione client-to-gateway pure. Pertanto, tutte le comunicazioni tra i gateway ei clienti sarà realizzato attraverso la messaggistica. Poiché tutti i componenti sono scritti in Java, JMS presenta una scelta facile per il sistema di messaggistica. Questa è effettivamente la creazione di un bus di messaggi o di un'architettura che renderà possibile per i sistemi futuri per l'integrazione con il sistema attuale con poca o nessuna modifiche all'infrastruttura di messaggistica. In questo modo, la funzionalità business dell'applicazione può essere facilmente utilizzato da altra applicazione banca sviluppa. Componenti Java Comunicare con JMS JMS è semplicemente una specifica e abbiamo bisogno di decidere su un sistema di messaggistica JMS-compliant. Abbiamo deciso di utilizzare IBM MQSeries JMS perché la banca è un negozio IBM, utilizzando application server WebSphere e molti altri prodotti IBM. Come risultato, useremo MQSeries poiché abbiamo già una infrastruttura di supporto sul posto e una licenza di sito del prodotto. La domanda successiva è come collegare il sistema di messaggistica MQSeries con il server standalone Contributo C e TIBCO server basati su dati di mercato e analisi del motore. Abbiamo bisogno di un modo per i consumatori MQSeries di avere accesso ai messaggi TIB. Ma come Forse potremmo usare il modello di messaggio traduttore per tradurre i messaggi TIB in messaggi MQSeries. Anche se il cliente C per MQ Series funge da traduttore messaggio. usando sarebbe sacrificare l'indipendenza del server JMS. E anche se TIBCO ha una API Java, l'architetto del cliente e direttore hanno rifiutato. Come risultato, l'approccio Messaggio Translator deve essere abbandonata. Il ponte dal server TIB al server MQSeries richiede la comunicazione tra C e Java. Potremmo usare CORBA, ma poi per quanto riguarda la messaggistica Uno sguardo più da vicino il modello di messaggio traduttore dimostra che è legato al Channel Adapter nell'uso dei protocolli di comunicazione. Il cuore di un adattatore di canale è quello di collegare i sistemi di messaggistica non di sistemi di messaggistica. Una coppia di adattatori di canale che collega due sistemi di messaggistica è un ponte di messaggistica. Lo scopo di un ponte Messaging è per trasferire messaggi da un sistema di messaggistica all'altro. Questo è esattamente quello che stiamo facendo con la complessità di Java intra-linguaggio per la comunicazione C. Siamo in grado di implementare la lingua croce Messaging Bridge utilizzando una combinazione di canale adattatore s e CORBA. Costruiremo due server leggeri Channel Adapter, uno in comunicazione la gestione C con il TIB, e uno in Java gestire la comunicazione con JMS. Questi due Channel Adapter. quali sono Messaggio Endpoint s stessi, sarà di comunicare tra loro tramite CORBA. Come la nostra scelta per MQ Series, useremo CORBA piuttosto che JNI dal momento che è uno standard aziendale. Il ponte di messaggistica implementa la traduzione messaggio in modo efficace simulato tra sistemi di messaggistica apparentemente incompatibili e lingue diverse. Messaggio traduttore utilizzando adattatori di canale La figura seguente mostra la progettazione del sistema corrente, incluse le gateway e altri componenti. Questo è un buon esempio di applicazione del modello. Abbiamo unito due canali adattatore s con un protocollo non messaggistica per implementare il modello di messaggio traduttore, in modo efficace utilizzando uno schema per implementare un altro modello. Inoltre, abbiamo cambiato contesto, il Channel Adapter s per collegare due sistemi di messaggistica con un protocollo di traduzione non messaggistica lingua croce piuttosto che il collegamento di un sistema di messaggistica ad un sistema non-messaging. Il sistema attuale con gli adattatori di canale Structuring Canali Una chiave per lavorare con i modelli non solo sapere quando usare quale modello, ma anche come utilizzare più efficacemente. Ogni implementazione modello deve tener conto della specificità della piattaforma tecnologica, nonché altri criteri di progettazione. Questa sezione si applica lo stesso processo di scoperta per trovare l'uso più efficiente del Publish-Subscribe canale nel contesto del server dati di mercato la comunicazione con il motore di analisi. i dati reali del mercato volta ha origine con i feed di dati di mercato, un server C che trasmette dati di mercato sul TIB. Il feed di dati di mercato utilizza un separato publish-subscribe Channel per ogni obbligazione che sta pubblicando i prezzi per. Questo può sembrare un po 'estrema dal momento che ogni nuovo legame bisogno di un proprio nuovo canale. Ma questo non è così grave dal momento che in realtà non c'è bisogno di creare canali di TIBCO. Piuttosto, i canali si fa riferimento da un insieme gerarchico di nomi degli argomenti chiamati soggetti. Il server TIBCO filtra poi un singolo flusso di messaggi per argomento, l'invio di ogni soggetto unico per un singolo canale virtuale. Il risultato che è un canale di messaggio molto leggero. Potremmo creare un sistema che pubblica su alcuni canali e gli abbonati possono ascoltare solo per prezzi che sono interessati a. Questo richiederebbe agli abbonati di utilizzare un filtro messaggi o dei consumatori selettiva per filtrare l'intero flusso di dati per i prezzi delle obbligazioni interessanti, decidere se ogni messaggio dovrebbero essere trattati come ricevuto. Dato che i dati di mercato è pubblicato sui canali di obbligazioni dedicate, gli abbonati possono registrarsi per gli aggiornamenti su una serie di obbligazioni. Questo permette in modo efficace agli abbonati di filtrare selettivamente la sottoscrizione di canali e solo ricevere gli aggiornamenti di interesse piuttosto che decidere dopo aver ricevuto il messaggio. È importante notare che l'utilizzo di più canali per evitare il filtraggio è un uso non standard di canali di messaggistica. Nel contesto della tecnologia TIBCO però, siamo davvero decidere se implementare o filtri proprie o utilizzare il canale di filtraggio incorporato in TIBCO - piuttosto che se utilizzare così tanti canali. Il componente successivo abbiamo bisogno di progettare è il motore di analisi, un altro server CTIB che modificherà i dati di mercato e ritrasmettere al TIB. Anche se è fuori dalla portata del nostro sviluppo JavaJMS, stiamo lavorando a stretto contatto con il team di C per la progettazione da quando siamo il cliente principale motori di analisi. Il problema in questione è quello di trovare la struttura di canale che ritrasmesso in modo più efficiente i dati di mercato appena modificato. Dal momento che abbiamo già una Message Channel dedicata al legame ereditato dal feed prezzo di dati di mercato, sarebbe logico per modificare i dati di mercato e di ritrasmettere i dati di mercato modificati sul prestito obbligazionario dedicato Message Channel. Ma questo non funziona in quanto le analisi che modificano i prezzi delle obbligazioni sono trader specifica. Se rebroadcast i dati modificati sul legame Message Channel. distruggeremo l'integrità dei dati, sostituendo i dati di mercato generici con i dati specifici commerciante. D'altra parte, potremmo avere un tipo di messaggio diverso per trader dati di mercato specifico che pubblichiamo sullo stesso canale che permette agli abbonati di decidere quali messaggi sono interessati ad per evitare di distruggere l'integrità dei dati. Ma poi i clienti dovranno implementare i propri filtri per separare i messaggi per gli altri operatori. Inoltre, ci sarà un aumento sostanziale messaggi ricevuti dagli abbonati, ponendo un peso inutile per loro. Ci sono due opzioni: un canale per Trader: Ogni commerciante ha un canale designato per i dati di mercato modificati. In questo modo, i dati di mercato originale rimane intatto e ogni applicazione commerciante può ascoltare i suoi commercianti specifici Message Channel per gli aggiornamenti dei prezzi modificati. Un canale per ogni commerciante per Obbligazione: Creare una Message Channel per-trader per-legame solo per i dati di mercato modificate di quel legame. Ad esempio, i dati di mercato per legame ABC saranno pubblicati sul canale di Bond ABC, mentre i dati di mercato modificati per trader Un saranno pubblicati sul Message Channel Trader A Bond ABC, dati di mercato modificati per Riparazioni B su Trader B Bond ABC, e presto. Un canale per ogni commerciante un canale per obbligazione per trader ci sono vantaggi e svantaggi di ogni approccio. L'approccio per-Bond, per esempio, utilizza molto di più Message Channel. Nel peggiore dei casi, il numero di Message Channel sarà il numero di legami totale moltiplicato per il numero di operatori. Possiamo mettere limiti superiori al numero di canali che verranno creati dal momento che sappiamo che ci sono solo circa 20 commercianti e non hanno mai il prezzo di più di un paio di centinaia di titoli. Questo pone il limite superiore di sotto del range di 10.000, che non è così stravagante rispetto ai quasi 100.000 Message Channel feed prezzo di dati di mercato sta usando. Inoltre, dal momento che stiamo usando la TIB e Message Channel sono abbastanza economici, il numero di Message Channel s non è un problema grave. D'altra parte, il gran numero di messaggio Canale s potrebbe essere un problema dal punto di vista gestionale. Ogni volta che un legame è aggiunto un canale per ogni operatore deve essere mantenuto. Questo potrebbe essere grave in un sistema molto dinamico. Il nostro sistema, tuttavia, è essenzialmente statica. Essa ha anche una infrastruttura per la gestione automatica Message Channel s. Questo, combinato con l'architettura ereditata di un componente legacy utilizzando un approccio simile riduce al minimo il rovescio della medaglia. Questo non vuol dire che dovremmo fare un numero inutilmente eccessivo di Message Channel s. Piuttosto, siamo in grado di implementare un approccio architetturale che utilizza un gran numero di Message Channel s quando c'è un motivo. E c'è una ragione in questo caso che scende alla posizione della logica. Se implementiamo l'approccio al commerciante, il motore di analisi ha bisogno di logica per i canali di ingresso e uscita di gruppo. Questo perché i canali di ingresso del motore di analisi sono per legame e l'uscita Message Channel s sarebbe per trader, che richiede il motore di analisi di instradare tutti gli input di analisi da legami multipli per un particolare operatore di una potenza specifica trader Message Channel. Questo trasforma in modo efficace il motore di analisi in un router basato sul contenuto per implementare la logica di routing personalizzato per la nostra applicazione. Seguendo la struttura del messaggio Bus, il motore di analisi è un server generico che potrebbe essere utilizzato da diversi altri sistemi nel. Quindi noi non vogliamo offuscare con funzionalità specifiche del sistema. D'altra parte, l'approccio per-legame funziona poiché l'idea di un operatore possedere l'uscita di analisi dei prezzi dei titoli è una pratica accettata società. L'approccio per-legame mantiene la separazione Message Channel dei dati di mercato alimentare intatti, mentre l'aggiunta di molti altri Message Channel s. Prima di raggiungere il cliente, vogliamo un router basato sul contenuto di combinare questi diversi canali in un numero gestibile di canali. Non vogliamo l'applicazione client in esecuzione sul desktop agli operatori di essere in ascolto a migliaia o decine di migliaia di Message Channel s. Ora la domanda diventa dove mettere il router basato sul contenuto. Potremmo semplicemente l'adattatore Canale CTIB in avanti tutti i messaggi al gateway Prezzi su un singolo canale dei messaggi. Questo è un male per due motivi saremmo suddividendo la logica di business tra C e Java, e si perderebbe il beneficio del messaggio separato Canale s sul lato TIB consentendo di evitare il filtraggio più avanti nel flusso di dati. Guardando le nostre componenti Java, potremmo o metterlo nel Gateway prezzi o creare un componente intermediario tra il prezzo Gateway e il cliente. In teoria, se abbiamo continuato la separazione legame a base di Message Channel s fino al cliente, il Gateway Pricing sarebbe ritrasmettere informazioni sui prezzi con la stessa struttura di canale come il prezzo Gateway e Analytics motore. Ciò significa una duplicazione di tutte le obbligazioni dedicata canali TIB in JMS. Anche se creiamo un elemento intermediario tra il prezzo Gateway e il cliente, il gateway Pricing avrà ancora per duplicare tutti i canali in JMS. D'altra parte, l'implementazione logica direttamente nel Gateway prezzi ci permette di evitare la duplicazione del gran numero di canali in noi JMSallowing per creare un numero molto inferiore di canali nell'ordine di una al commerciante. Il Gateway Pricing si registra attraverso il Channel Adapter CTIB come consumatore per ogni obbligazione di ogni operatore nel sistema. Poi il Gateway Pricing inoltrerà ogni cliente specifico solo i messaggi relativi a quel particolare operatore. In questo modo, si usa solo un piccolo numero di messaggio Canale s sull'estremità JMS, massimizzando il beneficio della separazione sull'estremità TIB. Il completo flusso di Dati di mercato al cliente Il layout discussione Message Channel è un buon esempio di come l'integrazione di modelli è importante. L'obiettivo era quello di capire come utilizzare in modo efficace il Message Channel s. Dire si utilizza un modello non è abbastanza. È necessario capire come implementare meglio e integrare nel vostro sistema per risolvere i problemi a portata di mano. Inoltre, questo esempio mostra le forze di lavoro in azione. Se potessimo implementare la logica di business in uno qualsiasi dei nostri componenti, avremmo potuto fare con l'approccio al commerciante e implementato un approccio più semplice e complesso, con molti meno canali. Selezione di un canale messaggio Ora che conosciamo i meccanismi della comunicazione tra i componenti JavaJMS ei componenti C TIBCO, e abbiamo visto un po 'di strutturazione Message Channel, dobbiamo decidere quale tipo di JMS Message Channel s i componenti Java deve usare per comunicare . Prima di poter scegliere tra i diversi canali di messaggi disponibili a JMS, consente di guardare il flusso di messaggi elevato livello del sistema. Abbiamo due gateway (prezzi e il contributo) in comunicazione con il cliente. I dati di mercato fluisce verso il client dal Pricing gateway che trasmette fuori al contributo Gateway. L'applicazione client invia un messaggio al Gateway prezzi di modificare le analitiche applicate a ciascun titolo. Il contributo Gateway invia anche messaggi per l'applicazione client inoltro lo stato degli aggiornamenti dei prezzi alle diverse sedi di negoziazione. Il messaggio di sistema flusso La specifica JMS descrive due tipi Message Channel, Point-to-Point Channel (JMS Queue) e publish-subscribe Channel (JMS argomento). Ricordiamo che il caso per l'utilizzo di publish-subscribe è quello di consentire a tutti i consumatori interessati a ricevere un messaggio, mentre il caso per l'utilizzo di point-to-point è quello di garantire che solo un consumatore ammissibili riceve un messaggio particolare. Molti sistemi sarebbero semplicemente trasmettere messaggi a tutte le applicazioni client, lasciando ogni singola applicazione client di decidere per se stessa o meno di elaborare un particolare messaggio. Questo non funziona per la nostra applicazione in quanto ci sono un grande numero di messaggi di dati di mercato viene inviato a ciascuna applicazione client. Se abbiamo trasmesso gli aggiornamenti dei dati di mercato per trader disinteressato, saremo inutilmente sprecare cicli del processore cliente di decidere o meno per elaborare un aggiornamento dei dati di mercato. Point-to-Point Channel s inizialmente sembrare una buona scelta dal momento che i clienti stanno inviando messaggi ai server unici e viceversa. Ma si trattava di un requisito aziendale che gli operatori possano essere registrato per più macchine allo stesso tempo. Se abbiamo un commerciante registrato presso due postazioni di lavoro contemporaneamente e un aggiornamento del prezzo point-to-point è stato mandato, solo una delle due applicazioni client riceveranno il messaggio. Questo è perché solo un consumatore su un canale Point-to-Point può ricevere un particolare messaggio. Si noti che solo la prima di ogni gruppo di un applicazioni commercianti client riceve il messaggio. Point-to-Point Messaging per gli aggiornamenti dei prezzi Potremmo risolvere questo utilizzando il modello Elenco destinatari, che pubblica i messaggi ad una lista di destinatari, garantendo che solo i client nella lista dei destinatari riceveranno i messaggi. Utilizzando questo modello, il sistema potrebbe creare liste di destinatari, con tutte le istanze dell'applicazione client connessi a ciascun operatore. L'invio di un messaggio relativo a un particolare commerciante avrebbe a sua volta inviare il messaggio a ogni applicazione nella lista dei destinatari. Questo garantisce tutte le istanze applicazione client connessi ad un particolare operatore avrebbe ricevuto il messaggio. Lo svantaggio di questo approccio è che richiede un po 'di logica applicazione per gestire i destinatari e inviare i messaggi. Destinatario Lista per gli aggiornamenti dei prezzi Anche se point-to-point potrebbe essere fatto per lavorare, permette di vedere se c'è un modo migliore. Utilizzando Publish-Subscribe canale s, il sistema potrebbe trasmettere messaggi sui canali specifici commerciante piuttosto che canali specifici dell'applicazione client. In questo modo, tutte le applicazioni client di elaborazione dei messaggi per un singolo commerciante avrebbe ricevere ed elaborare il messaggio. Publish-Subscribe Messaging per gli aggiornamenti dei prezzi Lo svantaggio di usare publish-subscribe Canale s è che l'elaborazione dei messaggi unico non è garantita con i componenti server. Sarebbe possibile per più istanze di un componente server per essere istanziati e ogni processo istanza lo stesso messaggio, possibilmente l'invio di prezzi non validi. Ricordando il flusso dei messaggi di sistema, una sola direzione di comunicazione è soddisfacente con ogni Message Channel. comunicazione server-to-client con publish-subscribe è soddisfacente, mentre la comunicazione client-to-server non e comunicazione client-server è con point-to-point è soddisfacente, mentre server-client non è. Poiché non vi è alcuna necessità di utilizzare lo stesso canale Messaggio in entrambe le direzioni, possiamo utilizzare ogni canale messaggio sola direzione. Client-to-server di comunicazione sarà realizzato con il punto-a-punto, mentre la comunicazione server-to-client sarà attuato con publish-subscribe. Utilizzando questa combinazione di Message Channel s, i benefici del sistema di comunicazione diretta con i componenti server che utilizzano la messaggistica point-to-point e la natura multicast di pubblicazione-iscrizione senza che nessuno degli svantaggi. Flusso dei messaggi con tipi di canale Problem Solving con i modelli Patterns sono gli strumenti e le raccolte di modelli sono cassette. Aiutano a risolvere i problemi. Alcuni pensano che i modelli sono utili solo in fase di progettazione. Seguendo l'analogia Toolbox, questo è come dire che gli strumenti sono utili solo quando si costruisce una casa, non quando a risolvere il problema. Il fatto è che i modelli sono uno strumento utile per tutto un progetto se applicato bene. Nelle sezioni seguenti useremo lo stesso processo di modello di esplorazione abbiamo usato nella sezione precedente per risolvere i problemi del nostro sistema ora lavora. Lampeggiante Dati di mercato Aggiornamenti commercianti vogliono celle a lampeggiare quando viene ricevuto nuovi dati di mercato per un legame, indicando chiaramente le modifiche. Il client Java riceve i messaggi con i nuovi dati che innesca un aggiornamento della cache dei dati del cliente e infine lampeggianti nella tabella. Il problema è che gli aggiornamenti sono abbastanza frequentemente. Lo stack filo GUI sta diventando sovraccarico e, infine, il congelamento del cliente dal momento che cant rispondere all'interazione dell'utente. Si assume che il lampeggio è ottimizzata e concentrarsi sul flusso di dati di messaggi attraverso il processo di aggiornamento. Un esame dei dati delle prestazioni presenta l'applicazione client riceve diversi aggiornamenti di un secondo si è verificato alcuni aggiornamenti meno di un millisecondo a parte. Due modelli che sembrano come potrebbero contribuire a rallentare il flusso dei messaggi sono Aggregator e Filtro messaggi. Un primo pensiero è quello di realizzare un filtro messaggi per controllare la velocità del flusso di messaggi da buttare aggiornamenti ricevuto una piccola quantità di tempo dopo il messaggio di riferimento. A titolo di esempio, diciamo che stiamo andando a ignorare i messaggi entro 5 millisecondi l'uno dall'altro. Il filtro messaggi potrebbe memorizzare nella cache l'ora dell'ultimo messaggio accettabile e buttare via niente ricevuto entro i prossimi 5 millisecondi. Mentre altre applicazioni potrebbero non essere in grado di sopportare la perdita di dati a tal punto, questo è perfettamente accettabile nel nostro sistema a causa della frequenza degli aggiornamenti di prezzo. Tempo Filtro messaggi basati Il problema di questo approccio è che non tutti i campi dati vengono aggiornati allo stesso tempo. Ogni legame ha circa 50 campi di dati visualizzati per l'utente compreso il prezzo. Ci rendiamo conto che non tutti i campi viene aggiornato in ogni messaggio. Se il sistema ignora i messaggi consecutivi, può benissimo essere buttare fuori i dati importanti. L'altro modello di interesse è la Aggregator. Il Aggregator viene utilizzato per gestire la riconciliazione di più, messaggi correlati in un unico messaggio, riducendo potenzialmente il flusso dei messaggi. Il Aggregator potrebbe conservare una copia dei dati dei titoli dal primo messaggio aggregata, quindi aggiornare solo i campi nuovi o modificati i messaggi successivi. Alla fine, i dati aggregati legame sarà passata in un messaggio al client. Per il momento, lascia supporre che l'aggregatore invierà un messaggio ogni 5 millisecondi come il Filtro messaggi. Più tardi, ben esplorare un'altra alternativa. Aggregator con successivi aggiornamenti parziali l'aggregatore. come qualsiasi altro modello, non è un proiettile d'argento ha i suoi vantaggi e svantaggi che devono essere esplorati. Uno dei lati negativi potenziale è che l'attuazione di un aggregatore ridurrebbe il traffico dei messaggi da una grande quantità nel nostro caso solo se molti messaggi stanno arrivando entro un tempo relativamente breve per quanto riguarda lo stesso legame. D'altra parte, ci sarebbe fare nulla se il client Java riceve solo gli aggiornamenti per un campo su tutte le obbligazioni commercianti. Ad esempio, se riceviamo 1000 messaggi in un periodo di tempo specificato con 4 legami di interesse, vorremmo ridurre il flusso di messaggi da 1000 a 4 messaggi su quel periodo di tempo. In alternativa, se riceviamo 1000 messaggi nello stesso arco di tempo con 750 titoli di interesse, avremo ridotto il flusso di messaggi da 1000 a 750 messaggi relativamente poco guadagno per la quantità di sforzo. Una rapida analisi degli aggiornamenti dei messaggi dimostra che il client Java riceve molti messaggi di aggiornamento campi dello stesso legame, e messaggi, pertanto correlati. Così, Aggregator è in realtà una buona decisione. Che cosa è di sinistra è quello di determinare come l'aggregatore saprà quando inviare un messaggio è stato aggregando. Il modello descrive alcuni algoritmi per l'aggregatore di sapere quando inviare il messaggio. Questi includono algoritmi per causare l'aggregatore di inviare il suo contenuto dopo un certo periodo di tempo è trascorso, dopo tutti campi in un set di dati sono state completate, e altri. Il problema con tutti questi approcci è che l'aggregatore sta controllando il flusso dei messaggi, non il cliente. E il cliente è il principale ostacolo in questo caso, non il flusso dei messaggi. Questo perché l'aggregatore sta assumendo i consumatori dei suoi messaggi eliminati (l'applicazione client in questo caso) sono event-driven dei consumatori s, o consumatori che si basano su eventi da una fonte esterna. Abbiamo bisogno di trasformare il cliente in un consumatore Polling. o un consumatore che controlla continuamente per i messaggi, quindi l'applicazione client possono controllare il flusso di messaggi. Possiamo farlo con la creazione di un thread in background che continuamente cicli attraverso l'insieme di obbligazioni e aggiornamenti e flash eventuali cambiamenti che si sono verificati dopo l'ultima iterazione. In questo modo, il cliente controlla quando vengono ricevuti messaggi e, di conseguenza, le garanzie che non diventerà mai sovraccarica di messaggi durante i periodi di aggiornamento elevate. Possiamo facilmente implementare questo inviando un messaggio di comando per l'aggregatore di avviare un aggiornamento. 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. Cioè 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

No comments:

Post a Comment