请高手帮我把下面的通达信指标公式再修改一下

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请高手帮我把下面的通达信指标公式再修改一下相关的知识,希望对你有一定的参考价值。

N1:1,100,10;N2:1,100,10;DISP:=1,3,2;
N1:=10;N2:=10;DISP:=2;
K:=IF(PERIOD=5,1,日
IF(PERIOD=6,1,周
IF(PERIOD=7,1,月
IF(PERIOD=8,1,多分钟
IF(PERIOD=9,1,多日
IF(PERIOD=10,1,季
IF(PERIOD=11,2,年
IF(PERIOD=4,1,60F
IF(PERIOD=3,1,30F
IF(PERIOD=2,1,15F
IF(PERIOD=1,15F,11F)))))))))))/10;
P1:=PEAK(1,K*N1,1);
P2:=PEAK(1,K*N1,2);
WP1:=PEAKBARS(1,K*N1,1);
WP2:=PEAKBARS(1,K*N1,2);
T1:=TROUGH(2,K*N2,1);
T2:=TROUGH(2,K*N2,2);
WT1:=TROUGHBARS(2,K*N2,1);
WT2:=TROUGHBARS(2,K*N2,2);
TJ1:=P1>T1 AND P2>T2 ;
ZD:=MAX(T1,T2);
ZG:=MIN(P1,P2);
LL:=MIN(T1,T2);
HH:=MAX(P1,P2);
TJ2:=FILTER(ZG>ZD,2);
TJ3:=ZG=REF(ZG,BARSLAST(TJ2)) OR ZD=REF(ZD,BARSLAST(TJ2));
TJ4:=TJ1&&TJ2&&NOT(TJ3);
TJ5:=BETWEEN(ZD,REF(ZD,REF(BARSLAST(TJ4),1)),REF(ZG,REF(BARSLAST(TJ4),1)));
TJ6:=BETWEEN(ZG,REF(ZD,REF(BARSLAST(TJ4),1)),REF(ZG,REF(BARSLAST(TJ4),1)));
TJ7:=ZG>REF(ZG,REF(BARSLAST(TJ4),1))&&ZD<REF(ZD,REF(BARSLAST(TJ4),1));
TJ8:=TJ4&&NOT(TJ5 OR TJ6 OR TJ7);
ZSD:=IF(TJ8,ZD,DRAWNULL);
ZSG:=IF(TJ8,ZG,DRAWNULL);
ZSH:=IF(TJ8,HH,DRAWNULL);
ZSL:=IF(TJ8,LL,DRAWNULL);
STICKLINE(TJ8,ZSH,ZSL,0,-1),COLORMAGENTA;
STICKLINE(TJ8,ZSD,ZSG,IF(DISP=1,3,0),1),COLORMAGENTA;
DRAWTEXT(DISP=2,ZSH,'中枢'),COLORWHITE;
中枢高:PLOYLINE(DISP=2,REF(ZSD,BARSLAST(TJ8))),COLORFF00FF
,POINTDOT,LINETHICK4;
中枢低:PLOYLINE(DISP=2,REF(ZSG,BARSLAST(TJ8))),COLORYELLOW,POINTDOT,LINETHICK4;
中枢最高:PLOYLINE(DISP=2,REF(ZSH,BARSLAST(TJ8))),POINTDOT,COLORRED;
中枢最低:PLOYLINE(DISP=2,REF(ZSL,BARSLAST(TJ8))),POINTDOT,COLORGREEN;
趋势高:PLOYLINE(DISP=3,ZIG(1,K*N1)),COLORLIBLUE;
趋势低:PLOYLINE(DISP=3,ZIG(2,K*N2)),COLORLIBLUE;
局部低点预选A:=BACKSET(LLV(L,5)<REF(LLV(L,4),1),4);
局部低点预选B:=BACKSET(局部低点预选A=0 AND REF(局部低点预选A,1)=1,2);
局部低点预选C:=IF(局部低点预选B=1 AND REF(局部低点预选B,1)=0,-1,0);
局部高点预选A:=BACKSET(HHV(H,5)>REF(HHV(H,4),1),4);
局部高点预选B:=BACKSET(局部高点预选A=0 AND REF(局部高点预选A,1)=1,2);
局部高点预选C:=IF(局部高点预选B=1 AND REF(局部高点预选B,1)=0,1,0);
缺口判断:=IF(L>REF(H,1),1,IF(H<REF(L,1),-1,0));
能否把连接上下两个中枢的线段去掉,成为两个独立的中枢,粗线段改成细线段,就像立桩量主图那样的。请高手费心,在帮助改一下。衷心向高手表示谢意,谢谢!

N1:=10;N2:=10;DISP:=2;
K:=IF(PERIOD=5,1,日
IF(PERIOD=6,1,周
IF(PERIOD=7,1,月
IF(PERIOD=8,1,多分钟
IF(PERIOD=9,1,多日
IF(PERIOD=10,1,季
IF(PERIOD=11,2,年
IF(PERIOD=4,1,60F
IF(PERIOD=3,1,30F
IF(PERIOD=2,1,15F
IF(PERIOD=1,15F,11F)))))))))))/10;
P1:=PEAK(1,K*N1,1);
P2:=PEAK(1,K*N1,2);
WP1:=PEAKBARS(1,K*N1,1);
WP2:=PEAKBARS(1,K*N1,2);
T1:=TROUGH(2,K*N2,1);
T2:=TROUGH(2,K*N2,2);
WT1:=TROUGHBARS(2,K*N2,1);
WT2:=TROUGHBARS(2,K*N2,2);
TJ1:=P1>T1 AND P2>T2 ;
ZD:=MAX(T1,T2);
ZG:=MIN(P1,P2);
LL:=MIN(T1,T2);
HH:=MAX(P1,P2);
TJ2:=FILTER(ZG>ZD,2);
TJ3:=ZG=REF(ZG,BARSLAST(TJ2)) OR ZD=REF(ZD,BARSLAST(TJ2));
TJ4:=TJ1&&TJ2&&NOT(TJ3);
TJ5:=BETWEEN(ZD,REF(ZD,REF(BARSLAST(TJ4),1)),REF(ZG,REF(BARSLAST(TJ4),1)));
TJ6:=BETWEEN(ZG,REF(ZD,REF(BARSLAST(TJ4),1)),REF(ZG,REF(BARSLAST(TJ4),1)));
TJ7:=ZG>REF(ZG,REF(BARSLAST(TJ4),1))&&ZD<REF(ZD,REF(BARSLAST(TJ4),1));
TJ8:=TJ4&&NOT(TJ5 OR TJ6 OR TJ7);
ZSD:=IF(TJ8,ZD,DRAWNULL);
ZSG:=IF(TJ8,ZG,DRAWNULL);
ZSH:=IF(TJ8,HH,DRAWNULL);
ZSL:=IF(TJ8,LL,DRAWNULL);
STICKLINE(TJ8,ZSH,ZSL,0,-1),COLORMAGENTA;
STICKLINE(TJ8,ZSD,ZSG,IF(DISP=1,3,0),1),COLORMAGENTA;
DRAWTEXT(DISP=2,ZSH,'中枢'),COLORWHITE;
中枢高:=PLOYLINE(DISP=2,REF(ZSD,BARSLAST(TJ8))),COLORFF00FF
,POINTDOT,LINETHICK4;
中枢低:=PLOYLINE(DISP=2,REF(ZSG,BARSLAST(TJ8))),COLORYELLOW,POINTDOT,LINETHICK4;
中枢最高:PLOYLINE(DISP=2,REF(ZSH,BARSLAST(TJ8))),POINTDOT,COLORRED;
中枢最低:PLOYLINE(DISP=2,REF(ZSL,BARSLAST(TJ8))),POINTDOT,COLORGREEN;
趋势高:PLOYLINE(DISP=3,ZIG(1,K*N1)),COLORLIBLUE;
趋势低:PLOYLINE(DISP=3,ZIG(2,K*N2)),COLORLIBLUE;
局部低点预选A:=BACKSET(LLV(L,5)<REF(LLV(L,4),1),4);
局部低点预选B:=BACKSET(局部低点预选A=0 AND REF(局部低点预选A,1)=1,2);
局部低点预选C:=IF(局部低点预选B=1 AND REF(局部低点预选B,1)=0,-1,0);
局部高点预选A:=BACKSET(HHV(H,5)>REF(HHV(H,4),1),4);
局部高点预选B:=BACKSET(局部高点预选A=0 AND REF(局部高点预选A,1)=1,2);
局部高点预选C:=IF(局部高点预选B=1 AND REF(局部高点预选B,1)=0,1,0);
缺口判断:=IF(L>REF(H,1),1,IF(H<REF(L,1),-1,0));
参考技术A N1:=10;N2:=10;DISP:=2;
K:=IF(PERIOD=5,1,日
IF(PERIOD=6,1,周
IF(PERIOD=7,1,月
IF(PERIOD=8,1,多分钟
IF(PERIOD=9,1,多日
IF(PERIOD=10,1,季
IF(PERIOD=11,2,年
IF(PERIOD=4,1,60F
IF(PERIOD=3,1,30F
IF(PERIOD=2,1,15F
IF(PERIOD=1,15F,11F)))))))))))/10;
P1:=PEAK(1,K*N1,1);
P2:=PEAK(1,K*N1,2);
WP1:=PEAKBARS(1,K*N1,1);
WP2:=PEAKBARS(1,K*N1,2);
T1:=TROUGH(2,K*N2,1);
T2:=TROUGH(2,K*N2,2);
WT1:=TROUGHBARS(2,K*N2,1);
WT2:=TROUGHBARS(2,K*N2,2);
TJ1:=P1>T1 AND P2>T2 ;
ZD:=MAX(T1,T2);
ZG:=MIN(P1,P2);
LL:=MIN(T1,T2);
HH:=MAX(P1,P2);
TJ2:=FILTER(ZG>ZD,2);
TJ3:=ZG=REF(ZG,BARSLAST(TJ2)) OR ZD=REF(ZD,BARSLAST(TJ2));
TJ4:=TJ1&&TJ2&&NOT(TJ3);
TJ5:=BETWEEN(ZD,REF(ZD,REF(BARSLAST(TJ4),1)),REF(ZG,REF(BARSLAST(TJ4),1)));
TJ6:=BETWEEN(ZG,REF(ZD,REF(BARSLAST(TJ4),1)),REF(ZG,REF(BARSLAST(TJ4),1)));
TJ7:=ZG>REF(ZG,REF(BARSLAST(TJ4),1))&&ZD<REF(ZD,REF(BARSLAST(TJ4),1));
TJ8:=TJ4&&NOT(TJ5 OR TJ6 OR TJ7);
ZSD:=IF(TJ8,ZD,DRAWNULL);
ZSG:=IF(TJ8,ZG,DRAWNULL);
ZSH:=IF(TJ8,HH,DRAWNULL);
ZSL:=IF(TJ8,LL,DRAWNULL);
STICKLINE(TJ8,ZSH,ZSL,0,-1),COLORMAGENTA,NODRAW;
STICKLINE(TJ8,ZSD,ZSG,IF(DISP=1,3,0),1),COLORMAGENTA,NODRAW;
DRAWTEXT(DISP=2,ZSH,'中枢'),COLORWHITE;
中枢高:PLOYLINE(DISP=2,REF(ZSD,BARSLAST(TJ8))),COLORFF00FF
,POINTDOT,LINETHICK1;
中枢低:PLOYLINE(DISP=2,REF(ZSG,BARSLAST(TJ8))),COLORYELLOW,POINTDOT,LINETHICK1;
中枢最高:PLOYLINE(DISP=2,REF(ZSH,BARSLAST(TJ8))),POINTDOT,COLORRED;
中枢最低:PLOYLINE(DISP=2,REF(ZSL,BARSLAST(TJ8))),POINTDOT,COLORGREEN;
趋势高:PLOYLINE(DISP=3,ZIG(1,K*N1)),COLORLIBLUE;
趋势低:PLOYLINE(DISP=3,ZIG(2,K*N2)),COLORLIBLUE;
局部低点预选A:=BACKSET(LLV(L,5)<REF(LLV(L,4),1),4);
局部低点预选B:=BACKSET(局部低点预选A=0 AND REF(局部低点预选A,1)=1,2);
局部低点预选C:=IF(局部低点预选B=1 AND REF(局部低点预选B,1)=0,-1,0);
局部高点预选A:=BACKSET(HHV(H,5)>REF(HHV(H,4),1),4);
局部高点预选B:=BACKSET(局部高点预选A=0 AND REF(局部高点预选A,1)=1,2);
局部高点预选C:=IF(局部高点预选B=1 AND REF(局部高点预选B,1)=0,1,0);
缺口判断:=IF(L>REF(H,1),1,IF(H<REF(L,1),-1,0));
这是第二种修改放案不知是否提问者所需要
修改成两条直线.
参考技术B N1:=10;N2:=10;DISP:=2;
K:=IF(PERIOD=5,1,日
IF(PERIOD=6,1,周
IF(PERIOD=7,1,月
IF(PERIOD=8,1,多分钟
IF(PERIOD=9,1,多日
IF(PERIOD=10,1,季
IF(PERIOD=11,2,年
IF(PERIOD=4,1,60F
IF(PERIOD=3,1,30F
IF(PERIOD=2,1,15F
IF(PERIOD=1,15F,11F)))))))))))/10;
P1:=PEAK(1,K*N1,1);
P2:=PEAK(1,K*N1,2);
WP1:=PEAKBARS(1,K*N1,1);
WP2:=PEAKBARS(1,K*N1,2);
T1:=TROUGH(2,K*N2,1);
T2:=TROUGH(2,K*N2,2);
WT1:=TROUGHBARS(2,K*N2,1);
WT2:=TROUGHBARS(2,K*N2,2);
TJ1:=P1>T1
AND
P2>T2
;
ZD:=MAX(T1,T2);
ZG:=MIN(P1,P2);
LL:=MIN(T1,T2);
HH:=MAX(P1,P2);
TJ2:=FILTER(ZG>ZD,2);
TJ3:=ZG=REF(ZG,BARSLAST(TJ2))
OR
ZD=REF(ZD,BARSLAST(TJ2));
TJ4:=TJ1&&TJ2&&NOT(TJ3);
TJ5:=BETWEEN(ZD,REF(ZD,REF(BARSLAST(TJ4),1)),REF(ZG,REF(BARSLAST(TJ4),1)));
TJ6:=BETWEEN(ZG,REF(ZD,REF(BARSLAST(TJ4),1)),REF(ZG,REF(BARSLAST(TJ4),1)));
TJ7:=ZG>REF(ZG,REF(BARSLAST(TJ4),1))&&ZD<REF(ZD,REF(BARSLAST(TJ4),1));
TJ8:=TJ4&&NOT(TJ5
OR
TJ6
OR
TJ7);
ZSD:=IF(TJ8,ZD,DRAWNULL);
ZSG:=IF(TJ8,ZG,DRAWNULL);
ZSH:=IF(TJ8,HH,DRAWNULL);
ZSL:=IF(TJ8,LL,DRAWNULL);
STICKLINE(TJ8,ZSH,ZSL,0,-1),COLORMAGENTA;
STICKLINE(TJ8,ZSD,ZSG,IF(DISP=1,3,0),1),COLORMAGENTA;
DRAWTEXT(DISP=2,ZSH,'中枢'),COLORWHITE;
中枢高:=PLOYLINE(DISP=2,REF(ZSD,BARSLAST(TJ8))),COLORFF00FF
,POINTDOT,LINETHICK4;
中枢低:=PLOYLINE(DISP=2,REF(ZSG,BARSLAST(TJ8))),COLORYELLOW,POINTDOT,LINETHICK4;
中枢最高:PLOYLINE(DISP=2,REF(ZSH,BARSLAST(TJ8))),POINTDOT,COLORRED;
中枢最低:PLOYLINE(DISP=2,REF(ZSL,BARSLAST(TJ8))),POINTDOT,COLORGREEN;
趋势高:PLOYLINE(DISP=3,ZIG(1,K*N1)),COLORLIBLUE;
趋势低:PLOYLINE(DISP=3,ZIG(2,K*N2)),COLORLIBLUE;
局部低点预选A:=BACKSET(LLV(L,5)<REF(LLV(L,4),1),4);
局部低点预选B:=BACKSET(局部低点预选A=0
AND
REF(局部低点预选A,1)=1,2);
局部低点预选C:=IF(局部低点预选B=1
AND
REF(局部低点预选B,1)=0,-1,0);
局部高点预选A:=BACKSET(HHV(H,5)>REF(HHV(H,4),1),4);
局部高点预选B:=BACKSET(局部高点预选A=0
AND
REF(局部高点预选A,1)=1,2);
局部高点预选C:=IF(局部高点预选B=1
AND
REF(局部高点预选B,1)=0,1,0);
缺口判断:=IF(L>REF(H,1),1,IF(H<REF(L,1),-1,0));
参考技术C 谢谢高手!能把它修改成两条直线吗?谢谢!

自己做量化交易软件(45)小白量化实战18--直接使用通达信自编指标公式进行分析绘图和回测

自己做量化交易软件(45)小白量化实战18–直接使用通达信自编指标公式进行分析绘图和回测
小白量化一代提供了Python公式算法模式来写量化程序。
小白量化二代提供了仿通达信公式的模式来写量化程序。
小白量化三代除了仿通达信公式的模式来写量化程序外(见前几篇博客),还支持股票指标直接运算模式。这篇介绍直接使用通达信公式进行回测。
运行公式需要使用小白通达信公式库HP_tdxgs。

import HP_tdxgs as hgs  #小白通达信公式库
tgs1=hgs.Tdxgs()   #创建公式类对象
tgs1.loaddf(df)    #加载行情表
mydf=tgs1.rungs(gs)  #运行公式文本
tgs1.brawline(ax1)   #简单绘制公式指标

其中df是行情库,gs是通达信公式文本。返回包含公式变量的行情库mydf。
tgs1.bl属性是公式中的所有变量名
tgs1.bl2属性是公式中的所有要输出变量名
tgs1.brawline(ax1) #简单绘制公式指标
tgs1.drw属性可以用来自己设计复杂的指标绘图。
tgs1.df属性是运行公式后的mydf表。
下面看KDJ,MACD公式运算的演示程序。

import pandas as pd  
import numpy  as np
import matplotlib.pyplot as plt
import HP_tdx as htdx#小白通达信行情库 
from HP_formula import *   #小白股票指标公式函数库
import HP_tdxgs as hgs  #小白通达信公式库

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

tdxapi=htdx.TdxInit(ip='180.153.18.171')
df=hgs.get_security_bars()

#KDJ指标
gs='''
N:=9;
M1:=3;
M2:=3;
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:SMA(RSV,M1,1), CIRCLEDOT,COLORFF0000,LINETHICK2;
D:SMA(K,M2,1), LINETHICK3 , COLOR00FF00 ;
J:3*K-2*D, LINETHICK2, COLOR0000FF;
'''

#MACD指标
gs2='''
SHORT:=12;
LONG:=26;
MID:=9;
DIF:EMA(CLOSE,SHORT)-EMA(CLOSE,LONG);
DEA:EMA(DIF,MID);
MACD2:(DIF-DEA)*2,COLORSTICK;
'''

#LHXJ 猎狐先觉
gs3='''
VAR1=(CLOSE*2+HIGH+LOW)/4;
VAR2=EMA(VAR1,13)-EMA(VAR1,34);
VAR3=EMA(VAR2,5);
zlqp:(-2)*(VAR2-VAR3)*3.8;
zlkp:2*(VAR2-VAR3)*3.8;
'''
   
#绘制图形
plt.figure(1,figsize=(10,6), dpi=100)
#绘制主图指标
ax1=plt.subplot(311)
#绘制副图指标
ax2=plt.subplot(312)
#绘制副图指标
ax3=plt.subplot(313)

tgs1=hgs.Tdxgs()
tgs1.loaddf(df)
mydf=tgs1.rungs(gs)
print('KDJ指标:\\n',gs)
print('公式变量:',tgs1.bl)
print('输出变量:',tgs1.bl2)
tgs1.brawline(ax1)

#print(gs2)
tgs2=hgs.Tdxgs()
tgs2.loaddf(df)
mydf=tgs2.rungs(gs2)
tgs2.brawline(ax2)

#print(gs2)
tgs3=hgs.Tdxgs()
tgs3.loaddf(df)
mydf=tgs3.rungs(gs3)
tgs3.brawline(ax3)    
plt.show()

程序运行结果。

下面看看如何利用KDJ指标进行回测。

# -*- coding: utf-8 -*-
"""
##  小白量化事件回测程序--A股回测
#购买<零基础搭建量化投资系统>正版书,送小白一、二代量化软件源代码。
# https://item.jd.com/61567375505.html
#独狼荷蒲qq:2775205
#通通python量化群:524949939
#电话微信:18578755056
#微信公众号:独狼股票分析
#最后修改日期:20210923"""
import pandas as pd  
import numpy  as np
import datetime as dt
import time
import matplotlib.pyplot as plt

import HP_tdx as htdx#小白通达信行情库 
from HP_formula import *   #小白股票指标公式函数库
import HP_tdxgs as hgs  #小白通达信公式库
import HP_quant as hqu   #小白量化事件回测


plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

code='600030'

tdxapi=htdx.TdxInit(ip='180.153.18.171')
df=hgs.get_security_bars(code=code,nCount=800)

#KDJ指标
gs='''
N:=22;
M1:=11;
M2:=22;
RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100;
K:SMA(RSV,M1,1), CIRCLEDOT,COLORFF0000,LINETHICK2;
D:SMA(K,M2,1), LINETHICK3 , COLOR00FF00 ;
J:3*K-2*D, LINETHICK2, COLOR0000FF;
B:CROSS(K,D);
S:=CROSS(D,K);
'''

tgs1=hgs.Tdxgs()
tgs1.loaddf(df)
mydf=tgs1.rungs(gs)


G=hqu.GlobalVars()   #用户全局变量
context = hqu.Context()  #创建回测句柄
data = hqu.Data()  #创建交易数据

data.code=code   #回测品种
data.price=0.0  #成本价

def initialize(context,df):
    print('回测初始化')
    context.f1=0.001   #买入佣金
    context.f2=0.001   #卖出佣金
    context.f3=0.001   #买入印花税
    context.f4=0.00   #卖出印花税
    context.f5=0.00005   #交易费(香港)
    context.f6=0.000027   #交易征费(香港)
    context.f7=0.00002   #交收费(香港)
    context.lot=100   #每手股数
    
    # 定义一个全局变量, 保存要操作的证券                                                                                           
    context.stocks = []   #股票池
    context.cash=1000000.00    #初始现金
    context.cash2=context.cash    #初始现金
    context.i=0        #i是起始位置
    context.start=0        #i是起始位置
    context.end=1500        #i是结束位置

    df['mode']=0  #买卖状态
    df['yl']=0   #盈利
    df['jz']=context.cash  #净值

    context.mydf=df    #df数据
    context.yingli=5.0   #基准盈利
    context.kuisun=-10.0  #基准亏损
    context.volume=0.00   #持仓量
    context.mode=0   #买单状态0:空仓,1:多单,2:空单
    context.end=len(context.mydf)  #结束位置
    context.start=0        #i是起始位置
    context.dc=0.5   #点差
    context.price=0.0   #成本价
    context.s1=0   #买多次数
    context.s2=0   #买空次数
    context.s3=0   #平仓次数
    context.s4=0   #止损次数

#买
def buy(context, data,volume=0.1):
    cash=context.cash
    lot=int(cash/(data.close*(1+context.f1+context.f3))/context.lot)
    context.volume=lot
    context.cash=cash-lot*context.lot*data.close*(1+context.f1+context.f3+context.f5+context.f6+context.f7)
    data.price=data.close*(1+context.f1+context.f3)
    context.mode=1
    context.price=data.price
    context.s1=context.s1+1
    print('买入',lot,data.price)

#卖    
def sell(context, data,volume=0.1):
    cash=data.close*(1-context.f2-context.f4)*context.lot*context.volume
    context.cash=context.cash+cash
    data.price=data.close*(1-context.f2-context.f4)
    lot=context.volume
    context.price=data.price
    context.mode=0
    context.volume=0.0
    context.s2=context.s2+1
    print('卖出',lot,data.price)

mydf['HL']=0.00  #获利比例

#策略初始化
initialize(context,mydf)
context.end=len(mydf)
print(mydf)

#用户策略
def handle_data(context,data):
    i=context.i

    #获取每个数据的值
    df3=context.mydf
    data.high=df3.at[i,'high']
    data.low=df3.at[i,'low']
    data.open=df3.at[i,'open']
    data.close=df3.at[i,'close']
    B=df3.at[i,'B']
    S=df3.at[i,'S']
    
    #计算买卖
    if context.mode==0 and B==1:  #买多
        buy(context, data)
    elif context.mode==1 and S==1:  #买空
        sell(context, data)
    
    #计算获利率
    context.mydf.at[i,'HL']=(context.cash+context.volume*context.lot*data.close-context.cash2)/context.cash2*100
    context.i=i+1   #继续下一个周期

#开始回测
m=context.end-context.start
#循环回测
for i in range(context.start,context.end):
    context.i=i
    handle_data(context,data)
    print('当前进度:',(i*100/m),'资金: ',context.cash)

print('买多:',context.s1,'买空:',context.s2,'止损:',context.s4,'资金:',context.cash)    
print('持仓:', context.volume*context.lot,'现价:',data.close)
print('初始资产:',context.cash2)
print('当前资产:',round(context.cash+context.volume*context.lot*data.close,2))
print('涨幅:',round(((context.cash+context.volume*context.lot*data.close)-context.cash2)*100/context.cash2,2),"%")

######下面是绘图
mydf=context.mydf


#绘制图形
plt.figure(1,figsize=(12,8), dpi=80)

#绘制主图指标
ax1=plt.subplot(311)
mydf['K'].plot.line(legend=True)
mydf['D'].plot.line(legend=True)
mydf['J'].plot.line(legend=True)

#绘制副图指标
ax2=plt.subplot(312)
mydf['B'].plot.line(legend=True)
mydf['S'].plot.line(legend=True)

#绘制副图指标
ax2=plt.subplot(313)
mydf.HL.plot(color='orange', grid='on',legend=True)
mydf.B.plot(color='blue',legend=True)
mydf.S.plot(color='green',legend=True)
#添加标题
plt.title(code+'  获利')
plt.show()

程序运行结果:

当前进度: 99.25 资金:  1004.8229200041387
当前进度: 99.375 资金:  1004.8229200041387
当前进度: 99.5 资金:  1004.8229200041387
当前进度: 99.625 资金:  1004.8229200041387
当前进度: 99.75 资金:  1004.8229200041387
当前进度: 99.875 资金:  1004.8229200041387
买多: 16 买空: 15 止损: 0 资金: 1004.8229200041387
持仓: 76400 现价: 26.2
初始资产: 1000000.0
当前资产: 2002684.82
涨幅: 100.27 %


我们正在设计第三代小白量化平台,这篇介绍了其中的工作进展。

请持续关注我的博客,我的进步,就是你的进步!

以上是关于请高手帮我把下面的通达信指标公式再修改一下的主要内容,如果未能解决你的问题,请参考以下文章

通达信软体一天的虚拟成交量哪里调的

请高手将通达信选股公式修改为益盟公式

第十八篇——怎么在通达信上设置连板次数以及所属行业(从零起步编写通达信指标公式系列)

请高手帮忙把以下通达信的公式改为大智慧的公式!

通达信怎样获取每日的沪深个股总数量

自己做量化交易软件(45)小白量化实战18--直接使用通达信自编指标公式进行分析绘图和回测