QUANTAXIS icon indicating copy to clipboard operation
QUANTAXIS copied to clipboard

[群友指标] 趋势指标 FROM 浙江一柱擎天xinan

Open yutiansut opened this issue 5 years ago • 13 comments

今天我们拿到群友(浙江一柱擎天xinan)的一个通达信指标 让我们快速改写 展示下吧

这是原指标

N:=20;
N1:=7;
N2:=69;
T1:=IF((DATE<=1341231),1,0);
M3:=EMA(CLOSE,3);
M8:EMA(CLOSE,8),COLOR008000;
M13:EMA(M8,13),COLOR0000FF;
M62:EMA(M8,55),COLORF0F000;
VAR1:=EMA(M13,62);
M81:EMA(M62,81),COLOR00FFFF;
M144:EMA(VAR1,144),LINETHICK2,COLOR0000FF;
M250:EMA(VAR1,250),POINTDOT,LINETHICK2,COLORF00FF0;
VAR2:=(CLOSE+HIGH+LOW)/(3);
VAR3:=(EMA(VAR2,10))*(T1);
VAR4:=(REF(VAR3,1))*(T1);
STICKLINE((VAR3>VAR4),VAR3,VAR4,4,0),COLOR00FFFF;
STICKLINE((VAR3<VAR4),VAR3,VAR4,4,0),COLORFF0000;
VAR5:((REF(HIGH,1)+REF(LOW,1))/(2))*(T1);
VAR6:MA(CLOSE,N)+((2)*(STD(CLOSE,N)))*(T1);
DRAWTEXT(CROSS(VAR3,VAR4),(VAR3)*(0.98),'★'),COLOR00FFFF;
DRAWTEXT(CROSS(VAR5,VAR6),(HIGH)*(1.04),'↓卖'),COLOR008000;
VAR7:=REF(CLOSE,1);
VAR8:=((SMA(MAX(CLOSE-VAR7,0),N1,1))/(SMA(ABS(CLOSE-VAR7),N1,1)))*(100);
VAR9:=CROSS(N2,VAR8);
VARA:=(FILTER(VAR9,4))*(T1);
DRAWTEXT(VARA,(HIGH)*(1.04),'↓卖'),COLORFFFFFF;
VARB:=((2)*(CLOSE)+HIGH+LOW)/(4);
VARC:=LLV(LOW,34);
VARD:=HHV(HIGH,34);
VARE:=(EMA(((VARB-VAR1)/(VAR5-VAR1))*(100),7))*(T1);
VARF:=(EMA((0.667)*(REF(VARE,1))+(0.333)*(VARE),5))*(T1);
DRAWTEXT(IF(((COUNT((CLOSE<REF(CLOSE,1)),8))/(8)>0.6) AND (VOL>=(1.5)*(MA(VOL,5))) AND COUNT((VARE>=VARF),3) AND (REF(LOW,1)=LLV(LOW,120)),1,0),LOW,'●买进'),COLORFF00FF;
DRAWTEXT(IF(((COUNT((CLOSE<REF(CLOSE,1)),13))/(13)>0.6) AND COUNT((VARE>VARF),6) AND (REF(LOW,5)=LLV(LOW,120)) AND REF((CLOSE>=OPEN),4) AND REF((CLOSE>OPEN),3) AND REF((CLOSE>OPEN),2) AND REF((OPEN>CLOSE),1) AND (OPEN>REF(CLOSE,1)),1,0),LOW,'●买进'),COLOR00FFFF;
VAR10:=(MA(CLOSE,80)-(MA(CLOSE,10))/(3))*(T1);
DRAWTEXT(IF((CLOSE<VAR10) AND ((VOL)/(240)>(MA(VOL,5))/(240)) AND (CLOSE>(REF(CLOSE,1))*(1.08)) AND (CLOSE<(MA(CLOSE,13))*(1.3)),1,0),LOW,'●抄底'),COLOR0000FF;

image

yutiansut avatar Sep 18 '19 17:09 yutiansut

wow 看起来这个指标又大又圆 非常酷炫, 让我们快速改写成python版本的吧

首先我们升级到最新版本的quantaxis, 因为加了个FILTER的函数

docker用户 请docker-compose pull 来更新下你的docker镜像

pip install quantaxis==1.5.21

然后我们愉快的开始吧

import QUANTAXIS as QA
data = QA.QA_fetch_stock_day_adv('000001')
data = data.to_qfq()

此处我们在add_func前动态的增加了一列 因为通达信有个神奇的date属性是用19000000+这个值= 真实值 虽然神奇 但是实现起来也非常容易

DATE
取得该周期从1900以来的的年月日.
用法:
 DATE
 例如函数返回1000101,表示2000年1月1日,DATE+19000000后才是真正的日期值
data.data = data.data.assign(date=data.date.map(lambda x: str(x)[0:10]).map(QA.QA_util_date_str2int).map(lambda x: x-19000000))

yutiansut avatar Sep 18 '19 17:09 yutiansut

我们只需要对通达信的代码 进行快速批量替换即可:

:=  换成 =
; 换成 空的
OPEN 换成 data.open
HIGH 换成 data.high
LOW  换成 data.low
CLOSE 换成 data.close
VOLUME 换成 data.volume
AND 换成 &

DRAWTEXT 换成 text_ =
DRAWLINE 换成 line_ =
from QUANTAXIS.QAIndicator.base import *
def indx(data):
    N=20 
    N1=7 
    N2=69 
    #T1=IF((DATE<=1341231),1,0) 
    #print(data.date)
    T1 = data.date.apply(lambda x: 1 if x<=1341231 else 0)
    M3=EMA(data.close,3) 
    M8=EMA(data.close,8)
    
#     M8:EMA(data.close,8),COLOR008000 
    M13 = EMA(M8, 13)
#     M13:EMA(M8,13),COLOR0000FF
    M62 = EMA(M8, 55)
#     M62:EMA(M8,55),COLORF0F000 
    VAR1=EMA(M13,62) 
    M81 = EMA(M62,81)
    M144 = EMA(VAR1, 144)
    M250 = EMA(VAR1,250)
#     M81:EMA(M62,81),COLOR00FFFF 
#     M144:EMA(VAR1,144),LINETHICK2,COLOR0000FF 
#     M250:EMA(VAR1,250),POINTDOT,LINETHICK2,COLORF00FF0 
    VAR2=(data.close+data.high+data.low)/(3) 
    VAR3=(EMA(VAR2,10))*(T1) 
    VAR4=(REF(VAR3,1))*(T1) 
    Line1 = IF(VAR3>VAR4, VAR3, VAR4)
    Line2 = IF(VAR3<VAR4, VAR3, VAR4)
#     STICKLINE((VAR3>VAR4),VAR3,VAR4,4,0),COLOR00FFFF 
#     STICKLINE((VAR3<VAR4),VAR3,VAR4,4,0),COLORFF0000 
    VAR5=((REF(data.high,1)+REF(data.low,1))/(2))*(T1) 
    VAR6=MA(data.close,N)+((2)*(STD(data.close,N)))*(T1) 
    
    Text1 =CROSS(VAR3,VAR4)
    Text2 = CROSS(VAR5,VAR6)
#     DRAWTEXT(CROSS(VAR3,VAR4),(VAR3)*(0.98),'¡ï'),COLOR00FFFF 
#     DRAWTEXT(CROSS(VAR5,VAR6),(data.high)*(1.04),'¡ýÂô'),COLOR008000 
    VAR7=REF(data.close,1) 
    VAR8=((SMA(MAX(data.close-VAR7,0),N1,1))/(SMA(ABS(data.close-VAR7),N1,1)))*(100) 
    VAR9=CROSS(N2,VAR8)
    VARA=(FILTER(VAR9,4))*(T1) 
    Text3= VARA
    
#     DRAWTEXT(VARA,(data.high)*(1.04),'¡ýÂô'),COLORFFFFFF 
    VARB=((2)*(data.close)+data.high+data.low)/(4) 
    VARC=LLV(data.low,34) 
    VARD=HHV(data.high,34) 
    VARE=(EMA(((VARB-VAR1)/(VAR5-VAR1))*(100),7))*(T1) 
    VARF=(EMA((0.667)*(REF(VARE,1))+(0.333)*(VARE),5))*(T1) 
    Text4 = IF(((COUNT((data.close<REF(data.close,1)),8))/(8)>0.6) & (data.volume>=(1.5)*(MA(data.volume,5))) & COUNT((VARE>=VARF),3) & (REF(data.low,1)==LLV(data.low,120)),1,0)
    Text5 = IF(((COUNT((data.close<REF(data.close,1)),13))/(13)>0.6)& 
               COUNT((VARE>VARF),6) & 
               (REF(data.low,5)==LLV(data.low,120)) & 
               REF((data.close>=data.open),4) & 
               REF((data.close>data.open),3) & 
               REF((data.close>data.open),2) & 
               REF((data.open>data.close),1) & 
               (data.open>REF(data.close,1)),1,0)
#     DRAWTEXT(IF(((COUNT((data.close<REF(data.close,1)),8))/(8)>0.6) & (data.volume>=(1.5)*(MA(data.volume,5))) & COUNT((VARE>=VARF),3) & (REF(data.low,1)=LLV(data.low,120)),1,0),data.low,'¡ñÂò½ø'),COLORFF00FF 
#     DRAWTEXT(IF(((COUNT((data.close<REF(data.close,1)),13))/(13)>0.6) & COUNT((VARE>VARF),6) & (REF(data.low,5)=LLV(data.low,120)) & REF((data.close>=data.open),4) & REF((data.close>data.open),3) & REF((data.close>data.open),2) & REF((data.open>data.close),1) & (data.open>REF(data.close,1)),1,0),data.low,'¡ñÂò½ø'),COLOR00FFFF 
    VAR10=(MA(data.close,80)-(MA(data.close,10))/(3))*(T1) 
    
    return pd.DataFrame({
        'M3': M3,
        'VAR1': VAR1,
        'VAR2': VAR2,
        'VAR3': VAR3,
        'VAR4': VAR4,
        'VAR5': VAR5,
        'VAR6': VAR6,
        'VAR7': VAR7,
        'VAR8': VAR8,
        'VAR9': VAR9,
        'VARA': VARA,
        'VARB': VARB,
        'VARC': VARC,
        'VARD': VARD,
        'VARE': VARE,
        'VARF': VARF,
        'VAR10': VAR10,
        'Line1': Line1,
        'Line2': Line2,
        'Text1': Text1,
        'Text2': Text2,
        'Text3': Text3,
        'Text4': Text4,
        'Text5': Text5,
    })

yutiansut avatar Sep 18 '19 17:09 yutiansut

指标写完了 你肯定想看看效果 满足你 此处数据太多 我们展示最后25行

ind = data.add_func(indx)
ind.tail(25)
M3 VAR1 VAR2 VAR3 VAR4 VAR5 VAR6 VAR7 VAR8 VAR9 ... VARE VARF VAR10 Line1 Line2 Text1 Text2 Text3 Text4 Text5
date code
2019-08-14 000001 14.877021 13.373625 14.996667 14.418641 14.290191 14.910 15.119495 14.89 70.181181 0 ... 63.375610 20.599233 8.637583 14.418641 14.290191 0 0 0 0 0
2019-08-15 000001 14.908510 13.398722 14.833333 14.494040 14.418641 15.010 15.223727 14.97 68.851490 1 ... 70.204363 35.616017 8.612208 14.494040 14.418641 0 0 0 0 0
2019-08-16 000001 14.904255 13.425360 14.940000 14.575123 14.494040 14.780 15.312648 14.94 66.880366 0 ... 80.421536 48.279572 8.582917 14.575123 14.494040 0 0 0 0 0
2019-08-19 000001 14.912128 13.453400 14.793333 14.614798 14.575123 14.960 15.393137 14.90 67.424380 0 ... 83.076009 59.288206 8.541208 14.614798 14.575123 0 0 0 0 0
2019-08-20 000001 14.951064 13.482734 14.986667 14.682410 14.614798 14.730 15.469484 14.92 69.471949 0 ... 92.468296 68.260018 8.494083 14.682410 14.614798 0 0 0 0 0
2019-08-21 000001 14.700532 13.512667 14.573333 14.662578 14.682410 14.985 15.477505 14.99 44.371096 1 ... 86.837639 75.704441 8.467750 14.682410 14.662578 0 0 1 0 0
2019-08-22 000001 14.505266 13.542552 14.320000 14.600291 14.662578 14.635 15.480541 14.45 39.999731 0 ... 82.862440 78.974260 8.476583 14.662578 14.600291 0 0 0 0 0
2019-08-23 000001 14.577633 13.572288 14.580000 14.596602 14.600291 14.325 15.505853 14.31 53.093099 0 ... 96.197431 81.750504 8.479125 14.600291 14.596602 0 0 0 0 0
2019-08-26 000001 14.413816 13.601382 14.300000 14.542674 14.596602 14.545 15.504805 14.65 40.855926 0 ... 90.325930 85.914410 8.513125 14.596602 14.542674 0 0 0 0 0
2019-08-27 000001 14.361908 13.629573 14.343333 14.506431 14.542674 14.325 15.502408 14.25 43.149005 0 ... 93.103939 87.693276 8.550458 14.542674 14.506431 0 0 0 0 0
2019-08-28 000001 14.315954 13.656663 14.200000 14.450716 14.506431 14.360 15.504222 14.31 41.885923 0 ... 89.762817 89.125966 8.590292 14.506431 14.450716 0 0 0 0 0
2019-08-29 000001 14.222977 13.682399 14.150000 14.396040 14.450716 14.165 15.504098 14.27 37.413859 0 ... 91.286061 89.507330 8.636417 14.450716 14.396040 0 0 0 0 0
2019-08-30 000001 14.191489 13.706679 14.216667 14.363427 14.396040 14.160 15.487581 14.13 39.040973 0 ... 95.808358 90.602215 8.686083 14.396040 14.363427 0 0 0 0 0
2019-09-02 000001 14.320744 13.729765 14.353333 14.361592 14.363427 14.245 15.415975 14.16 52.861858 0 ... 103.285372 93.167545 8.723875 14.363427 14.361592 0 0 0 0 0
2019-09-03 000001 14.310372 13.751701 14.353333 14.360090 14.361592 14.305 15.312087 14.45 46.499911 0 ... 104.045453 96.624523 8.771875 14.361592 14.360090 0 0 0 0 0
2019-09-04 000001 14.375186 13.772682 14.416667 14.370377 14.360090 14.380 15.210253 14.30 52.698667 0 ... 104.783586 99.180099 8.796583 14.370377 14.360090 1 0 0 0 0
2019-09-05 000001 14.477593 13.792994 14.660000 14.423036 14.370377 14.405 15.214165 14.44 58.331246 0 ... 113.187268 101.980737 8.808333 14.423036 14.370377 0 0 0 0 0
2019-09-06 000001 14.643797 13.813059 14.746667 14.481878 14.423036 14.700 15.236314 14.58 66.074257 0 ... 111.652124 105.545846 8.827500 14.481878 14.423036 0 0 0 0 0
2019-09-09 000001 14.666898 13.833019 14.763333 14.533051 14.481878 14.715 15.167597 14.81 59.360063 0 ... 109.589451 107.352315 8.840958 14.533051 14.481878 0 0 0 0 0
2019-09-10 000001 14.608449 13.852810 14.533333 14.533103 14.533051 14.800 15.131346 14.69 52.147513 0 ... 100.263702 107.062869 8.860083 14.533103 14.533051 0 0 0 0 0
2019-09-11 000001 14.584225 13.872386 14.576667 14.541023 14.533103 14.525 15.076714 14.55 52.627183 0 ... 102.017382 104.991139 8.875417 14.541023 14.533103 0 0 0 0 0
2019-09-12 000001 14.632112 13.891829 14.663333 14.563262 14.541023 14.585 15.034383 14.56 58.457105 0 ... 104.488490 104.274179 8.885583 14.563262 14.541023 0 0 0 0 0
2019-09-16 000001 14.541056 13.910944 14.523333 14.556002 14.563262 14.655 14.980293 14.68 45.842009 0 ... 98.326423 103.661627 8.902917 14.563262 14.556002 0 0 0 0 0
2019-09-17 000001 14.390528 13.929391 14.290000 14.507638 14.556002 14.560 14.915828 14.45 37.273719 0 ... 87.545335 100.686525 8.933542 14.556002 14.507638 0 0 0 0 0
2019-09-18 000001 14.400264 13.947127 14.376667 14.483825 14.507638 14.315 14.813055 14.24 46.685140 0 ... 95.416077 97.179781 8.955375 14.507638 14.483825 0 0 0 0 0

25 rows × 24 columns

yutiansut avatar Sep 18 '19 17:09 yutiansut

你会惊讶 卧槽 这么简单的吗, 没错 让我们来对比下数据

image image

yutiansut avatar Sep 18 '19 17:09 yutiansut

image image

yutiansut avatar Sep 18 '19 17:09 yutiansut

so easy 麻麻再也不用担心通达信的代码转换问题了

yutiansut avatar Sep 18 '19 17:09 yutiansut

ISSUE#1299 群友指标.zip

相关代码附件

yutiansut avatar Sep 18 '19 17:09 yutiansut

厉害厉害,特来给天神点个赞

royburns avatar Sep 18 '19 23:09 royburns

牛逼!

waytrylee avatar Sep 19 '19 15:09 waytrylee

闹不住

zsl3034669 avatar Oct 09 '19 03:10 zsl3034669

威武!!!

zhizunbao84 avatar Oct 23 '19 03:10 zhizunbao84

牛逼

zhizunbao84 avatar Jun 11 '20 05:06 zhizunbao84

天神v5

Froid-M avatar Feb 22 '21 15:02 Froid-M