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()
其中 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)
rqdatac.share.errors.PermissionDenied: this license is only allowed to access through the education network