金字塔决策交易系统

用户名  找回密码
 

微信登录

微信扫一扫,快速登录

帖子
查看: 1695|回复: 5

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

[复制链接]

20

主题

50

帖子

50

积分

Rank: 4

等级: 专业版

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


回复

举报

2

主题

5190

帖子

5190

积分

Rank: 8Rank: 8

等级: 超级版主

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

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

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

举报

20

主题

50

帖子

50

积分

Rank: 4

等级: 专业版

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

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

举报

2

主题

5190

帖子

5190

积分

Rank: 8Rank: 8

等级: 超级版主

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

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

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

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

参考这个范例吧,其中ho是定义在被调用指标里的holding:
[PEL] 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
//调用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





  

  



回复

举报

20

主题

50

帖子

50

积分

Rank: 4

等级: 专业版

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

谢谢老师!我试试
回复

举报

2

主题

5190

帖子

5190

积分

Rank: 8Rank: 8

等级: 超级版主

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

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

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

回复

举报

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

本版积分规则

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

GMT+8, 2025-7-26 02:29 , Processed in 0.144541 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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