VeighNa量化社区
你的开源社区量化交易平台
awen_hbw's Avatar
Member
离线
8 帖子
声望: 0

xiaohe wrote:

请输出”合约信息查询成功“之后再初始化策略
确实是 输出”合约信息查询成功“之后再初始化策略 的,还是无法实盘程序交易。
我试了下,连了CTP可以手工交易,无法程序交易,会不会是因为我没有配置RQData数据接口?之前模拟回测都是用的CSV本地数据

代码是这样的
import random
from vnpy.app.cta_strategy import (
CtaTemplate,
StopOrder,
TickData,
BarData,
TradeData,
OrderData,
BarGenerator,
ArrayManager,
)

class RandomStrategy(CtaTemplate):
tp = 30
sl = 10

buy_level = 0
short_level = 0
price=0

author = "awen"
parameters = ["tp", "sl"]
variables = ["buy_level", "short_level","price"]

def __init__(self, cta_engine, strategy_name, vt_symbol, setting):
    super().__init__(cta_engine, strategy_name, vt_symbol, setting)
    self.bg = BarGenerator(self.on_bar)
    self.am = ArrayManager()

def on_init(self):
    print("策略初始化程序开始")

    print("策略初始化程序结束")

def on_start(self):
    print("策略启动程序开始")

    self.put_event()
    print("策略启动程序结束")

def on_stop(self):
    print("策略终止程序开始")

    self.put_event()
    print("策略终止程序结束")

def on_tick(self, tick: TickData):
    self.bg.update_tick(tick)

def on_bar(self, bar: BarData):
    self.cancel_all()

    self.am.update_bar(bar)
    if not self.am.inited:
        print('bar ', bar.datetime, ' am未初始化')
        return
    print('bar ', bar.datetime)

    self.price=bar.close_price

    if self.pos==0:
        if random.random() > 0.5:
            self.buy_level=bar.close_price * 1.01
            self.buy(self.buy_level, 1)
        else:
            self.short_level=bar.close_price * 0.99
            self.short(self.short_level, 1)
    elif self.pos>0:
        if bar.close_price>self.buy_level+self.tp or bar.close_price<self.buy_level-self.sl:
            self.sell(bar.close_price*0.99,abs(self.pos))
    elif self.pos<0:
        if bar.close_price<self.short_level-self.tp or bar.close_price>self.short_level+self.sl:
            self.cover(bar.close_price*1.01,abs(self.pos))

    self.put_event()

def on_order(self, order: OrderData):
    print('on_order')

    self.put_event()

def on_trade(self, trade: TradeData):
    print('on_trade')

    self.put_event()

def on_stop_order(self, stop_order: StopOrder):
    print('on_stop_order')

    self.put_event()

description

description

其中 price是当前一分钟bar的收盘价

方法一:
Ssetup= High + 0.35 (Close – Low)
Bsetup= Low – 0.35
(High – Close)
Senter= 1.07 / 2 (High + Low) – 0.07 Low
Benter= 1.07 / 2 (High + Low) – 0.07 High
Bbreak= Ssetup+ 0.25 (Ssetup– Bsetup)
Sbreak = Bsetup– 0.25
(Ssetup– Bsetup)
方法二:
pivot = (high + low + close) / 3 # 枢轴点
context.bBreak = high + 2 (pivot - low) # 突破买入价
context.sSetup = pivot + (high - low) # 观察卖出价
context.sEnter = 2
pivot - low # 反转卖出价
context.bEnter = 2 pivot - high # 反转买入价
context.bSetup = pivot - (high - low) # 观察买入价
context.sBreak = low - 2
(high - pivot) # 突破卖出价
方法三:
观察卖出价(Ssetup)= High + a (Close – Low)
观察买入(Bsetup)= Low – a
(High – Close)
反转卖出价(Senter)= b / 2 (High + Low) – c Low
反转买入价(Benter)= b / 2 (High + Low) – c High
突破卖出价(Sbreak)= Ssetup - d (Ssetup – Bsetup)
突破买入价(Bbreak)= Bsetup + d
(Ssetup – Bsetup)

xiaohe wrote:

如果还报同样的错,建议检查一下策略参数的类型。检查一下策略里是否有把str\bool\int\float以外的变量名,写到了parameters列表中,json文件保存不了这四种基础数据以外的类型,就会出错
原来如此,谢谢xiaohe,我用到了其他类型的变量,没用过json的我还是太菜了hhhh

用Python的交易员 wrote:

请删除C:\users\administrator.vntrader\下的cta_strategy_前缀的几个json文件即可
可以解决问题,谢谢管理员!但是麻烦的是 每次出现这个问题都要删除那几个json文件,请问有没有一劳永逸的办法?

Traceback (most recent call last):
File "c:\vnstudio\lib\site-packages\vnpy\trader\ui\mainwindow.py", line 281, in open_widget
widget = widget_class(self.main_engine, self.event_engine)
File "c:\vnstudio\lib\site-packages\vnpy\app\cta_strategy\ui\widget.py", line 37, in init
self.cta_engine.init_engine()
File "c:\vnstudio\lib\site-packages\vnpy\app\cta_strategy\engine.py", line 109, in init_engine
self.load_strategy_setting()
File "c:\vnstudio\lib\site-packages\vnpy\app\cta_strategy\engine.py", line 869, in load_strategy_setting
self.strategy_setting = load_json(self.setting_filename)
File "c:\vnstudio\lib\site-packages\vnpy\trader\utility.py", line 99, in load_json
data = json.load(f)
File "c:\vnstudio\lib\json__init.py", line 296, in load
parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, **kw)
File "c:\vnstudio\lib\json\
init__.py", line 348, in loads
return _default_decoder.decode(s)
File "c:\vnstudio\lib\json\decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "c:\vnstudio\lib\json\decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 10 column 21 (char 254)

© 2015-2022 微信 18391752892
备案服务号:沪ICP备18006526号

沪公网安备 31011502017034号

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