同花顺指标公式量化FAQ与示例-0801

用户头像神盾局量子研究部
2023-08-01 发布

地址:http://quant.10jqka.com.cn/view/backtest/indexstrategy

支持哪些标的?

目前支持沪深京交易所的股票、可转债、基金

支持多长的回测区间?

目前支持最长6年的时间跨度

支持哪些运行频率?

基础频率支持5分钟、30分钟、60分钟、日线等,用户也可以选择多分钟、多日,并配合周期值来自定义周期,如3分钟、7分钟等

对于多分钟周期,K线合成不会跨日,如果周期值无法被240整除,则当日最后1根合成K线的时间跨度会小于周期值,比如7分钟周期,最后一根K线为14:58——15:00

目前支持的最小运行频率为3分钟。

交易费用如何计算?

手续费默认值为万分之二点五,即0.025%,最少5元,双边收费,也支持用户自定义;

印花税默认值为千分之一,即0.1%,卖出时收费;

滑点单位为跳,即价格的最小变动,默认值为1跳,以股票为例,股票价格的最小变动为0.01,滑点N跳意味着买入成交价 = 最新价 + 0.01 * N,卖出同理

拆分合并与分红怎么处理?

当股票发生拆分,合并或者分红时,股价会出现跳空缺口,为了消除这种价格变化对回测结果的影响,我们会根据个股除权除息信息对账户中的现金或持股数量进行相应的调整修正。具体处理方式如下:

  1. 回测所用价格数据与下单所用价格数据是独立的。即在回测过程中,您可采用前复权、不复权或后复权价格来计算交易下单信号,回测引擎均采用真实价格(即不复权价格)下单;
  2. 回测引擎会在除权除息当日盘前自动处理并更新您的账户信息。
  3. 回测过程中采用动态复权模式,即在回测过程中,轮循至某个股除权除息日,则按除权后价格对之前的价格数据进行调整。

订单如何撮合?

目前的撮合机制是市价下单,一次性撮合,不成交或未成交部分不再撮合,成交价为当前K线收盘价加滑点

双均线策略

// 以下为双均线策略
// 当短周期均线上穿长周期均线时, 买入当前现金的80%;
// 当短周期均线下穿长周期均线时, 卖出所有

N:=ROUND(CASH*0.8/CLOSE/100,0)*100;    //计算交易数量

MA1:=MA(CLOSE,10);    //计算短周期均线
MA2:=MA(CLOSE,240);   //计算长周期均线

BUYSIG:=CROSS(MA1,MA2);    //短周期均线上穿长周期均线时, 出买入信号
SELLSIG:=CROSS(MA2,MA1);   //短周期均线下穿长周期均线时, 出卖出信号

//当出现买入信号, 且持仓为0时, 执行买入
IF (BUYSIG AND HOLDING=0){
    BUY(N);
}
  
//当出现卖出信号, 且持仓不为0时, 执行卖出
IF (SELLSIG AND AVHOLDING>0){
    SELL(AVHOLDING);
}


双均线策略优化版本

N:=BARSLAST(DATE<>REF(DATE,1))+1;
LOTS:=ROUND(400000/CLOSE/100)*100;

FASTLENGTH:=8;
SLOWLENGTH:=40;
RISKLENGTH:=2;
PROFITFACTOR1:=2;

MA_FAST:=MA(CLOSE,FASTLENGTH);
MA_SLOW:=MA(CLOSE,SLOWLENGTH);
RANGE1:=HIGH-LOW;

CONDITION1:=CLOSE<=(LOW+0.25*RANGE1);
CONDITION2:=CLOSE>=(HIGH-0.25*RANGE1);
CONDITION11:=CLOSE>=(HIGH-0.25*RANGE1);
CONDITION21:=CLOSE<=(LOW+0.25*RANGE1);

HH:=HHV(HIGH,2);
LL:=LLV(LOW,RISKLENGTH);
LL1:=LLV(LOW,2);
HH1:=HHV(HIGH,RISKLENGTH);

LONGRISK:=REF(LL,1)-0.01;
BUYSIG:=REF(CONDITION1,2)=1 AND REF(CONDITION2,1)=1 AND REF(C,1)>REF(MA_FAST,1) AND REF(C,1)>REF(MA_SLOW,1) AND VOL>0 AND HIGH>=REF(HH,1)+0.01;
SELLSIG:=VOL>0 AND HIGH>BUYPRICE+PROFITFACTOR1*(BUYPRICE-LONGRISK);

IF (BUYSIG AND HOLDING=0){
    BUY(LOTS);
}
IF (SELLSIG AND AVHOLDING>0){
    SELL(AVHOLDING);
}

K线形态交易系统

N1:=BARSLAST(DATE<>REF(DATE,1))+1;
LOTS:=ROUND(400000/CLOSE/100,0)*100;

N:=41;
早晨之星:= REF(CLOSE,2)/REF(OPEN,2) < 0.95 AND REF(OPEN,1) < REF(CLOSE,2) AND ABS(REF(OPEN,1)-REF(CLOSE,1))/REF(CLOSE,1)<0.03 AND CLOSE/OPEN>1.05 AND CLOSE>REF(CLOSE,2);
早晨十字星:= REF(CLOSE,2)/REF(OPEN,2) < 0.95 AND REF(OPEN,1) < REF(CLOSE,2) AND REF(OPEN,1)==REF(CLOSE,1) AND CLOSE/OPEN>1.05 AND CLOSE>REF(CLOSE,2);
平底:=ABS(LOW-REF(LOW,1))/LOW<0.001 AND ABS(REF(LOW,1)-REF(LOW,2))/REF(LOW,1)<=0.001;
曙光初现:=REF(CLOSE,1)/REF(OPEN,1)<0.97 AND CLOSE/OPEN>1.03 AND OPEN<REF(CLOSE,1) AND CLOSE>REF(CLOSE,1);
阳线穿阴:=REF(CLOSE,1)/REF(OPEN,1)>1.03 AND CLOSE/OPEN<0.96 AND CLOSE<REF(OPEN,1) AND OPEN>REF(CLOSE,1);
黄昏之星:= REF(CLOSE,2)/REF(OPEN,2) > 1.03 AND REF(OPEN,1) > REF(CLOSE,2) AND ABS(REF(OPEN,1)-REF(CLOSE,1))/REF(CLOSE,1)<0.02 AND CLOSE/OPEN<0.97 AND CLOSE<REF(CLOSE,2);
黄昏十字星:= REF(CLOSE,2)/REF(OPEN,2) > 1.05 AND REF(OPEN,1) > REF(CLOSE,2) AND REF(OPEN,1)==REF(CLOSE,1) AND CLOSE/OPEN<0.95 AND CLOSE<REF(CLOSE,2);
平顶:=ABS(HIGH-REF(HIGH,1))/HIGH<0.001;
乌云盖顶:= REF(CLOSE,1)/REF(OPEN,1)>1.03 AND CLOSE/OPEN<0.97 AND OPEN>REF(CLOSE,1) AND CLOSE<REF(CLOSE,1);
阴线穿阳:=REF(CLOSE,1)/REF(OPEN,1)<0.97 AND CLOSE/OPEN>1.04 AND CLOSE>REF(OPEN,1) AND OPEN<REF(CLOSE,1);

COND1:=黄昏之星 OR 黄昏之星 OR 平顶 OR 乌云盖顶 OR 阴线穿阳;
COND2:=早晨之星 OR 早晨十字星 OR 平底 OR 曙光初现 OR 阳线穿阴;

IF (COND2 AND HOLDING=0){
    BUY(LOTS);
}
IF (COND1 AND AVHOLDING>0){
    SELL(AVHOLDING);
}

肯特纳系统

AVGLENGTH:=40;
ATRLENGTH:=40;
N:=BARSLAST(DATE<>REF(DATE,1))+1;
LOTS:=ROUND(300000/CLOSE/100)*100;

MA1:=REF(MA((HIGH+LOW+CLOSE)/3,AVGLENGTH),1);
TR:=MAX(H,REF(CLOSE,1))-MIN(LOW,REF(CLOSE,1));

UPPERBAND:=MA1+REF(MA(TR,ATRLENGTH),1);
LOWERBAND:=MA1-REF(MA(TR,ATRLENGTH),1);
ENTRYLONGCOND:=MA1>REF(MA1,1) AND HIGH>=UPPERBAND;
EXITLONGCOND:=LOW<=MA1;
ENTRYSHORTCOND:=MA1<REF(MA1,1) AND LOW<=LOWERBAND;
EXITSHORTCOND:=HIGH>=MA1;

IF (ENTRYLONGCOND AND HOLDING=0){
    BUY(LOTS);
}
IF (EXITLONGCOND AND AVHOLDING>0){
    SELL(AVHOLDING);
}

均线和形态高低点突破系统

N:=BARSLAST(DATE<>REF(DATE,1))+1;
LOTS:=ROUND(400000/CLOSE/100)*100;

AVGLENGTH:=5;
AVGDISPLACE:=5;
VALIDBARS2:=5;
VALIDBARS1:=5;
VALIDBARS3:=5;
TRAILSBARS:=5;

MA1:=MA(CLOSE,AVGLENGTH);
DMA1:=REF(MA1,AVGDISPLACE);

CONCROSSOVER:=CROSS(CLOSE,DMA1);
CONCROSSUNDER:=CROSS(DMA1,CLOSE);

BARSLASTCRSUND:=BARSLAST(CONCROSSUNDER=1);

BARSSECCRSOVR:=BARSLAST(CONCROSSOVER=1);
BARSFSTCRSOVR:=BARSSECCRSOVR+REF(BARSLAST(CONCROSSOVER=1),BARSSECCRSOVR);

BARSLASTCRSOVR:=BARSLAST(CONCROSSOVER=1);

BARSSECCRSUND:=BARSLAST(CONCROSSUNDER=1);
BARSFSTCRSUND:=BARSSECCRSUND+REF(BARSLAST(CONCROSSUNDER=1),BARSSECCRSUND);

TJ:=CONCROSSOVER AND (BARSLASTCRSUND-BARSSECCRSOVR)<=VALIDBARS2 AND BARSFSTCRSOVR-BARSLASTCRSUND<=VALIDBARS1;
TJ1:=CONCROSSUNDER AND (BARSLASTCRSOVR-BARSSECCRSUND)<=VALIDBARS2 AND BARSFSTCRSUND-BARSLASTCRSOVR<=VALIDBARS1;

REVERSALPRICE:=REF(DMA1,1)-0.01;
TRAILSTOPPRICE:=LLV(REF(LOW,1),TRAILSBARS);
REVERSALPRICE1:=REF(DMA1,1)+0.01;
TRAILSTOPPRICE1:=HHV(REF(H,1),TRAILSBARS);

BUYSIG:=TJ AND 0<=VALIDBARS3 AND VOL>0;
SELLSIG:=VOL>0 AND LOW<=MAX(REVERSALPRICE,TRAILSTOPPRICE);

IF (BUYSIG AND HOLDING=0){
    BUY(LOTS);
}
IF (SELLSIG AND AVHOLDING>0){
    SELL(AVHOLDING);
}

同花顺压力支撑线交易系统

LOTS:=ROUND(500000/CLOSE/100,0)*100;
VAR1:=(2*CLOSE+HIGH+LOW+OPEN)/5;
VAR2:=LLV(LOW,34);
VAR3:=HHV(HIGH,34);
SK:=MA((VAR1-VAR2)/(VAR3-VAR2)*100,13);
SD:=MA(SK,3);
VAR4:=IF(CROSS(SK,SD),1,0);
VAR5:=IF(CROSS(SD,SK),1,0);
SELLSIG:=VAR5;
BUYSIG:=VAR4;
IF (BUYSIG AND HOLDING=0){
    BUY(LOTS);
}
IF (SELLSIG AND AVHOLDING>0){
    SELL(AVHOLDING);
}

评论

需要帮助?

试试AI小助手吧