Mindenki meg akar gazdagodni, minél gyorsabban, annál jobb. A számítástechnika sok lehetőséget és talán valamit is kínál erre a célra. A részvények nagyszerű módja annak, hogy több pénzt szerezzen. Szóval, miért nem készítenek botot?
Az ötlet: készíts egy botot, amely képes észlelni, ha egy részvény emelkedik vagy csökken. Ha az árfolyam növekszik, a botnak gyorsan meg kell vásárolnia a részvényt, de ha csökken, akkor a botnak el kell adnia a részvényt. Egyszerű, igaz?
Írjunk egy kódot, de felosztom a kódot, mert különben nagyon hosszú lesz, ha egyszer megmutatom.
Először is importálunk néhány könyvtárat, amelyek nem annyira izgalmasak, mint a következő rész. Készítünk egy új osztályt három funkcióval. Az elsőben beállítjuk a készpénz összegének számát, majd a kezdő dátumot és a befejezési dátumot. Részvényt adunk magunknak. Azt is meg kell határoznunk, hogy a robotunknak meddig kell visszanéznie az időben. Hogy még jobb legyen, írunk egy max és min.
#region imports from AlgorithmImports import * #endregion import numpy as np class SimpleBreakoutExample(QCAlgorithm): def Initialize(self): # Set the cash for backtest self.SetCash(100000) # Start and end dates for backtest self.SetStartDate(2017,9,1) self.SetEndDate(2020,9,1) # Add asset self.symbol = self.AddEquity("SPY", Resolution.Daily).Symbol # Lookback length for b/o (in days) self.lookback = 20 # Upper/lower limit for lookback length self.ceiling, self.floor = 30, 10 # Price offset for stop order self.initialStopRisk = 0.98 self.trailingStopRisk = 0.9 # Schedule function 20 minutes after every market open self.Schedule.On(self.DateRules.EveryDay(self.symbol), \ self.TimeRules.AfterMarketOpen(self.symbol, 20), \ Action(self.EveryMarketOpen))
Ha eddig tetszik a történet, és érdekel a befektetés, és pénzt szeretnél keresni:
Nézze meg ezt a történetet: "A befektetés új módja, találkozzon az AutoArbs-szel"
A következő függvényekben egy diagramot készítünk.
def OnData(self, data): # Plot security's price self.Plot("Data Chart", self.symbol, self.Securities[self.symbol].Close)
Ez a funkció a legérdekesebb. A visszatekintés hossza nem egy rögzített érték, változhat. A visszatekintési hossz korlátja is módosítható. A legfontosabb rész, vétel és eladás. Végül ábrázoljuk az eredményeket.
def EveryMarketOpen(self): # Dynamically determine lookback length based on 30 day volatility change rate close = self.History(self.symbol, 31, Resolution.Daily)["close"] todayvol = np.std(close[1:31]) yesterdayvol = np.std(close[0:30]) deltavol = (todayvol - yesterdayvol) / todayvol self.lookback = round(self.lookback * (1 + deltavol)) # Account for upper/lower limit of lockback length if self.lookback > self.ceiling: self.lookback = self.ceiling elif self.lookback < self.floor: self.lookback = self.floor # List of daily highs self.high = self.History(self.symbol, self.lookback, Resolution.Daily)["high"] # Buy in case of breakout if not self.Securities[self.symbol].Invested and \ self.Securities[self.symbol].Close >= max(self.high[:-1]): self.SetHoldings(self.symbol, 1) self.breakoutlvl = max(self.high[:-1]) self.highestPrice = self.breakoutlvl # Create trailing stop loss if invested if self.Securities[self.symbol].Invested: # Check if the asset's price is higher than highestPrice & trailing stop price not below initial stop price if self.Securities[self.symbol].Close > self.highestPrice and \ self.initialStopRisk * self.breakoutlvl < self.Securities[self.symbol].Close * self.trailingStopRisk: # Save the new high to highestPrice self.highestPrice = self.Securities[self.symbol].Close # Update the stop price updateFields = UpdateOrderFields() updateFields.StopPrice = self.Securities[self.symbol].Close * self.trailingStopRisk self.stopMarketTicket.Update(updateFields) # Print the new stop price with Debug() self.Debug(updateFields.StopPrice) # Plot trailing stop's price self.Plot("Data Chart", "Stop Price", self.stopMarketTicket.Get(OrderField.StopPrice))
A legbonyolultabb rész elkészült. Most pedig vessünk egy pillantást az eredményekre.
Ahogy a grafikán is látszik, a részvény emelkedett, de néhányszor lejjebb is került. Ez normális, minden részvény dinamikus és folyamatosan mozog. Ideje tehát több számot és számjegyet látni. Lépésről lépésre végignézem a legfontosabb eredményeket. A bal felső sarokban kezdem, PSR-rel. A PSR a Probabilistic Sharpe Ratio rövidítése. Nehéz, ezért ha magyarázatot akarsz, nézd meg "ezt". Következő lépésként megvan a kereskedések összege, jelen esetben 9. Ha veszteséges volt, így a részvény értéke csökkent, akkor átlagosan -1,77% volt. Az átlagos nyerési arány sokkal jobb volt: 10,39%. Van még néhány szám, de nem ezek a legérdekesebbek.
A tőzsde kiszámíthatatlan, de ezek az ötletek sokat segíthetnek. Mindenképpen ellenőrizze azt a webhelyet, amely lehetővé tette ezt. (Link lent)
Köszönöm, hogy elolvasta! Ne felejtsen el követni a Médiumon, és olvassa el a többi történetemet is, nagyon hálás lennék érte.
Felelősség kizárása: ennek a projektnek csak oktatási célja van. Ez csak gyakorlat! Csak akkor használjon pénzt részvények vásárlására, ha megengedheti magának a veszteséget, mivel a pénzpiaci kereskedés kockázatos lehet, és elveszítheti az összes befizetett pénzét.
A felsorolt és/vagy a felhasználóknak bármilyen módon továbbított információ ez csak az író személyes véleménye. Ezeket az információkat saját felelősségére használhatja fel. Semmilyen állítás vagy utalás nem történik arra vonatkozóan, hogy alkalmas vagy alkalmas bármilyen célra. Az író nem vállal felelősséget a tanácsai vagy információinak elfogadásából vagy el nem fogadásából eredő veszteségekért. A cikk nem értelmezhető ajánlásként vagy ajánlatként semmilyen értékpapír vételére vagy eladására, vagy bármely befektetési stratégia alkalmasságára. Az írónak nincs engedélye pénzügyi tanácsadásra