w=windmatlab; %连接万德
Feb_list_call=w.wset('OptionChain','date=20160127;us_code=510050.SH;option_var=510050OP.SH;month=201602;call_put=call;field=option_code'); %读取2月认购合约代码
n=length(Feb_list_call);
interval=0; %设置合约间隔
fee=12; %策略固定费用
pos=0; %开平仓标识,1为开,0为平
SUMMARY=cell(1,9); %设置输出变量title
SUMMARY{1,1}='时间';SUMMARY{1,2}='低行权价合约代码';SUMMARY{1,3}='低行权价合约价格';SUMMARY{1,4}='居中行权价合约代码';SUMMARY{1,5}='居中行权价合约价格';SUMMARY{1,6}='高行权价合约代码';SUMMARY{1,4}='高行权价合约价格';SUMMARY{1,5}='浮动盈亏';SUMMARY{1,6}='开平标识';
summary=[];
t1=datenum('2015-12-03 09:30:00');
t2=datenum('2015-12-03 11:30:00');
t3=datenum('2015-12-03 13:00:00');
t4=datenum('2015-12-03 14:32:00');
starttimenum1=rem(t1,1);
endtimenum1=rem(t2,1);
starttimenum2=rem(t3,1);
endtimenum2=rem(t4,1);
while (rem(now,1)>=starttimenum1&&rem(now,1)<=endtimenum1)||(rem(now,1)>=starttimenum2&&rem(now,1)<=endtimenum2)
for interval=0:fix((n-3)/2)
for i=1:n-(interval*2+2)
Price=w.wsq(Feb_list_call,'rt_bid1,rt_ask1'); %读取实时行情价格
T=w.wsq('510050.SH','rt_time'); %读取时间
if pos>0 %若有开仓
C2_call_buy=Price(i+interval,2); %记录中间行权价合约价格
C2_call_code=Feb_list_call(i+interval); %记录中间行权价合约代码
C1_call_sell=Price(i,1); %记录低行权价合约价格
C1_call_code=Feb_list_call(i); %记录低行权价合约代码
C3_call_sell=Price(i+2*interval,1); %记录高行权价合约价格
C3_call_code=Feb_list_call(i+2*interval,1); %记录高行权价合约代码
Profit_or_Loss=C1_call_sell-C1_call_buy+C2_call_sell-C2_call_buy+C3_call_sell-C3_call_buy; %记录浮动盈亏
if Price(i+interval,2)-0.5*Price(i,1)-0.5*Price(i+2*interval,1)-fee<0 %若满足平仓条件
pos=0; %更新pos
end
summary=[summary;T,C1_call_code,C1_sell,C2_call_code,C2_buy,C3_call_code,C3_sell,Profit_or_Loss,pos]; %记录行情
end
if pos==0 && Price(i+interval,1)-0.5*Price(i,2)-0.5*Price(i+2*interval,2)-fee>0 %若满足开仓条件
pos=1; %更新pos
C2_call_sell=Price(i+interval,1); %同上
C2_call_code=Feb_list_call(i+interval);
C1_call_buy=Price(i,2);
C1_call_code=Feb_list_call(i);
C3_call_buy=Price(i+2*interval,2);
C3_call_code=Feb_list_call(i+2*interval,1);
Profit_or_Loss=0; %开仓时浮动盈亏为0
summary=[summary;T,C1_call_code,C1_call_buy,C2_call_code,C2_call_sell,C3_call_code,C3_call_buy,Profit_or_Loss,pos]; %记录行情
end
end
interval=interval+1; %更新合约间隔
end
end
S=num2cell(summary); %修改矩阵类型
SUMMARY=[SUMMARY;S];
就是随便写了一个简单的认购期权凸性套利的策略的例子,主要是想看看PEL是怎么实现这些matlab函数的
不过写的比较简单,如果老师比较熟悉期权的话,能完善一下“全市场扫描合约”这样的过程就更好了~
老师搜一下这个套利原理也可以,就一个公式
老师您好,怎么用PEL语言实现 "搜寻整个期权市场所有的期权合约,找出其中某三个合约满足 2*C2-C1-C3>0条件的”呢?
老师您好,怎么用PEL语言实现 "搜寻整个期权市场所有的期权合约,找出其中某三个合约满足 2*C2-C1-C3>0条件的”呢? |