[strvinmarvin] (Snippet) Scan BUSD Markets for Fees and Unified Data Object Example

stable
By Strvinmarvin in Miscellaneous Published December 2021 👁 1,147 views 💬 1 comments

Description

This snippet takes a list of coins and checks the Maker Fee for them. It also serves as an educational example for how to utilize a Unified Data Object, for which I got the idea from Strooth and Pshai and since implementing a simple version of it, I have found it really helps keep things organized in terms of saving persistent variables from cycle to cycle. The basics: (1) You load the 'data' object at the top. (2) You populate it with initial values once at the beginning (3) You add/update things easily any time in your core code and functions (4) You save the new state at the end for next cycle By doing this you don't need to Load() and Save() individual things any more, for most of your use cases.
HaasScript
-- Author: Strvinmarvin
-- Market Scanner and Example of Unified Data Object

arrCoins = {
    '1INCH', 
    'AAVE', 
    'ACM', 
    'ADA', 
    'ADX', 
    'AERGO', 
    'AGLD', 
    'ALCX', 
    'ALGO', 
    'ALICE', 
    'ALPACA', 
    'ALPHA', 
    'AMP', 
    'ANKR', 
    'ANT', 
    'ANY', 
    'AR', 
    'ARPA', 
    'ATA', 
    'ATM', 
    'ATOM', 
    'AUCTION', 
    'AUD', 
    'AUDIO', 
    'AUTO', 
    'AVA', 
    'AVAX', 
    'AXS', 
    'BADGER', 
    'BAKE', 
    'BAL', 
    'BAND', 
    'BAR', 
    'BAT', 
    'BCH', 
    'BEL', 
    'BETA', 
    'BICO', 
    'BIFI', 
    'BNB', 
    'BNT', 
    'BNX', 
    'BOND', 
    'BTC', 
    'BTCST', 
    'BTG', 
    'BTT', 
    'BURGER', 
    'C98', 
    'CAKE', 
    'CELO', 
    'CELR', 
    'CFX', 
    'CHESS', 
    'CHR', 
    'CHZ', 
    'CITY', 
    'CKB', 
    'CLV', 
    'COCOS', 
    'COMP', 
    'COS', 
    'COTI', 
    'CREAM', 
    'CRV', 
    'CTK', 
    'CTSI', 
    'CTXC', 
    'CVP', 
    'CVX', 
    'DAR', 
    'DASH', 
    'DATA', 
    'DEGO', 
    'DENT', 
    'DEXE', 
    'DF', 
    'DGB', 
    'DIA', 
    'DNT', 
    'DOCK', 
    'DODO', 
    'DOGE', 
    'DOT', 
    'DYDX', 
    'EGLD', 
    'ELF', 
    'ENJ', 
    'ENS', 
    'EOS', 
    'EPS', 
    'ERN', 
    'ETC', 
    'ETH', 
    'EUR', 
    'FARM', 
    'FET', 
    'FIDA', 
    'FIL', 
    'FIO', 
    'FIS', 
    'FLM', 
    'FLOW', 
    'FLUX', 
    'FOR', 
    'FORTH', 
    'FRONT', 
    'FTM', 
    'FTT', 
    'FXS', 
    'GALA', 
    'GBP', 
    'GHST', 
    'GNO', 
    'GRT', 
    'GTC', 
    'HARD', 
    'HBAR', 
    'HEGIC', 
    'HIGH', 
    'HIVE', 
    'HNT', 
    'HOT', 
    'ICP', 
    'ICX', 
    'IDEX', 
    'ILV', 
    'INJ', 
    'IOST', 
    'IOTA', 
    'IOTX', 
    'IQ', 
    'JASMY', 
    'JOE', 
    'JST', 
    'JUV', 
    'KAVA', 
    'KEEP', 
    'KLAY', 
    'KNC', 
    'KP3R', 
    'KSM', 
    'LAZIO', 
    'LINA', 
    'LINK', 
    'LIT', 
    'LPT', 
    'LRC', 
    'LSK', 
    'LTC', 
    'LTO', 
    'LUNA', 
    'MANA', 
    'MASK', 
    'MATIC', 
    'MBOX', 
    'MC', 
    'MDT', 
    'MDX', 
    'MINA', 
    'MIR', 
    'MKR', 
    'MLN', 
    'MOVR', 
    'MTL', 
    'NANO', 
    'NEAR', 
    'NEO', 
    'NMR', 
    'NU', 
    'NULS', 
    'OCEAN', 
    'OGN', 
    'OM', 
    'OMG', 
    'ONE', 
    'ONT', 
    'OOKI', 
    'ORN', 
    'OXT', 
    'PEOPLE', 
    'PERP', 
    'PHA', 
    'PLA', 
    'POLS', 
    'POLY', 
    'POND', 
    'POWR', 
    'PROM', 
    'PSG', 
    'PYR', 
    'QI', 
    'QNT', 
    'QTUM', 
    'QUICK', 
    'RAD', 
    'RAMP', 
    'RARE', 
    'RAY', 
    'REEF', 
    'REN', 
    'REQ', 
    'RGT', 
    'RLC', 
    'RNDR', 
    'ROSE', 
    'RSR', 
    'RUNE', 
    'RVN', 
    'SAND', 
    'SC', 
    'SCRT', 
    'SFP', 
    'SHIB', 
    'SKL', 
    'SLP', 
    'SNX', 
    'SOL', 
    'SPELL', 
    'SRM', 
    'STMX', 
    'STORJ', 
    'STPT', 
    'STRAX', 
    'STX', 
    'SUN', 
    'SUPER', 
    'SUSHI', 
    'SXP', 
    'SYS', 
    'THETA', 
    'TKO', 
    'TLM', 
    'TOMO', 
    'TORN', 
    'TRB', 
    'TRIBE', 
    'TROY', 
    'TRX', 
    'TUSD', 
    'TVK', 
    'TWT', 
    'UFT', 
    'UNFI', 
    'UNI', 
    'USDC', 
    'USDP', 
    'UST', 
    'UTK', 
    'VET', 
    'VIDT', 
    'VOXEL', 
    'WAVES', 
    'WAXP', 
    'WIN', 
    'WING', 
    'WRX', 
    'XEC', 
    'XEM', 
    'XLM', 
    'XMR', 
    'XRP', 
    'XTZ', 
    'XVG', 
    'XVS', 
    'YFI', 
    'YFII', 
    'YGG', 
    'ZEC', 
    'ZEN', 
    'ZIL', 
    'ZRX', 
}

arrCoins = Range(arrCoins, 0, 11)

quote = 'BUSD'

data = Load('data', {})

if Count(data) == 0 then
    data['bot_start'] = Time()
    data['cycle_count'] = 0
    
    data.col = {
        cycle_start = Color(231,212,232),  -- light purple
        cycle_end = Color(217,240,211),  -- light green

    }

    data.prefixes = {
        ['cycle start'] = '-O-',
        cycle_end = '-X-',
    }

end

Log(data)

data['cycle_count'] = data['cycle_count'] + 1

-- Example of referencing the table like "data.prefixes['cycle start']" and "data.col['cycle_start']"
-- Note how you can define the table in 2 ways, with a space as a string, or the traditional way without white space
Log(data.prefixes['cycle start']..' Cycle ['..data['cycle_count']..'] Starting...', data.col['cycle_start'])

for key, coin in pairs(arrCoins) do

    mkt = CreateMarket('', coin, quote)
    tmkt = TradeMarketContainer(mkt)
    cp = CurrentPrice(mkt)

    Log('['..key..'] '..mkt..' -> makersFee: '..tmkt.makersFee..' -- ask: '..cp.ask, IfElse(tmkt.makersFee == 0, DarkGray, Red))

end

Save('data', data)

-- Example of referencing the table like "data.prefixes.cycle_end"
Log(data.prefixes.cycle_end..' Cycle ['..data['cycle_count']..'] Ending...', data.col.cycle_end)

1 Comment

Sign in to leave a comment.

K
Kobalt over 4 years ago

Have you already been able to try this on v4? (It seems good practice to keep scripts tidy, fast)

Thanks for publishing this, educational content is much appreciated.