Trading Strategi Generasjons Hjelp Genetiske Algoritmer
Det er en stor litteratur om suksessen med anvendelsen av evolusjonære algoritmer generelt, og den genetiske algoritmen spesielt til de finansielle markedene. Imidlertid føler jeg meg ubehagelig når jeg leser denne litteraturen. Genetiske algoritmer kan overpasse eksisterende data. Med så mange kombinasjoner er det lett å komme opp med noen få regler som fungerer. Det kan ikke være robust, og det har ikke en konsekvent forklaring på hvorfor denne regelen fungerer, og de reglene ikke går utover det bare (sirkulære) argumentet at det fungerer fordi testen viser at den fungerer. Hva er den nåværende konsensus om anvendelse av den genetiske algoritmen i økonomi spurte 18 februar 11 klokken 9:00 Ive jobbet i et hedgefond som tillot GA-avledede strategier. For sikkerheten kreves det at alle modellene ble levert langt før produksjonen for å sikre at de fortsatt jobbet i backtestene. Så det kan være en forsinkelse på opptil flere måneder før en modell vil få lov til å løpe. Det er også nyttig å skille samplingsuniverset, bruk en tilfeldig halvdel av mulige aksjer for GA-analyse og den andre halvdelen for bekreftelse backtests. Er det en annen prosess enn du ville bruke før du stoler på noen annen handelsstrategi (Hvis det er det, er det ikke klart for meg hva du får fra å lage en GA-modell ved å bruke data til tid t, og deretter teste til tN før du stoler på det, i motsetning til bruk av data til tiden tN, testing fra tN til t, og bruk den umiddelbart.) ndash Darren Cook 23. november kl 2:08 DarrenKok ett problem jeg ser er at hvis du tester fra tN til t og finner det, fungerer det ikke bra, så går du å skape en annen modell som blir testet på samme tidsperiode tN til t (ad infinitum). Det introduserer sannsynligheten for kvoteovervurdering under modellopprettingsprosessen. ndash Chan-Ho Suh Jul 22 15 på 5:24 Når det gjelder data-snooping, hvis en GA er implementert på riktig måte, bør det ikke være et problem. Mutingsfunksjoner er spesifikt inkludert for å tilfeldig søke gjennom problemrommet, og unngå datasnøring. Når det er sagt, kan det være noe av en kunst å finne de riktige mutasjonsnivåene, og hvis mutasjonsnivåene er for lave, er det som om funksjonen ikke ble implementert i utgangspunktet. ndash BioinformaticsGal Apr 6 11 at 16:28 BoinformaticsGal Jeg forstår ikke hvordan innlemmelsen av mutasjonsfunksjoner tillater oss å unngå data snooping. Etter søket er det en treningsfunksjon som gjør hver generasjon 39fit39 dataene enda mer. Eller forstår jeg ikke deg riktig? Vishal Belsare Sep 15 11 at 18:05 Det er mange her som snakker om hvordan GA er empiriske, har ikke teoretiske grunnlag, er svart bokser og lignende. Jeg ber for å være forskjellig Theres en hel gren av økonomi viet til å se på markeder i form av evolusjonære metaforer: Evolusjonær økonomi Jeg anbefaler sterkt Dopfer boken, Evolutionary Foundations of Economics, som et intro. cambridge. orggbknowledgeisbnitem1158033sitelocaleenGB Hvis din filosofiske oppfatning er at markedet er i utgangspunktet et gigantisk kasino eller spill, så er en GA bare en svart boks og har ingen teoretisk grunnlag. Men hvis filosofien din er at markedet er en overlevelse-of-the-fittest økologi, så har GAs mange teoretiske grunnlag, og det er helt rimelig å diskutere ting som corporate speciation, markedsøkologier, porteføljegener, handelsklima og som. besvart apr 5 11 kl 15:42 På kort tid er det mer et kasino. Som natur, faktisk. ndash quantdev Apr 5 11 at 20:46 quantdev, problemet med dette er at GA - som alle andre kvantitative metoder - fungerer bare med kort tidsskala, hvis jeg ikke tar feil. Så hvis aksjemarkedet er mer som et aksjemarked, ville GA være helt ubrukelig. ndash Graviton Apr 6 11 at 8:56 Graviton. Det er ingen grunn til at man ikke kan programmere en GA for å gjøre analyse på lengre tidsrom. Tidsdomenet til en GA måles i generasjoner, ikke år eller dager. Så, man ville bare trenger å definere en befolkning som inneholder individer hvis generasjoner er år eller tiår lang (dvs. selskaper). Det har definitivt vært noe arbeid som nærmer seg å definere bedriftens 39genomes39 ved deres produksjonsprosesser. I en slik modell vil man optimalisere for en effektiv bedrifts forretningsmodell, gitt et bestemt markedsklimat. Det er imidlertid ikke en aksjekursportefølje modell, men. ndash BioinformaticsGal Apr 6 11 at 15:12 Forutsatt at du unngår data-snooping bias og alle de potensielle fallgruvene med å bruke fortiden for å forutsi fremtiden, vil tillit til genetiske algoritmer for å finne den rette løsningen kule ned til det samme spillet du lager når du aktivt forvalte en portefølje, enten kvantitativt eller diskretionær. Hvis du tror på markedseffektivitet, øker transaksjonskostnadene fra aktiv ledelse ulogisk. Hvis du imidlertid tror at det er strukturelle forsterkers psykologiske mønstre eller mangler som skal utnyttes, og utbetalingen er verdt tiden og pengene for å forske og implementere en strategi, er det logiske valget aktivt ledelse. Å kjøre en GA-avledet strategi er en implisitt innsats mot markedseffektivitet. Du sier i utgangspunktet at det er feilverdier som forekommer av en eller annen grunn (masser av irrasjonelle personer, verdipapirfond herding på grunn av feiljusterte insentiver osv.) Og kjører denne GA kan sortere denne massen av data ut raskere enn jeg kan . besvart 18 feb 11 kl 15:49 Manuell håndtering av en aktiv portefølje innebærer å bruke all informasjon vi har og utlede en logisk konklusjon om markedet og deretter utføre strategier på det, dette er en rasjonell aktivitet. OTOH, ved hjelp av GA bruker et svartboksverktøy vi kan ikke forklare resultatet avledet av det fra noen aksepterte prinsipper. Jeg er ikke så sikker på om disse to er de samme. ndash Graviton Feb 18 11 at 15:57 Graviton Ja, men vurder likhetene mellom GA39s og hvordan vi mennesker lærer om markeder, utvikle strategier, lære av feil og tilpasse seg endrede markedsforhold. Når du undersøker hvilke vinnende og tapende aksjer har felles, eller hvilke volum og prismønstre som skaper gode handler, eller hvilken modell som er mest nøyaktig for verdsettelse av derivater, hva du gjør, er datautvinning fortiden på en måte. Når markedsforholdene endrer seg, handler du enten om nye strategier eller til slutt går ut av virksomheten. Hvis det er utnyttbare kanter i markedet, er den eneste forskjellen mellom deg og en GA ndash Joshua Chance 18 feb 11 kl 16:46 Graviton (i en meget bred forstand) er at du har en fortelling, en historie å gå med strategien din . Vi mennesker risikerer å finne et tilsynelatende tilbakevendende mønster og deretter rationalisere det og skape en fortelling. GA39s risikerer det samme, bare deres potensielt falske modell bruker ikke ord, de bruker matte og logikk. ndash Joshua Chance Feb 18 11 at 16:54 Den late Thomas Cover. (sannsynligvis den ledende informasjonsteoretiker i sin generasjon), betraktet universelle tilnærminger til ting som datakomprimering og porteføljeallokeringer som ekte genetiske algoritmer. Evolusjonen har ingen parametre for å passe eller trene. Hvorfor bør ekte genetiske algoritmer Universelle tilnærminger ikke gi noen antagelser om den underliggende fordelingen av data. De gjør ingen forsøk på å forutsi fremtiden fra mønstre eller noe annet. Den teoretiske effektiviteten til universelle tilnærminger (de presenterer betydelige implementeringsutfordringer, se mitt siste spørsmål: Geometri for universelle porteføljer) følger av dem som gjør hva evolusjonen krever. Den raskeste, smarteste eller sterkeste trenger ikke nødvendigvis å overleve i neste generasjon. Evolusjonen favoriserer det genet, organismen, meme, porteføljen eller datakomprimeringsalgoritmen som er posisjonert for å lett tilpasse seg det som skjer neste gang. Dessuten, fordi disse tilnærmingene gjør det ikke gjør noen antagelser og opererer ikke-parametrisk, kan man vurdere alle tester, selv på alle historiske data, som ute av prøven. Absolutt de har begrensninger, sikkert de kan ikke jobbe for hvert slag et problem vi står overfor i vårt domene, men gi, hvilken interessant måte å tenke på tingene. svarte 14. juli 13 kl 15:42 Vel, målet med et genetisk algo er å finne den beste løsningen uten å gå gjennom alle mulige scenarier fordi det ville være for langt. Så selvfølgelig er det kurvmontering, det er målet. Besvart 6. mar kl. 20:40 Men det er en betydelig forskjell mellom overfitting av prøven (dårlig) og tilpasning av befolkningen (god). Derfor foreslår mange at du kryssvaliderer algoritmen din med ikke-prøvetesting. ndash Joshua Jul 17 13 på 2:34 Ditt svar 2017 Stack Exchange, IncSnowCron Genetisk Algoritme i Forex Trading Systems Bruke Genetisk Algoritme for å skape lønnsom Forex Trading Strategy. Genetisk algoritme i Cortex Neural Networks Software Feedforward Backpropagation Neural Network Application for genetisk beregninger basert Forex trading. Dette eksemplet bruker konsepter og ideer fra den forrige artikkelen, så vær så snill å lese Neural Network Genetic Algorithm i Forex Trading Systems først, selv om det ikke er obligatorisk. Om denne teksten Først og fremst, vennligst les ansvarsfraskrivelsen. Dette er et eksempel på bruk av Cortex Neural Networks Software-genetisk algoritmefunksjonalitet, ikke et eksempel på hvordan man kan gjøre lønnsom handel. Jeg er ikke din guru, heller ikke skal jeg være ansvarlig for tapene dine. Cortex Neural Networks Software har nevrale nettverk i det, og FFBP vi diskuterte før er bare en måte å velge en forex trading strategier. Det er en god teknikk, kraftig og når det brukes riktig, veldig lovende. Det har imidlertid et problem - å undervise i Neural Network. Vi trenger å vite ønsket utgang. Det er ganske enkelt å gjøre når vi fungerer tilnærming, vi tar bare den virkelige verdien av en funksjon, fordi vi vet hva det skal være. Når vi foretar neurale nettverksprognoser. Vi bruker teknikken (beskrevet i tidligere artikler) til å undervise det neurale nettverket i historien, igjen, hvis vi forutsier, sier en valutakurs, vet vi (under treningen) hva riktig prediksjon er. Men når vi bygger et handelssystem, har vi ingen anelse om hva den riktige handelsbeslutningen er, selv om vi vet valutakursen. Faktisk har vi mange Forex trading strategier vi kan bruke når som helst, og vi må finne en god en - hvordan skal vi mate som ønsket utgang fra vårt nevrale nettverk Hvis du fulgte vår tidligere artikkel, vet du at vi har lurt å håndtere dette problemet. Vi lærte det neurale nettverket å gjøre valutakurs (eller valutakursbasert indikator) prediksjon, og brukte deretter denne forutsigelsen til å gjøre handel. Da, utenfor Neural Network delen av programmet, tok vi en beslutning om hvilket Neural Network er den beste. Genetiske algoritmer kan håndtere dette problemet direkte, de kan løse problemet som er oppgitt som å finne de beste handelssignalene. I denne artikkelen skal vi bruke Cortex Neural Networks Software til å lage et slikt program. Bruk av genetisk algoritme Genetiske algoritmer er veldig godt utviklet og svært variert. Hvis du vil lære alt om dem, foreslår jeg at du bruker Wikipedia, da denne artikkelen bare handler om hva Cortex Neural Networks Software kan gjøre. Å ha Cortex Neural Networks Software. vi kan opprette et neuralt nettverk som tar litt innspill, si, verdier av en indikator, og produserer noe output, sier handelssignaler (kjøp, selg, hold.) og stopper tap ta fortjeneste for stillinger som skal åpnes. Selvfølgelig, hvis vi frøker dette nettverket til nettverket, vil handelsresultater bli forferdelige. La oss imidlertid si at vi opprettet et dusin slike NN. Så kan vi teste ytelsen til hver av dem, og velge den beste, vinneren. Dette var den første generasjonen av NN. For å fortsette til andre generasjon, må vi tillate vår vinner å vokse, men for å unngå å få identiske kopier, kan vi legge til noen tilfeldig noice til dens nedstigningsvekter. I andre generasjon har vi vår første generasjons vinner og dens ufullkomne (muterte) kopier. Lar oss prøve igjen. Vi vil ha en annen vinner, som er bedre enn noen andre neurale nettverk i generasjonen. Og så videre. Vi tillater bare vinnerne å avle, og eliminere tapere, akkurat som i virkelighetsevolusjonen, og vi vil få vårt best-trading Neural Network. uten tidligere kunnskap om hva handelssystemet (genetisk algoritme) skal være. Neural Network Genetic Algorithm: Eksempel 0 Dette er det første genetiske algoritmen eksempel. og en veldig enkel en. Vi skal gå gjennom det trinn for trinn for å lære alle triksene som følgende eksempler vil bruke. Koden har inline kommentarer, så vi kan bare fokusere på viktige øyeblikk. Først har vi opprettet et neuralt nettverk. Det bruker tilfeldige vekter, og ble ennå ikke lært. Deretter, i syklus, lagrer vi 14 kopier av det ved bruk av MUTATIONNN-fumning. Denne funksjonen gjør en kopi av et kilde Neural Network. legger tilfeldige verdier fra 0 til (i vårt tilfelle) 0,1 til alle vekter. Vi holder håndtak til resulterende 15 NN i en matrise, vi kan gjøre det, da håndtaket er bare et heltall. Grunnen til at vi bruker 15 NN har ingenting å gjøre med handel: Cortex Neural Networks Software kan plotte opptil 15 linjer på et diagram samtidig. Vi kan bruke forskjellige tilnærminger til testingen. Først kan vi bruke læringssettet, alt sammen på en gang. For det andre kan vi teste på, si 12000 registre (ut av 100000), og gå gjennom læringssettet, fra begynnelse til slutt. Det vil gjøre lærer forskjellige, da vi vil se etter Neural Network s som er lønnsomme på en gitt del av data, ikke bare på hele settet. Den andre tilnærmingen kan gi oss problemer, hvis data endres, fra begynnelse til slutt. Da vil nettverket utvikle seg, skaffe seg mulighet til å handle i slutten av datasettet, og miste evnen til å handle i begynnelsen. For å løse dette problemet, skal vi ta tilfeldige 12000 arkivfragmenter fra data, og mate den til Neural Network. er rett og slett en endeløs syklus, da 100000 sykluser aldri blir nådd på vår fart. Nedenfor legger vi til ett barn for hvert nettverk, med litt forskjellige vekter. Merk at 0,1 for mutasjonstang ikke er det eneste valget, faktisk, selv denne parameteren kan optimaliseres ved hjelp av genetisk algoritme. Nyopprettede NNs legges til etter 15 eksisterende. På denne måten har vi 30 NN i en gruppe, 15 gamle og 15 nye. Så skal vi gjøre neste testsyklus, og drepe losere, fra begge generasjoner. For å gjøre testing, bruker vi Neural Network til våre data, for å produsere utdata, og deretter ringe Test-funksjon, som bruker disse utgangene for å simulere handel. Resultater av handel brukes til å deside, hvilke NN er best. Vi bruker et intervall av nLearn-poster, fra nStart til nStart nLearn, hvor nStart er et tilfeldig punkt i læringssettet. Koden under er et triks. Grunnen til at vi bruker det er å illustrere faktum at den genetiske algoritmen kan skape genetisk algoritme. men det vil ikke nødvendigvis være det beste, og også for å foreslå at vi kan forbedre resultatet, hvis vi innebærer noen begrensninger for læringsprosessen. Det er mulig at vårt handelssystem fungerer veldig bra på lange handler, og svært dårlig på kort, eller omvendt. Hvis du sier at lange handler er veldig gode, kan denne genetiske algoritmen vinne, selv med store tap på korte handler. For å unngå det, tilordner vi mer vekt til lange handler i merkelige og korte handler i jevne sykluser. Dette er bare et eksempel, det er ingen garanti for at det vil forbedre noe. Mer om det nedenfor, i diskusjon om korrigeringer. Teknisk sett trenger du ikke å gjøre det, eller kan gjøre det annerledes. Legg til overskudd til en sortert matrise. Den returnerer en innføringsposisjon, og vi bruker denne posisjonen til å legge til Neural Network håndtak, lære og teste profitt til ikke-sorterte arrays. Nå har vi data for nåværende Neural Network på samme array indeks som sin fortjeneste. Tanken er å komme til utvalg av NN, sortert etter lønnsomhet. Som array er sorterer etter fortjeneste, for å fjerne 12 nettverk, som er mindre lønnsomme, trenger vi bare å fjerne NNs 0 til 14 Handelsbeslutninger er basert på verdien av Neural Network-signalet. Fra dette synspunktet er programmet identisk med eksempler fra forrige artikkel. Forex Trading Strategy: Diskutere eksempel 0 Først av alt, kan vi se på diagrammer. Det første diagrammet for fortjeneste under den første iterasjonen er ikke bra i det hele tatt, som det forventes, det neurale nettverket mister penger (bildet evolution00gen0.png kopiert etter første iterasjon fra bildemappen): Bildet for fortjeneste på syklus 15 er bedre, noen ganger , genetisk algoritme kan lære seg veldig fort: Merk imidlertid metningen på en profittkurve. Det er også interessant å se på hvordan individuelle fortjeneste endrer seg, og husk at kurvenummeret sier 3, ikke alltid for det samme nevrale nettverket. som de blir født og avsluttet hele tiden: Vær også oppmerksom på at lite forex-automatisert handelssystem utfører dårlig på korte handler, og mye bedre i lang tid, noe som kanskje eller ikke er relatert til det faktum at dollaren falt sammenliknet med euro i den perioden. Det kan også ha noe å gjøre med parametere av indikatoren vår (kanskje vi trenger annen periode for shorts) eller valg av indikatorer. Her er historien etter 92 og 248 sykluser: Til vår overraskelse mislyktes den genetiske algoritmen helt. Lar prøve å finne ut hvorfor, og hvordan å hjelpe situasjonen. Først av alt, er ikke hver generasjon ment å være bedre enn den tidligere. Svaret er nei, i hvert fall ikke innenfor modellen vi brukte. Hvis vi tok ALLTRE læring sett på en gang, og brukte det gjentatte ganger for å lære våre NNs, så ja, de vil forbedre seg på hver generasjon. Men i stedet tok vi tilfeldige fragmenter (12000 poster i tid), og brukte dem. To spørsmål: hvorfor systemet mislyktes på tilfeldige fragmenter av læringssett, og hvorfor har vi ikke brukt hele læringssettet Vel. For å svare på det andre spørsmålet, gjorde jeg det. NNs utførte seg sterkt - på læringssett. Og de mislyktes på å teste sett, av samme grunn det mislykkes når vi brukte FFPB læring. For å si det annerledes, ble våre NNs overspecialized, de lærte å overleve i miljøet de er vant til, men ikke utenfor det. Dette skjer mye i naturen. Tilnærmingen vi tok i stedet var ment å kompensere for det ved å tvinge NNs til å utføre seg godt på et tilfeldig fragment av datasettet, slik at de forhåpentligvis også kunne utføre på et ukjent testsett. I stedet mislyktes de både på testing og på læringssett. Tenk deg dyr, som bor i en ørken. Mye sol, ingen snø i det hele tatt. Dette er en metafor for rising markedet, som for våre NNs data spiller rollen som miljø. Dyr lærte å leve i en ørken. Forestill deg dyr som lever i et kaldt klima. Snø og ingen sol i det hele tatt. Vel, de justerte. Men i vårt eksperiment plasserte vi tilfeldigvis våre NN i en ørken, i snø, i vannet, på trærne. ved å presentere dem med forskjellige fragmenter av data (tilfeldig stigende, fallende, flatt.). Dyr døde. Eller, for å si det annerledes, valgte vi det beste Neural Network for tilfeldig datasett 1, som for eksempel var for stigende marked. Deretter presenterte vi vinnerne og deres barn en fallende markedsdata. NNs utførte dårlig, vi tok best av fattige artister, kanskje en av de mutante barna, som mistet evnen til å handle på stigende marked, men fikk litt evne til å håndtere fallende. Da snudde vi bordet igjen, og igjen fikk vi best utøver - men best blant fattige artister. Vi ga rett og slett ikke våre NNs muligheter til å bli universelle. Det finnes teknikker som tillater genetisk algoritme å lære ny informasjon uten å miste resultatene på gammel informasjon (dyr kan i hvert fall leve om sommeren og om vinteren, slik at evolusjonen er i stand til å håndtere gjentatte endringer). Vi kan diskutere disse teknikkene senere, selv om denne artikkelen handler om å bruke Cortex Neural Networks Software. enn om å bygge et vellykket forex-automatisert handelssystem. Neural Network Genetic Algorithm: Eksempel 1 Nå er det på tide å snakke om korreksjoner. En enkel genetisk algoritme som vi opprettet i løpet av forrige trinn, har to store feil. For det første klarte det ikke å handle med fortjeneste. Det er ok, vi kan prøve å bruke delvis opplært system (det var lønnsomt i begynnelsen). Den andre feilen er mer alvorlig: Vi har ingen kontroll over ting, som dette systemet gjør. For eksempel kan det lære å være lønnsomt, men med store drawdowns. Det er et velkjent faktum at evolusjonen i virkeligheten kan optimalisere mer enn én parameter samtidig. For eksempel kan vi få et dyr som kan løpe fort og være motstandsdyktig mot kulde. Hvorfor ikke prøve å gjøre det samme i vårt forex-automatiserte handelssystem. Det er da vi bruker rettelser, noe som er noe annet enn settet av ytterligere straffer. Si, vårt system handler med drawdown 0.5, mens vi vil bekrefte det til 0 - 0.3 intervall. For å fortelle systemet at det gjorde en feil, reduserer vi fortjenesten (en brukt til å bestemme hvilken genetisk algoritme vant) i den grad som er proporsjonal med størrelsen på DD. Deretter tar evolusjonsalgoritmen seg av resten. Det er få flere faktorer som vi ønsker å ta i betraktning: Vi vil kanskje ha mer eller mindre like mange kjøp og salg, vi vil ha mer lønnsom drift, da av feil, vil vi kanskje ha fortjenestediagrammet til være lineær og så videre. I evolution01.tsc implementerer vi et enkelt sett med korrigeringer. Først av alt bruker vi et stort antall for en første korreksjonsverdi. Vi multipliserer den til en liten (vanligvis mellom 0 og 1) verdier, avhengig av straffen vi vil bruke. Da vi multipliserer vår fortjeneste til denne korreksjonen. Resultatet blir derfor korrigert for å reflektere hvor mye den genetiske algoritmen tilsvarer våre andre kriterier. Deretter bruker vi resultatet til å finne en vinner Neural Network. Forex Trading Strategy: Diskusjon av eksempel 1 Eksempel 1 fungerer mye bedre enn eksempel 0. I løpet av de første 100 syklusene lærte det mye, og fortjenestediagrammer ser beroligende ut. Men som i eksempel 0 er lange handler mye mer lønnsomme, noe som sannsynligvis betyr at det er et problem i vår tilnærming. Likevel fant systemet en balanse mellom to motstridende innledende forhold: Det er en viss positiv dynamikk både i læringssett og, viktigere, i testsett. Når det gjelder videre læring, i syklus 278 kan vi se at systemet vårt har blitt overtrained. Det betyr at vi fortsatt har fremskritt på læringssett: Men testing av sett viser svakhet: Dette er et vanlig problem med NN: når vi lærer det på læringssett, lærer det å håndtere det, og noen ganger lærer det seg så godt - til grad, når det mister ytelsen på testsettet. For å håndtere dette problemet, brukes en tradisjonell løsning: vi fortsetter å lete etter Neural Network. som fungerer best på testsett, og lagre det, overskrive tidligere beste, hver gang ny topp nås. Dette er den samme tilnærmingen, vi brukte i FFBP-trening, bortsett fra, denne gangen må vi gjøre det selv (legge til kode, som ser etter et best Neural Network på et testsett, og ringer SAVENN, eller eksporterer vekter av Neural Network til en fil). På denne måten, når du stopper treningen, har du den beste utøveren ON TESTING SET lagret og venter på deg. Merk også at det ikke er maks. fortjeneste du er ute etter, men optimal ytelse, så vurder å bruke rettelser når du ser etter en best utøver på et testsett. Genetisk algoritme for FOREX Teknisk analyse: Hvor nå Etter at du fikk vinneren din Neural Network. Du kan følge trinnene som er beskrevet i forrige artikkel, for å eksportere vekter av det nevrale nettverket. og deretter å bruke dem i din realtid trading plattform, som Meta Trader, Trade Station og så videre. Alternativt kan du fokusere på andre måter å optimalisere det neurale nettverket på. i motsetning til FFBP-algoritmen, kan du få avay fra å bruke lærings - og testsett, og flytte sekvensiell læring. Last ned Cortex Order Cortex Se prisliste Siktbarhet er svært viktig for dette nettstedet. Hvis du liker det, vennligst lenk til denne URLTrading-artikkelen. Bygg opp handelssystemer ved hjelp av automatisk kodegenerering av Michael R. Bryant Etter hvert som flere og flere handelsfolk har flyttet til automatisert handel, har interessen for systematiske handelsstrategier økt. Mens noen handelsmenn utvikler egne handelsstrategier, er det en hindring for mange forhandlere å bremse og lære å utvikle og implementere et handelssystem. En nylig utviklet løsning på dette problemet er bruken av datalgoritmer for automatisk å generere handelssystemkode. Målet med denne tilnærmingen er å automatisere mange av trinnene i den tradisjonelle prosessen med å utvikle handelssystemer. Automatisk kodegenereringsprogramvare for byggehandelssystemer er ofte basert på genetisk programmering (GP), som tilhører en klasse teknikker kalt evolusjonære algoritmer. Evolusjonære algoritmer og GP spesielt ble utviklet av forskere i kunstig intelligens basert på de biologiske konseptene for reproduksjon og evolusjon. En GP-algoritme utvikler en befolkning av handelsstrategier fra en innledende populasjon av tilfeldig genererte medlemmer. Medlemmer av befolkningen konkurrerer mot hverandre basert på deres egnethet. Fittermedlemmene er valgt som foreldre for å produsere et nytt medlem av befolkningen, som erstatter et svakere (mindre passivt) medlem. To foreldre er kombinert med en teknikk som kalles crossover, som etterligner genetisk crossover i biologisk reproduksjon. I crossover er en del av ett forelders genom kombinert med en del av det andre forelders genom å produsere barngenomet. For generering av handelssystemer kan genomene representere ulike elementer i handelsstrategien, inkludert ulike tekniske indikatorer, som for eksempel bevegelige gjennomsnitt, stokastikk og så videre forskjellige typer inn - og utgangsbestillinger og logiske forhold for å komme inn og ut av markedet. Andre medlemmer av befolkningen produseres via mutasjon, er hvilket medlem av befolkningen som er valgt for å bli modifisert ved tilfeldig skiftende deler av dens genom. Vanligvis produseres et flertall (for eksempel 90) av nye medlemmer av befolkningen via crossover, med de gjenværende medlemmene produsert via mutasjon. Over suksessive generasjoner av reproduksjon har den generelle egenskapen til befolkningen en tendens til å øke. Treningen er basert på et sett med byggemål som rangerer eller score hver strategi. Eksempler på byggemål inkluderer ulike ytelsesmålinger, for eksempel nettoresultat, drawdown, prosentandel av vinnere, profittfaktor og så videre. Disse kan oppgis som minimumskrav, for eksempel en profittfaktor på minst 2,0, eller som mål for å maksimere, for eksempel maksimering av nettoresultatet. Hvis det er flere byggemål, kan et vektet gjennomsnitt brukes til å danne treningsmetrisk. Prosessen stoppes etter noen generasjoner eller når treningen slutter å øke. Løsningen er vanligvis tatt som den sterkeste medlem av den resulterende befolkningen, eller hele befolkningen kan sorteres etter egnethet og lagres for videre gjennomgang. Fordi genetisk programmering er en type optimalisering, er over-fitting en bekymring. Dette behandles vanligvis ved hjelp av prøveutprøving, der data som ikke brukes til å evaluere strategiene i byggfasen, brukes til å teste dem etterpå. I hovedsak er hver kandidatstrategi som er konstruert under byggeprosessen, en hypotese som enten støttes eller refunderes av evalueringen og videre støttes eller refunderes av resultatene utenfor prøven. Det er flere fordeler med å bygge handelssystemer via automatisk kodegenerering. GP-prosessen gjør at syntese av strategier kun gir et høyt nivå sett med prestasjonsmål. Algoritmen gjør resten. Dette reduserer behovet for detaljert kunnskap om tekniske indikatorer og strategisk design prinsipper. Også GP-prosessen er upartisk. Mens de fleste handelsfolk har utviklet forutsetninger for eller imot spesifikke indikatorer og eller handelslogikk, blir GP veiledet bare av det som virker. Videre kan GP-prosessen ved å inkorporere riktig handelsregelsemantikk utformes for å produsere logisk korrekte handelsregler og feilfri kode. I mange tilfeller gir GP-prosessen resultater som ikke bare er unike, men ikke-åpenbare. Disse skjulte perlene ville være nesten umulig å finne noen annen måte. Til slutt, ved å automatisere byggeprosessen, kan tiden til å utvikle en levedyktig strategi reduseres fra uker eller måneder til noen minutter, avhengig av lengden på inngangsprisdatafilen og andre bygginnstillinger. Hvis du ønsker å bli informert om nye utviklinger, nyheter og spesialtilbud fra Adaptrade Software, vennligst bli med på vår e-postliste. Takk. Ansvarsfraskrivelse HYPOTETISKE ELLER SIMULERTE RESULTATRESULTATER HAR VISSE BEGRENSNINGER. I FORBINDELSE MED EN AKTUELL PRESTASJONSOPPTAK, FORTSATT SIMULERTE RESULTATER IKKE VIRKELIG HANDEL. OGSÅ SOM HANDELENE IKKE ER FAKTISKT BLEVET, HAR RESULTATENE KUNDER ELLER OVERBEGRENSET FOR KONSEKVENSEN, OM NOEN, AV VISSE MARKEDSFAKTORER, SOM MANGLENDE LIKVIDITET. SIMULERTE HANDELSPROGRAMMER I ALMINDELIGE ER OGSÅ FØLGENDE AT DE ER DESIGNERT MED HINDSIGHT. INGEN REPRESENTASJON SKAL GJORT AT ENKEL KONTO VIL ELLER ER LIKELIG Å HENT RESULTATER ELLER TAPER SOM LIGER TIL DINE VISTE. EasyLanguage og TradeStation er registrerte varemerker for TradeStation Technologies, Inc. Innledning En av de største trendene innen detaljhandelshandel over det siste tiåret har vært økningen i populariteten til automatisert handel. I denne typen handel, også kjent som automatisert ordreutførelse, kjøpes og selges signaler generert av et handelssystem, utføres automatisk av en plattform som er koblet til forhandler-meglerkontoen. Dette muliggjør håndfri handel, noe som muliggjør raskere utførelse, færre feil og muligheten til å handle kortere tidsrammer med høyere frekvensstrategier. Etter hvert som flere og flere forhandlere har flyttet til automatisert handel, har interessen for systematiske handelsstrategier økt. Mens noen handelsfolk utvikler egne handelsstrategier, mangler mange handelsmenn de programmeringsevner som er nødvendige for å implementere sine ideer. Andre handelsfolk mangler den spesifikke kunnskapen om tekniske handelsmetoder eller den erfaring som kreves for å utforme en levedyktig strategi. Selv for handelsfolk med de nødvendige ferdighetene til å utvikle handelssystemer, er den betydelige tiden og innsatsen som kreves for å utvikle en god strategi, ofte avskrekkende. En nylig utviklet løsning på dette problemet er bruken av datalgoritmer for automatisk å generere handelssystemkode. Målet med denne tilnærmingen er å automatisere mange av trinnene i den tradisjonelle prosessen med å utvikle handelssystemer. I den tradisjonelle, manuelle tilnærmingen til strategiutvikling velger traderelementene i handelsstrategien basert på tidligere erfaring og kunnskap om tekniske indikatorer, inn - og utgående ordre og strategisk design. Vanligvis er en strategi basert på en markedshypotese som er en ide om hvordan markedet fungerer. En levedyktig handelsstrategi utvikles typisk gjennom en lang prøve - og feilsøkingsprosess som involverer mange iterasjoner, revisjoner og testing, inntil akseptable resultater oppnås. Denne tradisjonelle prosessen med å utvikle handelssystemer er ekstremt tidkrevende og innebærer systematisk å eliminere mange ideer som bare ikke fungerer. Også alle forhandlere har forstyrrelser om hvordan markedene fungerer, og disse forutsetningene kan påvirke systemutviklingsprosessen. I noen tilfeller kan disse forstyrrelsene være nyttige, men de kan også begrense mulige systemer som handelsmannen kan vurdere. I stedet for å starte med en forhåndsvisning og et begrenset sett med regler, starter en automatisk kodegenerator med et stort sett med regler og søk på en upartisk måte for kombinasjonene som fungerer samtidig som de eliminerer de som ikke. Dette papiret gir en oversikt over automatiske kodegenereringsmetoder for å bygge handelssystemer. Både enkle og komplekse metoder diskuteres. A simple ad hoc method is presented that can be implemented in TradeStations EasyLanguage scripting language to find basic price pattern-based strategies. A more complex approach based on genetic programming is also discussed. Automatically generating trading systems is an attractive idea. However, there are several drawbacks as well. For one thing, rigorous approaches, such as those based on genetic programming, are complex and difficult to implement. Also, automatic code generation generally relies on historical simulation, which means its an optimization process. As such, the risk of over-fitting must be addressed. These caveats are also discussed. The Basic Approach The basic algorithm for building trading systems using automatic code generation is depicted below in Fig. 1. It starts with a method for combining different elements of the trading strategy. These elements may include various technical indicators, such as moving averages, stochastics, and so on different types of entry and exit orders and logical conditions for entering and exiting the market. Figure 1. Basic algorithm for automated strategy building. After the different elements are combined into a coherent strategy, it can be evaluated on the market or markets of interest. This requires market data prices, volume, open interest, etc. for each market. Generally speaking, you would also have a set of build goals to help rank or score each strategy. Examples of build goals include various performance measures, such as the net profit, drawdown, percentage of winners, profit factor, and so on. These could be stated as minimum requirements, such as a profit factor of at least 2.0, or as objectives to maximize, such as maximizing the net profit. The strategy generation and evaluation steps are repeated until the termination criteria are met. The termination criteria could be as simple as creating a predetermined number of different strategies, or the process might be stopped after no further improvement in the build goals is achieved. Typically, an optimization algorithm is used to guide the strategies towards ones that meet the build goals. The final strategies are the ones with the highest rank or score based on the build goals. You could either take the single best strategy or save some number (or all) of the strategies, ranked by build goals. If there are multiple build goals, a weighted average can be used to form a single metric. This is the most basic view of automatic system building. A more detailed description will be provided below in the section on genetic programming. This description also ignores the important problem of over-fitting, in which the strategy is fit so closely to the market data thats used during the build process that the strategy doesnt perform well in the future when applied to new data. This issue is also addressed below. Theoretical Basis of Automatic Code Generation As described above, building a trading system using automatic code generation is essentially an optimization problem. The combination of strategy elements that maximizes the build goals is taken as the final strategy. Some traders would object that trading systems should be constructed based on a hypothesis of market behavior or action. If you have a good hypothesis for how the markets work, a strategy can be built around that hypothesis and tested. If it works, it supports the hypothesis and justifies trading the strategy. In fact, the approach described here is not fundamentally different than that. Each candidate strategy constructed during the build process, as depicted in Fig. 1, is essentially a hypothesis that is either supported or refuted by the evaluation. If out-of-sample testing is used, the final strategies can be further supported or refuted by the out-of-sample results. Another way to view automatic code generation is as a problem of statistical inference. The price data can be thought of as a combination of signal and noise. The signal is the tradable part of the data, and the noise is everything else. In this context, the strategy building process is a nonlinear curve-fitting problem where the objective is finding strategies that fit the signal while ignoring the noise and avoiding over-fitting. At the same time, market data is often non-stationary: the statistical properties change over time. A successful strategy is therefore one that fits the stationary elements of the market signal with adequate degrees-of-freedom to avoid over-fitting. Although discussed in more detail below, out-of-sample testing is generally used to verify that the strategies are not over-fit to the market. Pattern System Code Generator for TradeStation This section describes an ad hoc approach to automatic code generation in which a trading system for TradeStation automatically generates other, pattern-based trading systems for TradeStation. The AutoSystemGen system searches for a set of trading rules, along with the associated parameter values, that meet a specified set of performance requirements. Depending on the performance requirements, it might find several or even dozens of trading systems that meet the requirements. It then writes the EasyLanguage code for each system to a file. For illustrative purposes, the rules for the generated systems are restricted to price patterns. In principle, this technique could be expanded to automatically generate systems drawing from a wide variety of entry and exit techniques applicable to almost any market. Price Pattern Rules While almost any type of indicator or trading logic could be included in the trading system generator described here, to keep things fairly simple, the rules of the generated systems will be restricted to price patterns. Each entry rule of a generated trading system will have the following form: where P1 and P2 are prices (open, high, low, or close), N1 and N2 are the number of bars to look back (e. g. Close2 is the close two bars ago), and Ineq is an inequality operator, either lt or gt. Examples of rules include the following: Close lt Close2 Low2 lt High10 High3 gt Close4 and so on. P1, P2, N1, N2, and Ineq are all variables to be determined by the system generation process. N1 and N2 will be restricted to the range 0 20. Also, the number of rules, NRules, will be a variable with values ranging from one to 10. A trade entry will be triggered if all the rules are true. In that case, the entry will be taken at the open of the next bar. The trade direction will be set beforehand, so that the system will be generating systems that are either all long or all short trades. To obtain trading logic for both long and short trades, the system can be run twice, once for long trades and the second time for short trades. Trades will be exited at the market after a fixed number of bars, NX, which will range from one to 20. Finding the Rules The key to this process is finding candidate trading systems. A system can consist of between one and 10 rules of the form shown above. Trades are entered at market if all the rules are true, and trades are exited a certain number of bars later. If this were coded as a traditional TradeStation system, with a maximum of 10 rules, there would be 52 inputs. This would make for a cumbersome strategy. Instead, a different approach will be used. At each step of the optimization, the values for each variable (P1, P2, N1, N2, Ineq, NRules, and NX) will be chosen randomly. A different set of values of P1, P2, N1, N2, and Ineq will be selected for each rule, for a total of NRules sets of values. Each step of the optimization will generate a different trading system as the variables are randomly selected. If the performance results of the system meet the requirements entered by the user, the generated system will be written to a file in EasyLanguage code. Putting it All Together The code for the AutoSystemGen system and its related functions is available at Breakout Futures (breakoutfutures ) on the Free Downloads page . The first input to the strategy is called OptStep. To run the system, OptStep should be optimized in TradeStation by varying it from 1 to some large number, such as 10,000, in steps of 1. This will cause AutoSystemGen to generate, for example, 10,000 different trading systems. The ones that meet the specified performance criteria are written to the file shown as an input to the WriteSystem function (e. g. C:AutoSysGen-Output1.txt). The performance criteria are specified via the system inputs (reqNetProfit, reqMaxDD, etc.). Most of the hard work is performed by the functions that the system calls. The function GetPatVars randomly selects the values for the variables that determine the trading rules. To determine whether or not a trade entry will occur on the next bar, the price pattern rules are evaluated by the function EvalPattern. Finally, if the system meets the performance criteria, the corresponding EasyLanguage code is generated and written out to a text file by the function WriteSystem. Example As an example, consider the 30-year treasury bond futures market (symbol US. P in TradeStation 8). AutoSystemGen was optimized over the past 20 years of T-bond prices with the OptStep input incremented from 1 to 10000. This means the system evaluated 10,000 different trading systems. The optimization was run twice, once for long trades and once for short trades. The following performance requirements were used: net profit of at least 30,000, worst-case drawdown no more than 7500, at least 200 trades, percent profitable of at least 50, and profit factor of at least 1.2. On a dual core computer running Vista, it took approximately 10 minutes to run each optimization (10,000 systems per optimization). The systems generated by this process are shown below. These are the systems written to the file AutoSysGen-Output1.txt by the WriteSystem function. The first ones are the long-only systems, followed by a short-only system (the only one that met the performance criteria). System 2332, US. P, 9172007 12:23:00, Long Trades Net Profit 53562.50, Max DD -7381.25, Num Trades 250, Percent Wins 56.80, Prof factor 1.631 Var: EntNext (false) EntNext Open2 gt Low16 and Low9 gt Low3 and Close14 lt Low6 and If EntNext then Buy next bar at market If BarsSinceEntry gt NBarExS then Buy to cover next bar at market If STrailOn then Buy to cover next bar at SStop stop Until recently, most applications of genetic programming to trading strategy generation have been academic studies based on limited rule sets, overly simple entry and exit logic, and custom-written code, making the results unsuitable for most traders. At the same time, most available software that implements GP for market trading has either been targeted to professional traders and priced accordingly or is very complicated to set up and use. Adaptrade Builder was designed to make GP simple to use for any trader, individual or professional, who has a basic understanding of strategy trading and the TradeStation platform. More information on Builder can be found at AdaptradeBuilder . Over-fitting Building trading systems via automatic code generation is a type of optimization. Most systematic traders are probably familiar with parameter optimization, in which the inputs to a strategy are optimized. Unlike parameter optimization, automatic code generation optimizes the strategys trading logic. Nonetheless, the risk of over-optimization, or over-fitting, is also a concern for automatic code generation, just as it is for parameter optimization. Typically, optimization is performed over one segment of data, called the optimization or in-sample segment, and tested on different data, called the test or out-of-sample segment. Over-fitting refers to the problem of optimizing a strategy so that it fits the in-sample segment well but doesnt work well on any other data, including the out-of-sample data. Poor out-of-sample performance is usually caused by one of several factors. One important factor is the so-called number of degrees-of-freedom in the in-sample segment. The number of degrees-of-freedom, which is equal to the number of trades minus the number of rules and conditions of the strategy, determines how tightly the strategy fits the data. Provided inputs are added for each parameter in the strategy, the number of strategy inputs can be used as a proxy for the number of rules and conditions. For example, if a strategy has 100 trades and 10 inputs, it has 90 degrees-of-freedom. The more degrees-of-freedom, the less likely it is that the strategy will be over-fit to the market and the more likely it is that it will have good out-of-sample performance. The number of degrees-of-freedom can be increased during the build process by including the number of trades andor the number of strategy inputs as build goals. Assuming the fitness metric is a weighted average of the build goals, all other things being equal, increasing the weighting for the number of trades will result in strategies with more trades and therefore more degrees-of-freedom. Likewise, increasing the weighting for the (negative) number of inputs will result in strategies with fewer inputs, which will also increase the number of degrees-of-freedom. Another option is to include the statistical significance as a build goal. The statistical significance can be calculated by applying the Students t test to the average trade. This will measure the probability that the average trade is greater than zero. The t test is based on the number of degrees-of-freedom but is a more complete measure of whether a strategy is over-fit than the number of degrees-of-freedom alone. One way, then, to improve out-of-sample performance is to include the significance in the fitness function, which will tend to generate strategies that have a high statistical significance. Another important factor affecting out-of-sample performance is the variety of market conditions in the in-sample segment. Generally speaking, its better to optimize over data that includes a wide variety of market conditions, such as up trending and down trending markets, periods of consolidation, high and low volatility, etc. The more variety in the in-sample segment, the more likely it is that the strategy will perform well on other data, including out-of-sample data and in real-time trading. While the future never exactly duplicates the past, provided the future (or out-of-sample data) is similar enough to at least part of the in-sample segment, the strategy should perform well on new data. The value of optimizing over a variety of market conditions presumes that good performance is achieved over each part of the in-sample segment. One way to measure this is with the correlation coefficient of the equity curve, which measures how closely the equity curve approximates a straight line. If the equity curve is a straight line, it implies that the performance is uniform over all segments of the data. Obviously, this is desirable if the goal is to achieve good performance over as many different types of market conditions as possible. The correlation coefficient for the strategies generated via automatic code generation can be increased by including the correlation coefficient as a build goal and weighting it as part of the fitness function. Unfortunately, there will be cases where even with a high significance, a correlation coefficient close to 1, and a wide variety of market conditions in the in-sample segment, the out-of-sample performance will be poor. This can happen for several reasons. First, even a simple strategy with few parameters can in some cases fit the noise rather than the signal. By definition, noise is any part of the market data that does not contribute to profitable trading signals. Secondly, the market dynamics on which the strategy logic is based (i. e. the signal) may have changed in the out-of-sample segment enough to negatively impact performance. This is sometimes due to a fundamental change in the market, such as the switch from floor-based to electronic trading. However, more subtle changes, often related to the trading patterns of market participants, are also possible, particularly for shorter-term trading. If this appears to be the problem, the solution may be as simple as rebuilding the strategy with new trading logic. Using a tool such as Adaptrade Builder makes this much easier than if a manual approach to trading strategy development were used. Another possible solution is to include the most recent data in the optimization segment and test it out-of-sample by tracking the performance in real-time. In most cases, a strategy that has a large number of trades, a high significance value and good performance on the in-sample segment will continue to perform well for some period of time post-optimization. For information on software for building trading strategies using genetic programming, please click here . If youd like to be informed of new developments, news, and special offers from Adaptrade Software, please join our email list. Takk skal du ha.
Comments
Post a Comment