本帖最后由 技术006 于 2024-4-1 10:47 编辑
首先,金字塔不建议程序化初学者在图表程序化交易策略中使用后台程序化函数,因为图表和后台是基于2种不同的工作机制,比如图表的Holding函数,必须要在使用Buy、Buyshort交易函数在图表的历史价位上开仓后才会有正确结果,同理例如后台的TENTERPRICE函数也同样需要TBUY等后台专用交易语句在后台程序化的环境下才能正常使用。如果图表上贸然使用TENTERPRICE函数,将会导致该函数无法返回正常值,而导致图表交易策略没法正常工作。
那么既然2者混用编程会导致问题,金字塔为什么还允许2者同时可以存在一个策略中而不导致编译出错呢?因为金字塔是面向高端投资者的一款程序化交易软件,两者混用编程虽然容易导致问题,但是并不表示不可以,一些特殊场合情况是允许这样操作的,我们主要举例如下:
图表交易策略中使用后台函数
这是目前我们最普遍使用的一种方式,主要原因是图表交易策略使用的是虚拟的持仓,以及借助历史虚拟交易记录的这么一个工作体系,如果您此刻对图表程序化的工作机制还不了解的话,我们强烈建议认真学习一下我们的科普教程贴 深度理解金字塔公式系统的工作机理 。如果我们在实盘交易过程中,需要盘中对我们的实际的持有资金以及实际的仓位进行控制的话,那么图表虚拟交易就显得有些过于不方便,这时我们就可以考虑在代码中加入适量的后台资金管理和仓位函数进行控制,因为后台的函数全部是基于你的实际持仓和资金的。
范例1:
假设我们的图表策略上,如果当前我们已经有实际持仓了,图表策略再出现开仓信号后则不再实际开仓交易。为了满足这个条件,我们必须要使用后台的THOLDING函数,考虑到我们有的是股票的交易客户,股票是T+1模式,当日开仓后由于不能平仓,THOLDING将一直为0,因此我们使用更灵活的TBUYHOLDING(1)来代替,由于后台交易在逐K线模式下仅最后一个K线周期才是有效的,对于我们图表策略来说是不能直接使用的,因为如果将后台的函数带入图表的开平仓条件中,将导致整个图表策略全部失效了,因此我们需要做一些特别处理,也就是历史的信号保护措施,处理方案就是将我们的开仓代码进行一些控制,因为我们的实盘交易是在最后 1-2根K线出现信号后才有效的(走完K线模式是倒数第二根),因此我们只要控制最后的K线按照我们要求出现信号,而不影响历史的交易信号即可。为了能使用后台的函数,我们一般是将后台的这类函数封装成一个独立的用户函数,然后再图表策略中调用。
上述范例要求的代码范例如下:
我们新建一个公式,名称比如是 : MYHOUTAIFUN, 然后公式运行一定要选择为“序列”模式,因为只有这样,我们在逐K线模式引用时才可以在非最后一根K线上使用该函数返回值。
公式代码只有一行:
[PEL] 复制代码 MYHOLDING:TBUYHOLDING(1);
那么接下来我们在实际的图表策略中,可以这样写
[PEL] 复制代码 cond := 开仓条件;
MYHOLDING:= #MYHOUTAIFUN.MYHOLDING#; //引用我们之前设计的公式
if barpos = datacount-1 then //这里是假设用户用的走完K线交易模式,保证是倒数第2根K线有信号
// if barpos = datacount then 如果是固定轮询模式,使用这个代码 保证最后一根K线有信号
begin
buy(cond and MYHOLDING= 0,....);
end;
else
begin
buy(cond and holding = 0,....);
end;
同理,如果我们需要控制开仓时的实际资金,可以同样适用上述的代码逻辑来做。推荐使用我们金字塔新版推出的百分比交易控制符PERTRADER,可以更方便的按照您的实际资金开平仓操作。
注意:
1. 图表策略中使用后台函数时,图表运行模式必须是【逐k线模式】,不能勾选【仅刷最后K线】,否者会造成信号闪烁。
2. 并不是所有的后台函数都可以在图表策略中使用,上述范例中我们使用了TBUYHOLDING后台函数作为范例,但是比如TENTERPRICE函数是没法在图表策略中使用的,原因就是这个函数比如依赖TBUY的后台开仓后才有效。因此我们只能使用与开平仓函数无关的后台函数。
可以在图表策略中的使用后台函数列表: [PEL] 复制代码 TASSET
TAVGENTERPRICE
TAVGENTERPRICEEX
TAVGENTERPRICEEX2
TBUYHOLDING
TBUYHOLDINGEX
TCASH
THOLDING
THOLDING2
TODAYHOLDING
TOPENPROFIT
TOPENPROFITPER
TSELLHOLDING
TSELLHOLDINGEX
除上述后台函数外,其他所有的后台函数将不可在图表策略中使用。但是部分调试函数DEBUGFILE除外。
有关实现半自动交易策略的实现讨论
前面我们谈到,图表上无法使用TENTERPRICE函数,但是如果我们要实现半自动交易,例如手工开仓,程序化策略中进行止损平仓那该怎么办呢?实际上部分后台函数依赖TBUY,TSELL等交易语句的交易信号,如果你是手工开仓,即便其他后台策略也是没法识别的。为了解决这类需求,我们金字塔为客户准备了此类解决方案,参考函数 DYNAINFO(211) - DYNAINFO(218) 这8个函数,这8个函数无论图表还是后台,均可以识别,没有使用限制(图表交易仍然需要像上述范例1那样做好历史信号保护)。
在后台策略中使用图表交易函数
所有图表交易函数均不可以在后台策略中独立使用,必须要在后台策略中使用buy,sell等图表虚拟交易函数一起使用,一般后台策略中使用图表策略的情况不多,一般体现在后台多个策略同时交易一个品种,为了相互策略之间的持仓互不干扰,因此正好可以利用图表交易虚拟持仓的便利性实现这个需求。
有关这方面的讨论内容,金字塔论坛已经有很多,建议参考:
简单图表策略改后台代码
https://www.weistock.com/bbs/forum.php?mod=viewthread&tid=18676
“后台下单模板”,可用于各种模型
https://www.weistock.com/bbs/forum.php?mod=viewthread&tid=362(见六楼)
对于在策略编写时弹出图表和后台策略混用的警告窗口,
若需要禁止部分提示在代码中的最前面加入如下语句即可:
[PEL] 复制代码 WARNING_DISABLE:9; //禁止在图表和后台策略混合编写时弹出提示
|