Skip to content

Instantly share code, notes, and snippets.

@mikewcasale
Last active August 31, 2022 18:10
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mikewcasale/3b1b80df0b53817e3112132f8beedde3 to your computer and use it in GitHub Desktop.
Save mikewcasale/3b1b80df0b53817e3112132f8beedde3 to your computer and use it in GitHub Desktop.
def transact(self):
"""
Specifies the Monte-Carlo transaction behavior (i.e., deposits, trades, etc...)
in terms of their respective probability distributions.
"""
latest_action = 'None'
for _ in range(int(round(float(mean_events_per_hour),0))):
self.latest_amt = None
self.latest_tkn_name = None
self.user_name = global_username
self.timestamp += 1
timestamp = self.timestamp
i = self.random.randint(0, self.num_timesteps)
deposit_range = self.num_timesteps * self.action_freq_dist['deposit']
trade_range = deposit_range + self.num_timesteps * self.action_freq_dist['trade'] * (1 - arbitrage_percentage)
arb_range = trade_range + self.num_timesteps * self.action_freq_dist['trade'] * arbitrage_percentage
withdraw_completed = arb_range + self.num_timesteps * self.action_freq_dist['withdraw_completed']
if i < deposit_range:
if latest_action != "deposit":
latest_action = "deposit"
self.perform_random_deposit()
elif deposit_range <= i < trade_range:
if latest_action != "trade":
latest_action = "trade"
self.perform_random_trade()
elif trade_range <= i < arb_range:
if latest_action != "arbitrage_trade":
latest_action = "arbitrage_trade"
self.perform_random_arbitrage_trade()
elif arb_range <= i < withdraw_completed:
if latest_action != "withdrawal":
latest_action = "withdrawal"
self.perform_random_withdrawal()
state = self.protocol.global_state
state.timestamp = timestamp
for tkn_name in self.whitelisted_tokens:
if not get_is_trading_enabled(state, tkn_name):
self.protocol.enable_trading(tkn_name=tkn_name, timestamp=timestamp)
# The code below creates a new dataframe which collects the data we want to analyze
df = {'timestamp': [timestamp], 'latest_action': [latest_action], 'latest_amt': [self.latest_amt],
'latest_tkn_name': [self.latest_tkn_name]}
for tkn in self.whitelisted_tokens:
if tkn != 'bnt':
df[f'{tkn}_bnt_funding_limit'] = [get_bnt_funding_limit(state, tkn)]
df[f'{tkn}_vault_real'] = [get_vault_balance(state, tkn)]
df[f'{tkn}_is_trading_enabled'] = [get_is_trading_enabled(state, tkn)]
df[f'{tkn}_iloss'] = [self.iloss_realized[tkn][-1]]
df[f'{tkn}_fees_earned'] = [self.total_fees_earned[tkn][-1]]
df[f'{tkn}_staking'] = [get_staked_balance(state, tkn)]
df[f'{tkn}_surplus_real'] = [df[f'{tkn}_vault_real'][0] - df[f'{tkn}_staking'][0]]
df[f'{tkn}_tkn_trading_liquidity'] = [get_tkn_trading_liquidity(state, tkn)]
df[f'{tkn}_bnt_trading_liquidity'] = [get_bnt_trading_liquidity(state, tkn)]
self.logger.append(pd.DataFrame(df))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment