Een korte handleiding en een eenvoudig werkend script om in eerste instantie met de Bitburner Stock Market te spelen.
The Beginning
Ik heb nooit veel van de aandelenmarkt geweten, behalve dat het op gokken leek en ik ben gewoon verschrikkelijk in gokken – ik lijk altijd te verliezen. Maar ik kwam op een punt in mijn vroege spel waar ik ~3t+ uitgaf voor elke augment (ze nemen exponentieel toe voor elke die je koopt, voor het geval je het nog niet wist) en ~3t was ongeveer alles wat ik elke dag kon verdienen uit hacken. Ik heb toegang tot 40 augments, dus ik probeer alles te kopen wat ik kan, zodat ik die prestatie ook kan behalen. Ik realiseerde me dat het in dit tempo een eeuwigheid zou duren en aangezien de kosten van elke augment ook toenam, had ik een betere manier nodig om geld te verdienen. Dus besloot ik om te leren hoe je de aandelenmarkt in Bitburner kunt spelen, behalve dat het allemaal virtueel is - wat kan ik verliezen?
Het blijkt dat de aandelenmarkt niet zozeer lijkt op gokken in een casino en vertrouwen op de kaarten of slots en je geluk om te winnen. De markt is als een oceaankust met zijn eb en vloed waarvan wiskundig grotendeels kan worden voorspeld om ervan te profiteren voor winst, en dat is hoe mensen en bedrijven geld verdienen aan de aandelenmarkt en het is eigenlijk toegestaan. Dat kun je niet echt doen in een casino - van wat ik heb gehoord, zou dat je in feite in veel problemen kunnen brengen. Informatie over de geschiedenis van een aandeel wordt marktgegevens genoemd, die kunnen worden gekocht om wiskundig koop- en verkoopstrategieën te formuleren.
De basisprincipes
Dit zijn de echte basisprincipes die u moet weten:
Wat is een positie?Een positie is het aantal aandelen dat de speler bezit voor een bepaald bedrijf. Een speler neemt een positie in wanneer hij een aankoop doet via een kooporder. Open posities kunnen lang of kort zijn, afhankelijk van je voortgang in het spel. In eerste instantie heb je alleen toegang tot Long Stocks, maar later kun je Short Stocks kopen (veel later lijkt het).
Wat zijn long- en shortaandelen?Longposities verwijst naar de aankoop van een aandeel met de verwachting dat het in waarde zal stijgen. Shortposities profiteren wanneer de onderliggende waarde in prijs daalt. Bij shortaandelen gaat het vaak om effecten die worden geleend en vervolgens verkocht, om hopelijk tegen een lagere prijs terug te kopen.
Raadpleeg de speldocumenten voor meer basisinformatie hier.
De Bitburner-aandelenmarkt
In eerste instantie ga je via de kaart naar de aandelenmarkt - alle steden hebben er toegang toe.
WSE-account –Kost 200m en is vereist voor toegang tot de beurs. Als u dit koopt, wordt de aandelenmarkt toegevoegd aan het linkermenu onder 'Wereld'.
Marktgegevens TIX API-toegang –Kosten 5b voor toegang tot de API-functies waarmee u aandelen kunt kopen/verkopen en andere aandelengerelateerde taken.
Toegang tot Four Sigma (4S) marktgegevens – Kosten 1b voor toegang tot 4S-prognosegegevens. Ik heb ergens gelezen dat het gebruik van de 4S-gegevens je winst met 60% zal verhogen. Dat is wat we nu nodig hebben.
Four Sigma (4S) Market API-toegang –Kosten 25b voor de API-toegang waarmee u de TIX-functies kunt gebruiken waarvoor 4S Market Data Access is vereist.
Om te beginnen, wil je gewoon alle spullen voor markttoegang in één keer kopen als je het je kunt veroorloven. Tegen de tijd dat je de aandelenmarkt nodig hebt, zou je veel moeten verdienen met hacken, wat in eerste instantie belangrijker is (meer hacken xp = meer servers kunnen worden gehackt = meer $$ gewonnen en zelfs meer hacking-exp). Later, als je eenmaal meer weet over wat je doet, moet je het helemaal opnieuw doen zonder 4S-gegevenstoegang en weinig middelen. Dus het doel is nu gewoon om een hoop geld te verdienen om zoveel mogelijk initiële augments te kopen terwijl je leert hoe de aandelenmarkt werkt. Onthoud dat als je eenmaal vergroot, je al je geld verliest en opnieuw moet beginnen, dus al je geld is op dit moment volledig besteedbaar en hoe meer je op de markt uitgeeft, hoe meer je van de markt zult verdienen.
de codez
Nadat ik het internet had afgezocht naar alle beschikbare informatie die ik kon vinden, slaagde ik erin een werkend script samen te stellen met behulp van de beste code van veel verschillende bronnen en auteurs, voornamelijk Reddit (wat notoir onbetrouwbaar is), bijgewerkt naar Bitburner 2.0 en NS2-syntaxis, opgeschoond heb meer opmerkingen gemaakt of toegevoegd zodat het gemakkelijker is om precies te zien wat het script doet en de algemene uitvoer nuttiger en beter van een tijdstempel heeft gemaakt, zodat u kunt zien dat het daadwerkelijk beter werkt. Het doel is om van het script te leren, dus ik heb het zo eenvoudig en duidelijk mogelijk gehouden met behoud van de originele wiskunde en logica. Ik heb ook formules gevonden van een datawetenschapper voor geen 4S-markttoegang die beweren te werken, maar die bewaar ik voor later, misschien een meer geavanceerde gids. Ik heb de code voor korte aandelen achtergelaten die ik heb gevonden en verpakt in een vlag die je kunt wisselen in de Globals-header - het is niet getest, dus pas op als je hier later mee speelt als je toegang hebt tot shorts.
Het script zal zoveel mogelijk geld gebruiken om zoveel mogelijk gunstige aandelen in één keer te kopen voor het malen van winst. Ik heb gezien dat het maar liefst 1q aandelen gebruikt als er een enorme markthausse is. Ik had 40t toen ik 's ochtends voor het eerst met het script begon en maakte 's middags 150t door het constant te laten draaien. Op dit moment, nu ik dit schrijf, heb ik 35 augments gekocht (nog maar 5 te gaan!) waarvan ze nu ~45q per stuk kosten en ik verdien nu ongeveer ~10q per dag met dit script. Er is een prestatie om 2Q te maken (Q niet q), maar dit script zou gewoon te lang duren, dus meer beursmagie in de berekeningen zou nodig zijn of een andere cheat. Merk op dat je de markt ook kunt beïnvloeden door te hacken/groeien, aandelen te kopen en zelfs te werken voor het bedrijf waar je aandelen in hebt. Dit script is dus eigenlijk maar het eerste wat je zou kunnen doen om nog meer geld te verdienen.
Ik raad aan om het script een paar dagen te bekijken. Krijg een goed gevoel voor het gedrag van de aandelenmarkt - het is 'eb en vloed'. Vergeet niet om je spelbestand op te slaan voordat je begint in geval van problemen of als je gewoon terug wilt gaan. Je zou voor alles debug-berichten moeten zien en je kunt meer toevoegen als je precies wilt zien wat er aan de hand is. Als u uw 'portfolio' in het beursmenu bekijkt, kunt u ook zien hoeveel elke positie u op dit moment heeft verdiend en onder 'Statistieken – Algemeen – Geld' kunt u zien hoeveel geld u in totaal heeft verdiend op de aandelenmarkt. Als je in paniek raakt, dood dan gewoon het script en verkoop alles, je zult niet veel verliezen - alleen voornamelijk commissiekosten.
Voorraadpositie ->Hoeveel voorraad je in de positie hebt.
4S voorspelling ->Wat de 4S voorspelt in de volgende markt 'tick' voor het aandeel.
Huidige voorraad waard:Kortom, hoeveel geld u momenteel in totaal vastzit in aandelen.
Huidige netto waarde:Wat je nu eigenlijk hebt, moet je het script doden en alles verkopen. Dit is dus meer uw huidige 'bank' in plaats van het overzichtsgeld of 'totale waarde' met alles wat vastzit op de aandelenmarkt.
/** @param {NS} ns */ export async function main(ns) { // Logging ns.disableLog('ALL'); //ns.disableLog('sleep'); //ns.disableLog('getServerMoneyAvailable'); ns.tail(); // Globals const scriptTimer = 2000; // Time script waits const moneyKeep = 1000000000; // Failsafe Money const stockBuyOver_Long = 0.60; // Buy stocks when forcast is over this % const stockBuyUnder_Short = 0.40; // Buy shorts when forcast is under this % const stockVolatility = 0.05; // Stocks must be under this volatility const minSharePercent = 5; const maxSharePercent = 1.00; const sellThreshold_Long = 0.55; // Sell Long when chance of increasing is under this const sellThreshold_Short = 0.40; // Sell Short when chance of increasing is under this const shortUnlock = false; // Set true when short stocks are available to player // Functions function buyPositions(stock) { let position = ns.stock.getPosition(stock); let maxShares = (ns.stock.getMaxShares(stock) * maxSharePercent) - position[0]; let maxSharesShort = (ns.stock.getMaxShares(stock) * maxSharePercent) - position[2]; let askPrice = ns.stock.getAskPrice(stock); let forecast = ns.stock.getForecast(stock); let volatilityPercent = ns.stock.getVolatility(stock); let playerMoney = ns.getPlayer().money; // Look for Long Stocks to buy if (forecast >= stockBuyOver_Long && volatilityPercent <= stockVolatility) { if (playerMoney - moneyKeep > ns.stock.getPurchaseCost(stock, minSharePercent, "Long")) { let shares = Math.min((playerMoney - moneyKeep - 100000) / askPrice, maxShares); let boughtFor = ns.stock.buyStock(stock, shares); if (boughtFor > 0) { ns.print('Bought ' + shares + ' Long shares of ' + stock + ' for ' + ns.nFormat(boughtFor, '$0.000a')); } } } // Look for Short Stocks to buy if (shortUnlock) { if (forecast <= stockBuyUnder_Short && volatilityPercent <= stockVolatility) { if (playerMoney - moneyKeep > ns.stock.getPurchaseCost(stock, minSharePercent, "Short")) { let shares = Math.min((playerMoney - moneyKeep - 100000) / askPrice, maxSharesShort); let boughtFor = ns.stock.buyShort(stock, shares); if (boughtFor > 0) { ns.print('Bought ' + shares + ' Short shares of ' + stock + ' for ' + ns.nFormat(boughtFor, '$0.000a')); } } } } } function sellIfOutsideThreshdold(stock) { let position = ns.stock.getPosition(stock); let forecast = ns.stock.getForecast(stock); if (position[0] > 0) { ns.print(stock + ' 4S Forcast -> ' + forecast.toFixed(2)); // Check if we need to sell Long stocks if (forecast < sellThreshold_Long) { let soldFor = ns.stock.sellStock(stock, position[0]); ns.print('Sold ' + stock + ' Long shares of ' + stock + ' for ' + ns.nFormat(soldFor, '$0.000a')); } } if (shortUnlock) { if (position[2] > 0) { ns.print(stock + ' 4S Forcast -> ' + forecast.toFixed(2)); // Check if we need to sell Short stocks if (forecast > sellThreshold_Short) { let soldFor = ns.stock.sellShort(stock, position[2]); ns.print('Sold ' + stock + ' Short shares of ' + stock + ' for ' + ns.nFormat(soldFor, '$0.000a')); } } } } // Main Loop while (true) { // Get stocks in order of favorable forcast let orderedStocks = ns.stock.getSymbols().sort(function (a, b) { return Math.abs(0.5 - ns.stock.getForecast(b)) - Math.abs(0.5 - ns.stock.getForecast(a)); }) let currentWorth = 0; ns.print("-------------------------------"); ns.print('Current Forceasts:'); for (const stock of orderedStocks) { const position = ns.stock.getPosition(stock); if (position[0] > 0 || position[2] > 0) { ns.print(stock + ' Position -> ' + position[0]); // Check if we need to sell sellIfOutsideThreshdold(stock); } // Check if we should buy buyPositions(stock); // Track out current profit over time...
De Bugz
Er lijkt een fout te zijn in de numeral.js-bibliotheek die door Netscript wordt gebruikt bij het formatteren van getallen voorbij 't', zodat 'q' niet wordt weergegeven. Dit wordt vermeld in de Bitburner-broncode en de ontwikkelaar heeft zijn eigen functie (formatReallyBigNumber) gemaakt om q+-waarden correct weer te geven in het Bitburner-overzichtsscherm. Je kunt de functies zelf aan het script toevoegen als dit je echt stoort, want ik wilde het script gewoon zo eenvoudig mogelijk houden:
Ook wanneer het script koopt/verkoopt, ziet u het bericht kort en verdwijnt het vervolgens in de logtekst. Het is er nog steeds - ik kan het opnieuw laten zien door even te prutsen met de opties en de gebruikersinterface, dus ik vermoed dat het een bug is met de gebruikersinterface in plaats van met het script, omdat ik niets anders kan zien dat fout zou kunnen zijn in het script. Misschien kan iemand anders erachter komen en een opmerking plaatsen voor een mogelijke oplossing.
Dat is alles wat we hiervoor vandaag delen Bitbrander gids. Deze handleiding is oorspronkelijk gemaakt en geschreven door Zac Sterrenvuur. Als we deze handleiding niet kunnen bijwerken, kunt u de laatste update vinden door deze te volgen link.