金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 6023|回复: 26

读取期权各档位的信息

[复制链接]

60

主题

200

帖子

200

积分

等级: 免费版

注册:
2021-6-24
曾用名:
发表于 2023-5-5 17:35 | 显示全部楼层 |阅读模式
请教期权如何读取全部档位的信息,比如2023年5月到期的50etf期权,每一个行权价对应的最新价、总量、持仓量、时间价值等信息?目的是要选出交易量最大和第二大的合约。
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-5-6 08:49 | 显示全部楼层
这个目前做不了。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

60

主题

200

帖子

200

积分

等级: 免费版

注册:
2021-6-24
曾用名:
 楼主| 发表于 2023-5-6 11:20 | 显示全部楼层
技术009 发表于 2023-5-6 08:49
这个目前做不了。

理解。那再请教下老师,程序怎么选合约呢? 需要在程序中手工输入明确的合约信息吗? 比如300ETF2305-C-4100,假设4100为虚值一档。程序能不能自己识别平值、虚值一档、虚值二挡。因为平值、虚一、虚二会随着现货ETF的波动而发生位移,假设我就只做虚值一档,而每次发成位移后都需要手工调整行权价,显然是不科学的
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-5-6 13:05 | 显示全部楼层
本帖最后由 技术009 于 2023-5-6 13:07 编辑

前面那个需求应该也是可以的,就是略微有点麻烦。
需要使用OPTIONSIZE  和 OPTIONLABEL 函数。
OPTIONSIZE函数获取指定标 ,指定月份,认沽/认购/全部  的合约的数量
然后有OPTIONLABEL 去获取品种代码

SIZE:OPTIONSIZE('QA159919',2306,0);
R:OPTIONLABEL(1);

然后你那个需求“目的是要选出交易量最大和第二大的合约。”   这类需求参考这个帖子:https://www.weistock.com/bbs/for ... 909&page=1#pid41104

这里的“4.3 获取当前合约成交量排名结果(返回对应的月份)”    不同地方在于 一般期货合约是需要拼接出合约代码的,你这里是不需要的。 直接用循环做应该就行了。
月份,标的代码,认沽认购 都需要你自己指定好。
[PEL] 复制代码






INPUT:N(4,1,12,1);//需要获取的排序位数,如N=4,默认最终获取前四名的数值结果。

SIZE:OPTIONSIZE('QA159919',2306,1);//合约数量决定了后面合约数组的长度

VARIABLE:volArr[SIZE]:=0,sortArr[N]:=0;//volArr 成交量数组;sortArr 排序结果数组,默认长度是4

 

 
if ISLASTBAR then //将成交量填充到数组里面去. 这里可以自行调整,可以是成交量也可以是其他的什么值,自行选择处理即可。
begin
for j=1 to SIZE do
begin
code:=OPTIONLABEL(j);//code就是合约代码        
vox:=CALLSTOCK(code,vtvol,6,0);
volArr[j]:=if(vox>=0,vox,0);//不活跃品种,获取到的成交量可能是负值,这里处理下确保没有负值。
end               
end
 
 
if ISLASTBAR then //利用线性函数取最大成交量的索引(就是月份数值),每次取值完成后 可以把这个最大值重置为0,这样可以依次获取成交量最大的前几名了。
begin
for j=1 to N do
begin
index:=MFAMAX(volArr,SIZE);
sortArr[j]:=index;
volArr[index]:=0;
 
end
end
 
x1:sortArr[1];//第一的索引,按照索引再去获取合约代码即可
x2:sortArr[2];//第二的索引
x3:sortArr[3];
x4:sortArr[4];

//测试输出
EXPLAIN(ISLASTBAR,OPTIONLABEL(x1));
EXPLAIN(ISLASTBAR,OPTIONLABEL(x2));



截图202305061305245551.png
截图202305061305426387.png

结果应该是OK的。你自己再测测看。

金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

60

主题

200

帖子

200

积分

等级: 免费版

注册:
2021-6-24
曾用名:
 楼主| 发表于 2023-5-6 13:24 | 显示全部楼层
技术009 发表于 2023-5-6 13:05
前面那个需求应该也是可以的,就是略微有点麻烦。
需要使用OPTIONSIZE  和 OPTIONLABEL 函数。
OPTIONSIZ ...

好的,我先摸索下,不明白再回来请教您!
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-5-6 14:20 | 显示全部楼层
至于虚一,虚二这种也只能利用循环了。

[PEL] 复制代码

bcode:=OPTIONINFO(  1);//标合约代码
EXPLAIN(ISLASTBAR,bcode);
bprice:CALLSTOCK(bcode,vtCLOSE,6,0);//标的最新日线收盘价


//指定 月份,方向
SIZE:OPTIONSIZE(bcode,2306,1);//合约数量决定了后面合约数组的长度
VARIABLE:pArr[SIZE+1]:=0;//pArr 行权价数组;

 
 
if BARPOS=1 then //将行权价填充到数组里面去. 
begin
for j=1 to SIZE do
begin
code:=OPTIONLABEL(j);//code就是合约代码        
p:=OPTIONINFO2(5,code);
pArr[j]:=if(p>=0,p,0);//
end               
end

pArr[SIZE+1]:=bprice;//标的价格塞到数组最后面去


index:HOD2(pArr,0,bprice);//标的价格 在行权价中的排名结果


v1:LARGE(parr,size+1,index-1);//虚一档行权价
v2:LARGE(parr,size+1,index-2);//虚二档行权价
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

60

主题

200

帖子

200

积分

等级: 免费版

注册:
2021-6-24
曾用名:
 楼主| 发表于 2023-6-7 13:53 | 显示全部楼层
技术009 发表于 2023-5-6 14:20
至于虚一,虚二这种也只能利用循环了。

[mw_shl_code=pel,true]

数组确实非常复杂,不拜3个师傅自己真搞不懂。
回复

使用道具 举报

60

主题

200

帖子

200

积分

等级: 免费版

注册:
2021-6-24
曾用名:
 楼主| 发表于 2023-6-7 13:56 | 显示全部楼层
唐某某 发表于 2023-6-7 13:53
数组确实非常复杂,不拜3个师傅自己真搞不懂。

VARIABLE:pArr[SIZE+1]:=0;//数组内的元素+1的作用是什么呢?
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-6-7 13:58 | 显示全部楼层
因为要和具体标的ETF价格对比啊。所以你要给etf的价格一个占位啊。不能只有行权价。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

60

主题

200

帖子

200

积分

等级: 免费版

注册:
2021-6-24
曾用名:
 楼主| 发表于 2023-6-7 14:04 | 显示全部楼层
技术009 发表于 2023-5-6 14:20
至于虚一,虚二这种也只能利用循环了。

[mw_shl_code=pel,true]

if BARPOS=1 then  begin//意思是从系列里面的第一根K开始补充行权价吗?
for J=1 to SIZE do  //J=1是什么?,遍历从J1到SIZE里面的值。J是个变量名可以随意改的吧?比如改成i=1 。只是改了后面的pArr[J]就要改成pArr吧?
pArr[SIZE+1]:=bprice;//是把每根K的收盘价赋值给数组内的每个元素吧?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-6-15 02:19 , Processed in 0.150058 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表