以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://www.weistock.com/bbs/index.asp) -- 公式模型编写问题提交 (http://www.weistock.com/bbs/list.asp?boardid=4) ---- 请问做多止损后如行情再次上涨,如何编写语句在上一次开多的价格入场? (http://www.weistock.com/bbs/dispbbs.asp?boardid=4&id=2597) |
-- 作者:SOS -- 发布时间:2010/8/24 11:35:53 -- 请问做多止损后如行情再次上涨,如何编写语句在上一次开多的价格入场? 如下面的例子,假设buy开多后如遇sell止损,在没有sell平多之前如何在价格再次涨上第一次开多的价格时入场呢?应该如何写语句?这里假设的是单一策略做一个品种,第一次的开多价格是AVGENTERPRICE,也就是说止损后价格再次回到AVGENTERPRICE按这个价格重新入场,并且设置相同的止损,直到平多的信号完成。 如: BK:=CROSS(H, hhv(ref(h,1),20)); SK:=CROSS(llv(ref(l,1), 20),L); Price:=AVGENTERPRICE;//持仓价位
SELLSHORT(BK and 持仓<0,持仓,market); SELLSHORT(持仓<0,持仓,Stopr,Price+NS);//NS为止损点数 BUY(BK and NOT(TYPE(1)=1),30%,market);
SELL(SK and 持仓>0,持仓,market); SELL(持仓>0,持仓,Stopr,Price-NS);//NS为止损点数 BUYSHORT(SK and NOT(TYPE(1)=3),30%,market); |
-- 作者:董小球 -- 发布时间:2010/8/24 13:43:49 -- ENTERPRICE可以用这个函数娶到上次开仓价格,如果是后台交易指标的话 可以用TENTERPRICE |
-- 作者:fly -- 发布时间:2010/8/24 13:48:43 -- 试试这个
把你开仓时的AVGENTERPRICE记录下来,假设为P1=AVGENTERPRICE, 判断如果SELL止损成功,就用BUY(1,30%,STOPR,P1)挂一个P1价位的多单,会在价格再次上涨>=p1时,以当时的对手价下单。 判断如果HOLDING>0,设置相同止损,就用你自己的语句SELL(持仓>0,持仓,Stopr,Price-NS);//NS为止损点数 |
-- 作者:董小球 -- 发布时间:2010/8/24 13:49:44 -- 如果做两个方向的交易的话 需要用全局变量来操作了,定义一个全局变量,然后下单后用全局变量记录下单价格用以提供后面的调用,具体参考 EXTGBDATASET 和 EXTGBDATA 函数的调用,variable定义的使用 |
-- 作者:SOS -- 发布时间:2010/8/24 16:24:29 -- 按3楼老师方法弄了半天,总感觉不对劲,请老师看看这样是不是正确
BK:=CROSS(H, hhv(ref(h,1),20)); Price:=AVGENTERPRICE;//持仓价位
SELLSHORT(BK and 持仓<0,持仓,market); IF low<price-NS AND 持仓>0 then
SELL(SK and 持仓>0,持仓,market); BUYSHORT(SK and NOT(TYPE(1)=3),30%,market);
IF high>price+NS AND 持仓<0 then [此贴子已经被作者于2010-8-24 16:24:59编辑过]
|
-- 作者:fly -- 发布时间:2010/8/24 16:55:59 -- 只显示变量数值 这样的你试试 BK:=CROSS(H, hhv(ref(h,1),20));
if BK and time>090100 and time<145500 then
price1:=AVGENTERPRICE; if holding=0 then BUY(1,30%,STOPR,price1);
price2:=AVGENTERPRICE; |
-- 作者:fly -- 发布时间:2010/8/24 17:09:28 -- 上海期货交易所的合约,模拟的支持STOP及STOPR,所以,最好测试该市场的合约。
我的主要改动有3 1.每次开仓,都先判断是否有持仓。 原因:金字塔,同一个合约,自动化交易时,你不能同时持有多仓和空仓。 如果非要两方向都要,就象4楼说的那样,要用全局变量来操作.
2.把你下单时的 市价下单---都改成了本周期限价下单。 原因:模拟的时候,最好不要用市价下单,会出问题。
我改的不足之处,请高手也帮忙修改 |
-- 作者:SOS -- 发布时间:2010/8/24 23:16:17 -- 老师,在图表上测试了,似乎没有达到预期的设定效果,图上有很多的灰色箭头和灰色三角形,不知是什么? 问题:比如做多止损,当止损后由于持仓变为0,未等价格再次上穿上次开仓价,就已经满足持仓=0的开空条件了。见下面黄色背景的两行。见图。 做空止损类似。 BK:=CROSS(H, hhv(ref(h,1),20));
if BK and time>090100 and time<145500 then
price1:=AVGENTERPRICE;{这里可以改成ENTERPRICE?} if holding=0 then BUY(1,30%,STOPR,price1);
price2:=AVGENTERPRICE;{这里可以改成ENTERPRICE?} [此贴子已经被作者于2010-8-24 23:18:54编辑过]
|
-- 作者:fly -- 发布时间:2010/8/25 9:11:29 -- 是未成交标志,在工具--选项--视图 里,有“显示未成交标志”,钩去掉即可
我只是给你想实现的东东提供了一个思路,如果没有达到预期的设定效果,那你就考虑想你的策略是否合适了
你对函数的理解有不到位的地方 if holding=0 then BUY(1,30%,STOPR,price1); 当HOLDING=0时,虽然条件满足了,但并不会下多单。 原因:BUY函数在使用STOPR类型时,只有当最新价大于等于price1时,才会以当时的对手价发出委托。----相当于一个条件单(当最新价>=某值,买开仓) |
-- 作者:SOS -- 发布时间:2010/8/25 10:08:47 -- 老师,我只是想学习这么一个编程模板,未达到预期效果不是指盈利方面,而是尚没有完全实现我想实现的思路, 比如看上面8楼的黄色背景条二条语句是连贯的,举案例假设橡胶20000开空前一波下跌是盈利单,此时price2赋值为20000,19500平空翻多,此时price1赋值为19500,止损假设设在19400,如果多单19400止损,holding变为0,则会触发在19400的开空操作(此时if holding=0 then BUYSHORT(1,30%,STOPR,PRICE2);生效,因为19400<20000)。也就是上图显示的多单止损同时会开空单。反过来当前一波多头盈利后开空单被止损的话,也会触发新多入场。 我的想法是: 做多入场,止损后当价格再次上穿做多入场价继续做多(止损不反手),再止损再次上穿做多入场价继续做多,以此类推,直到平多出场。 做空入场,止损后当价格再次下穿做空入场价继续做空(止损不反手),再止损再次下穿做空入场价继续做空,以此类推,直到平空出场。
|