以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 高级功能研发区 (http://www.weistock.com/bbs/list.asp?boardid=5) ---- 如何通过VBA读写文件 (http://www.weistock.com/bbs/dispbbs.asp?boardid=5&id=95942) |
-- 作者:ma9453 -- 发布时间:2016/4/7 15:26:24 -- 如何通过VBA读写文件 Function SimRecord(Formula,variety,OpType,ss) \'系统会在逐K线模式解释公式时的每个周期都会调用此函数一遍,因此设计时应该注重程序的执行效率,不要重复的执行一些没必要的代码 SimRecord = 0 Open "d:\\tt.txt" For Output as #1 a=1 print #1 , a close #1 End Function 请教一下,建立了一个vba函数,在open的时候编译有错误,提示“编译错误‘1025’,语句未结束” 请问这是什么问题呢 |
-- 作者:yukizzc -- 发布时间:2016/4/7 15:57:15 -- FileSystemObject 建立这个对象来对文本进行操作吧。论坛搜下也有这个范例比较多 http://www.weistock.com/bbs/dispbbs.asp?BoardID=5&ID=90619&skin=0 |
-- 作者:ma9453 -- 发布时间:2016/4/7 17:17:22 -- 多谢您的回复,按照帖子上的方法测试了一下,编译没有问题,但是在回测的时候文件并没有被操作,可能是什么问题呢? |
-- 作者:yukizzc -- 发布时间:2016/4/7 17:26:30 -- 你按照1楼那个方法,自己在d盘建立好testfile.txt 然后运行没反应吗????我这边试过,写入这个文件都是没问题的 你别用自定义函数,直接复制黏贴,然后去启动这样一个操作看下呢? [此贴子已经被作者于2016/4/7 17:41:39编辑过]
|
-- 作者:ma9453 -- 发布时间:2016/4/7 18:03:57 -- Function SimRecord(Formula,variety,OpType,ss) \' \'系统会在逐K线模式解释公式时的每个周期都会调用此函数一遍,因此设计时应该注重程序的执行效率,不要重复的执行一些没必要的代码 SimRecord = 0 MsgBox "测试" set fso = CreateObject("Scripting.FileSystemObject") set f = fso.OpenTextFile("d:\\tt.txt", 8, false) \'第二个参数 2 表示重写,如果是 8 表示追加 f.WriteLine "写入内容并换行" f.Close set f = nothing set fso = nothing End Function 这是宏的代码,单独执行宏对这个代码测试是可以的。 MA1:=MA(CLOSE,A); MA2:=MA(CLOSE,B); 手数:=ss; //交易条件 开多平空条件:=CROSS(MA1,MA2);//开多平空条件 开空平多条件:=CROSS(MA2,MA1);//开空平多条件 EqualFlag := 0; if MA1 = MA2 THEN EqualFlag := 1; //交易系统 平空:SELLSHORT(开多平空条件,手数,MARKET); 平多:SELL(开空平多条件,手数,MARKET); if HOLDING = 0 then begin 开多:BUY(开多平空条件,手数,MARKET); 开空:BUYSHORT(开空平多条件,手数,MARKET); end SimRecord(1,1,1); 当前持仓:HOLDING,COLORGRAY,LINETHICK0; 当前资产:ASSET,NOAXIS,COLORGRAY; 这是策略,在回测的时候,不能正确执行VBA的函数。 |
-- 作者:admin -- 发布时间:2016/4/7 18:09:07 -- VBA的自定义函数要通过公式编辑器左侧的自定义函数栏进行添加的,请确认你是否是通过这个方式添加的 |
-- 作者:ma9453 -- 发布时间:2016/4/7 18:15:10 -- 是按照这个方式添加的 |
-- 作者:马良 -- 发布时间:2016/4/7 19:56:46 -- 函数入口的 测试 这个对话框有弹出么? 或者检查vba引擎有没开启
|
-- 作者:yukizzc -- 发布时间:2016/4/7 21:19:53 -- 如图,就这样放到图表上看看情况呢
|
-- 作者:ma9453 -- 发布时间:2016/4/8 10:21:21 -- SimRecord(1,1,1); MA1:=MA(CLOSE,A); 单独测试simrecord是没问题的,但是增加下面一条语句后,就不能执行simrecord中的代码了(不弹出提示框) |