金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 4397|回复: 30

请老师帮忙加一下开平仓

[复制链接]

35

主题

175

帖子

175

积分

Rank: 2

等级: 标准版

注册:
2023-10-17
曾用名:
发表于 2024-7-25 16:53 | 显示全部楼层 |阅读模式
老师好,文华过来的,有些代码不熟悉,能否帮我修正一下,谢谢,策略做了调整如下:
VV:=10;

STH:=REF(H,2)>REF(H,3)&&REF(H,2)>=REF(H,1)&&REF(H,2)>=H;
STL:=REF(L,2)<REF(L,3)&&REF(L,2)<=REF(L,1)&&REF(L,2)<=L;

EE:=HHV(H,TODAYBAR)>REF(MAX(C,VALUEWHEN(TODAYBAR=1,O)),TODAYBAR)&&EXIST(STL,TODAYBAR)&&EXIST(STH,TODAYBAR)&&VALUEWHEN(STH,REF(H,2)>REF(VALUEWHEN(STH,REF(H,2)),1))&&REF(L,2)<VALUEWHEN(STL,REF(L,2));
FF:=LLV(L,TODAYBAR)<REF(MIN(C,VALUEWHEN(TODAYBAR=1,O)),TODAYBAR)&&EXIST(STL,TODAYBAR)&&EXIST(STH,TODAYBAR)&&VALUEWHEN(STL,REF(L,2)<REF(VALUEWHEN(STL,REF(L,2)),1))&&REF(H,2)>VALUEWHEN(STH,REF(H,2));
EEX:=HHV(H,TODAYBAR)>REF(MAX(C,VALUEWHEN(TODAYBAR=1,O)),TODAYBAR)&&EXIST(STL,TODAYBAR)&&EXIST(STH,TODAYBAR)&&STL&&VALUEWHEN(STH,REF(H,2)>REF(VALUEWHEN(STH,REF(H,2)),1))&&REF(L,2)<REF(VALUEWHEN(STL,REF(L,2)),1);
FFX:=LLV(L,TODAYBAR)<REF(MIN(C,VALUEWHEN(TODAYBAR=1,O)),TODAYBAR)&&EXIST(STL,TODAYBAR)&&EXIST(STH,TODAYBAR)&&STH&&VALUEWHEN(STL,REF(L,2)<REF(VALUEWHEN(STL,REF(L,2)),1))&&REF(H,2)>REF(VALUEWHEN(STH,REF(H,2)),1);

EEP:=C>VALUEWHEN(EE||EEX,VALUEWHEN(STH,REF(H,2)))+MINDIFF&&COUNT(C>VALUEWHEN(EE||EEX,VALUEWHEN(STH,REF(H,2)))+MINDIFF,BARSLAST(EE||EEX))=1;
FFP:=C<VALUEWHEN(FF||FFX,VALUEWHEN(STL,REF(L,2)))-MINDIFF&&COUNT(C<VALUEWHEN(FF||FFX,VALUEWHEN(STL,REF(L,2)))-MINDIFF,BARSLAST(FF||FFX))=1;


KD:=FF||FFX;//开多条件
PD:=FFP;    //平多反手
MK:=EE||EEX;//开空条件
PK:=EEP;    //平空反手

KDTJ:=BUY(KD AND HOLDING=0,VV,MARKET);                        //开多信号
MKTJ:=BUYSHORT(MK AND HOLDING=0,VV,MARKET);                   //开空信号


能否增加一个平仓反手的操作(平多开空,平空开多,条件为:pd和pk)。
因为是日内交易策略能否增加一个满足早上9点开盘后才开始交易(夜盘只参与信号计算,不开仓),下午收盘前5分钟清全部方向仓。
一个固定值止损:10个mindiff,止盈条件为:盈利15个mindiff后回撤30%平仓。

谢谢。
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2024-7-25 17:20 | 显示全部楼层
[PEL] 复制代码
vv:=10;

sth:=ref(h,2)>ref(h,3)&&ref(h,2)>=ref(h,1)&&ref(h,2)>=h;
stl:=ref(l,2)<ref(l,3)&&ref(l,2)<=ref(l,1)&&ref(l,2)<=l;

ee:=hhv(h,todaybar)>ref(max(c,valuewhen(todaybar=1,o)),todaybar)&&exist(stl,todaybar)&&exist(sth,todaybar)&&valuewhen(sth,ref(h,2)>ref(valuewhen(sth,ref(h,2)),1))&&ref(l,2)<valuewhen(stl,ref(l,2));
ff:=llv(l,todaybar)<ref(min(c,valuewhen(todaybar=1,o)),todaybar)&&exist(stl,todaybar)&&exist(sth,todaybar)&&valuewhen(stl,ref(l,2)<ref(valuewhen(stl,ref(l,2)),1))&&ref(h,2)>valuewhen(sth,ref(h,2));
eex:=hhv(h,todaybar)>ref(max(c,valuewhen(todaybar=1,o)),todaybar)&&exist(stl,todaybar)&&exist(sth,todaybar)&&stl&&valuewhen(sth,ref(h,2)>ref(valuewhen(sth,ref(h,2)),1))&&ref(l,2)<ref(valuewhen(stl,ref(l,2)),1);
ffx:=llv(l,todaybar)<ref(min(c,valuewhen(todaybar=1,o)),todaybar)&&exist(stl,todaybar)&&exist(sth,todaybar)&&sth&&valuewhen(stl,ref(l,2)<ref(valuewhen(stl,ref(l,2)),1))&&ref(h,2)>ref(valuewhen(sth,ref(h,2)),1);

eep:=c>valuewhen(ee||eex,valuewhen(sth,ref(h,2)))+mindiff&&count(c>valuewhen(ee||eex,valuewhen(sth,ref(h,2)))+mindiff,barslast(ee||eex))=1;
ffp:=c<valuewhen(ff||ffx,valuewhen(stl,ref(l,2)))-mindiff&&count(c<valuewhen(ff||ffx,valuewhen(stl,ref(l,2)))-mindiff,barslast(ff||ffx))=1;


kd:=ff||ffx;//开多条件
pd:=ffp;    //平多反手
mk:=ee||eex;//开空条件
pk:=eep;    //平空反手

tcon:time>130000 and time<=185500;//时间大于北京时间9点(金字塔时间130000),小于145500(金字塔时间185500)

//有空头时候才触发反手
if pk and holding<0 then 
begin 
sellshort(kd,holding,market);
反手开多:buy(tcon,vv,market);  
end 

buy(kd and holding=0 and tcon,vv,market);  

//有多头时候才触发反手
if pd and holding>0 then 
begin 
sell(mk,holding,market);    
buyshort(tcon,vv,market);      
end 

buyshort(mk and holding=0 and tcon,vv,market);                   //开空信号



多止损:sell(c<avgenterprice-10*mindiff,holding,market);
空止损:sellshort(c>avgenterprice+10*mindiff,holding,market);


H1:=HHV(H,ENTERBARS+1);//开仓后最高价
L1:=LLV(L,ENTERBARS+1);

maxprofit:if(holding>0,h1-AVGENTERPRICE,AVGENTERPRICE-l1);//开仓后最大盈利(价差)
currentprofit:if(holding>0,c-AVGENTERPRICE,AVGENTERPRICE-c);//当前浮动盈亏(价差)

if maxprofit>=15*MINDIFF and  currentprofit<maxprofit*0.7 and ENTERBARS>=0 then 
begin
回撤平多:sell(1,holding,market);
回撤平空:sellshort(1,holding,market);   	 
end 


tq:=60*5;//提前的秒数
abb:=remainingtime(closetime(0))<=tq;
if abb then begin
收盘平多:sell(1,holding,market);
收盘平空:sellshort(1,holding,market);     
end
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

35

主题

175

帖子

175

积分

Rank: 2

等级: 标准版

注册:
2023-10-17
曾用名:
 楼主| 发表于 2024-7-25 17:45 | 显示全部楼层
谢谢老师,我再请教一个问题,就是如何一出信号就开平仓,不用等k线走完,我该怎么设置?
回复

使用道具 举报

35

主题

175

帖子

175

积分

Rank: 2

等级: 标准版

注册:
2023-10-17
曾用名:
 楼主| 发表于 2024-7-25 22:50 | 显示全部楼层
老师您好,我这个策略是从一个指标修改而来,目前我进行回测发现反手没有任何触发,(即eep:=c>valuewhen(ee||eex,valuewhen(sth,ref(h,2)))+mindiff&&count(c>valuewhen(ee||eex,valuewhen(sth,ref(h,2)))+mindiff,barslast(ee||eex))=1;
ffp:=c<valuewhen(ff||ffx,valuewhen(stl,ref(l,2)))-mindiff&&count(c<valuewhen(ff||ffx,valuewhen(stl,ref(l,2)))-mindiff,barslast(ff||ffx))=1;),下面的附图为反手的逻辑,开空仓前的sth点,老师能帮我看看哪里出了问题了吗?万分谢谢


补充内容 (2024-7-25 23:26):
所有多单开仓或反手的止损点都是前期的stl-1,空单为开仓点的前一个sth+1.谢谢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号? 微信登录

x
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2024-7-26 09:19 | 显示全部楼层
t1: c>valuewhen(ee||eex,valuewhen(sth,ref(h,2)))+mindiff;
t2:count(c>valuewhen(ee||eex,valuewhen(sth,ref(h,2)))+mindiff,barslast(ee||eex))=1;

你看下t2这个条件一直没有满足的情况,你之前就是这么写的??
eep这个条件工作人员是直接复制使用的,是不是你原本这里写的就是错的
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

35

主题

175

帖子

175

积分

Rank: 2

等级: 标准版

注册:
2023-10-17
曾用名:
 楼主| 发表于 2024-7-26 11:35 | 显示全部楼层
是的,这不是工作人员的问题,是我写的,我本来写的是个划线标注止损点,转为量化的止损信号出现了问题,能否请工作人员帮忙修改一下。

补充内容 (2024-7-26 11:44):
逻辑:多单开仓的前一个最近的stl下1跳止损,空单开仓的前一个最近的sth上1跳止损。
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2024-7-26 13:16 | 显示全部楼层
vv:=10;

sth:=ref(h,2)>ref(h,3)&&ref(h,2)>=ref(h,1)&&ref(h,2)>=h;
stl:=ref(l,2)<ref(l,3)&&ref(l,2)<=ref(l,1)&&ref(l,2)<=l;

ee:=hhv(h,todaybar)>ref(max(c,valuewhen(todaybar=1,o)),todaybar)&&exist(stl,todaybar)&&exist(sth,todaybar)&&valuewhen(sth,ref(h,2)>ref(valuewhen(sth,ref(h,2)),1))&&ref(l,2)<valuewhen(stl,ref(l,2));
ff:=llv(l,todaybar)<ref(min(c,valuewhen(todaybar=1,o)),todaybar)&&exist(stl,todaybar)&&exist(sth,todaybar)&&valuewhen(stl,ref(l,2)<ref(valuewhen(stl,ref(l,2)),1))&&ref(h,2)>valuewhen(sth,ref(h,2));
eex:=hhv(h,todaybar)>ref(max(c,valuewhen(todaybar=1,o)),todaybar)&&exist(stl,todaybar)&&exist(sth,todaybar)&&stl&&valuewhen(sth,ref(h,2)>ref(valuewhen(sth,ref(h,2)),1))&&ref(l,2)<ref(valuewhen(stl,ref(l,2)),1);
ffx:=llv(l,todaybar)<ref(min(c,valuewhen(todaybar=1,o)),todaybar)&&exist(stl,todaybar)&&exist(sth,todaybar)&&sth&&valuewhen(stl,ref(l,2)<ref(valuewhen(stl,ref(l,2)),1))&&ref(h,2)>ref(valuewhen(sth,ref(h,2)),1);

eep:=c>valuewhen(sth,close)+1*mindiff;
ffp:=c<valuewhen(stl,close)-1*mindiff;


kd:=ff||ffx;//开多条件
pd:=ffp;    //平多反手
mk:=ee||eex;//开空条件
pk:=eep;    //平空反手

tcon:time>130000 and time<=185500;//时间大于北京时间9点(金字塔时间130000),小于145500(金字塔时间185500)

//有空头时候才触发反手
if pk and holding<0 then
begin
sellshort(kd,holding,market);
反手开多:buy(tcon,vv,market);  
end

buy(kd and holding=0 and tcon,vv,market);  

//有多头时候才触发反手
if pd and holding>0 then
begin
sell(mk,holding,market);   
buyshort(tcon,vv,market);      
end

buyshort(mk and holding=0 and tcon,vv,market);                   //开空信号



多止损:sell(c<avgenterprice-10*mindiff,holding,market);
空止损:sellshort(c>avgenterprice+10*mindiff,holding,market);


H1:=HHV(H,ENTERBARS+1);//开仓后最高价
L1:=LLV(L,ENTERBARS+1);

maxprofit:if(holding>0,h1-AVGENTERPRICE,AVGENTERPRICE-l1);//开仓后最大盈利(价差)
currentprofit:if(holding>0,c-AVGENTERPRICE,AVGENTERPRICE-c);//当前浮动盈亏(价差)

if maxprofit>=15*MINDIFF and  currentprofit<maxprofit*0.7 and ENTERBARS>=0 then
begin
回撤平多:sell(1,holding,market);
回撤平空:sellshort(1,holding,market);        
end


tq:=60*5;//提前的秒数
abb:=remainingtime(closetime(0))<=tq;
if abb then begin
收盘平多:sell(1,holding,market);
收盘平空:sellshort(1,holding,market);     
end
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2024-7-26 13:16 | 显示全部楼层
eep:=c>valuewhen(sth,close)+1*mindiff;
ffp:=c<valuewhen(stl,close)-1*mindiff;


这个表示取上次sth时候价格然后+1跳
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

35

主题

175

帖子

175

积分

Rank: 2

等级: 标准版

注册:
2023-10-17
曾用名:
 楼主| 发表于 2024-7-26 14:12 | 显示全部楼层
谢谢老师,请问老师是开仓的信号出来后前么最近的一次sth或stl吗?
[PEL] 复制代码
eep:=c>valuewhen(sth,close)+1*mindiff;
ffp:=c<valuewhen(stl,close)-1*mindiff;
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2024-7-26 14:19 | 显示全部楼层
不是,这个就是取最近sth时候的价格
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-23 20:31 , Processed in 0.118031 second(s), 23 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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