金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 2203|回复: 3

你知道如何使用VBA读取等价K线的策略输出吗?

[复制链接]

11

主题

66

帖子

66

积分

等级: 免费版

注册:
2021-6-3
曾用名:
发表于 2021-10-25 17:17 | 显示全部楼层 |阅读模式
我的群里经常有人问我,怎么使用等价K线进行程序化交易,如果使用图表策略交易,直接使用框架,窗格中使用等价k线,加载图表策略就可以实现。


问题是,你如果要进行精细化控制交易细节,比如,你要使用挂单交易,不成交,希望在N秒之内,价格超过你的挂单价M跳,就撤单,自动进行追单,那就无法使用图表策略直接下单了......


想要解决这个问题,使用VBA或Python进行后台程序化交易是必然选择,具体怎么做呢?


第一步,建立你自己的框架,要交易多少个品种就增加几个窗格,加载你交易的合约和策略到窗格,窗格的名字你最好修改为自己能记住的,后面的VBA代码中会用到,窗格上的k线,选择等价k线(这个很关键)
第二步,使用VBA打开框架,获取框架上共有多少个窗格,逐个获取窗格的合约代码、市场代码,下单是需要用到
第三步,判断窗格上有几个公式,使用Grid对象的GetFormulaByIndex()函数,逐个获取公式,得到Formula对象,判断是不是你用于交易的策略,如果是,就使用Formula对象的GetbufData方法获取公式的输出,比如获取策略的持仓信号、信号价格等。
第四步,有了合约、信号,剩下的就是写交易代码了,这个可以参考我以前发布的帖子。


代码示范:(假设框架名称为fraTest,有4个窗格,窗格名称分别为w1,w2,w3,w4,就是要交易4个合约
打开框架使用:Application.ActiveFrame("fraTest")

iCount=fraTest.GridCount     '获取框架fraTest有几个窗格
for i=0 to iCount-1    '逐个读取窗格上的合约及公式输出
    Set Grid=fraTest.GetGridByName("w" &i+1)
    Set Rep=Grid.GetReportData()      '获取窗格上的合约
    sCode=Rep.Label          '合约编码
    sMarket=Rep.MarketName    '市场编码
    nLastPrice=rep.NewPrice                        '获取最新价
    iFormulaCount=Grid.FormulaCount    ’获取窗格上的公式个数
    for j=0 to iFormulaCount-1               '逐个公式读取,判断是不是你用于交易的策略,是的话,就读取该公式的输出
        Set Formula=Grid.GetFormulaByIndex(j)    '这个关键的地方,获取Grid上的公式,得到公式对象

        if Formula.Name<>"MAIN" then     '一般不是MAIN,就是自己的策略,如果有多个策略加载在图表上,最好只保留一个
            iBar=round(Formula.GetBufData("iBar",Formula.DataSize-1),0)     '读取策略的变量输出iBar
            iFlag=Formula.GetBufData("Flag",Formula.DataSize-1)                 '读取策略的变量输出Flag
            '你自己的交易代码段,我就不写了,也无法写,每个人的想法都不一样  
        end if

    next
next
-------------------------------------------------------------------------------
希望能帮到你!想跟我学习VBA策略开发,可以加我wx:guotx-






回复

使用道具 举报

11

主题

66

帖子

66

积分

等级: 免费版

注册:
2021-6-3
曾用名:
 楼主| 发表于 2021-11-6 22:14 | 显示全部楼层
第一行Application.ActiveFrame("fraTest"),前面需要加一个Call
回复

使用道具 举报

45

主题

257

帖子

262

积分

等级: 免费版

注册:
2021-5-20
曾用名:
发表于 2021-11-28 16:26 | 显示全部楼层
艳阳天:VBA 老师,您好。
感谢提供的方法。但是我根据您提供的方法,无法进行交易。
开盘买,收盘卖的等价K交易的例子,我是如此处理的:
1、pel公式加载在等价K框架之上
VARIABLE:t1=0;
qj:=open*bill/10;  //----------bill/10表示幅度
//-------------------------线下代码减少运行,释放资源-------------------
abb:time0-timetot0(dynainfo(207)),nodraw;//K线结束倒计时间(秒)
t:=timetot0(time0)-timetot0(dynainfo(207)),nodraw;//当前时间结束倒计时
akk:=(timetot0(dynainfo(207))-ref(time0,1)),LINETHICK0;//k线的最开始的时间(秒)
cd0:=not(ISLASTBAR);
cd1:=islastbar and  abb>=0 and abb<=1;
cd2:=islastbar and  akk>=0 and akk<=1;
//abs(close-open)>qj&&cd1--------等价K成立且时间恰为周期的最后1秒
//t1=1&&cd2--------等价K开始且时间恰为周期的第1秒内
T1:=if (abs(close-open)>qj&&cd1 ,1,t1=1&&cd2,0,-1);
T0:t1,NODRAW;
buy0:if(C>O&&T1=1,1,0);//等价K成立且时间恰为周期的最后1秒:卖
BP0:if(C<O&&cd2&&T1=0,1,0);//等价K开始且时间恰为周期的第1秒内:买
2、VBA
ibuy0=Formula.GetBufData("buy0",Formula.DataSize-1)  '读取策略的变量输出buy0
call KaiKongDan(nPrice,sCode,sMarket,iOrdVol,sAccount) '调用VBA交易——此为您提供的函数/过程

但是,模拟实盘,没有发出交易单,请老师解答或请举个简单的例子,开盘买,收盘卖的等价K交易的例子,供大家学习。
谢谢

回复

使用道具 举报

11

主题

66

帖子

66

积分

等级: 免费版

注册:
2021-6-3
曾用名:
 楼主| 发表于 2022-7-23 09:53 | 显示全部楼层
在VBA中输出读取到的变量,看看是否正确,只要能读取到,后面的交易问题应该是可以搞定的
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 13:26 , Processed in 0.242259 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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