金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 73|回复: 5

实盘图表程序化选了固定轮询+TICK级别刷新时问题

[复制链接]

17

主题

46

帖子

46

积分

Rank: 4

等级: 专业版

注册:
2024-8-27
曾用名:
发表于 2024-10-31 16:47 | 显示全部楼层 |阅读模式
实盘图表程序化选了固定轮询+TICK级别刷新问题举例如下场景:
欧线的某根K线从3000单调递增到3200,由于我是实时触发,我在3100的位置触发开仓,若干根K线后我发现图表上记录的触发位置是3200(即收盘价)而非我的实时触发价。现又假设我的止损为100个点,我希望在欧线从3100跌倒3000时能实时止损,但是在我实际运行过程中,则是由收盘价3200跌至3100时触发止损,与我预期不符,我该如何解决这个问题?


回复

使用道具 举报

1

主题

4260

帖子

4260

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2024-10-31 16:54 | 显示全部楼层
这个问题在图表上是无法处理的。一个问题是在单个K上的价格,除了开盘和收盘,高低价在时间上的顺序是无法体现出来的,其次就是图表程序化的理论信号 始终按照最新的C去计算。

在后台程序化上是可以处理,因为是直接读取账户均价,并且可以利用全局变量记录持仓后的最高最低价,来实现准确的止盈止损。
或者

你直接使用系统自带的止盈止损,它是直接在账户上操作的.
回复

使用道具 举报

17

主题

46

帖子

46

积分

Rank: 4

等级: 专业版

注册:
2024-8-27
曾用名:
 楼主| 发表于 2024-10-31 16:58 | 显示全部楼层
资深技术05 发表于 2024-10-31 16:54
这个问题在图表上是无法处理的。一个问题是在单个K上的价格,除了开盘和收盘,高低价在时间上的顺序是无法 ...

可是后台程序化你们还有一个问题,尚未给我解决,我在这里再描述一遍:
某根K线我的某笔交易应该开仓时,由于我的可用资金不足,这单交易开仓失败,我发现后及时补充资金,然后我就需要一键同步功能,将我应该开而未开的仓实行同步,可是后台程序化并没有这个功能。由于我是全品种高频交易,我不可能人工筛查有哪些品种是应开但由于外部因素而未开的,请问这有什么好的解决方式吗(你别告诉是图表程序化)?
回复

使用道具 举报

1

主题

4260

帖子

4260

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2024-10-31 17:18 | 显示全部楼层
本帖最后由 资深技术05 于 2024-10-31 17:23 编辑

首先程序本身肯定无法判断你这笔开仓是因为资金不足失败的。PEL函数里没有提供相关的支持的。如果你想矫正这种情况带来的仓位,那只能引入新的代码结构。

如果你是常规的指标信号,那么你这种补仓,就只能使用后台调用图表理论持仓的方式。调用到图表理论持仓后再和实际持仓进行对比,来实现仓位的矫正。还有一种方式是后台自己记录理论持仓的方式,但是这种结构非常复杂且不具有稳定性。另外你这里肯定要先调用保证金 算下资金,判断可用资金充足后再去进行下单,否则可能会反复触发无效的开仓动作。  

要注意的是调用图表理论持仓的方式,通常都是调用上一个已经确定的持仓信号来进行矫正。 否则会因为图表信号闪烁 造成反复矫正仓位。

参考这个范例吧,其中ho是定义在被调用指标里的holding:
[PEL] 复制代码
//调用1分钟周期前一周期 以及前前一周前的持仓
hd1:=stkindiex(stklabel,'BOLL布林带交易系统.ho',0,1,-1,500);
hd2:=stkindiex(stklabel,'BOLL布林带交易系统.ho',0,1,-2,500);
//调用15分钟周期前一周期 以及前前一周前的持仓
hd3:=stkindiex(stklabel,'BOLL布林带交易系统.ho',0,3,-1,500);
hd4:=stkindiex(stklabel,'BOLL布林带交易系统.ho',0,3,-2,500);

//上一根k线的理论持仓汇总
ho1:hd1+hd3;
//上上一根K线的理论持仓汇总
ho2:hd2+hd4;


//账户多头持仓
tbuyho:tbuyholdingex('',STKLABEL,1);
//账户空头持仓
tsellho:tsellholdingex('',STKLABEL,1);
//是否有未成交单,返回1表示有未成交
is_order:TGLOBALSUBMITEX(0,'',stklabel,0);

//如果当前品种有挂单或者上一根K理论持仓没有发生变化,就不执行
if is_order or  (ho1=ho2) then exit;
else
BEGIN
        //多头部分                       
        if ho1>=0 and tsellho>0 then tsellshort(1,tsellho,mkt);
        //理论持仓大于0,补仓
        if ho1>0 and ho1>tbuyho then
        BEGIN
                tbuy(1,ho1-tbuyho,mkt);
        END
        //理论持仓大于0,减仓
        if ho1>0 and ho1<tbuyho then
        BEGIN
                tsell(1,tbuyho-ho1,mkt);
        END

        //空头部分
        if ho1<=0 and tbuyho>0 then tsell(1,tbuyho,mkt);
        //理论持仓小于0,补仓
        if ho1<0 and abs(ho1)>tsellho then
        BEGIN
                tbuyshort(1,abs(ho1)-tsellho,mkt);
        END
        //理论持仓小于0,减仓
        if ho1<0 and abs(ho1)<tsellho then
        BEGIN
                tsellshort(1,tsellho-abs(ho1),mkt);
        END                        
END





  

  



回复

使用道具 举报

17

主题

46

帖子

46

积分

Rank: 4

等级: 专业版

注册:
2024-8-27
曾用名:
 楼主| 发表于 2024-10-31 17:27 | 显示全部楼层
资深技术05 发表于 2024-10-31 17:18
首先程序本身肯定无法判断你这笔开仓是因为资金不足失败的。PEL函数里没有提供相关的支持的。如果你想矫正 ...

谢谢老师!我试试
回复

使用道具 举报

1

主题

4260

帖子

4260

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-24
曾用名:
发表于 2024-10-31 17:31 | 显示全部楼层
再补充下,最好同步到正确的保证金率后 计算下保证金:

MarginRatio:=TACCOUNT(41);//多头保证金比率. 这个要把合约信息设置里面的费率设置正确,否则函数取到的值可能是不对的。
bzj:=Close*Multiplier*MarginRatio;//一手保证金占用

在开仓条件里做个资金判断.

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 00:55 , Processed in 0.256806 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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