【问题标题】:How to make dictionary to output by max value only (implied_volatility)?如何使字典仅按最大值输出(implied_volatility)?
【发布时间】:2020-06-17 17:29:44
【问题描述】:

所以标题为“期权”的字典在下面按罢工价格、询问价格、增量和隐含波动率吐出结果(可交易期权)。但我不需要它来吐出所有可交易的选项。我只希望输出显示 1 个具有最高implicit_volatility (IV) 的可交易期权,因此例如,结果应该只显示具有最高 IV 的期权:

行使价:43.0000,卖价:0.030000,买价:0.000000,Delta:0.008705,IV:1.449510 - 因为这里的 IV 是下面整个输出中的最高值。

我该怎么做?

import config 
import robin_stocks as r 

r.login(config.USERNAME,config.PASSWORD)


#specify criteria to search for options of a given symbol and its exp date
symbol = 'GDX'
expirationDate = '2020-06-19'


search_option = r.find_options_for_stock_by_expiration(symbol,expirationDate,optionType='call')


for option in search_option:

        print("Strike Price: {}, Ask: {}, Bid: {}, Delta: {}, IV: {}".format(option['strike_price'],option['ask_price'],option['bid_price'],option['delta'], option['implied_volatility']))


**OUTPUT**:
Strike Price: 42.0000, Ask: 0.030000, Bid: 0.000000, Delta: 0.009354, IV: 1.335719
Strike Price: 43.0000, Ask: 0.030000, Bid: 0.000000, Delta: 0.008705, IV: 1.449510
Strike Price: 35.5000, Ask: 0.060000, Bid: 0.040000, Delta: 0.073395, IV: 0.634361
Strike Price: 36.5000, Ask: 0.030000, Bid: 0.020000, Delta: 0.041370, IV: 0.743600

【问题讨论】:

  • 让我确定一下。是否只需要选择 IV 值最高的选项?
  • 是的,你是对的。
  • 当前答案的复杂性有点高。让我发布一个改进的解决方案。它将O(n)
  • 我发布了我的答案。你想试一试吗?

标签: python dictionary finance computational-finance


【解决方案1】:

在你的代码的for循环的地方替换这个。

highest_IV, highest_idx = 0, None
for idx, option in enumerate(search_option):
    if option['implied_volatility'] and highest_IV < float(option['implied_volatility']):
        highest_IV = float(option['implied_volatility'])
        highest_idx = idx
if highest_idx is not None:
    print("Strike Price: {strike_price}, Ask: {ask_price}, Bid: {bid_price}, Delta: {delta}, IV: {implied_volatility}".format(**search_option[highest_idx]))

这里可能需要考虑search_option为空的情况。

希望对你有帮助。

【讨论】:

  • 我收到了这个错误:如果最高['implied_volatility']
  • 有没有implied_volatility可以是None的情况?
  • 啊,是的!我完全忘记了我也想排除无名的事实!我对此表示歉意
  • 我更新了代码,但不确定这是否有任何语法或错误案例。但是你能不能试一试,让我知道。
  • 所以我修正了语法,我认为在它吐出这个之前它都会起作用: print("Strike Price: {strike_price}, Ask: {ask_price}, Bid: {bid_price}, Delta: {delta}, IV: {implied_volatility}".format(search_option[highest_idx])) KeyError: 'strike_price'
【解决方案2】:

您可以执行以下操作返回具有最高 IV 的选项:

def find_highest_iv(search_option):
    max_iv = max([option['implied_volatility'] for option in search_option ])
    for option in search_option:
        for k,v in option.items():
            if k == 'implied_volatility' and v == max_iv:
                return option

如果有两个选项具有相同的 IV,这将返回在 search_options 中找到的第一个选项。可能有一种更 Pythonic 的速记方法可以做到这一点,但这应该可以工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-11-05
    • 2021-03-08
    • 1970-01-01
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多