Nagu te võib-olla teate, kasutatakse valuutapaaride vahel kauplemiseks valuutavahetusturgu (Forex või FX). Kuid te ei pruugi teada, et see on maailma kõige likviidsem turg.
selgitage, kuidas disain on sisu jaoks oluline.
Mõni aasta tagasi tegin oma uudishimust ajendatuna oma esimesed sammud Forexi algoritmilise kauplemise maailma, luues demokonto ja mängides (võltsraha abil) simulatsioone. Metakaupleja 4 kauplemisplatvorm.
Pärast nädala pikkust kauplemist oleksin oma raha peaaegu kahekordistanud. Omaenda eduka algoritmilise kauplemise ajendil süvenesin sügavamale ja registreerusin lõpuks mitmetele FX-foorumitele. Varsti veetsin tunde algoritmiliste kauplemissüsteemide kohta (reeglistikud, mis määravad, kas peaksite ostma või müüma), kohandatud näitajad , turumeeleolud ja palju muud.
Umbes sel ajal, juhuslikult, kuulsin, et keegi üritas lihtsa kauplemissüsteemi automatiseerimiseks leida tarkvaraarendajat. See oli tagasi minu ülikooliajal, kui ma õppisin samaaegne programmeerimine Java-s (niidid, semaforid ja kõik see rämps). Ma arvasin, et see automatiseeritud süsteem ei saa olla minu omast palju keerulisem arenenud andmeteadus kursusetöö, nii et uurisin töö kohta ja tulin pardale.
Klient soovis ehitada algoritmilist kauplemistarkvara MQL4 , funktsionaalne programmeerimiskeel, mida Meta Trader 4 platvorm kasutab aktsiaga seotud toimingute tegemiseks.
Kauplemisplatvormi (antud juhul Meta Trader 4) roll on luua ühendus Forexi maakleriga. Seejärel pakub maakler platvormi reaalajas turu kohta käiva teabega ja täidab teie ostu / müügi korraldusi. Lugejate jaoks, kes ei ole Forexi kauplemisega kursis, on andmevoo pakutav teave järgmine:
Meta Trader 4 kaudu pääsete juurde kõigile nendele andmetele koos sisemiste funktsioonidega, mis on kättesaadavad erineva aja jooksul: iga minut (M1), iga viie minuti tagant (M5), M15, M30, iga tund (H1), H4, D1, W1, MN .
Jooksva hinna liikumist nimetatakse a linnuke . Teisisõnu, linnuke on valuutapaari pakkumise või pakkumise hinna muutus. Aktiivsete turgude ajal võib sekundis olla palju puuke. Aeglastel turgudel võib linnukesteta olla minuteid. Puuk on valuutaturu roboti südamelöök.
Sellise platvormi kaudu tellimust tehes olete osta või müüma teatud valuuta teatud maht. Samuti määrate stop-loss ja take-profit piirmäärad. The stop-loss piir on maksimaalne summa südamikud (hinna variatsioonid), mille võite endale lubada kaotada enne kauplemisest loobumist. The võta kasumi limiit on pipide kogus, mille kogute enda kasuks enne raha väljamaksmist.
Kui soovite lisateavet kauplemise põhitõdede kohta (nt pangad, tellimuste tüübid, levik, libisemine, turukorraldused ja palju muud), vaadake siin .Kliendi algoritmilised kauplemisspetsifikatsioonid olid lihtsad: nad soovisid Forexi robotit, mis põhines kahel näitajal. Taustaks on näitajad väga abiks turupositsiooni määratlemisel ja kauplemisotsuste tegemisel, kuna need põhinevad varasematel andmetel (nt viimase hinna kõrgeim väärtus n päeva). Paljud tulevad sisseehitatud Meta Trader 4-sse. Kuid minu kliendi huvitatud näitajad tulid kohandatud kauplemissüsteemist.
Nad tahtsid kaubelda iga kord, kui kaks neist kohandatud näitajatest ristusid ja ainult teatud nurga all.
Käte määrdumisel sain teada, et MQL4 programmidel on järgmine struktuur:
Start-funktsioon on iga MQL4-programmi süda, kuna see käivitatakse iga kord, kui turg liigub (ergo, see funktsioon täidetakse üks kord linnukese kohta). See juhtub olenemata teie kasutatavast ajakavast. Näiteks võite töötada H1 (üks tund) ajakavas, kuid käivitamisfunktsioon täidaks mitu tuhat korda ajakava kohta.
Selle vältimiseks sundisin funktsiooni käivitama üks kord perioodiühikus:
int start() { if(currentTimeStamp == Time[0]) return (0); currentTimeStamp = Time[0]; ...
Näitajate väärtuste saamine:
// Loading the custom indicator extern string indName = 'SonicR Solid Dragon-Trend (White)'; double dragon_min; double dragon_max; double dragon; double trend; int start() { … // Updating the variables that hold indicator values actInfoIndicadores(); …. string actInfoIndicadores() { dragon_max=iCustom(NULL, 0, indName, 0, 1); dragon_min=iCustom(NULL, 0, indName, 1, 1); dragon=iCustom(NULL, 0, indName, 4, 1); trend=iCustom(NULL, 0, indName, 5, 1); }
Otsustusloogika, sealhulgas näitajate ja nende nurkade ristumiskoht:
int start() { … if(ticket==0) { if (dragon_min > trend && (ordAbierta== 'OP_SELL' || primeraOP == true) && anguloCorrecto('BUY') == true && DiffPrecioActual('BUY')== true ) { primeraOP = false; abrirOrden('OP_BUY', false); } if (dragon_max 0) { ticket=0; return(0); } } else Print('OrderSelect failed error code is',GetLastError()); if (ordAbierta == 'OP_BUY' && dragon_min = trend ) cerrarOrden(false); } }
Tellimuste saatmine:
void abrirOrden(string tipoOrden, bool log) { RefreshRates(); double volumen = AccountBalance() * point; double pip = point * pipAPer; double ticket = 0; while( ticket <= 0) { if (tipoOrden == 'OP_BUY') ticket=OrderSend(simbolo, OP_BUY, volumen, Ask, 3, 0/*Bid - (point * 100)*/, Ask + (point * 50), 'Orden Buy' , 16384, 0, Green); if (tipoOrden == 'OP_SELL') ticket=OrderSend(simbolo, OP_SELL, volumen, Bid, 3, 0/*Ask + (point * 100)*/, Bid - (point * 50), 'Orden Sell', 16385, 0, Red); if (ticket<=0) Print('Error abriendo orden de ', tipoOrden , ' : ', ErrorDescription( GetLastError() ) ); } ordAbierta = tipoOrden; if (log==true) mostrarOrden(); }
Kui olete huvitatud, leiate täieliku käivitatava koodi saidilt GitHub .
Kui ma oma algoritmilise kauplemissüsteemi ehitasin, tahtsin teada: 1) kas see käitus asjakohaselt ja 2) kas Forexi kasutatav kauplemisstrateegia oli hea.
Taganttestimine (mõnikord kirjutatud 'taganttestimine') on konkreetse (automatiseeritud või mitte) süsteemi testimine minevikusündmuste all. Teisisõnu, testite oma süsteemi, kasutades minevikku praeguse puhverserverina.
MT4-l on Forexi kauplemisstrateegia tagasitestimiseks vastuvõetav tööriist (tänapäeval on professionaalsemaid tööriistu, mis pakuvad suuremat funktsionaalsust). Alustuseks seadistate oma ajaraamid ja käivitate oma programmi simulatsiooni all; tööriist simuleerib igat linnukest, teades, et iga üksuse puhul peaks see avanema kindla hinnaga, sulguma kindla hinnaga ning jõudma kindlaksmääratud kõrgemate ja madalamate tasemeteni.
Pärast programmi toimingute võrdlemist ajalooliste hindadega saate aru, kas see toimib õigesti või mitte.
Tema valitud näitajad koos otsustusloogikaga ei olnud kasumlikud.Taganttestimisest alates kontrollisin ma FX-roboti tagasipöördumissuhet mõne juhusliku ajaintervalli järel; Ütlematagi selge, et teadsin, et mu klient ei saa sellega rikkaks - tema valitud näitajad koos otsustusloogikaga ei olnud kasumlikud . Näitena on siin programmi M4 akna 164 operatsiooni käivitamise tulemused:
Pange tähele, et meie saldo (sinine joon) lõpeb alguspunktist madalamal.
Üks hoiatus: öelda, et süsteem on kasumlik või kahjumlik, ei ole alati ehe. Sageli on süsteemid (eba) kasumlikud teatud ajaperioodidel, lähtudes turu 'meeleolust', mis võib järgida mitmeid diagrammide mustreid:
Kuigi tagasitestimine oli mind selle FX-roboti kasulikkuse suhtes ettevaatlikuks teinud, Mind huvitas, kui hakkasin selle väliste parameetritega ringi mängima ja märkasin suuri erinevusi üldises tagasipöördumissuhtes. See konkreetne teadus on tuntud kui Parameetrite optimeerimine .
Ma tegin mõned ligikaudsed testid, et proovida järeldada tagasipöördumissuhte väliste parameetrite olulisust, ja mõtlesin välja midagi sellist:
Või koristatud:
Võite mõelda (nagu mina tegin), et peaksite kasutama parameetrit A. Kuid otsus pole nii otsene, kui see võib tunduda. Täpsemalt, pange tähele ettearvamatus parameetri A väärtus: väikeste veaväärtuste korral muutub selle tagastamine dramaatiliselt. Teisisõnu, parameeter A prognoosib tulevasi tulemusi väga tõenäoliselt, kuna ebakindlus, igasugune nihe põhjustab halvemaid tulemusi.
Kuid tõepoolest, tulevik on ebakindel! Ja seega pole ka parameetri A tagastamine kindel. Parim valik on tegelikult tugineda ettearvamatusele. Sageli eelistatakse madalama maksimaalse tootlusega, kuid parema prognoositavusega (vähem kõikumisi) parameetrit parema, kuid halva prognoositavusega parameetrile.
Ainus asi, milles võite kindel olla, on see, et te ei tea turu tulevikku ja arvate, et teate, kuidas turg minevikuandmete põhjal toimima hakkab, on viga. Omakorda peate oma Forexi ennustustes seda ettearvamatust tunnistama.
Kui arvate, et teate, kuidas turg minevikuandmete põhjal läheb, on viga.See ei tähenda tingimata, et peaksime kasutama parameetrit B, sest isegi parameetri A madalamad tagastused toimivad paremini kui parameeter B; see on lihtsalt selleks, et näidata teile, et parameetrite optimeerimine võib põhjustada teste, mis ületavad tõenäolisi tulevasi tulemusi, ja selline mõtlemine pole ilmne.
Sellest esimesest Forexi algoritmilise kauplemise kogemusest alates olen klientidele loonud mitu automatiseeritud kauplemissüsteemi ja võin teile öelda, et alati on ruumi uurimiseks ja Forexi edasiseks analüüsiks. Näiteks ehitasin hiljuti süsteemi, mis põhines nn suurte kalade liikumiste leidmisel; see tähendab tohutuid variatsioone pisikestes, pisikestes ajaühikutes. See on teema, mis mind köidab.
Oma FX-i simulatsioonisüsteemi loomine on suurepärane võimalus Forexi turul kauplemise kohta lisateabe saamiseks ja võimalused on lõputud. Näiteks võite proovida dešifreerida hinna variatsioonide tõenäosuse jaotuse ühe turu volatiilsuse funktsioonina (näiteks EUR / USD) ja võib-olla teha Monte Carlo simulatsioonimudel, kasutades jaotust volatiilsuse oleku kohta, kasutades ükskõik millist astet soovitud täpsus. Jätan selle õppusele innukas lugeja.
Forexi maailm võib olla kohati valdav, kuid ma loodan, et see üleskirjutus on andnud teile mõned punktid selle kohta, kuidas oma Forexi kauplemisstrateegiaga alustada.
Tänapäeval on kauplemissüsteemi automatiseerimise loomiseks, testimiseks ja täiustamiseks palju tööriistu: Bloxiga kauplemine testimiseks, NinjaTrader kauplemiseks, OCaml programmeerimiseks, kui nimetada vaid mõnda.
Olen palju lugenud salapärasest maailmast, mis on valuutaturg. Siin on mõned kirjutised, mida soovitan programmeerijatele ja entusiastlikele lugejatele:
Forex (või FX) kauplemine on ostmine ja müümine valuutapaaride (nt USD vs EUR) kaudu valuutaturul.
Forexi maaklerid teenivad raha vahendustasude kaudu. Forexi kauplejad teenivad (või kaotavad) raha oma aja järgi: kui nad suudavad müüa piisavalt palju kui ostes, võivad nad teenida kasumit.
Tagatestimine on konkreetse strateegia või süsteemi testimine, kasutades minevikusündmusi.
asutada erakapitalifond
Algoritmiline kauplemine on siis, kui robot / programm kasutab reeglite kogumit, mis ütleb talle, millal osta või müüa.