金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 203|回复: 3

未端语句缺少分号,请邦看一下那里的问题

[复制链接]

30

主题

58

帖子

58

积分

等级: 免费版

注册:
2021-6-13
曾用名:
发表于 2025-1-30 15:45 | 显示全部楼层 |阅读模式
//中间变量
INPUT:M(60, 5, 300, 30), N(1.25, 0.1, 10, 0.1), SS(1.1, 1, 10000, 1), K1(0.5, 0.1, 1, 0.1), K2(0.75, 0.1, 1, 0.1);
VARIABLE:A:=0;//0表示仓位是在趋势模式下下单 1表示在震荡模式下下单
MID := MA(CLOSE, M);//布林中轨
UPPER: MID + N*STD(CLOSE, M);//布林上轨
LOWER: MID - N*STD(CLOSE, M);//布林下轨
今开:=CALLSTOCK(STKLABEL, VOPEN, 6, 0);
CMI:=ABS(CLOSE-REF(CLOSE, 29))/(HHV(HIGH, 30)-LLV(L, 30))*100;//0-100 取值越大,说明趋势越强,CMI<20震荡模式,反之为趋势
关键价:(HIGH+LOW+CLOSE)/3;//关键价的计算,国外常称作中枢价格(PIVOT POINT)
ATR10:=MA(TR, 10);
3日均低价:=MA(L, 3);
3日均高价:=MA(H, 3);
手数:=SS;
//交易条件
IF C>关键价 THEN BEGIN
超买币升多平空条件:=C>MAX(今开+K1*ATR10, 3日均低价);
超买币升空平多条件:=C<MIN(今开-K2*ATR10, 3日均高价);
END
IF C<关键价 THEN BEGIN
超卖币升多平空条件:=C>MAX(今开+K2*ATR10, 3日均低价);
超卖币升空平多条件:=C<MIN(今开-K1*ATR10, 3日均高价);
END
趋势升多条件:=C>UPPER;
趋势升空条件:=C<LOWER;
趋势升多条件:=C<MID;
趋势升空条件:=C>MID;
震荡升多平仓条件:=C<=ENTERPRISE-3*ATR10;
震荡升空平仓条件:=C>=ENTERPRISE+3*ATR10;
//交易系统
IF CMI<20 THEN BEGIN //震荡模式
IF C<关键价 THEN BEGIN
超买币升空:SELLSHORT(超买币升多平空条件 AND HOLDING<=0, 手数, MARKET);
超买币升多:SELL(超买币升空平多条件 AND HOLDING>=0, 手数, MARKET);
买币升多:BUY(超买币升多平空条件 AND HOLDING<=0, 手数, MARKET);
买币升空:BUYSHORT(超买币升空平多条件 AND HOLDING>=0, 手数, MARKET);
A:=1;
END
IF C>关键价 THEN BEGIN
超卖币升空:SELLSHORT(超卖币升多平空条件 AND HOLDING<=0, 手数, MARKET);
超卖币升多:SELL(超卖币升空平多条件 AND HOLDING>=0, 手数, MARKET);
卖币升多:BUY(超卖币升多平空条件 AND HOLDING<=0, 手数, MARKET);
卖币升空:BUYSHORT(超卖币升空平多条件 AND HOLDING>=0, 手数, MARKET);
A:=1;
END
END
IF CMI>=20 THEN BEGIN //趋势模式
IF A=1 THEN BEGIN //趋势模式下 原震荡模式下 仓位处理
震荡升多平仓:SELL(震荡升多平仓条件 AND HOLDING>0, 手数, MARKET);
震荡升空平仓:SELLSHORT(震荡升空平仓条件 AND HOLDING<0, 手数, MARKET);
A:=0;
END
IF A=0 THEN BEGIN
趋势升空:SELLSHORT(趋势升空条件 AND HOLDING<=0, 手数, MARKET);
趋势升多:SELL(趋势升多条件 AND HOLDING>=0, 手数, MARKET);
势升多:BUY(趋势升多条件 AND HOLDING<=0, 手数, MARKET);
势升空:BUYSHORT(趋势升空条件 AND HOLDING>=0, 手数, MARKET);
A:=0;
END
END
//注意先平后开原则

//建立空头进场条件
70 SHORT := L < T2OLO
75 //空头进场
IF SHORT AND POSITION=0 THEN BEGIN
    MYENTRYPRICE := IF(OPEN>T2OLO-MINDIFF, OPEN, T2OLO-MINDIFF);
    BUYSHORT(_DEBUG, POSNUM, LIMITR, MYENTRYPRICE);
    POSITION := -1;
    TURTLEUNITS := 1;
    N := AVTR;
    BUYORDERTHISBAR := 1;
END

85 //不要跳转,让程序检查同一根K线是否可以加仓
//GOTO CONTINUELINE;

90 //如果当前持有空头仓位的状态
IF POSITION=-1 AND BARPOS>T20 AND H>L THEN BEGIN

95 //空头加仓条件
WHILE (HIGH>MYENTRYPRICE+0.5*N) AND TURTLEUNITS<4 DO BEGIN
    MYENTRYPRICE := IF(OPEN>MYENTRYPRICE+0.5*N, OPEN, MYENTRYPRICE+0.5*N);
    MYEXITPRICE := CEILING(MYENTRYPRICE/MINDIFF)*MINDIFF;
    SELL(_DEBUG, POSNUM, LIMITR, MYEXITPRICE);
    TURTLEUNITS := TURTLEUNITS+1;
    SELLORDERTHISBAR := 1;
END //WHILE

105 //建立多头离场条件
LONGX1 := (LOW < T1OLO);

110 IF LONGX1 AND BUYORDERTHISBAR=0 THEN BEGIN
    MYEXITPRICE := IF(OPEN<T1OLO-MINDIFF, OPEN, T1OLO-MINDIFF);
    SELL(_DEBUG, 0, LIMITR, MYEXITPRICE);
    POSITION := 0;
    TURTLEUNITS := 0;
END

115 //建立多头止损条件
LONGX2 := (LOW<MYENTRYPRICE-2*N);

120 IF LONGX2 AND POSITION=1 AND BUYORDERTHISBAR=0 THEN BEGIN
    MYEXITPRICE := IF(OPEN<MYENTRYPRICE-2*N, OPEN, MYENTRYPRICE-2*N);
    MYEXITPRICE := FLOOR(MYEXITPRICE/MINDIFF)*MINDIFF;
    SELL(_DEBUG, 0, LIMITR, MYEXITPRICE);
    POSITION := 0;
    TURTLEUNITS := 0;
END

125 GOTO CONTINUELINE;
END //IF


//如果当前持有空头仓位的状态
130 IF POSITION = -1 AND BARPOS>T20 AND H>L THEN BEGIN

    //空头加仓条件
    WHILE (LOW<MYENTRYPRICE-0.5*N) AND TURTLEUNITS<4 DO BEGIN
        MYENTRYPRICE := IF(OPEN>MYENTRYPRICE-0.5*N, OPEN, MYENTRYPRICE-0.5*N);
        MYEXITPRICE := FLOOR(MYENTRYPRICE/MINDIFF)*MINDIFF;
        BUYSHORT(_DEBUG, POSNUM, LIMITR, MYENTRYPRICE);
        TURTLEUNITS := TURTLEUNITS+1;
        BUYORDERTHISBAR := 1;
    END //WHILE

145 //建立空头离场条件
SHORTX1 := H > T1OHI;

IF SHORTX1 AND BUYORDERTHISBAR=0 THEN BEGIN
    MYEXITPRICE := IF(OPEN>T1OHI+MINDIFF, OPEN, T1OHI+MINDIFF);
    SELLSHORT(_DEBUG, 0, LIMITR, MYEXITPRICE);
    POSITION := 0;
    TURTLEUNITS := 0;
END

155 //建立空头止损条件
SHORTX2 := HIGH > MYENTRYPRICE + 2*N;

IF SHORTX2 AND POSITION = -1 AND BUYORDERTHISBAR=0 THEN BEGIN
    MYEXITPRICE := IF(OPEN>MYENTRYPRICE+2*N, OPEN, MYENTRYPRICE+2*N);
    MYEXITPRICE := CEILING(MYEXITPRICE/MINDIFF)*MINDIFF;
    SELLSHORT(_DEBUG, 0, LIMITR, MYEXITPRICE);
    POSITION := 0;
    TURTLEUNITS := 0;
END

165 END //IF

//显示账户状态
170 CONTINUELINE@ 资产: ASSET, LINETHICK0;
可用现金:CASH(0), LINETHICK0;
POS:HOLDING, LINETHICK0;
交易次数:TOTALDAYTRADE, LINETHICK0;

175 IF _DEBUGOUT>0 THEN BEGIN
    DEBUGFILE2('C:\DEBUGFILE.TXT', 'BARPOS=%OF', BARPOS, NT);
    DEBUGFILE2('C:\DEBUGFILE.TXT', 'T2OHI=%2F', T2OHI, NT);
    DEBUGFILE2('C:\DEBUGFILE.TXT', 'N=%2F', N, NT);
    DEBUGFILE2('C:\DEBUGFILE.TXT', 'CLOSE=%2F', C, NT);
    DEBUGFILE2('C:\DEBUGFILE.TXT', 'POSITION=%OF', POSITION, NT);
    DEBUGFILE2('C:\DEBUGFILE.TXT', 'TURTLEUNITS=%OF', TURTLEUNITS, NT);
    DEBUGFILE2('C:\DEBUGFILE.TXT', 'MYENTRYPRICE=%OF', MYENTRYPRICE, NT);
    DEBUGFILE2('C:\DEBUGFILE.TXT', 'MYEXITPRICE=%OF', MYEXITPRICE, NT);
185 END //IF


//声明参数
10 INPUT: T20(20, 15, 60, 1);
INPUT: T10(10, 10, 30, 1);
INPUT: ATRLEN(20, 15, 30, 1);
INPUT: POSNUM(1, 1, 20, 1);

//声明变量
15 NT := 1; //调试信息带时间戳
BUYORDERTHISBAR := 0; //当前BAR有过交易

VARIABLE : _DEBUG = 1; //是否输出前台交易指令
VARIABLE : _TDEBUG = 1; //是否输出后台交易指令
VARIABLE : _DEBUGOUT = 0; //是否输出后台交易的调试信息

VARIABLE : MYENTRYPRICE = 0; //开仓价格
VARIABLE : MYEXITPRICE = 0; //平仓价格

VARIABLE : TURTLEUNITS = 0; //交易单位
VARIABLE : POSITION = 0; //仓位状态
//0表示没有仓位,1表示持有多头,-1表示持有空头

VARIABLE : T2OHI = CLOSE; //20周期的高点
VARIABLE : T2OLO = CLOSE; //20周期的低点

VARIABLE : T1OHI = CLOSE; //10周期的高点
VARIABLE : T1OLO = CLOSE; //10周期的低点

//准备需要计算的变量
40 T2OHI := REF(HHV(H, T20), 1);
T2OLO := REF(LLV(L, T20), 1);

T1OHI := REF(HHV(H, T10), 1);
T1OLO := REF(LLV(L, T10), 1);

AVGTR := REF(MA(TR, ATRLEN), 1);

//开始执行时 初始化数据
45 IF BARPOS=1 THEN BEGIN
    POSITION := 0;
END //IF

//如果当前是没有持仓的状态
50 IF POSITION=0 AND BARPOS>T20 AND H>L THEN BEGIN

    //建立多头进场条件
    LONG := H > T2OHI;

    //多头进场
    IF LONG THEN BEGIN
        MYENTRYPRICE := IF(OPEN>T2OHI+MINDIFF, OPEN, T2OHI+MINDIFF);
        BUY(_DEBUG, POSNUM, LIMITR, MYENTRYPRICE);
        POSITION := 1;
        TURTLEUNITS := 1;
        N := AVGTR;
        BUYORDERTHISBAR := 1;
    END //IF

回复

使用道具 举报

37

主题

9745

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2025-1-31 11:07 | 显示全部楼层
你这个两个指标硬性合并合并在一起的吧。很多变量都是重复定义、或者定义在最后的。下面是调整的过段。但是不能保证执行逻辑是否符合你预期

//中间变量
INPUT:M(60, 5, 300, 30),  SS(1.1, 1, 10000, 1), K1(0.5, 0.1, 1, 0.1), K2(0.75, 0.1, 1, 0.1);


N:=1.25;


//声明参数
INPUT: T20(20, 15, 60, 1);
INPUT: T10(10, 10, 30, 1);
INPUT: ATRLEN(20, 15, 30, 1);
INPUT: POSNUM(1, 1, 20, 1);

//声明变量
NT := 1; //调试信息带时间戳
BUYORDERTHISBAR := 0; //当前BAR有过交易

VARIABLE : _DEBUG = 1; //是否输出前台交易指令
VARIABLE : _TDEBUG = 1; //是否输出后台交易指令
VARIABLE : _DEBUGOUT = 0; //是否输出后台交易的调试信息

VARIABLE : MYENTRYPRICE = 0; //开仓价格
VARIABLE : MYEXITPRICE = 0; //平仓价格

VARIABLE : TURTLEUNITS = 0; //交易单位
VARIABLE : POSITION = 0; //仓位状态
//0表示没有仓位,1表示持有多头,-1表示持有空头

VARIABLE : T2OHI = CLOSE; //20周期的高点
VARIABLE : T2OLO = CLOSE; //20周期的低点

VARIABLE : T1OHI = CLOSE; //10周期的高点
VARIABLE : T1OLO = CLOSE; //10周期的低点

//准备需要计算的变量
T2OHI := REF(HHV(H, T20), 1);
T2OLO := REF(LLV(L, T20), 1);

T1OHI := REF(HHV(H, T10), 1);
T1OLO := REF(LLV(L, T10), 1);

AVGTR := REF(MA(TR, ATRLEN), 1);
VARIABLE:A:=0;//0表示仓位是在趋势模式下下单 1表示在震荡模式下下单
MID := MA(CLOSE, M);//布林中轨
UPPER: MID + N*STD(CLOSE, M);//布林上轨
LOWER: MID - N*STD(CLOSE, M);//布林下轨
今开:=CALLSTOCK(STKLABEL, VTOPEN, 6, 0);
CMI:=ABS(CLOSE-REF(CLOSE, 29))/(HHV(HIGH, 30)-LLV(L, 30))*100;//0-100 取值越大,说明趋势越强,CMI<20震荡模式,反之为趋势
关键价:(HIGH+LOW+CLOSE)/3;//关键价的计算,国外常称作中枢价格(PIVOT POINT)
ATR10:=MA(TR, 10);
3日均低价:=MA(L, 3);
3日均高价:=MA(H, 3);
手数:=SS;
//交易条件
IF C>关键价 THEN BEGIN
超买币升多平空条件:=C>MAX(今开+K1*ATR10, 3日均低价);
超买币升空平多条件:=C<MIN(今开-K2*ATR10, 3日均高价);
END
IF C<关键价 THEN BEGIN
超卖币升多平空条件:=C>MAX(今开+K2*ATR10, 3日均低价);
超卖币升空平多条件:=C<MIN(今开-K1*ATR10, 3日均高价);
END
趋势升多条件:=C>UPPER;
趋势升空条件:=C<LOWER;
趋势升多条件:=C<MID;
趋势升空条件:=C>MID;

震荡升多平仓条件:=C<=ENTERPRICE-3*ATR10;
震荡升空平仓条件:=C>=ENTERPRICE+3*ATR10;
//交易系统
IF CMI<20 THEN BEGIN //震荡模式
        IF C<关键价 THEN BEGIN
        超买币升空:SELLSHORT(超买币升多平空条件 AND HOLDING<=0, 手数, MARKET);
        超买币升多:SELL(超买币升空平多条件 AND HOLDING>=0, 手数, MARKET);
        买币升多:BUY(超买币升多平空条件 AND HOLDING<=0, 手数, MARKET);
        买币升空:BUYSHORT(超买币升空平多条件 AND HOLDING>=0, 手数, MARKET);
        A:=1;
        END
        IF C>关键价 THEN BEGIN
        超卖币升空:SELLSHORT(超卖币升多平空条件 AND HOLDING<=0, 手数, MARKET);
        超卖币升多:SELL(超卖币升空平多条件 AND HOLDING>=0, 手数, MARKET);
        卖币升多:BUY(超卖币升多平空条件 AND HOLDING<=0, 手数, MARKET);
        卖币升空:BUYSHORT(超卖币升空平多条件 AND HOLDING>=0, 手数, MARKET);
        A:=1;
        END
END
IF CMI>=20 THEN BEGIN //趋势模式
                IF A=1 THEN BEGIN //趋势模式下 原震荡模式下 仓位处理
                震荡升多平仓:SELL(震荡升多平仓条件 AND HOLDING>0, 手数, MARKET);
                震荡升空平仓:SELLSHORT(震荡升空平仓条件 AND HOLDING<0, 手数, MARKET);
                A:=0;
        END
        IF A=0 THEN BEGIN
                趋势升空:SELLSHORT(趋势升空条件 AND HOLDING<=0, 手数, MARKET);
                趋势升多:SELL(趋势升多条件 AND HOLDING>=0, 手数, MARKET);
                势升多:BUY(趋势升多条件 AND HOLDING<=0, 手数, MARKET);
                势升空:BUYSHORT(趋势升空条件 AND HOLDING>=0, 手数, MARKET);
                A:=0;
        END
END
//注意先平后开原则

//建立空头进场条件
SHORT := L < T2OLO;
//空头进场
IF SHORT AND POSITION=0 THEN BEGIN
    MYENTRYPRICE := IF(OPEN>T2OLO-MINDIFF, OPEN, T2OLO-MINDIFF);
    BUYSHORT(_DEBUG, POSNUM, LIMITR, MYENTRYPRICE);
    POSITION := -1;
    TURTLEUNITS := 1;
    //N := AVTR;
    BUYORDERTHISBAR := 1;
END

//不要跳转,让程序检查同一根K线是否可以加仓
//GOTO CONTINUELINE;

//如果当前持有空头仓位的状态
IF POSITION=-1 AND BARPOS>T20 AND H>L THEN BEGIN

        //空头加仓条件
WHILE (HIGH>MYENTRYPRICE+0.5*N) AND TURTLEUNITS<4 DO BEGIN
    MYENTRYPRICE := IF(OPEN>MYENTRYPRICE+0.5*N, OPEN, MYENTRYPRICE+0.5*N);
    MYEXITPRICE := CEILING(MYENTRYPRICE/MINDIFF)*MINDIFF;
    SELL(_DEBUG, POSNUM, LIMITR, MYEXITPRICE);
    TURTLEUNITS := TURTLEUNITS+1;
    SELLORDERTHISBAR := 1;
END //WHILE

//建立多头离场条件
LONGX1 := (LOW < T1OLO);

IF LONGX1 AND BUYORDERTHISBAR=0 THEN BEGIN
    MYEXITPRICE := IF(OPEN<T1OLO-MINDIFF, OPEN, T1OLO-MINDIFF);
    SELL(_DEBUG, 0, LIMITR, MYEXITPRICE);
    POSITION := 0;
    TURTLEUNITS := 0;
END

//建立多头止损条件
LONGX2 := (LOW<MYENTRYPRICE-2*N);

IF LONGX2 AND POSITION=1 AND BUYORDERTHISBAR=0 THEN BEGIN
    MYEXITPRICE := IF(OPEN<MYENTRYPRICE-2*N, OPEN, MYENTRYPRICE-2*N);
    MYEXITPRICE := FLOOR(MYEXITPRICE/MINDIFF)*MINDIFF;
    SELL(_DEBUG, 0, LIMITR, MYEXITPRICE);
    POSITION := 0;
    TURTLEUNITS := 0;
END

GOTO CONTINUELINE;
END //IF


//如果当前持有空头仓位的状态
IF POSITION = -1 AND BARPOS>T20 AND H>L THEN BEGIN

    //空头加仓条件
    WHILE (LOW<MYENTRYPRICE-0.5*N) AND TURTLEUNITS<4 DO BEGIN
        MYENTRYPRICE := IF(OPEN>MYENTRYPRICE-0.5*N, OPEN, MYENTRYPRICE-0.5*N);
        MYEXITPRICE := FLOOR(MYENTRYPRICE/MINDIFF)*MINDIFF;
        BUYSHORT(_DEBUG, POSNUM, LIMITR, MYENTRYPRICE);
        TURTLEUNITS := TURTLEUNITS+1;
        BUYORDERTHISBAR := 1;
    END //WHILE

//建立空头离场条件
SHORTX1 := H > T1OHI;

IF SHORTX1 AND BUYORDERTHISBAR=0 THEN BEGIN
    MYEXITPRICE := IF(OPEN>T1OHI+MINDIFF, OPEN, T1OHI+MINDIFF);
    SELLSHORT(_DEBUG, 0, LIMITR, MYEXITPRICE);
    POSITION := 0;
    TURTLEUNITS := 0;
END

//建立空头止损条件
SHORTX2 := HIGH > MYENTRYPRICE + 2*N;

IF SHORTX2 AND POSITION = -1 AND BUYORDERTHISBAR=0 THEN BEGIN
    MYEXITPRICE := IF(OPEN>MYENTRYPRICE+2*N, OPEN, MYENTRYPRICE+2*N);
    MYEXITPRICE := CEILING(MYEXITPRICE/MINDIFF)*MINDIFF;
    SELLSHORT(_DEBUG, 0, LIMITR, MYEXITPRICE);
    POSITION := 0;
    TURTLEUNITS := 0;
END

END //IF

//显示账户状态
CONTINUELINE@ 资产: ASSET, LINETHICK0;
可用现金:CASH(0), LINETHICK0;
POS:HOLDING, LINETHICK0;
交易次数:TOTALDAYTRADE, LINETHICK0;

IF _DEBUGOUT>0 THEN BEGIN
    DEBUGFILE2('C:\DEBUGFILE.TXT', 'BARPOS=%OF', BARPOS, NT);
    DEBUGFILE2('C:\DEBUGFILE.TXT', 'T2OHI=%2F', T2OHI, NT);
    DEBUGFILE2('C:\DEBUGFILE.TXT', 'N=%2F', N, NT);
    DEBUGFILE2('C:\DEBUGFILE.TXT', 'CLOSE=%2F', C, NT);
    DEBUGFILE2('C:\DEBUGFILE.TXT', 'POSITION=%OF', POSITION, NT);
    DEBUGFILE2('C:\DEBUGFILE.TXT', 'TURTLEUNITS=%OF', TURTLEUNITS, NT);
    DEBUGFILE2('C:\DEBUGFILE.TXT', 'MYENTRYPRICE=%OF', MYENTRYPRICE, NT);
    DEBUGFILE2('C:\DEBUGFILE.TXT', 'MYEXITPRICE=%OF', MYEXITPRICE, NT);
END //IF




//开始执行时 初始化数据
IF BARPOS=1 THEN BEGIN
    POSITION := 0;
END //IF

//如果当前是没有持仓的状态
IF POSITION=0 AND BARPOS>T20 AND H>L THEN BEGIN

    //建立多头进场条件
    LONG := H > T2OHI;

    //多头进场
    IF LONG THEN BEGIN
        MYENTRYPRICE := IF(OPEN>T2OHI+MINDIFF, OPEN, T2OHI+MINDIFF);
        BUY(_DEBUG, POSNUM, LIMITR, MYENTRYPRICE);
        POSITION := 1;
        TURTLEUNITS := 1;
        N := AVGTR;
        BUYORDERTHISBAR := 1;
    END //IF
END
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

30

主题

58

帖子

58

积分

等级: 免费版

注册:
2021-6-13
曾用名:
 楼主| 发表于 2025-1-31 11:34 | 显示全部楼层
不好意思老师!把指标没注意粘二遍了!帮我改一下!不要重复
回复

使用道具 举报

37

主题

9745

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2025-1-31 13:35 | 显示全部楼层
见2楼
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-3-14 15:22 , Processed in 0.233425 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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