Design Mönster Trading System
Trading Systems: Designing Your System - Del 1 13 Den föregående delen av denna handledning tittade på de delar som utgör ett handelssystem och diskuterade fördelarna och nackdelarna med att använda ett sådant system i en levande handelsmiljö. I detta avsnitt bygger vi vidare på den kunskapen genom att undersöka vilka marknader som är särskilt lämpade för systemhandel. Vi kommer då att ta en djupare titt på de olika handelssystemens genrer. Handel på olika marknader Aktiemarknader Aktiemarknaden är förmodligen den vanligaste marknaden för handel, särskilt bland nybörjare. I den här arenan dominerar stora spelare som Warren Buffett och Merrill Lynch, och traditionella värde - och tillväxtinvesteringsstrategier är överlägset vanligast. Trots detta har många institutioner investerat betydligt i design, utveckling och genomförande av handelssystem. Enskilda investerare går med i denna trend, men långsamt. Här är några viktiga faktorer att komma ihåg när man använder handelssystem på aktiemarknaderna: 13 Den stora mängden tillgängliga aktier gör det möjligt för handlare att testa system på många olika typer av aktier - allt från extremt volatila OTC-lager till icke-flyktiga blå marker. Effektiviteten i handelssystemen kan begränsas av vissa aktiers låga likviditet, särskilt OTC - och rosa arkproblem. Provisioner kan äta i vinster som genereras av framgångsrika affärer, och kan öka förluster. OTC - och rosa arkaktier uppstår ofta extra provisionskostnader. De viktigaste handelssystemen som används är de som söker värde - det vill säga system som använder olika parametrar för att avgöra om en säkerhet är undervärderad jämfört med tidigare prestanda, dess kamrater eller marknaden i allmänhet. Valutamarknader Valutamarknaden eller valutakurser. är den största och mest likvida marknaden i världen. Världens regeringar, banker och andra stora institutioner handlar med tusen dollar på valutamarknaden varje dag. Majoriteten av institutionella handlare på valutan är beroende av handelssystem. Detsamma gäller för individer i forexen, men viss handel baserad på ekonomiska rapporter eller ränteutbetalningar. Här är några viktiga faktorer att komma ihåg när man använder handelssystem på valutamarknaden: Likviditeten på denna marknad - på grund av den stora volymen - gör handelssystemen mer exakta och effektiva. Det finns inga provisioner på denna marknad, bara sprider sig. Därför är det mycket lättare att göra många transaktioner utan att öka kostnaderna. Jämfört med mängden aktier eller råvaror som är tillgängliga är antalet valutor att handla begränsat. Men på grund av tillgången på exotiska valutapar - det vill säga valutor från mindre länder - är volatilitetsintervallet inte nödvändigtvis begränsat. De viktigaste handelssystemen som används i Forex är de som följer trender (ett populärt ord på marknaden är trenden är din vän), eller system som köper eller säljer på breakouts. Detta beror på att ekonomiska indikatorer ofta orsakar stora prisrörelser på en gång. Futures Equity, Forex och råvarumarknader erbjuder alla futureshandel. Detta är ett populärt fordon för systemhandel på grund av den högre hävstångseffekten och ökad likviditet och volatilitet. Men dessa faktorer kan skära båda sätten: de kan antingen förstärka dina vinster eller förstärka dina förluster. Av denna anledning är användningen av terminer vanligtvis reserverad för avancerade enskilda och institutionella systemhandlare. Detta beror på att handelssystem som kan kapitalisera på terminsmarknaden kräver mycket större anpassning, använder mer avancerade indikatorer och tar mycket längre tid att utvecklas. Så, vilket är bäst Det är upp till den enskilda investeraren att bestämma vilken marknad som passar bäst för systemhandel - var och en har sina egna fördelar och nackdelar. De flesta människor är mer bekanta med aktiemarknaderna, och denna förtrogenhet gör det lättare att utveckla ett handelssystem. Men forex anses allmänt vara överlägsen plattform för att driva handelssystem - särskilt bland mer erfarna handlare. Dessutom, om en näringsidkare beslutar att kapitalisera på ökad hävstångseffekt och volatilitet, är terminsalternativet alltid öppet. I slutändan ligger valet i systemutvecklarens händer. Typ av handelssystem Trend-Följande system Den vanligaste metoden för systemhandel är trend-efterföljande system. I sin mest grundläggande form väntar detta system helt enkelt på en betydande prisrörelse, då köper eller säljs i den riktningen. Denna typ av system banker på hopp om att dessa prisrörelser kommer att behålla trenden. Flytta genomsnittliga system Används ofta i teknisk analys. ett glidande medelvärde är en indikator som helt enkelt visar genomsnittspriset på ett lager över en tidsperiod. Kärnan i trender är härledd från denna mätning. Det vanligaste sättet att bestämma inresa och utgång är en crossover. Logiken bakom detta är enkel: en ny trend är etablerad när priset faller över eller under det historiska prisgenomsnittet (trend). Här är ett diagram som visar både priset (blå linje) och IBMs 20-dagars röda linje: Breakout Systems Det grundläggande begreppet bakom denna typ av system liknar det för ett glidande genomsnittssystem. Tanken är att när en ny hög eller låg är etablerad, är prisrörelsen sannolikt att fortsätta i riktning mot breakouten. En indikator som kan användas vid bestämning av breakouts är ett enkelt Bollinger Band-överlägg. Bollinger Bands visar medelvärden av höga och låga priser, och breakouts uppstår när priset möter bandets kanter. Här är ett diagram som prissätter pris (blå linje) och Bollinger Bands (gråa linjer) av Microsoft: Nackdelar med Trend-Following Systems: Empirisk beslutsfattande krävs - Vid bestämning av trender finns det alltid ett empiriskt element att överväga: Varaktigheten av den historiska trenden. Till exempel kan det rörliga genomsnittet vara de senaste 20 dagarna eller de senaste fem åren, så utvecklaren måste bestämma vilken som är bäst för systemet. Andra faktorer som ska bestämmas är de genomsnittliga höjderna och nedgångarna i breakoutsystemen. Lagging Nature - Flyttande medelvärden och breakout-system kommer alltid att ligga kvar. Med andra ord kan de aldrig träffa den exakta toppen eller botten av en trend. Detta leder oundvikligen till förverkande av potentiella vinster, vilket ibland kan vara betydande. Whipsaw Effect - Bland de marknadskrafter som är skadliga för framgången med trend-följande system är detta en av de vanligaste. Whipsaw-effekten uppträder när det rörliga genomsnittsvärdet genererar en falsk signal - det vill säga när medeltalet sjunker precis i intervallet, vänder det plötsligt riktningen. Detta kan leda till stora förluster om inte effektiva stoppförluster och riskhanteringstekniker används. Sideways Markets - Trend-efter-system är av naturen kapabla att tjäna pengar bara på marknader som faktiskt tränar. Marknaderna flyttar emellertid också i sidled. stanna inom ett visst område under en längre tid. Extreme Volatility May Occur - Ibland kan trend-efterföljande system uppleva viss extrem volatilitet, men näringsidkaren måste hålla sig i sitt system. Oförmågan att göra det kommer att leda till ett försäkrat misslyckande. Countertrend Systems I grund och botten är målet med countertrend-systemet att köpa till lägsta låga och sälja högst högt. Huvudskillnaden mellan detta och det trendföljande systemet är att motverkningssystemet inte är självkorrigerande. Det är med andra ord ingen bestämd tid att lämna positioner, vilket leder till en obegränsad nackdel. Typer av motströmsystem Många olika typer av system betraktas som motströmsystem. Tanken här är att köpa när momentum i en riktning börjar blekna. Detta beräknas oftast med hjälp av oscillatorer. Till exempel kan en signal genereras när stokastik eller andra relativa styrindikatorer faller under vissa punkter. Det finns andra typer av motstridshandelssystem, men alla delar samma grundläggande mål - att köpa låga och sälja höga. Nackdelar med att motverka följande system: E mpirisk beslutsfattande krävs - Till exempel, en av de faktorer som systemutvecklaren måste bestämma är punkterna där relativa styrindikatorer bleknade. Extreme Volatility May Occur - Dessa system kan också uppleva viss extrem volatilitet, och en oförmåga att hålla fast vid systemet trots att denna volatilitet kommer att resultera i försäkrat misslyckande. Obegränsad nackdel - Som tidigare nämnts finns det obegränsad nackdel, eftersom systemet inte är självkorrigerande (det finns ingen tid för att avsluta positioner). Slutsats De viktigaste marknaderna för vilka handelssystem är lämpliga är aktie-, valutamarknaden och valutamarknaden. Var och en av dessa marknader har sina fördelar och nackdelar. De två viktigaste genren av handelssystem är trend-follow och countertrend-systemen. Trots deras skillnader kräver båda typerna av system i utvecklingsstadiet empirisk beslutsfattande från utvecklarens sida. Även dessa system är föremål för extrem volatilitet och det kan kräva en del uthållighet - det är viktigt att systemhandlaren håller fast vid sitt system under dessa tider. I den följande avdelningen, ta en närmare titt på hur man utformar ett handelssystem och diskutera en del av programvaran som systemhandlare använder för att göra sina liv enklare. Det här är en bok om företagsintegration med hjälp av meddelanden. Det dokumenterar inte någon särskild teknik eller produkt. Snarare är det utformat för utvecklare och integratörer med hjälp av olika meddelandeprodukter och - teknologier, såsom: Message-oriented middleware (MOM) och integrationspaket som erbjuds av leverantörer som IBM (WebSphere MQ Family), Microsoft (BizTalk), TIBCO , WebMethods, SeeBeyond, Vitria och andra Java Message Service-implementeringar (JMS) som införlivats i J2EE-applikationsservrar med kommersiell och öppen källkod, samt fristående produkter Microsofts Message Queuing (MSMQ), tillgängligt via flera API, inklusive SystemMessaging-biblioteken i Microsoft Emerging Web Services-standarder som stöder asynkrona webbtjänster (till exempel WS-ReliableMessaging) och de tillhörande API-erna, som Suns Java API för XML-meddelanden (JAXM) eller Microsofts Web Services Extensions (WSE). Företagsintegration går utöver att skapa en enda applikation med en distribuerad n-tierarkitektur, vilket gör att en enda applikation kan distribueras på flera datorer. Medan en nivå i en distribuerad applikation inte kan drivas av sig själv, är integrerade applikationer oberoende program som kan driva sig själv, men den funktionen genom att samordna med varandra på ett löst kopplat sätt. Meddelanden möjliggör att data eller kommandon skickas över nätverket med hjälp av en sändnings - och glömningsmetod där den som ringer sänder informationen och sedan fortsätter till annat arbete medan informationen överförs av meddelandesystemet. Eventuellt kan uppringaren senare bli underrättad om resultatet genom en återuppringning. Asynkrona samtal och återuppringningar kan göra en design mer komplex än en synkron strategi, men ett asynkront samtal kan försökas igen tills det lyckas, vilket gör kommunikationen mycket mer tillförlitlig. Asynkrona meddelanden möjliggör också flera andra fördelar, såsom strypning av förfrågningar och belastningsbalansering. Vem bör läsa den här boken Den här boken är utformad för att hjälpa applikationsutvecklare och systemintegratörer att ansluta applikationer med hjälp av meddelandeorienterade middleware-produkter: Applikationsarkitekter och utvecklare som designar och bygger komplexa företagsapplikationer som behöver integreras med andra applikationer. Vi antar att du utvecklar dina applikationer med en modern företagsapplikationsplattform som Java 2-plattformen, Enterprise Edition (J2EE) eller Microsoft-ramen. Den här boken hjälper dig att ansluta programmet till ett meddelandeskikt och utbyta information med andra program. Den här boken fokuserar på integration av applikationer, inte för att bygga applikationer för det, vi hänvisar till mönster av Enterprise Application Architecture av Martin Fowler. Integrationsarkitekter och utvecklare som utformar och bygger integrationslösningar som förbinder paketerade eller anpassade applikationer. De flesta läsare i den här gruppen kommer att ha erfarenhet av ett av de många kommersiella integrationsverktygen som IBM WebSphere MQ, TIBCO, WebMethods, SeeBeyond, Vitria, etc. Många av dessa verktyg innehåller de mönster som presenteras i den här boken. Den här boken hjälper läsarna att förstå de underliggande koncepten och göra säkra designbeslut med hjälp av en leverantörsoberoende ordförråd. Företagsarkitekter måste behålla den stora bildvyn av programvaru - och maskinvarutillgångarna i ett företag. Denna bok presenterar ett konsekvent språk för att beskriva stora integreringslösningar som kan spänna över många teknologier eller punktlösningar. Detta språk är också en viktig faktor för effektiv kommunikation mellan företagsarkitekten och integrations - och applikationsarkitekterna och utvecklarna. Vad du kommer att lära dig Den här boken försöker inte göra ett företagsfall för företagsapplikationsintegration, fokus ligger på hur man får det att fungera. Läsarna av den här boken kommer att lära sig hur man integrerar företagsapplikationer genom att förstå: Fördelarna och begränsningarna i meddelandet i jämförelse med andra integrationstekniker. Hur man bestämmer vilka meddelandekanaler dina program behöver, hur man kontrollerar om flera konsumenter kan få samma meddelande och hur man hanterar ogiltiga meddelanden När man ska skicka ett meddelande, vad det ska innehålla och hur man använder specialmeddelandegenskaper Så här ringer du ett meddelande till sin ultimata destination även när avsändaren inte vet var det är Hur konverterar man meddelanden när avsändaren och mottagaren håller inte med om ett gemensamt format Hur man utformar koden som ansluter en applikation till meddelandesystemet Hur man hanterar och övervakar ett meddelandesystem när det används som en del av företaget Även läsare som är bekanta med dessa metoder kommer att dra nytta av att ha dem dokumenteras och kan använda dem för att underlätta kommunikationen med sina kollegor. Vad den här boken inte täcker Vi tror att en bok som spelar ordet företag i titeln sannolikt kommer att falla in i en av tre kategorier. Antingen försöker den täcka hela ämnesomfattningen och kommer att bli tvungen att sluta med detaljerad vägledning om hur man genomför verkliga lösningar. Eller boken kommer att ge konkret hands-on vägledning om utvecklingen av verkliga lösningar men tvingas begränsa omfattningen av ämnesområdet som den adresserar. Slutligen, böcker som försöker göra båda kommer sannolikt aldrig att bli färdiga eller publiceras så sent att de är irrelevanta. Vi valde andrahandsvalet och skapade förhoppningsvis en bok som hjälper människor att skapa bättre integrationslösningar trots att vi var tvungna att begränsa bokens omfattning. Ämnen som vi skulle ha älskat att diskutera men måste utesluta för att inte falla i kategorin tre fällor innefattar säkerhet, komplex datakartläggning, arbetsflöde, regelmotorer, skalbarhet och robusthet och distribuerad transaktionsbehandling (XA, Smoking och liknande) . Vi valde asynkrona meddelanden som betoning på den här boken eftersom den är full av intressanta designproblem och avvägningar och ger en ren abstraktion från de många implementeringarna som tillhandahålls av olika integrationsleverantörer. Den här boken är inte heller en handledning om en viss meddelandekod eller middleware-teknik. Du hittar exempel som baseras på ett antal olika tekniker i den här boken, såsom JMS, MSMQ, TIBCO, Microsoft BizTalk, XSL etc. Vi inkluderade dessa exempel för att visa läsare hur mönstret kunde översättas till en faktisk implementering. Om du är intresserad av att lära dig mer om någon av dessa specifika tekniker, hänvisar du till en av de böcker som hänvisas till i bibliografin eller en av de många onlinematerialen. Hur denna bok är organiserad Kärnan i boken innehåller 65 mönster som bildar ett mönsterspråk. Böcker som designmönster. Mönsterorienterad programarkitektur. Core J2EE-mönster. och mönster av Enterprise Application Architecture har populariserat begreppet att använda mönster för att dokumentera dataprogrammeringsteknik. Begreppet mönster och mönster språk användes ursprungligen på stad och byggnad arkitektur av Christopher Alexander i hans seminalverk Ett mönster språk och ett tidlöst sätt att bygga. För att hjälpa läsaren att utforma en integrationslösning representerar varje mönster ett beslut som läsaren måste göra, förklarar de överväganden som påverkar beslutet och presenterar en väl ansedd lösning för att styra beslutet. Ett mönsterspråk är en webbsida av relaterade mönster där varje mönster leder till andra, vilket leder läsaren genom beslutsprocessen. Detta tillvägagångssätt är en kraftfull metod för att dokumentera en expertkunskap så att den lätt kan förstås och tillämpas av icke-experter. Ett mönsterspråk lär läsaren hur man löser ett gränslöst antal problem inom ett begränsat problemutrymme. Eftersom det övergripande problemet som löses är annorlunda varje gång, banan genom mönstren och hur de tillämpas är också unik. På så sätt har denna bok skrivits för alla som använder något meddelande - eller integrationsverktyg för något ändamål, men kan användas specifikt för dig och den specifika tillämpningen av meddelanden som du står inför. Mönster beskriver allmänt accepterade lösningar på återkommande problem, så om du är en erfaren utvecklare av meddelandeinriktade integrationslösningar, kommer många av dessa mönster att vara bekanta för dig. Men även om du redan känner igen de flesta av dessa mönster, är det fortfarande värt att granska den här boken. Den här boken bör validera din allvarliga förståelse för hur du använder meddelanden. Det ger dig en konsoliderad referens för att hjälpa dig att skicka dina kunskaper effektivt till mindre erfarna kollegor. Det dokumenterar också detaljer om lösningar och relationer mellan dem som du kanske inte har varit medvetna om. Slutligen ger namnen på mönstret ett gemensamt vokabulär för att effektivt diskutera integrationsdesignalternativ med dina kamrater. Erkännelser Liksom de flesta böcker har Enterprise Integration Patterns varit en lång tid i arbetet. Tanken att skriva om meddelandebaserade integrationsmönster går tillbaka till sommaren 2001 när Martin arbetade med mönster av Enterprise Application Architecture. Vid den tiden slog det Kyle att medan P i EAA pratade mycket om hur man skapar applikationer, berör det bara kortfattat hur man integrerar dem. Denna idé var utgångspunkten för en serie möten mellan Martin och Kyle som också inkluderade Rachel Reinitz och John Crupi. Bobby gick med i diskussionerna hösten 2001, följt av Gregor i början av 2002. Följande sommar lämnade gruppen in två dokument för granskning på konferensprogrammet Mönsterskolor (PLoP), en författare gemensamt av Bobby och Kyle och den andra av Gregor . Efter konferensen fokuserade Kyle och Martin på egna bokprojekt medan Gregor och Bobby fusionerade sina papper för att ligga till grund för boken. Samtidigt gick företagsintegrationspatterns webbplats för att låta integrationsarkitekter och utvecklare runt om i världen delta i den snabba utvecklingen av innehållet. När de arbetade på boken bjöd Gregor och Bobby in bidragsgivare för att hjälpa till att räkna ut böckerna. Ungefär två år efter Kyles ursprungliga idé kom det sista manuskriptet till utgivaren. Den här boken skulle inte ha varit möjlig utan hjälp från en lång lista med bidragsgivare. Namnen här. Om Cover Picture Det vanliga temat för böcker i Martin Fowler Signature Series är en bild av en bro. På ett visst sätt lyckades vi ut, för det temat som skulle göra en bättre match för en bok om integration Under årtusenden har broar hjälpt till att koppla människor från olika stränder, berg eller sidor av vägen. Vi valde en bild av Taiko-bashi-bron vid Sumiyoshi-taisha-helgedomen i Osaka, Japan för sin enkla elegans och skönhet. Som ett Shinto-helgedom tillägnad skyddsgudinnan för seglare, uppfördes den ursprungligen bredvid vattnet. Intressant har landåtervinning drivit vattnet så att helgedomen idag står nästan tre miles inåt landet. Några 3 miljoner människor besöker denna helgedom i början av ett nytt år. Vill du hålla dig uppdaterad Följ bloggen. Vill du läsa mer i djupet Kolla in mina artiklar. Vill du se mig live Se var jag talar nästa. Hitta den fullständiga beskrivningen av detta mönster i: Enterprise Integration Patterns Gregor Hohpe och Bobby Woolf ISBN 0321200683 650 sidor Addison-Wesley Från Enterprise Integration till Enterprise Transformation: Min nya bok beskriver hur arkitekter kan spela en kritisk roll i IT-omvandling genom att tillämpa sina tekniska, kommunikation och organisatoriska färdigheter med 37 episoder från storskalig företags IT. Delar av den här sidan är tillgängliga under Creative Commons Attribution-licens. Du kan återanvända mönsterikonen, mönsternamnet, problemet och lösningsutskrifterna (med fetstil) och skissen enligt denna licens. Andra delar av texten, till exempel textkapslar eller hela mönstret, är skyddade av upphovsrätten. I realtidsapplikationer krävs deterministisk prestanda, vilket utesluter Java och andra insamlade språk. C och C är de språk som valts för realtidssystem. Jag tror att när du refererar till algoritmisk handel menar du faktiskt högfrekvent handel (HFT). Kombinationer i realtid och prestanda: Solid grundarkitektur HW övervägande Profilerings - och datadriven optimering Grundarkitektur Grundarkitekturen omfattar tillämpning av kunskap om stor-O-prestanda med förståelse av dataskalan vid olika punkter i programmet. Hur många kärnor Vad är cachesamhaltighetssituationen Är NUMA inblandad Hur viktigt är processorns affinitet Visa mig dina flödesdiagram och dölja dina tabeller, och jag ska fortsätta att bli mystifierad. Visa mig dina bord, och jag vann vanligtvis behöver din flödesschema de är helt uppenbara. Fred Brooks, The Mythical Man Month Du måste få dina datastrukturer och gränssnitt rätt. Utan de korrekta datastrukturerna är ditt program dömt till prestanda helvete. Du måste ta tillräcklig tid och vård med dina gränssnitt, så att du kan variera implementeringen utan att påverka klienterna. Kod i skynda, ångra sig på fritiden. Till exempel, under kodgranskning av ett klientmeddelandegränssnitt, fann vi att det oavsiktligt fanns två kretslopp över meddelandena, en nestad inuti den andra. Kodgranskningen utlöstes, eftersom behandlingstiden under svåra förhållanden försämrades från 1 till 10 ms. Utvecklarna var häpnadsväckande att eftersom behandlingen av ett enda meddelande tog 1us, måste 10ms vara ett problem på annat håll. Vad är det största antalet meddelanden du ser i meddelandekön 100, vi begränsar det svårt till 100 meddelanden. Du har en O (N2) bearbetning, vilket innebär att med 100 meddelanden du är 10010010.000X saktar det ett enda meddelande. Vad är 1us 10.000 10ms Ändring av algoritmen så att varje meddelande endast ansågs en gång förbättrad worst case-prestanda till betydligt mindre än 1ms. Corner Cases Matter I en annan instans använde vi svagt i återkallningsmetoderna för asynkron IO. Så länge systemen var i steady state, kunde vi komma undan med att vara lat och använda sharedptr överallt. Denna användning av sharedptr hindrade dock ren avstängning med asynkron IO. Användningen av swtptr, som observerar sharedptr och kan endast främjas till användbar sharedptr så länge som referensresursen fortfarande existerar, var kritisk för att städa avstängning. Vissa lagmedlemmar hävdade att vi aldrig stängde av strömmen bara. Genom att lösa problem som förhindrade ren avstängning tog vi emellertid upp svåra att reproducera fel som hände när en asynkron IO-begäran togs tillbaka. Vanliga designmönster Producent-Konsument med en trådsäker kö som anslutnings och tillståndsvariabel anmälan. Detta frigör producenten att göra mer arbete så snart det signalerar tillståndsvariabeln. Konsumenten är effektiv eftersom den blockerar OS-förutsatt (och effektiv) tillståndsvariabel. Meddelandemönster levererar paketdata till en abstrakt namngiven mottagare. Ansvaret för att översätta det abstrakta namnet till en konkret leveransmekanism och slutpunkt hanteras inom meddelandebiblioteket. Trådpooler skapar ett antal trådar och dessa trådar tilldelas efter behov för att arbeta en viss uppgift, och återvänder sedan till poolen för återanvändning. Asynkron IO är en kodningsteknik som kompletterar meddelandemönstret och trådpoolerna. Programmet gör en IO-begäran och tillhandahåller en återuppringningsfunktion som åberopas av operativsystemet när IO är fullständigt. Detta är effektivt eftersom CPU: er är storleksordningar snabbare än IO. Förstärkningar Asio-biblioteket är en stor hjälp här för bärbar, asynkron IO. Polling - Ja, din operativsystem professor berättade att polling är ineffektivt. Det är, men det ger lägre latenssvar som avbryter hanterare. Speciellt när du har dussintals kärnor tillgängliga, ger en kärna till varje 40Gb IO-port mycket mening. sharedptr - Det är svårt att motivera att inte använda sharedptr (eller liknande) såvida inte och tills profilering visar ett oacceptabelt overhead. Efter att ha gjort det profilerade, jag en gång nekade ett annat attraktivt jobb erbjudande eftersom ledande programmerare sa till mig: Den som inte kan komma ihåg när man ska släppa sina resurser borde inte programmera för mig. Ja, och jag slutar använda säkerhetsbälten när jag kör, för om jag inte kan undvika en olycka, så ska jag inte använda en bil. Event Drive Architecture där varje program registrerar meddelandehanterare för det utlöser vissa bitar av kod genom en tillståndsvariabel. Idealt sett registreras meddelandehanterare vid start och det finns ett enda blockeringssamtal i ansökan som väntar på meddelanden. Att blockera vid en enda punkt gör det mycket lättare att spåra upp deadlocks. En av de största okända sanningarna i modern programmering är att människor är spektakulärt dåliga förutspår var prestationsflaskhalsen kommer att bli. Vi skulle göra det bra att följa timmerlagarnas lag, åtgärd två gånger, skära en gång. Jag arbetade med min masterprov, jag gick in i en prestationsproblem. Jag visste att min kod baserade sig mycket på integration, så jag tillbringade en vecka med att optimera den koden med Intel Performance Primitives-biblioteket, handjustering etc. I slutet av veckan hade jag spedit upp integrationen med en imponerande 60. Tyvärr när jag sprang den övergripande ansökan i hoppfull förväntan jag blev väldigt besviken. När det gäller profilering fann jag att den 60 förbättringen av integrationstiden översattes till en 3 förbättring av övergripande applikationsprestanda. Profilering visade att över 80 av programtiden var spenderad på de udda instruktionerna I386EXCHANGEINTERLOCK. Jo, jag hade köpt den snabbaste datorn som jag kunde för projektet, vilket var en dubbel processor (inte dual core) Athlon. Denna instruktion används för att synkronisera cacher. Genom att tillämpa ett kommando med en rad, SetProcessorAffinity, fick jag en 5x-hastighetsförbättrad lektion. 2.2k Visningar mitten View Upvotes middot Inte för reproduktion Jag håller på att designa en handelsapplikation som kommer att använda ett Markets API för att placera order på marknaden. Detta är inte en komplicerad algoritmisk handelsapplikation med hög prestanda av det slag som finns i investeringsbankerna. Detta är bara en liten personlig applikation som kommer att handla kanske två eller tre gånger om dagen beroende på marknadssituationer. Applikationen kommer att bestå av följande modulpackningar: Strategier - De faktiska handelsalgoritmerna Analytics - Klasserna för att analysera levnadspriserna amp order på marknaden för att producera buysell-signaler Tjänster - De klasser som används för att upprätthålla en anslutning till marknaden, hämta marknadsinformation och placera köpordningar. Hittills ser allt som krävs för ansökan ut på internet: Apache CXF för att generera de Java-klasser som används för att komma åt marknadens webbtjänster. Apache Maths för att utföra prissättningsanalysen Wikipedia för de olika konstruktionsmönstren, dvs Factory, SubjectObserver, State, etc. Där är jag dock fast med algoritmerna. Ive bestämde sig för att använda statsmönstret för att partitionera, i logiska grupperingar, de olika logikstycken som bör utföras när vissa marknadsvillkor är uppfyllda. Problemet är att jag börjar se att det är mycket troligt att varje stats klass kommer att innehålla en explosion av om andra uttalanden: Jag kan inte hjälpa men känner att jag saknar något här och att det måste finnas något ramverk eller designmönster jag vet inte om vilken gör det möjligt för utvecklaren att inkapslera alla ingångar och utgångar från ett visst affärssammanhang till ett begränsat antal affärsinmatningsutgångar på vilka företagsregleralgoritmer som kan byggas. Dvs. Snarare än att behöva hardkoda algoritmerna, hoppas jag att det borde vara möjligt att göra ansökan till en reglerprocessor av något slag. Tyvärr vet jag inte var du ska börja på detta. Jag hoppas att jag har förklarat mitt dilemma tydligt nog, om du vill att jag ska klargöra någonting snälla låt mig veta. Tack frågade 8 okt 09 kl 22:48
Comments
Post a Comment