Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // u/RocketChap 's stock script.
- // Game version 2.0.1
- // Built upon u/ferrus_aub stock script by battering it the other way around with a turtle shell
- /** u/param {NS} ns **/
- export async function main(ns) {
- var maxSharePer = 1.00
- var stockBuyPer = 0.60
- var stockShortBuyPer = 0.35 //Testing this still! Too high, and buying pushes its forecast over sell threshold
- var stockVolPer = 0.05
- var moneyKeep = 1e9 //Set this to your liking! Keeps a reserve of cash on hand.
- var minSharePer = 50 //Too high leaves opportunities untouched, too low wastes money on transaction costs!
- while (true) {
- ns.disableLog('disableLog');
- ns.disableLog('sleep');
- ns.disableLog('getServerMoneyAvailable');
- var stocks = ns.stock.getSymbols()
- for (const stock of stocks) {
- var position = ns.stock.getPosition(stock);
- if (position[0]) {
- //ns.print('Position: ' + stock + ', ')
- sellPositions(stock);
- }
- buyPositions(stock);
- if (position[2]) {
- //ns.print('Position: ' + stock + ', ')
- sellShortPositions(stock);
- }
- buyShortPositions(stock);
- }
- ns.print('Cycle Complete');
- await ns.sleep(6000);
- }
- function buyPositions(stock) {
- var maxShares = (ns.stock.getMaxShares(stock) * maxSharePer) - position[0];
- var askPrice = ns.stock.getAskPrice(stock);
- var forecast = ns.stock.getForecast(stock);
- var volPer = ns.stock.getVolatility(stock);
- var playerMoney = ns.getServerMoneyAvailable('home');
- if (forecast >= stockBuyPer && volPer <= stockVolPer) {
- if (playerMoney - moneyKeep > ns.stock.getPurchaseCost(stock,minSharePer, "Long")) {
- var shares = Math.min((playerMoney - moneyKeep - 100000) / askPrice, maxShares);
- ns.stock.buyStock(stock, shares);
- //ns.print('Bought: '+ stock + '')
- }
- }
- }
- function sellPositions(stock) {
- var forecast = ns.stock.getForecast(stock);
- if (forecast < 0.5) {
- ns.stock.sellStock(stock, position[0]);
- //ns.print('Sold: '+ stock + '')
- }
- }
- function buyShortPositions(stock) {
- var maxShares = (ns.stock.getMaxShares(stock) * maxSharePer) - position[2];
- var askPrice = ns.stock.getAskPrice(stock);
- var forecast = ns.stock.getForecast(stock);
- var volPer = ns.stock.getVolatility(stock);
- var playerMoney = ns.getServerMoneyAvailable('home');
- if (forecast <= stockShortBuyPer && volPer <= stockVolPer) {
- if (playerMoney - moneyKeep > ns.stock.getPurchaseCost(stock,minSharePer, "Short")) {
- var shares = Math.min((playerMoney - moneyKeep - 100000) / askPrice, maxShares);
- ns.stock.buyShort(stock, shares);
- //ns.print('Shorted: '+ stock + '')
- }
- }
- }
- function sellShortPositions(stock) {
- var forecast = ns.stock.getForecast(stock);
- if (forecast > 0.5) {
- ns.stock.sellShort(stock, position[2]);
- //ns.print('Sold short: '+ stock + '')
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement