欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → [求助]期权交易时,把50ETF引入平开仓条件的问题

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有4204人关注过本帖树形打印复制链接

主题:[求助]期权交易时,把50ETF引入平开仓条件的问题

帅哥哟,离线,有人找我吗?
zhuwenjie
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:25 积分:0 威望:0 精华:0 注册:2018/8/2 14:40:11
[求助]期权交易时,把50ETF引入平开仓条件的问题  发帖心情 Post By:2018/8/9 15:45:30    Post IP:101.90.126.144[只看该作者]

谢谢各位老师 小白我在尝试编写关于期权交易的策略
目前先通过图标交易在做测试,过程中遇到两个问题

一个是关于平开仓条件的,虽然交易和监控标的是期权,但是我需要引用510050的历史数据,为的是在做历史测试时,期权K线和50ETF的k线数据的时间同步,我用了callstock函数,不过这个数据似乎只能引用最新的50etf数据,不知道如何是好了

另外一个问题是我的止损条件,我买卖的标的是期权,但是想要根据开仓后,50ETF的变化程度来决定是否止损,这就需要把开仓时50ETF的价格记录下来,设为暂时的常数,然后放到止损的条件函数里去。并且每次开仓时,都需要根据新的开仓点位记录新的50ETF点位,不知道什么函数或者什么样的代码可以做到这样的要求
 
最后,关于第二个问题,不知道后台程序化交易中如何做到?
谢谢!

 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/8/9 17:12:32    Post IP:180.169.30.6[只看该作者]

 callstock  最后一个参数是一个偏移,比如偏移量-1 表示调用上一个指定周期的值。这个周期对应的是callstock里面设置的那个周期。这样就可以调用历史的值了。

如果是图表交易,上次开仓价使用:ENTERPRICE  如果需要更进一步精细的记录,可以考虑使用全局变量来处理 VARIABLE


命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
zhuwenjie
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:25 积分:0 威望:0 精华:0 注册:2018/8/2 14:40:11
  发帖心情 Post By:2018/8/10 9:12:32    Post IP:101.90.125.218[只看该作者]

callstock是读取的标的最新价吗?或者说最后一根K线么?还是读取的每根k线的历史值?我自己试下来似乎是最新值?
另外期权策略交易的是期权标的 enterprice也是期权的成交价 但是策略需要监控的是50ETF的价格。所以也无法实现。。图片点击可在新窗口打开查看
(顺便说一句,=OPOBYPRIRCE函数在图标交易时,如果界面不是期权,而是例如50ETF等标的,它的赋值就会变成-1;在期权标的界面则会正常运行,这是因为跨行情系统所导致的么?)

最后请问老师能示范一下variable在这个策略里的用法思路么 
难点是:我交易的标的是期权,但是需要监控的对象是50ETF 怎么做才能做到测试历史K线时,读取的50ETF数据也是当时的历史数值。
谢谢图片点击可在新窗口打开查看图片点击可在新窗口打开查看


 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/8/10 9:32:02    Post IP:180.169.30.6[只看该作者]

 1.callstock  并不是只能引用最新的数据。 金字塔引用数据是K线对齐的,如果你在日线A品种上引用日线B品种数据,假设没有偏移量,那么A上引用的就是和A k线时间对应的B品种的数据。 引用的数据的情况也是基于你当前K的位置的,这点要明确。
我想知道你代码是怎么写的,你说引用历史数据,具体操作思路是?比如,引用前N个K位置的历史数据?

2.  2楼原先回复有偏差。  你不需要记住某个价格,因为图表上的K线其实就是保存好的历史数据了,这时候思路不是说我保存住某个历史值,因为系统本身就保存了基本数据,而是要考虑如何去调用,引用。 你最好描述下 你引用50ETF的数据具体操作,比如:引用哪个数据 开高低收 成交量? 引用符合什么条件的数据(多少周期内最大,最小?)?





命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2018/8/10 9:45:59    Post IP:180.169.30.6[只看该作者]

callstock引用的是一个序列值,包含历史值。

因为enterprice这个是图表函数,返回的只能是图表历史计算中的开仓价格。如果要你的这个问题,你只能考虑使用后台,后台策略是可以获得实际交易品种的成交价格。

OPOBYPRIRCE函数只适用于期权,你也只能在期权市场下获取对应的数据。  另外后台程序化更加适合做期权自动化交易。



编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
zhuwenjie
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:25 积分:0 威望:0 精华:0 注册:2018/8/2 14:40:11
  发帖心情 Post By:2018/8/10 10:25:06    Post IP:101.90.125.218[只看该作者]

谢谢老师指导!图标交易找到错误在哪里了!
 这是我后台交易尝试写的函数

50c:=CALLSTOCK('qq510050',VTCLOSE,1,0);    //50ETF价格(这样写显示的是最新价么?)
P:rounds(50c1*4,1)/4,linethick0;     //以0.025为区间的50ETF价格四舍五入 取得最接近的平价
if FRACPART(P*10)=0.75 or FRACPART(P*10)=0.25 THEN//取整末尾是25或者75
begin                          //因为行权价都是整数,通过上述整理, 可以求得最接近当前50ETF价格的平价期权
d1:=OPOBYPRIRCE('QQ510050',P+0.125,0,1,1);     //获取比平价期权高的虚值认购期权合约
d2:=OPOBYPRIRCE('QQ510050',P-0.125,1,1,1);     //获取比平价期权低的虚值认沽期权合约
end

else
begin
d1:=OPOBYPRIRCE('QQ510050',P+0.15,0,1,1);     //比平值高150的认购合约
d2:=OPOBYPRIRCE('QQ510050',P-0.15,1,1,1);     //比平值低150的认沽合约
end

if abs(50c-p)>=0.5 and Tholding<>0 then  //当50ETF最新价格距离上一轮成交时的平价超过0.5元时,平仓
begin
Tsellshort(1,100%,lmt,close+0.0005,0,'',d1),pertrader;
Tsellshort(1,100%,lmt,close+0.0005,0,'',d2),pertrader;
end
此处遇到问题,交易判断时,我需要的是上一次满足开仓条件时的P值(平价期权,常数)(但是这个值不是50ETF的历史价格,而是我自己公式求出来的,所以没有历史数据可以提取?),而我公式求得的平价(P值)是变量。所以无法得到正确的平仓条件。
if abs(50c-p)<=0.005 and Tholding=0 then  //当50ETF距离最新平价期权价差小于0.0005时,开仓
BEGIN
Tbuyshort(1,100,lmt,close-0.0005,0,'',d1);
Tbuyshort(1,100,lmt,close-0.0005,0,'',d2);
end



 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/8/10 15:01:04    Post IP:180.169.30.6[只看该作者]

你其实是要求上次满足平仓条件按照下列方式计算出来的P值是吗

50c:=CALLSTOCK('qq510050',VTCLOSE,1,0);    //50ETF价格(这样写显示的是最新价么?)   //这里在最新K上的确是获取最新值
P:rounds(50c1*4,1)/4,linethick0;     //以0.025为区间的50ETF价格四舍五入 取得最接近的平价


命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
zhuwenjie
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:25 积分:0 威望:0 精华:0 注册:2018/8/2 14:40:11
  发帖心情 Post By:2018/8/10 15:09:35    Post IP:101.90.125.218[只看该作者]

是的 具体来说,应该是上次满足 开仓 条件时的P值

谢谢


 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/8/10 15:24:31    Post IP:180.169.30.6[只看该作者]

 GLOBALVARIABLE:rp:=0;//定义一个全局变量

50c:=CALLSTOCK('qq510050',VTCLOSE,1,0);    //50ETF价格(这样写显示的是最新价么?)
P:rounds(50c1*4,1)/4,linethick0;     //以0.025为区间的50ETF价格四舍五入 取得最接近的平价
if FRACPART(P*10)=0.75 or FRACPART(P*10)=0.25 THEN//取整末尾是25或者75
begin                          //因为行权价都是整数,通过上述整理, 可以求得最接近当前50ETF价格的平价期权
d1:=OPOBYPRIRCE('QQ510050',P+0.125,0,1,1);     //获取比平价期权高的虚值认购期权合约
d2:=OPOBYPRIRCE('QQ510050',P-0.125,1,1,1);     //获取比平价期权低的虚值认沽期权合约
end

else
begin
d1:=OPOBYPRIRCE('QQ510050',P+0.15,0,1,1);     //比平值高150的认购合约
d2:=OPOBYPRIRCE('QQ510050',P-0.15,1,1,1);     //比平值低150的认沽合约
end

if abs(50c-p)>=0.5 and Tholding<>0 then  //当50ETF最新价格距离上一轮成交时的平价超过0.5元时,平仓   
begin
Tsellshort(1,100%,lmt,close+0.0005,0,'',d1),pertrader;
Tsellshort(1,100%,lmt,close+0.0005,0,'',d2),pertrader;
end

if abs(50c-p)<=0.005 and Tholding=0 then  //当50ETF距离最新平价期权价差小于0.0005时,开仓
BEGIN
Tbuyshort(1,100,lmt,close-0.0005,0,'',d1);
Tbuyshort(1,100,lmt,close-0.0005,0,'',d2);
rp:=p;      //开仓时赋值或者更新这个值
end

然后就是你在需要的地方调用rp就可以了  这个rp代表上次开仓条件触发时候记录的P值。


命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
zhuwenjie
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:新手上路 帖子:25 积分:0 威望:0 精华:0 注册:2018/8/2 14:40:11
  发帖心情 Post By:2018/8/10 15:37:11    Post IP:101.90.125.218[只看该作者]

谢谢老师! 全局变量函数还不是很懂

这么写是不是运行第一遍的时候 把rp赋值为0 然后每出现一跟新K线再度计算的时候,会判断if是否满足

然后如果条件不满足rp的值就一直不变,直到条件满足才执行一次rp=p对么?


 回到顶部
总数 16 1 2 下一页