Closed. This question needs debugging details。它当前不接受答案。
想改善这个问题吗?更新问题,以使
5年前关闭。
Improve this question
我正在用Python编写期权交易程序。该程序会提供交易,然后确定特定交易可获利的基础股票的价格点。
我将尝试对问题进行措辞,以便任何人,无论其选择知识如何,都可以提供解决方案。
一个示例交易包括购买n
看跌期权和y
看涨期权。 (其中n
和y
是整数)。交易成本称为变量cost_of_trade
如果cost_of_trade < profit_from_trade
,该交易是有利可图的
profit_of_trade = profit_from_calls + profit_from_puts
如果股票价格大于到期时看涨期权的行使价,那么:
profit_from_calls = (final_stock_price - calls.strike_price) * y)
其他:
profit_from_calls = 0
-
如果股票价格小于到期日认沽期权的执行价格,则:
profit_from_puts = (-final_stock_price + puts.strike_price) * n)
其他:
profit_from_puts = 0
我需要解决cost_of_trade == profit_from_trade
的等式。解决这个方程应该给我两个值。我的基本问题是我不知道如何用python可以解决的方式来表达方程式。等式中的if statement
使事情变得困难。
在等式之外创建if语句并不是真正的选择。尽管对于这个简单的示例问题可能有意义,但是在实际程序中,有太多不同的交易和交易的不同组合,我不得不写1000+ if statements
,这不是我想要做的。
python大神给出的解决方案
您可以解决大部分可以计算的问题,例如通过二等分法:
def bisection(f, a, b, TOL=0.001, NMAX=100):
"""
Takes a function f, start values [a,b], tolerance value(optional) TOL and
max number of iterations(optional) NMAX and returns the root of the equation
using the bisection method.
"""
n=1
while n<=NMAX:
c = (a+b)/2.0
# decomment to learn more about the process
# print "a=%s\tb=%s\tc=%s\tf(c)=%s"%(a,b,c,f(c))
if f(c)==0 or (b-a)/2.0 < TOL:
return c
else:
n = n+1
if f(c)*f(a) > 0:
a=c
else:
b=c
return None
def solve(y, call_strike, call_premium, n, put_strike, put_premium):
cost = y * call_premium + n * put_premium
def net(fp):
call_profit = max(fp-call_strike, 0)
put_profit = max(put_strike-fp, 0)
tot_profit = call_profit * y + put_profit * n
return tot_profit - cost
return bisection(net, 0, 2 * max(call_strike, put_strike))
if __name__ == '__main__':
# an example...:
print solve(12, 20.0, 3.0, 15, 25.0, 2.0)
参见例如https://gist.github.com/swvist/3775568获取bisection
的原始代码以及其他任意方程数值解的方法。