金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 2767|回复: 18

PEL如何调用vba自定义函数的咨询

[复制链接]

4

主题

25

帖子

25

积分

Rank: 1

等级: 新手上路

注册:
2022-4-5
曾用名:
发表于 2023-4-9 19:30 | 显示全部楼层 |阅读模式
PEL自编函数(基于MACD的开关单)的代码如下

DIFF :=MA(CLOSE,12) - EMA(CLOSE,26);
DEA  :=EMA(DIFF,9);
MACD :=2*(DIFF-DEA);

//程序化交易下单部分
//平空开多条件
if CROSS(MACD,0)=1 then begin
    平空:SELLSHORT(HOLDING<0,1,MARKET);
    开多:BUY(HOLDING=0,1,MARKET);
end

//平多开空条件
if CROSS(0,MACD)=1 then begin
    平多:SELL(HOLDING>0,1,MARKET);
    开空:BUYSHORT(HOLDING=0,1,MARKET);
end

当前持仓:HOLDING,COLORGREEN,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORRED;

-----------------------------------------------------------------------------------------------------------------------------------------------------------------
想改造成如下形式——PEL中的BUY操作将转移到VBA中实现,即自定义一个VBA的公共函数BUY_SELF,由PEL调用BUY_SELF,BUY_SEL中将进行某些指标的数值运算后再决定是否进行买卖操作。
函数SELLSHORT_SELF  SELL_SELF  BUYSHORT_SELF与BUY_SELF结构类似,下文不再出现

伪代码A:
DIFF :=MA(CLOSE,12) - EMA(CLOSE,26);
DEA  :=EMA(DIFF,9);
MACD :=2*(DIFF-DEA);
if CROSS(MACD,0)=1 then begin
    BUY_SELF(HOLDING=0,1,1,0,0,"rb10","sq","",0);        //PEL准备调用vba自定义的函数BUY_SELF
end

当前持仓:HOLDING,COLORGREEN,LINETHICK0;
当前资产:ASSET,NOAXIS,COLORRED;
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
Buy_Self准备定义在 金字塔决策交易系统-工具-VBA工程-Visual Basic工程-模块-Function

伪代码B如下:
Sub Buy_Self(Condition,Type,Vol,Price,StoplmtPrice,Code,Market,AccountID,Valid)
        。。。。。。。。。。
        If Condition Then
            order.OrderQueue = 1
            call order.Sell(Type,Vol,Price,StoplmtPrice,Code,Market,AccountID,Valid)
        End If
End Sub

我要咨询的三个问题如下:
1)能否麻烦老师 将伪代码A与伪代码B翻译成可执行的代码?
2)BUY_SELF是否要在PEL的自定义函数中进行定义?
3)看到网上Buy方法的使用说明中“请不要在PEL的自定义函数中调用该方法”这个提示后,  我疑惑这种PEL调用Buy_Self函数的结构 能否真正实现“开多操作”?

截图202304091919135093.png
回复

使用道具 举报

4

主题

25

帖子

25

积分

Rank: 1

等级: 新手上路

注册:
2022-4-5
曾用名:
 楼主| 发表于 2023-4-9 20:18 | 显示全部楼层
补充一下,本问题咨询 针对的   “图表交易-逐K线模式”
回复

使用道具 举报

34

主题

9006

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2023-4-10 16:41 | 显示全部楼层
vba的自定义函数,早就不维护了。你这类需求,可以考虑通过VBA的【Formula 公式对象】获取到图表窗格中的数据后,由VBA进行处理。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

4

主题

25

帖子

25

积分

Rank: 1

等级: 新手上路

注册:
2022-4-5
曾用名:
 楼主| 发表于 2023-4-10 16:47 | 显示全部楼层
PEL中的BUY操作将转移到VBA中实现,即自定义一个VBA的公共函数BUY_SELF,由PEL调用BUY_SELF,BUY_SEL中将进行某些指标的数值运算后再决定是否进行买卖操作。
回复

使用道具 举报

4

主题

25

帖子

25

积分

Rank: 1

等级: 新手上路

注册:
2022-4-5
曾用名:
 楼主| 发表于 2023-4-10 16:57 | 显示全部楼层
因为主程序在PEL中已经写好(我只能微微改造调用函数名,例如将BUY改为BUY_SELF),现在想利用PEL调用VBA 函数,   使得PEL与VBA结合 如何利用VBA的【Formula 公式对象】可否请老师举个例子呢?

注:VBA是需要相对独立的,而不是嵌入在PEL策略中
回复

使用道具 举报

4

主题

25

帖子

25

积分

Rank: 1

等级: 新手上路

注册:
2022-4-5
曾用名:
 楼主| 发表于 2023-4-10 17:36 | 显示全部楼层
问题背景:

PEL交易策略的编写者A不太懂编程语言,且已经构建的PEL策略较多(这些PEL策略对我不可见),所以已存在的PEL交易策略不能做大改动,只能由编写者A 在函数名上微调(例如将BUY改成BUY_SELF)。

所以 作为各个PEL交易策略下层的   公用函数的 BUY_SELF, SELLSHORT_SELF  SELL_SELF  BUYSHORT_SELF 希望是独立的存在

回复

使用道具 举报

34

主题

9006

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2023-4-10 21:32 | 显示全部楼层
weistock_xw 发表于 2023-4-10 16:47
PEL中的BUY操作将转移到VBA中实现,即自定义一个VBA的公共函数BUY_SELF,由PEL调用BUY_SELF,BUY_SEL中将进 ...

抱歉自定义函数的实现已经超出技术支持的能力范畴。个人能力有效无法帮你

前面给你的方法是基于vba环境进行的。通过vba获得pel的结果去执行的。

如果你还是想基于pel的环境执行策略。弄所谓的自定义函数封装下单函数根本就是多此一举。

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

使用道具 举报

4

主题

25

帖子

25

积分

Rank: 1

等级: 新手上路

注册:
2022-4-5
曾用名:
 楼主| 发表于 2023-4-11 09:29 | 显示全部楼层
如果PEL无法作为上层函数调用下层自定义的VBA函数BUY_SELF,
那我就考虑不使用vba  实现自定义的公共函数BUY_SELF了。


请问我是否能用PEL定义一个公共的函数BUY_SELF,然后被 原PEL交易策略的编写者A 调用该BUY_SELF 呢?
如果可以实现,请 给个PEL BUY_SELF 定义与被调用  的范例吧
回复

使用道具 举报

4

主题

25

帖子

25

积分

Rank: 1

等级: 新手上路

注册:
2022-4-5
曾用名:
 楼主| 发表于 2023-4-11 09:47 | 显示全部楼层
即最终实现在PEL中定义一个公共函数BUY_SELF,可以被多个 “编写者A所编写的PEL交易策略” 进行调用.

注:在一个位置集中定义BUY_SELF是为了 后期版本维护方便,防止存在多个BUY_SELF函数而代码不统一
回复

使用道具 举报

34

主题

9006

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2023-4-11 13:17 | 显示全部楼层
weistock_xw 发表于 2023-4-11 09:29
如果PEL无法作为上层函数调用下层自定义的VBA函数BUY_SELF,
那我就考虑不使用vba  实现自定义的公共函数B ...

抱歉,实现不了。并且你这个想法也有问题。你所谓的下单函数和buy其区别只是名字,功能上没有差异。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 17:54 , Processed in 0.237630 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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