【J2】套利

题目描述

套利是利用货币汇率差异将一种货币单位转换成一种以上相同货币单位。例如,假设1美元买入0.5英镑,1英镑买入10.0法国法郎,1法国法郎买入0.21美元。然后,通过转换货币,聪明的交易者可以从1美元开始,买入0.5 * 10.0 * 0.21 = 1.05美元,获利5%。
您的工作是编写一个程序,该程序将货币汇率列表作为输入,然后确定是否可以进行套利。

输入

第一行中,有一个整数n(1 <= n <= 30),代表不同货币的数量。
      接下来的n行分别包含一种货币的名称。名称中不会出现空格(货币名称可能会重复)
       下一行包含一个整数m,代表要遵循的表的长度。最后m行分别包含源货币的名称ci,

代表ci到cj的汇率的实数rij和目标货币的名称cj。没有出现在表中的交换是不可能的

(可能存在同币种不同汇率情况,保留汇率高的情况)

输出

yes或no的格式打印一行,说明是否可以套利。

样例输入

3
USDollar
BritishPound
FrenchFranc
3
USDollar 0.5 BritishPound
BritishPound 10.0 FrenchFranc
FrenchFranc 0.21 USDollar

样例输出

yes

提示;弗洛伊德+map映射

#include<bits/stdc++.h>
#define quickly() ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
#define P 50
#define bet(n,x,y,u) n[x][y]=n[y][x]=u
using namespace std;
int n,m;
bool flag=false;
double profit[P][P],rate;
map<string,int> conversion;
string s1,s2;
void floyd(){
    for(int k=1;k<=n;k++)
        for(int i=1;i<=n;i++)
            for(int j=1;j<=n;j++)
                profit[i][j]=max(profit[i][j],profit[i][k]*profit[k][j]);
}
int main(){
    quickly();
    cin>>n;
    conversion.clear();
    for(int i=1;i<=n;i++){
        cin>>s1;
        conversion[s1]=i;
    }cin>>m;
    for(int i=1;i<=m;i++){
        cin>>s1>>rate>>s2;
        profit[conversion[s1]][conversion[s2]]=rate;
    }floyd();
    for(int i=1;i<=n;i++){
        if(profit[i][i]>1){
            flag=true;
            break;
        }
    }if(flag)cout<<"yes";
    else cout<<"no";
}

根据提供的引用内容,我们可以看出期权套利是一种利用期权市场上的价格差异进行风险套利的策略。在Matlab中,可以使用二叉树模型计算期权价格,也可以使用Black-Scholes公式计算期权价格。此外,勒式期权组合也是一种期权套利策略,可以通过买入或卖出勒式期权来实现套利。 以下是使用Matlab计算期权价格的示例代码: ```matlab % 计算欧式看涨期权价格 S0 = 100; % 标的资产当前价格 K = 100; % 行权价格 r = 0.05; % 无风险利率 T = 1; % 到期时间 sigma = 0.2; % 波动率 % 使用Black-Scholes公式计算期权价格 d1 = (log(S0/K) + (r + sigma^2/2)*T) / (sigma*sqrt(T)); d2 = d1 - sigma*sqrt(T); call_price = S0*normcdf(d1) - K*exp(-r*T)*normcdf(d2); % 使用二叉树模型计算期权价格 N = 100; % 二叉树节点数 dt = T/N; % 时间步长 u = exp(sigma*sqrt(dt)); % 上涨因子 d = 1/u; % 下跌因子 p = (exp(r*dt) - d) / (u - d); % 上涨概率 stock_price = zeros(N+1, N+1); % 存储股票价格 option_price = zeros(N+1, N+1); % 存储期权价格 stock_price(1,1) = S0; for i = 2:N+1 stock_price(i,1) = stock_price(i-1,1) * u; for j = 2:i stock_price(i,j) = stock_price(i-1,j-1) * d; end end option_price(:,N+1) = max(stock_price(:,N+1) - K, 0); for i = N:-1:1 for j = 1:i option_price(j,i) = exp(-r*dt) * (p*option_price(j,i+1) + (1-p)*option_price(j+1,i+1)); end end binomial_price = option_price(1,1); disp(['Black-Scholes计算的期权价格为:', num2str(call_price)]); disp(['二叉树模型计算的期权价格为:', num2str(binomial_price)]); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值