Ceea ce vorbim în principal aici este implementarea codului programat în timp real pentru strategiile de tranzacționare cu frecvență medie și joasă.

Strategie

Nașterea unei strategii de tranzacționare cantitativă se bazează, în general, pe observarea și înțelegerea pieței, generarea unei idei de strategie, apoi proiectarea detaliilor specifice ale strategiei și apoi testarea retrospectivă a mai multor varietăți de date pentru a obține și a verifica efectul unor valori specifice parametrilor. . Dacă efectul este bun și are aplicabilitate universală, atunci următorul pas este testarea pieței reale cu fonduri mici. Dacă oferta reală în afara eșantionului este fezabilă, în cele din urmă puteți crește fondurile și o puteți rula pentru o lungă perioadă de timp.

Pentru a preveni efectul de pârghie, permiteți-mi să vă explic că, desigur, există și alte metode de a genera strategii, cum ar fi data mining, digging, digging, digging factori. Există, de asemenea, factori de generare automată, cum ar fi învățarea automată și învățarea prin consolidare. Cu toate acestea, acest tip de metodă de cutie neagră este dificil de continuat în timpul perioadei de retragere a strategiei, deoarece nu știți când și de ce acești factori dezgropați vor eșua. Când faceți tranzacții cantitative, cel mai important lucru este să insistați asupra tranzacționării ferme. Dacă piața nu este bună, vă puteți micșora poziția, dar nu vă puteți închide. Nimeni nu poate ști când va izbucni marea piață. Dacă îl ratați, retragerea anterioară va fi în zadar.

O analogie este că proiectarea și testarea în spate a strategiilor este echivalentă cu „calculul templului” menționat în „Arta războiului” de Sun Tzu „Cel care nu are luptă, dar templul este câștigătorul trebuie să calculeze mai mult cine nu a luptat, dar templul este învins, trebuie să calculeze." Mai puțin este mai mult. Mai mult înseamnă victorie, mai puțin înseamnă mai puțin și nimic nu contează!"

Prin urmare, strategia de tranzacționare trebuie să fie bine planificată și calculată cu atenție din designul inițial, altfel vei pierde efectiv înainte de a se face oferta efectivă. Acest pas este cel mai dificil Deși codul real ulterior nu este ușor, majoritatea este doar obositor. Cheia unei oferte ferme este controlul riscului.

Strategiile de tranzacționare, sau regulile de tranzacționare, ne permit să „facem ceea ce trebuie”, iar implementarea specifică a ofertei efective este să „facem ceea ce trebuie”. De multe ori, cunoașterea direcției corecte este mult mai dificilă decât mersul pe jos. La fel ca gluma despre repararea echipamentelor, se percepe o mie de yuani pentru a trage o linie. Desenarea liniei în sine valorează doar 1 dolar, dar să știi unde să tragi costă 999.

Strategia + oferta reală formează împreună un sistem de tranzacționare. În ceea ce privește proiectarea unui sistem de tranzacționare, vă puteți referi la articolul anterior: Seven Elements of a Complete Trading System. Oferta reală aici este de fapt operațiunile specifice următorilor 4 pași ai sistemului de tranzacționare, „Intrarea și ieșirea din profit și pierdere”. Primii trei pași sunt în principiu determinați atunci când proiectarea strategiei este finalizată.

Cu toate acestea, chiar dacă strategia este bună, dacă implementarea efectivă nu este în vigoare, efectul va fi mult redus și chiar și strategia potențială care a fost bună inițial va fi oprită. Dezvoltarea unei strategii bune nu este ușoară, așa că nu eșua în a o executa. O idee bună trebuie pusă în aplicare cu fermitate până la urmă.

întrebare

1. Tendință bruscă a pieței

Acest tip de strategie va fi întâlnit doar dacă există un semnal în bară. În bară, prețul de închidere sau prețul de deschidere al unei anumite linii K nu este utilizat, dar prețul intraday este utilizat pentru a declanșa semnalul.

Iată un exemplu de problemă întâlnită în oferta reală acum câteva zile. Un exemplu microscopic de piață de tranzacționare. Este destul de comun în cercul valutar.

Imaginea de mai jos este linia K de 10 secunde a contractului perpetuu BNB de acum câteva zile (2023.7.10 17:21) (o bară este semnificația OHLCV agregată din datele tranzacției în 10 secunde).

După cum puteți vedea, amplitudinea liniei mari pozitive este de 3,53%, iar tranzacția a fost de aproximativ 30 de milioane de dolari. Finalizat în 10 secunde. Înainte de începerea acestei piețe, tendința era aproape fără evenimente.

Uită-te la imaginea de mai jos care este linia k de 1 secundă la acel moment, poți obține mai multe detalii.

Practic durează aproximativ 4 secunde pentru a se ridica complet. A crescut cu peste 2 puncte în prima secundă. Acestea sunt practic rezultatele strategiilor de înaltă frecvență (conduse pe evenimente, tendințe de înaltă frecvență, market making etc.) și ordinelor algoritmice care pot fi aranjate în avans.

Să ne uităm la linia K de 4 ore a BNB. Cea mai mare linie pozitivă este perioada de timp în care a apărut știrea. Amplitudine 4,05%.

Comparând liniile K ale acestor perioade, putem observa că acest tip de fluctuații determinate de știri (de data aceasta știrea este noul IEO al Binance, ARKM), sunt în general finalizate instantaneu. Creșterea de 4 ore nu este de fapt foarte diferită de 10 secunde, iar pornirea reală este de doar aproximativ 4 secunde. Acest tip de câmp de luptă aparține acelor strategii de înaltă frecvență care sunt înarmate până în dinți. Cu toate acestea, poate afecta, de asemenea, strategiile de frecvență medie și joasă, provocând o alunecare mai mare.

Nu vom studia aici strategiile de înaltă frecvență. Ce înseamnă pentru strategiile de frecvență medie și joasă? Sunt două lucruri principale care îmi vin în minte:

1. Unele tendințe izbucnesc foarte brusc și sunt finalizate într-o perioadă scurtă de timp, astfel încât strategia nu poate fi suspendată întâmplător. Oferta reală din cercul valutar trebuie garantată a fi online 24 de ore din 24, mai ales dacă există o poziție, și nu poate fi deconectată.

2. Derapajul real poate ajunge la 2 puncte procentuale. Uitați-vă la linia K de 1 secundă de mai sus Dacă semnalul dvs. de cumpărare se bazează pe un anumit preț și acest preț se întâmplă să iasă în partea inferioară a liniei K mari, atunci indiferent de ce, prețul după ce intrați. piața poate aluneca cu 2~3 puncte procentuale. Cel mai rău poate fi de până la 4 puncte procentuale, iar comenzile de cumpărare sunt pe vârful acului. Cu toate acestea, dacă vindeți, veți obține profituri peste așteptările dumneavoastră. Cu toate acestea, conform legii lui Murphy, pâinea care cade întotdeauna aterizează partea unsă cu unt. Pe termen lung, există o probabilitate mare ca derapajele să fie mai mari.

Lucrul bun, totuși, este că acest lucru se întâmplă doar de un număr limitat de ori. Atâta timp cât strategia este bună și derapajul este mai mare, este doar luarea de profit și nu va afecta randamentele pozitive pe termen lung. E ca și cum ai mai suporta încă un șoc și uzură.

O modalitate de a atenua acest lucru este să utilizați websocket pentru a obține cel mai recent preț. Documentul spune că se actualizează la fiecare 250 de milisecunde, dar uneori se actualizează de fapt mai rapid, astfel încât este posibil să răspundeți imediat. Un alt avantaj al websocket este că nu ocupă limita de frecvență a API-ului Restful al schimbului. Acest lucru este menționat în detaliu mai târziu.

2. Cotația orară

Acest lucru este întâlnit de multe strategii de tendințe, deoarece majoritatea dintre ele folosesc prețul poziției comutatorului pentru a calcula semnalele de intrare și ieșire. Apoi, de îndată ce trece ceasul, toți pornesc unul după altul.

Pe oră, în special multipli de 8, pentru că indiferent de ciclul dvs. este strategia, toate aceste trei puncte ar trebui să îndeplinească timpul divizorului comun. Poate că strategiile automate ale tuturor vor lua măsuri, iar frecvențele înalte, medii și joase vor fi strânse împreună. generează propriile semnale, rivalii reciproc.

În plus, în acest moment, schimbul are nevoie și de decontare și livrare. Deși contractul perpetuu nu este livrat, pot exista și alte operațiuni pentru calcularea comisionului de capital de livrare. Timp de aproximativ 6 secunde după cele trei ore din 08/08/16, websocket-ul Binance nu a transmis informații despre K-line, s-a oprit! Doar te întreb ce să faci? În realitate, adesea nu există nicio soluție.

Mai grav este că piața va rezona, mai ales când piața este în scădere, iar panica va fi mai contagioasă. Serverele bursei sunt și mai ocupate, iar multe monede mici cu condiții de piață acerbe sunt în jos imediat Comenzile nu pot fi plasate și toate sunt 1001 erori. Când plasați o comandă în grabă și reușiți, comenzile tranzacționate pe vârful pinului pot fi ale dvs.

Prin urmare, derapajul este într-adevăr inevitabil. Acceptați-o. După cum am menționat mai devreme, tratați-l ca pe încă un stop loss.

Cu toate acestea, există și câteva sfaturi de împărtășit.

Scăderea semnalului poate fi calculată în avans cu n secunde înainte de oră. În acel moment, aglomerația nu a început, deoarece majoritatea strategiilor automate pot aștepta până când prețul de închidere al liniei K pe oră iese înainte de a începe să calculeze semnalul. Cu toate acestea, problema cauzată de această operație este că poate genera semnale false. De exemplu, prețul se întoarce imediat. Nu ar trebui să existe un semnal și apare un fals pozitiv. În acest moment, depinde de alegerea ta dacă vrei sau nu să faci asta. Cu toate acestea, puteți adăuga un anumit prag și îl puteți declanșa atunci când acesta îl depășește, astfel încât să preveniți semnalele false cauzate de rentabilitatea prețurilor pe termen scurt. Alunecarea poate fi redusă puțin.

Există, de asemenea, o metodă de utilizare a semnalelor offset, cum ar fi time offset sau shift k-line, care nu generează semnale pe oră, nu se implică cu alții și evită mai bine aglomerația. Există și metode precum TWAP.

Cu toate acestea, acestea necesită anumite abilități și vor face codul real mai dificil.

oferta ferma

O strategie de bază CTA cu frecvență medie și joasă În general, codul real este foarte simplu. Există o singură strategie pentru o varietate și nu există nicio adunare sau scădere de poziții și nicio informație încrucișată nu este amestecată. Atunci codul local nu trebuie să mențină nicio stare, deoarece schimbul înregistrează totul pentru tine. Dacă există o poziție, câtă marjă este necesară, dacă comanda este finalizată etc. Deoarece este cu frecvență medie spre joasă, puteți verifica oricând informațiile contului bursei atunci când este necesar, iar acesta este cel mai imediat și mai precis. Acest lucru elimină problemele legate de utilizarea unei baze de date locale pentru a înregistra starea tranzacției.

Această strategie simplă este de fapt fezabilă, dar problema este că retragerea poate fi mai mare, nu suficient de diversificată, iar riscul este mare. Un singur produs poate să nu aibă piață, să fluctueze și să se retragă fără să se întoarcă sau să întâmpine condiții extreme de piață, iar o altă mare gaură va apărea pe curba capitalului. Dacă o luați în serios, veți fi speriat și vă veți opri strategia dacă nu o puteți suporta. Dacă o luați cu ușurință, experiența de tranzacționare va fi mult mai proastă. Rețineți că toate acestea sunt în condițiile unor poziții rezonabile. În caz contrar, dacă poziția este prea ușoară, retragerea va fi mică, dar și venitul va fi redus, iar profitul și pierderea vor veni din aceeași sursă și va fi păcat să ratați oportunitatea dacă poziția este; prea greu, va fi o greșeală, iar mai devreme sau mai târziu se va termina.

Cu toate acestea, se recomandă ca începătorii să înceapă cu o implementare în timp real a acestei strategii. Numai prin practică vă puteți îmbunătăți rapid nivelul de tranzacționare. Dar asigurați-vă că vă păstrați lumina de poziție, iar pârghia ar trebui să fie mai mică. Cel mai bine este să nu utilizați pârghia, astfel încât să puteți persista o perioadă mai lungă de timp.

Dacă doriți să fiți mai profesioniști, să reduceți riscurile de un singur punct, curba capitalului va fi mai netedă și veți avea mai puține griji atunci când se face oferta (după cum am menționat anterior, în poziții rezonabile, acest lucru este de fapt foarte important, deoarece este mai ușor să rămâneți la strategie și să așteptați până când riscul ) este, în general, un model multi-varietate, multi-strategie, multi-parametri și apoi există adunări și scăderi de poziții. Nu înseamnă neapărat adăugarea sau scăderea pozițiilor pe o singură strategie, dar poate fi realizată și prin mai multe substrategii pentru a obține efectul de a adăuga sau scădea poziții. Cu toate acestea, în acest caz, strategia va fi mai aglomerată Dacă doriți și să minimizați alunecarea pozițiilor de deschidere și de închidere, complexitatea codului va crește vertiginos.

Să vorbim despre dificultățile cauzate de acest model multi-varietate, multi-strategic și multi-parametri.

dificultate

1. Limită de frecvență API

Prima dificultate cu mai multe strategii este limita de frecvență API. Există multe varietăți și strategii Pentru a obține prețuri, poziții, comenzi și alte informații în timp real, trebuie să vizitați constant bursa. După cum am menționat anterior, dacă frecvența este scăzută și lentă, prețul obținut poate să nu fie cel mai recent, iar alunecarea poate fi mult mai mare.

Resursele de server ale schimbului sunt limitate, deci există o limită a frecvenței de acces a API-ului. Limita Binance este de 2.400 pe minut, iar apoi există o limită de 10 secunde și există și alte așa-numite moduri de învățare automată pentru detectarea comportamentului rău intenționat. Oricum, cu siguranță nu va funcționa dacă este prea frecvent Nu funcționează, schimbul are ultimul cuvânt. În acest caz, știi, nu există nicio formulă.

Deși se spune că este 2400, l-am testat în mod întâmplător folosind concurență Dacă cer linii K, chiar dacă sunt cele mai scurte 99 de linii la un moment dat (greutatea API este de 1), atunci dacă solicit aproximativ 75 de monede în același timp. , voi fi interzis pentru câteva minute. Prin urmare, nu se poate contesta cu ușurință limitele.

Dacă o încălcați, veți primi erori 429, 418, iar IP-ul dvs. va fi interzis pentru câteva minute până la câteva zile. În acest moment, dacă aveți o poziție, va fi mizerabil (nu există restricții privind plasarea comenzilor , în special lichidarea pozițiilor existente, dar nu aveți informații despre preț, cu excepția cazului în care există și websocket).

Soluția la această problemă este să utilizați websocket pentru a obține date, astfel încât schimbul să le poată împinge în mod activ în timp util, fără a ocupa API-ul. Poate reduce o oarecare alunecare. Problema este că trebuie să mențineți un alt centru de piață bazat pe websocket. Dificultatea codului live a crescut și a devenit mai complicată. Nu trebuie deconectat timp de 24 de ore, iar dacă este deconectat, trebuie reconectat automat la timp etc.

2. Starea strategiei

După cum am menționat anterior, dacă strategiile devin mai complexe, trebuie să înregistrați statutul fiecărei strategii. În caz contrar, pozițiile bursei nu vor ști ce strategie a deschis, cât de mult a deschis fiecare etc. Și dacă doriți să o revizuiți mai târziu, va trebui să înregistrați mai multe date.

În acest moment, trebuie să introduceți o bază de date (desigur, puteți folosi și înregistrări de fișiere, aceeași idee).

Introducerea unei baze de date aduce probleme ale bazei de date. Cu toate acestea, acest lucru este similar cu dezvoltarea de software din alte industrii și nu are nimic nou. Mai ales în industria comerțului electronic, pentru că totul este despre soldurile fondurilor, gestionarea comenzilor și alte lucruri similare, cei care nu au experiență pot citi astfel de cărți și articole.

Trebuie remarcat faptul că mulți pași trebuie să realizeze operațiuni atomice similare cu tranzacțiile cu baze de date, adică un set de operații sau toate reușesc Odată ce un anumit pas nu reușește, nu trebuie să faci nimic și să revii la starea inițială.

Apoi, deoarece este o tranzacție cu bani reali, până la urmă, pentru operațiunile de bază de date cu informații despre comenzi, cel mai bine este să utilizați cel mai înalt nivel dintre cele patru niveluri de izolare, Serializabil, pentru a elimina posibilitatea tuturor citirilor murdare, citirilor nerepetabile și citeste fantoma. Adică, nu este utilizată nicio utilizare simultană, multi-threading sau chiar asincronă pentru a citi și scrie informații cheie ale bazei de date. Toate operațiunile sunt finalizate într-un singur fir. Implementarea operațiunilor.

Nu lua cu ușurință provocarea programării simultane. Dacă există o problemă cu acest tip de sistem, probabil că este imposibil să o remediați. Este cel mai dificil de găsit în dezvoltarea de software. Cei care pot finaliza cu grijă acest gen de muncă sunt programatori cu un salariu lunar de peste 50.000 de euro.

Nu sunt multe la care să-mi vină în minte care să folosească multi-threading sau asincron (multi-threading și asincron, se recomandă utilizarea multi-threading, deoarece asincron este ca o boală infecțioasă în Python. Odată folosit, trebuie folosit în un lanț de apeluri) Ceea ce este cu adevărat benefic este trimiterea de semnale de avertizare DingTalk și altele asemenea. Deoarece serviciul DingTalk este în China, iar serverele de schimb valutar sunt în străinătate, serverul dvs. de cod ar trebui să fie implementat în străinătate, mai aproape de schimb, așa că atunci când trimiteți DingTalk, uneori este nevoie de câteva secunde pentru a reveni și uneori chiar este blocat durează mai mult de zece secunde.

în sfârșit

De fapt, nu contează dacă nu poți face multe lucruri. Atâta timp cât ai conștientizarea de a accepta un derapaj mai mare, este posibil să scuipi aproape 1/5 sau chiar mai multe profituri. Cel mai important lucru este strategia de a aștepta profituri pozitive și de a putea rula fără timp de nefuncționare este cheia.

Pe scurt, prima prioritate a unei oferte ferme este continuarea și executarea stabilă a logicii stabilite a strategiei. Alunecarea face parte din tranzacționare, doar încercați să o reduceți atâta timp cât nu vă rupe mușchii.

Strategie de primă clasă, 2 și 3 fluxuri sunt implementate, nu există nicio problemă mare. Dar dacă strategia nu este la standard, codul de tranzacționare real de top nu va ajuta, iar pierderea va fi totuși o pierdere. Prin urmare, doar scrierea unui cod bun nu poate face tranzacții cantitative bine. Strategia este bună și codul live este, desigur, cel mai bun. Cu toate acestea, când timpul este limitat, concentrați-vă pe strategie.

Va urma