以文本方式查看主题

-  金字塔客服中心 - 专业程序化交易软件提供商  (http://weistock.com/bbs/index.asp)
--  高级功能研发区  (http://weistock.com/bbs/list.asp?boardid=5)
----  请老师帮忙编译下 谢谢了  (http://weistock.com/bbs/dispbbs.asp?boardid=5&id=90794)

--  作者:qq代人发帖
--  发布时间:2016/1/28 14:49:06
--  请老师帮忙编译下 谢谢了
 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函数的
 不过写的比较简单,如果老师比较熟悉期权的话,能完善一下“全市场扫描合约”这样的过程就更好了~
其实就是期权凸性套利了
老师搜一下这个套利原理也可以,就一个公式


--  作者:fly
--  发布时间:2016/1/28 16:35:21
--  

http://www.weistock.com/bbs/dispbbs.asp?boardid=5&Id=12481

matlab相关的,您先看看这个帖子,看是否有帮助。


--  作者:vivi
--  发布时间:2016/1/29 13:17:50
--  
老师您好,怎么用PEL语言实现 "搜寻整个期权市场所有的期权合约,找出其中某三个合约满足 2*C2-C1-C3>0条件的”呢?
--  作者:vivi
--  发布时间:2016/1/29 13:19:59
--  
以下是引用fly在2016/1/28 16:35:21的发言:

http://www.weistock.com/bbs/dispbbs.asp?boardid=5&Id=12481

matlab相关的,您先看看这个帖子,看是否有帮助。

老师您好,怎么用PEL语言实现 "搜寻整个期权市场所有的期权合约,找出其中某三个合约满足 2*C2-C1-C3>0条件的”呢?


--  作者:王锋
--  发布时间:2016/1/29 16:58:48
--  
2*C2-C1-C3>0条件的定义请注明一下