import os,sys
import logging
import numpy as np
import pandas as pd
pd.set_option('display.width', 1000)
pd.set_option('display.max_rows', 500)
ENTRY = 11440
POSITION = -500
LEVERAGE = 3
FX_RATE_RMB_USD = 6.9
WALLET = 0.0978 # BTC
STEP = 10
N = 50
START_PRICE = 11200
def next():
for p in START_PRICE + np.arange(N)*STEP:
yield p
def snap_shot(price):
delta_spot = price - ENTRY
factor = 1 if POSITION>0 else -1 # different view for long/short position holders
pnl_pct = factor*(1/ENTRY - 1/price)*price*100
delta_b = (1/ENTRY - 1/price)*POSITION
delta_b_rmb = delta_b * FX_RATE_RMB_USD * ENTRY
portfolio_b = delta_b + WALLET
portfolio_rmb = portfolio_b * FX_RATE_RMB_USD * price
portfolio_gain = portfolio_rmb - ENTRY * WALLET * FX_RATE_RMB_USD
row = dict( market_price=price,
delta_spot=delta_spot,
pnl_pct=pnl_pct,
delta_pos_in_btc=delta_b,
delta_pos_in_rmb=delta_b_rmb,
portfolio_b = portfolio_b,
portfolio_rmb = portfolio_rmb,
portfolio_gain = portfolio_gain
)
return row
import click
@click.command()
@click.option('--step', default=5, help='Price step')
@click.option('--entry', default=10000, help='Entry price')
@click.option('--position', default=0, help='BMex position in $')
@click.option('--wallet', default=0.0, help='Wallet balance in BTC')
def main(step,entry,position,wallet):
global START_PRICE, STEP,ENTRY,POSITION,WALLET
START_PRICE = entry*.98
STEP = step
ENTRY=entry
POSITION=position
WALLET=wallet
print('*'*30)
print(f'Assume position ($): {POSITION}')
print('*'*30)
rows = []
for price in next():
row = snap_shot(price)
rows += [row]
df = pd.DataFrame.from_records( rows )
df.pnl_pct = df.pnl_pct.apply(lambda e: '{:.2f}%'.format(e) )
df.portfolio_rmb = df.portfolio_rmb.apply(lambda e: '¥{:.2f}'.format(e))
df.portfolio_gain = df.portfolio_gain.apply(lambda e: '¥{:.2f}'.format(e))
margin = abs(POSITION)/ENTRY/LEVERAGE
total_loss = -margin # - indicates loss
total_loss_usd = total_loss * ENTRY
print(df)
print(f'\nMargin(B): {margin}\nTotal Loss: {total_loss}\nTotal Loss ($): {total_loss_usd}')
if __name__ == '__main__':
main()
BMex反向合约盈亏计算
最新推荐文章于 2023-11-15 12:05:29 发布