VeighNa量化社区
你的开源社区量化交易平台
Member
avatar
加入于:
帖子: 419
声望: 170

远山 wrote:

请问下楼主,怎么不让K线、成交量等图形不要顶着视图的上下边框绘制(如K线视图,最高价最低价都是顶着上下边框绘制的)?一来有些指标绘制会超过视图内所有K线的最低最高价,二来也很不美观。对Qt的图形编程完全是门外汉,看了看代码,暂时没找出修改的地方。
另外,少量K线时,每根K线显示得非常大,按缩放键也不起作用。看代码似乎最小缩放比例跟载入的K线数量有关,如果想让少量K线也能缩放到合适观看的尺寸,需要怎么修改?

你说的让K线、成交量等图形不要顶着视图的上下边框绘制,其实特别容易,只要修改下容纳chart_widget的容器就可以了。研究下Qt5的界面设计就OK了。
K线图的操控在pyQtGraph中有标准的方法,如按住鼠标左键左右拖动,滚轮前后波动等等,自己摸索下吧。

Member
avatar
加入于:
帖子: 22
声望: 2

楼主大神,代码合入主干呀,这么牛逼的功能,现在VNPY的K线功能太弱了

Member
avatar
加入于:
帖子: 22
声望: 2

老师您好!
我的版本是2.1.9, 在 类 OrderItem 中有一个引用错误, self.orders : Dict[int,Dict[str,Order]] = {} # {ix:{orderid:order}}
这个Order 是引用那个对象,谢谢!

Member
avatar
加入于:
帖子: 419
声望: 170

wangjiancc wrote:

老师您好!
我的版本是2.1.9, 在 类 OrderItem 中有一个引用错误, self.orders : Dict[int,Dict[str,Order]] = {} # {ix:{orderid:order}}
这个Order 是引用那个对象,谢谢!

好久没有升级,我还不知道,这两天我升级下,看看是什么问题。

Member
avatar
加入于:
帖子: 22
声望: 2

hxxjava wrote:

wangjiancc wrote:

老师您好!
我的版本是2.1.9, 在 类 OrderItem 中有一个引用错误, self.orders : Dict[int,Dict[str,Order]] = {} # {ix:{orderid:order}}
这个Order 是引用那个对象,谢谢!

好久没有升级,我还不知道,这两天我升级下,看看是什么问题。

老师好,这个问题您看了吗? Unresolved reference 'Order'

Member
avatar
加入于:
帖子: 20
声望: 0

大神,用您的代码没有出现图表,显示没有历史数据,但历史数据我已经下载。
description

Member
avatar
加入于:
帖子: 20
声望: 0

description

Member
avatar
加入于:
帖子: 11
声望: 0

楼主,有没有办法画2条以上的均线呀,现在的代码很简练,但是不知道怎么改成2条或者3条均线的。

Member
avatar
加入于:
帖子: 11
声望: 0

自己试着改了下,用了一个二维字典存储各个周期的均线图,目前运行还可以(有点小瑕疵),把代码po出来,就当抛砖引玉了。
class SmaItem(CandleItem):
""""""

def __init__(self, manager: BarManager):
    """"""
    super().__init__(manager)

    self.blue_pen: QtGui.QPen

    #self.sma_window = 10
    #self.sma_data: Dict[int, float] = {} #modified by lnt
    self.sma_data : Dict = {}


#二维数据结构
def addtwodimdict(self,thedict, key_a, key_b, val) -> dict:
    if key_a in thedict:
        thedict[key_a].update({key_b: val})
    else:
        thedict.update({key_a:{key_b: val}})
    return thedict


#def get_sma_value(self, ix: int) -> float: 
def get_sma_value(self, ix: int,ma_sd:list) -> list:#modified by lnt
    """"""
    ma_rt = []
    if ix < 0:
        for i in range(len(ma_sd)):#全部赋值nan
            ma_rt.append(math.nan)        
        return ma_rt
    # When initialize, calculate all rsi value
    if not self.sma_data:
        bars = self._manager.get_all_bars()
        close_data = [bar.close_price for bar in bars]            
        for m in range(len(ma_sd)):
            sma_array = talib.SMA(np.array(close_data), ma_sd[m])
            for n, value in enumerate(sma_array):
                self.sma_data = self.addtwodimdict(self.sma_data,ma_sd[m],n,value) 
    # Return if already calcualted
    if ix in self.sma_data[ma_sd[0]]:
        for i in range(len(ma_sd)):
            ma_rt.append(self.sma_data[ma_sd[i]][ix])
        return ma_rt
    # Else calculate new value
    close_data = []
    for n in range(ix - self.sma_window, ix + 1):
        bar = self._manager.get_bar(n)
        close_data.append(bar.close_price)
    for n in range(len(ma_sd)):
        sma_array = talib.SMA(np.array(close_data), ma_sd[n])
        sma_value = sma_array[-1]
        self.sma_data = self.addtwodimdict(self.sma_data,ma_sd[n],ix,sma_value) 
        ma_rt.append(sma_value)
    return ma_rt

def _draw_bar_picture(self, ix: int, bar: BarData) -> QtGui.QPicture:
    """"""
    ma = [5,10,20,30,60,120]
    sma_value = self.get_sma_value(ix,ma)
    last_sma_value = self.get_sma_value(ix - 1,ma)
    # Create objects
    picture = QtGui.QPicture()
    painter = QtGui.QPainter(picture)

    # Set painter color      
    pencolor =[(255, 0, 0),(255, 255, 255),(255, 100, 255),(255, 255, 0),(0,255,0),(0,0,255)]
    penwidth = [1,1,1,2,1,1,1,1]
    # Draw Line
    for k in range(len(ma)):
        start_point = QtCore.QPointF(ix-1, last_sma_value[k])
        end_point = QtCore.QPointF(ix, sma_value[k])
        self.blue_pen = pg.mkPen(color=pencolor[k], width=penwidth[k])
        painter.setPen(self.blue_pen)
        painter.drawLine(start_point, end_point)
    # Finish
    painter.end()
    return picture
Member
avatar
加入于:
帖子: 23
声望: 0

description

description

我在复制如上代码之后,会碰到这两个问题,不知如何解决。

Member
avatar
加入于:
帖子: 419
声望: 170

longgerchen wrote:

description

description

我在复制如上代码之后,会碰到这两个问题,不知如何解决。

答复:
第一个是需要修改为OrderData,
原来的是错误的,不过好在这只是个注解,不会引擎出错。
第二个是需要在该文件的前面:

from vnpy.trader.constant import Exchange
Member
avatar
加入于:
帖子: 23
声望: 0

hxxjava wrote:

longgerchen wrote:

description

description

我在复制如上代码之后,会碰到这两个问题,不知如何解决。

答复:
第一个是需要修改为OrderData,
原来的是错误的,不过好在这只是个注解,不会引擎出错。
第二个是需要在该文件的前面:

from vnpy.trader.constant import Exchange

感谢大佬的及时回复,第一个问题解决了。但是第二个问题,加了 在kx_chart.py文件头部加了 from vnpy.trader.constant import Exchange 该代码后,问题依旧。
self.setWindowTitle(f"K线图表——{symbol}.{exchange.value},{interval},{start}-{end}") 会提示 该代码里的 symbol、exchange.value、interval、start、end 未定义。

本人语言排插能力堪忧,望大佬帮忙看看。

我安装的是VN station 2.5.6 版本。

Member
avatar
加入于:
帖子: 4
声望: 0

请问楼主,我使用的是2.1.9vnpy,如图vnpy.app.cta_strategy.base中没有EVENT_CTA_TICK,EVENT_CTA_BAR等,请问如何解决?

description

Member
avatar
加入于:
帖子: 419
声望: 170

在vnpy\trader\event.py中自己增加定义即可.

Member
avatar
加入于:
帖子: 50
声望: 1

学习了,添加试试

Member
avatar
加入于:
帖子: 50
声望: 1

longgerchen wrote:

hxxjava wrote:

longgerchen wrote:

description

description

我在复制如上代码之后,会碰到这两个问题,不知如何解决。

答复:
第一个是需要修改为OrderData,
原来的是错误的,不过好在这只是个注解,不会引擎出错。
第二个是需要在该文件的前面:

from vnpy.trader.constant import Exchange

感谢大佬的及时回复,第一个问题解决了。但是第二个问题,加了 在kx_chart.py文件头部加了 from vnpy.trader.constant import Exchange 该代码后,问题依旧。
self.setWindowTitle(f"K线图表——{symbol}.{exchange.value},{interval},{start}-{end}") 会提示 该代码里的 symbol、exchange.value、interval、start、end 未定义。

本人语言排插能力堪忧,望大佬帮忙看看。

我安装的是VN station 2.5.6 版本。

这些参数是在main函数里有定义

开始测试代码

app = create_qapp()

symbol = "ag2012"
exchange = Exchange.SHFE
interval=Interval.MINUTE
start=datetime(2020, 8, 13)
end=datetime(2020, 8, 15)    

但是如果单独调用就得要传入才可以,这个地方需要修改

Member
avatar
加入于:
帖子: 7
声望: 0

感谢分享 受教了

Member
avatar
加入于:
帖子: 50
声望: 1

hxxjava wrote:

在vnpy\trader\event.py中自己增加定义即可.

怎么在k图上加两根均线,添加两次smaItem会有问题,总会以最后一个的参数显示

Member
avatar
加入于:
帖子: 23
声望: 0

请问老师这个帖子的画图是回测时的静态画图吗?,需要自己列出成交单和委托单的数据?
对于另一个帖子{让CTA策略看得见}是不同的吧,另一个帖子是实盘用的,且可以实时更新图表?

Member
avatar
加入于:
帖子: 2
声望: 0

感谢楼主分享

© 2015-2022 上海韦纳软件科技有限公司
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

【用户协议】
【隐私政策】
【免责条款】