以文本方式查看主题
- 金字塔客服中心 - 专业程序化交易软件提供商 (http://weistock.com/bbs/index.asp)
-- 公式模型编写问题提交 (http://weistock.com/bbs/list.asp?boardid=4)
---- 求教开仓后减仓 是否编写正确 (http://weistock.com/bbs/dispbbs.asp?boardid=4&id=164277)
|
-- 作者:arutema
-- 发布时间:2018/7/4 15:10:11
-- 求教开仓后减仓 是否编写正确
这个是在金字塔里的修改的 目的是实现开仓2手,满足翻转信号全平,赚5条减1手,剩下1手满足赚50跳或 信号翻转平仓,求教是否编写正确 如有错误麻烦给修改下
INPUT:P2(5,2,100,1){止盈幅度}; VARIABLE:MAXPROFIT=0,{有仓位时最大获利幅度}VMIN = 090000;{用于隔夜高开或低开时间差} WIN1:=0; WIN2:=0;//止盈、止损、回撤控制 VARIABLE:ss=2; VARIABLE:ss1=-2; //////////////////////////////////////////////////////////////////////// //账户信息: 当前持仓:HOLDING,COLORGRAY,LINETHICK0; 当前资产:ASSET,NOAXIS,COLORGRAY; 可用现金:CASH(0),PRECISION0,LINETHICK0; 胜率:PERCENTWIN,LINETHICK0; 交易次数:TOTALTRADE,LINETHICK0; //////////////////////////////////////////////////////////////////////// //主程序 ///////////////// //信号模块:该模块主用于多空头及平仓信号的量化 {示例如下:开多:当MA10上穿MA20时,发出买入开仓交易指令; 平空:当MA10 上穿MA5时,发出卖出平仓交易指令;平多:当MA5上穿MA10时,发出买入平仓交 易指令;开空:当MA10下穿MA20时,发出开空交易指令;} MA5: MA(CLOSE,5),PRECISION0,; MA10:MA(CLOSE,10),PRECISION0,; MA20:MA(CLOSE,20),PRECISION0,; 开多:=CROSS(MA10,MA20); 平多:=CROSS(MA5,MA10); 开空:=CROSS(MA20,MA10); 平空:=CROSS(MA10,MA5); 交易时间:=TIME>VMIN AND TIME<150000; //////////////// //图表日内交易模块: IF HOLDING=0 THEN BEGIN //多头开仓 IF 交易时间 AND 开多 THEN BEGIN BUY(1,ss,LIMITR,CLOSE); MAXPROFIT:=0; END //空头开仓 IF 交易时间 AND 开空 THEN BEGIN BUYSHORT(1,ss1,LIMITR,CLOSE); MAXPROFIT:=0; END END IF HOLDING=ss THEN BEGIN //多头平仓 IF 平多 THEN SELL(1,HOLDING,LIMITR,CLOSE); end IF HOLDING=ss THEN BEGIN //多头平1手 IF (C-ENTERPRICE)>p2 THEN SELL(1,1,LIMITR,CLOSE); ss=ss-1; end IF HOLDING=ss THEN BEGIN //多头平剩下1手 IF (C-ENTERPRICE)>50*MINDIFF or 平多 THEN SELL(1,holding,LIMITR,CLOSE); end //多头收盘平仓 IF NOT(交易时间) THEN SELL(1,HOLDING,LIMITR,CLOSE); IF HOLDING=ss1 THEN BEGIN //空头平仓 IF 平多 THEN SELL(1,HOLDING,LIMITR,CLOSE); end IF HOLDING=ss1 THEN BEGIN //空头平1手 IF (ENTERPRICE-c)>p2 THEN SELL(1,1,LIMITR,CLOSE); ss1=ss-1; end IF HOLDING=ss1 THEN BEGIN //空头平剩下1手 IF (C-ENTERPRICE)>50*MINDIFF or 平多 THEN SELL(1,holding,LIMITR,CLOSE); end //空头收盘平仓 IF NOT(交易时间) THEN SELLSHORT(1,HOLDING,LIMITR,CLOSE);
|
-- 作者:FireScript
-- 发布时间:2018/7/4 15:28:42
--
“赚5条减1手”这是什么意思?只要当前盈利五点,无论多空均减持一手仓位?
|
-- 作者:FireScript
-- 发布时间:2018/7/4 16:09:58
--
我以多头为例,做了一点点修改: IF HOLDING=ss THEN BEGIN //多头平仓 IF 平多 THEN SELL(1,HOLDING,LIMITR,CLOSE); end IF HOLDING=1 THEN BEGIN //多头平1手 IF (C-ENTERPRICE)>p2 THEN SELL(1,1,LIMITR,CLOSE); end IF HOLDING=1 THEN BEGIN //多头平剩下1手 IF (C-ENTERPRICE)>50*MINDIFF THEN SELL(1,holding,LIMITR,CLOSE); end
改的不多,主要就是那个ss赋值那个去掉了(你原先赋值那个语句也是错的,是:= 而不是=)。这样赋值之后,后面开仓会直接出问题,空头也是一样的道理。 还有就是后面开空那个地方:
//空头平剩下1手 IF (C-ENTERPRICE)>50*MINDIFF or 平多 THEN //平多的条件? SELL(1,holding,LIMITR,CLOSE); end
|
-- 作者:arutema
-- 发布时间:2018/7/4 17:54:47
--
老师按照你的要求 改了 还是不能按照获利5条先减仓一手执行 ,麻烦老师给看看写的对不对
INPUT:P2(5,2,100,1){止盈幅度}; VARIABLE:MAXPROFIT=0,{有仓位时最大获利幅度}VMIN = 090000;{用于隔夜高开或低开时间差} WIN1:=0; WIN2:=0;//止盈、止损、回撤控制 VARIABLE:ss=2; VARIABLE:ss1=-2; //////////////////////////////////////////////////////////////////////// //账户信息: 当前持仓:HOLDING,COLORGRAY,LINETHICK0; 当前资产:ASSET,NOAXIS,COLORGRAY; 可用现金:CASH(0),PRECISION0,LINETHICK0; 胜率:PERCENTWIN,LINETHICK0; 交易次数:TOTALTRADE,LINETHICK0; //主程序 ///////////////// //信号模块:该模块主用于多空头及平仓信号的量化 {示例如下:开多:当MA10上穿MA20时,发出买入开仓交易指令; 平空:当MA10 上穿MA5时,发出卖出平仓交易指令;平多:当MA5上穿MA10时,发出买入平仓交 易指令;开空:当MA10下穿MA20时,发出开空交易指令;} MA5: MA(CLOSE,5),PRECISION0,; MA10:MA(CLOSE,10),PRECISION0,; MA20:MA(CLOSE,20),PRECISION0,; 开多:=CROSS(MA10,MA20); 平多:=CROSS(MA5,MA10); 开空:=CROSS(MA20,MA10); 平空:=CROSS(MA10,MA5); 交易时间:=TIME>VMIN AND TIME<150000; //////////////// //图表日内交易模块: IF HOLDING=0 THEN BEGIN //多头开仓 IF 交易时间 AND 开多 THEN BEGIN BUY(1,ss,LIMITR,CLOSE); MAXPROFIT:=0; END //空头开仓 IF 交易时间 AND 开空 THEN BEGIN BUYSHORT(1,ss1,LIMITR,CLOSE); MAXPROFIT:=0; END END IF HOLDING=ss THEN BEGIN //多头平仓 IF 平多 THEN SELL(1,HOLDING,LIMITR,CLOSE); end IF HOLDING=1 THEN BEGIN //多头平1手 IF (C-ENTERPRICE)>p2 THEN SELL(1,1,LIMITR,CLOSE); end IF HOLDING=1 THEN BEGIN //多头平剩下1手 IF (C-ENTERPRICE)>50*MINDIFF THEN SELL(1,holding,LIMITR,CLOSE); end
//多头收盘平仓 IF NOT(交易时间) THEN SELL(1,HOLDING,LIMITR,CLOSE); IF HOLDING=ss1 THEN BEGIN //空头平仓 IF 平多 THEN SELL(1,HOLDING,LIMITR,CLOSE); end IF HOLDING=-1 THEN BEGIN //空头平1手 IF (ENTERPRICE-c)>p2 THEN SELL(1,1,LIMITR,CLOSE); end IF HOLDING=-1 THEN BEGIN //空头平剩下1手 IF (C-ENTERPRICE)>50*MINDIFF or 平空 THEN SELL(1,holding,LIMITR,CLOSE); end //空头收盘平仓 IF NOT(交易时间) THEN SELLSHORT(1,HOLDING,LIMITR,CLOSE);
|
-- 作者:arutema
-- 发布时间:2018/7/4 18:19:26
--
是这根意思 开2手 一手 只要赚到5个点 就减1手
|
-- 作者:FireScript
-- 发布时间:2018/7/5 9:23:15
--
此主题相关图片如下:temp.png
其中T是开仓时候的价格:3828,最新是3836 已经成功触发平一手操作了。
我改了多头部分,空头你模仿修改下即可。
INPUT:P2(5,2,100,1){止盈幅度}; VARIABLE:MAXPROFIT=0,{有仓位时最大获利幅度}VMIN = 090000;{用于隔夜高开或低开时间差} WIN1:=0; WIN2:=0;//止盈、止损、回撤控制 VARIABLE:ss=2; VARIABLE:ss1=-2; //////////////////////////////////////////////////////////////////////// //账户信息: 当前持仓:HOLDING,COLORGRAY,LINETHICK0; 当前资产:ASSET,NOAXIS,COLORGRAY; 可用现金:CASH(0),PRECISION0,LINETHICK0; 胜率:PERCENTWIN,LINETHICK0; 交易次数:TOTALTRADE,LINETHICK0; //主程序 ///////////////// //信号模块:该模块主用于多空头及平仓信号的量化 {示例如下:开多:当MA10上穿MA20时,发出买入开仓交易指令; 平空:当MA10 上穿MA5时,发出卖出平仓交易指令;平多:当MA5上穿MA10时,发出买入平仓交 易指令;开空:当MA10下穿MA20时,发出开空交易指令;} MA5:=MA(CLOSE,5),PRECISION0,; MA10:=MA(CLOSE,10),PRECISION0,; MA20:=MA(CLOSE,20),PRECISION0,; 开多:=CROSS(MA10,MA20); 平多:=CROSS(MA5,MA10); 开空:=CROSS(MA20,MA10); 平空:=CROSS(MA10,MA5); 交易时间:=TIME>VMIN AND TIME<150000; //////////////// //图表日内交易模块: IF HOLDING=0 THEN BEGIN //多头开仓 IF 交易时间 AND 开多 THEN BEGIN BUY(1,ss,LIMITR,CLOSE); MAXPROFIT:=0; END //空头开仓 IF 交易时间 AND 开空 THEN BEGIN BUYSHORT(1,ss1,LIMITR,CLOSE); MAXPROFIT:=0; END END T:ref(c,BARSLAST(holding=2 and 开多));//回溯开仓时的价格
IF HOLDING=ss THEN BEGIN //多头平仓 IF 平多 THEN SELL(1,HOLDING,LIMITR,CLOSE); end IF HOLDING=2 THEN BEGIN //多头平1手 IF (C-ENTERPRICE)>p2 THEN 多头平一手1:SELL(1,1,LIMITR,CLOSE); END IF HOLDING=1 THEN BEGIN //多头平剩下1手 IF (C-T)>50*MINDIFF THEN 多头平一手2:SELL(1,holding,LIMITR,CLOSE); end
//多头收盘平仓 IF NOT(交易时间) THEN SELL(1,HOLDING,LIMITR,CLOSE); IF HOLDING=ss1 THEN BEGIN //空头平仓 IF 平多 THEN SELL(1,HOLDING,LIMITR,CLOSE); end IF HOLDING=-1 THEN BEGIN //空头平1手 IF (ENTERPRICE-c)>p2 THEN SELL(1,1,LIMITR,CLOSE); end IF HOLDING=-1 THEN BEGIN //空头平剩下1手 IF (C-ENTERPRICE)>50*MINDIFF or 平空 THEN SELL(1,holding,LIMITR,CLOSE); end //空头收盘平仓 IF NOT(交易时间) THEN SELLSHORT(1,HOLDING,LIMITR,CLOSE);
|