[strvinmarvin] (Snippet) Scan BUSD Markets for Fees and Unified Data Object Example
stableDescription
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.
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.