以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 公式模型编写问题提交 (http://222.73.7.161/bbs/list.asp?boardid=4) ---- 后台程序实现求助 (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=166333) |
-- 作者:f三年 -- 发布时间:2018/11/6 8:56:09 -- 后台程序实现求助 帮忙编写以下程序 后台程序 谢谢 TR=Max(H-L,H-PDC,PDC-L) 其中: TR=真实波幅 H=当日最高价 L=当日最低价 PDC=前一日收盘价 N(即ATR)的计算公式如下(其实就): 前面20天的TR值平均 绝对波动幅度=N*合约每一点所代表的价值 头寸规模单位n=账户的1%/绝对波动幅度 开仓时机:当五日均线>十日均线 且 五日均线>二十日均线 开仓n手做多 当五日均线<十日均线时,平仓 当五日均线<十日均线 且 五日均线<二十日均线 开仓n手做空 当五日均线>十日均线时,平仓 止损为1N |
-- 作者:FireScript -- 发布时间:2018/11/6 9:24:36 -- PDC:REF(C,1); TR1:MAX(h-l,max(h-PDC,PDC-L)); ATR:MA(TR1,20); 绝对波动幅度:ATR*Multiplier; 手数:TASSET*0.01/绝对波动幅度; ma5:ma(c,5); ma10:ma(c,10); ma20:ma(c,20); buycond1:ma5>ma10 and ma5>ma20;//这种开仓条件可能会持续N个周期都能保持,会导致连续多个周期下单,直到条件不满足为止。 sellcond1:ma5<ma10; buycond2:ma5<ma10 and ma5<ma20; sellcond2:ma5>ma10; if BUYCOND1 then tbuy(1,手数,MKT); if sellcond1 then tsell(1,TBUYHOLDING(1),mkt); if BUYCOND2 then tbuyshort(1,手数,MKT); if sellcond2 then tsellshort(1,TBUYHOLDING(1),mkt); 仅供参考。
|
-- 作者:f三年 -- 发布时间:2018/11/6 10:30:44 -- 帮忙修改 帮忙修改成下面这个 TR=Max(H-L,H-PDC,PDC-L) 其中: TR=真实波幅 H=当日最高价 L=当日最低价 PDC=前一日收盘价 N(即ATR)的计算公式如下(其实就): 前面20天的TR值平均 绝对波动幅度=N*合约每一点所代表的价值 头寸规模单位n=账户的1%/绝对波动幅度 开仓时机:当价格突破20天新高的时候开n手做多,当价格突破10天新低的时候平仓 当价格突破20日新低的时候做空,当价格突破10天新高的时候平仓 止损为1N
|
-- 作者:wenarm -- 发布时间:2018/11/6 10:38:49 -- 建议你自己尝试修改,2楼中的代码逻辑已经提供。在你不懂的地方跟帖询问。这样才能有助于提供你的编程能力。 |
-- 作者:f三年 -- 发布时间:2018/11/6 10:44:50 -- 初学者 希望大家多多帮忙 |
-- 作者:wenarm -- 发布时间:2018/11/6 10:47:46 -- 初学者不是做伸手党的理由,策略代码必须自己尝试写才会提高,否者永远只会原地踏步。 你读懂2楼的代码,自然就会改了。
[此贴子已经被作者于2018/11/6 10:49:48编辑过]
|
-- 作者:f三年 -- 发布时间:2018/11/6 11:03:36 -- TR=Max(H-L,H-PDC,PDC-L) 其中: TR=真实波幅 H=当日最高价 L=当日最低价 PDC=前一日收盘价 N(即ATR)的计算公式如下(其实就): 前面20天的TR值平均 绝对波动幅度=N*合约每一点所代表的价值 头寸规模单位n=账户的1%/绝对波动幅度 开仓时机:当价格突破20天新高的时候开n手做多,当价格突破10天新低的时候平仓 当价格突破20日新低的时候做空,当价格突破10天新高的时候平仓 止损为1N 编写下面这样 帮忙检查下哪里有错没有 谢谢 老师 VARIABLE:cc=0; PDC:=REF(C,1); TR1:=MAX(H-L,MAX(H-PDC,PDC-L)); ATR:=MA(TR1,20); 绝对波幅:=ATR*DYNAINFO(209); N:=TASSET*0.01/绝对波幅; h20:=ref(hhv(h,20),1); h10:=ref(hhv(h,10),1); l20:=ref(llv(l,20),1); l10:=ref(llv(l,10),1); kd:=c>h20; pd:=c<l10; kk:=c<l20; pk:=c>h10; if THOLDING>0 and pd then tsell(pd,n,mkt); if THOLDING<0 and pk then tsellshort(pk,n,mkt); if THOLDING=0 and kd then tbuy(kd,n,mkt); if THOLDING=0 and kk then tbuyshort(kk,n,mkt); if tholding>0 and c<DYNAINFO(211)-绝对波幅 then tsell(pd,n,mkt); if tholding<0 and c>DYNAINFO(211)+绝对波幅 then tsellshort(pk,n,mkt); |
-- 作者:f三年 -- 发布时间:2018/11/6 11:13:02 -- buycond1:ma5>ma10 and ma5>ma20;//这种开仓条件可能会持续N个周期都能保持,会导致连续多个周期下单,直到条件不满足为止。 这个汉字提示这种开仓条件可能会持续N个周期都能保持,会导致连续多个周期下单,直到条件不满足为止。是什么意思 ? |
-- 作者:wenarm -- 发布时间:2018/11/6 11:34:47 -- 7楼的代码没问题。但是逻辑上有些需要你自己注意的 1.你目前还是基于图表的处理方式,因为图表不支持锁仓。而后台是支持锁仓的,如果开仓条件变化时,要留意tholding函数的,他返回的是多空的净值。必要时可以使用tbuyholding等函数。 2.你上面的代码目前是基于日线周期处理,不适用日内级别周期。因为“PDC=前一日收盘价”,如果其他周期下,需要特定处理。 3.另外就是你上楼说的现象,通过这种方式会在一定k线范围内重复开仓。(即上穿以后一直到下穿这个区间) 如果希望是在上穿的那个点开仓,可以用 kd:=CROSS(c,h20)表示。代码上穿时的状态。你可以单独调试看下该函数的用法 [此贴子已经被作者于2018/11/6 12:11:59编辑过]
|
-- 作者:f三年 -- 发布时间:2018/11/6 14:53:46 -- 这样修改 您看下 后台程序 VARIABLE:cc=0; PDC:=REF(C,1); TR1:=MAX(H-L,MAX(H-PDC,PDC-L)); ATR:=MA(TR1,20); 绝对波幅:=ATR*DYNAINFO(209); N:=TASSET*0.005/绝对波幅; h20:=ref(hhv(h,20),1); h10:=ref(hhv(h,10),1); l20:=ref(llv(l,20),1); l10:=ref(llv(l,10),1); kd:=CROSS(c,h20); pd:=CROSS(l10,c); kk:=CROSS(l20,c); pk:=cross(c,h10); if THOLDING>0 and pd then tsell(pd,n,mkt); if tsellholding(1)>0 and pk then tsellshort(pk,n,mkt); if THOLDING=0 and kd then tbuy(kd,n,mkt); if tsellholding(1)=0 and kk then tbuyshort(kk,n,mkt); if tholding>0 and c<DYNAINFO(211)-绝对波幅 then tsell(pd,n,mkt); if tsellholding(1)>0 and c>DYNAINFO(211)+绝对波幅 then tsellshort(pk,n,mkt);
|