排除基本的语法问题,策略能跑通。
可是,
这个策略是完全实现我的想法吗?怎么验证呢?
一个是可以把所有价格序列和用到的指标值全部打印出来
另一个办法是在k线图上显示相应的价格和指标线,但目前只是1分钟,如果我的策略是30分钟上跑的呢?
另外,怎么显示出来那些指标值呢? 不能像tb,mc那种,很友好地显示出来k线周期选项和指标值显示选项吗?
xiaohe wrote:
可参考vnpy.app.cta_strategy.strategies里的示例策略里的指标编写逻辑试试看
那些例子都是直接调用 Talib的方法,和这个思路 好像不太一样呀
https://www.tradingview.com/script/sufFpGjC-Supertrend-V1-0-Buy-or-Sell-Signal/
只会写mc,不太会写vnpy,似乎需要用到循环和递归,
请大佬改写一个,谢谢!
mc代码 ```
input:
n(10),
m(3);
variables:
avg(0),up(0),dn(0),trend(0),atr(0),
ST(0);
avg = (h+l)/2;
atr = AvgTrueRange(n);
up = avg + m atr;
dn = avg - m atr;
if c > up[1] then
trend = 1
else if c < dn[1] then
trend = -1;
if trend > 0 and dn < dn[1] then dn=dn[1];
if trend < 0 and up > up[1] then up=up[1];
if trend = 1 then ST = dn else ST = up;
Plot3(st,"SThl2",iff(trend = 1,red,green));
```
对完全程序化自动化没有信心。但脚本策略是不是可以实现这样的功能。
譬如,价格,或者成交量,仓差变动达到一个水平,然后开仓,成交的同时,自动设置上的止损止盈价?
哪个大佬给个示范的脚本呀,谢谢!
譬如
1,某品种 跌破某价格 ,做空,
出发成交后立即设置好止损止盈单。
2,持仓某品种的持仓数量,设置好止损止盈。
谢谢
请问夜盘品种怎么根据1分钟合成日线K线?
现在合成的分割是按照自然日期 ,
是否有交易小节的属性,然后做一个区分判断?
为什么 我都 跑不起来~~
s>python RBreakStrategy.py
File "RBreakStrategy.py", line 12
^
SyntaxError: invalid character in identifier
1,请问2.1.2 穿透性测试 ,可以吗?
2, 如果换了个网络环境,外网IP地址变了,还不能用了吗?
老大,那这样理解的话,是不是这样?
if buycondtion:
self.buy(bar.close_price,1,True)
只要开启stop性质的True选项后,那么在满足条件 的信号bar之后,新来的K最新价格一旦大于信号bar的close,就会按市价买入吧(不管滑点多大)
反而,如果信号bar之后,新进来的k线低开低走(低于信号bar的close_price),反而发出的买入订单不会被触发是吗?
目的:
想将测试回测中的有关变量保存下来,做检查对比(因为策略表现不符合逻辑意图)
操作:
在策略类中一开始定义
log_dict = {}
在on_init():中
#定义要记录的变量
self.log_dict['date'] = []
self.log_dict['close'] = []
self.log_dict['qqe'] = []
self.log_dict['qqesf'] = []
self.log_dict['ma1'] = []
self.log_dict['ma2'] = []
self.log_dict['pos'] = []
然后 在on_bar中,
...
self.put_event()
self.log_dict['date'].append(bar.datetime)
self.log_dict['close'].append(bar.close_price)
self.log_dict['qqe'].append(round(self.qqe[-1], 2))
self.log_dict['qqesf'].append(round(self.qqesf[-1], 2))
self.log_dict['ma1'].append(round(self.ma_fast[-1], 2))
self.log_dict['ma2'].append(round(self.ma_slow[-1], 2))
self.log_dict['pos'].append(self.pos)
在on_stop中
pd.DataFrame(self.log_dict).to_csv('D:\maqqelog.txt')
self.write_log("策略停止")
但程序回测完了,相关图表也输出了,
但D盘没有这个文件,
但如果把这个 pd.DataFrame(self.log_dict).to_csv('D:\maqqelog.txt')
放在on_bar中,程序可能需要每更新一个bar就写一次,特别耗时。
请问:
在on_bar()里有没有可能,用那个变量,检测表现全部跑完?
if XXX:
log.to_csv()这样?
或者要实现我的目的,最好的方式该如何处理呢?
谢谢!
请问,
当根k线收盘走完 条件满足(信号bar) 我想立即在下个k线(入场bar)开盘是买入。
那么回测记录的买开价格是信号bar的close呢 还是下个k线的开盘价呢?
策略回测的权益图
是按 平仓记录更新 还是按日更新呢?
关注。面临类似的问题。
在策略文件自定义个2小时方法 在里面写逻辑就行 我也是新手
前面是不是有必要补一个nan值,否则与其他基于真实价格序列的指标计算值序列没法对齐了。
已经搞定了,基本是这样的。
现在在jupyter直接调用测试了一上,对比来看,基本上是正确的。
不过直接 使用update_bar,好像默认只能得到100个bar。没有做大量的数据详细对比。
谢谢。好用了!
再请问一下,在策略里,如果获取K线的Datetime呢(输出时间 段的,每个bar的)?试了好几个变量 都 没有这个属性
请教个问题,
情况是这样的,
我导入1分钟K线,然后策略是使用这个1分钟合成的60分钟K线周期来进行判断买卖。
那么回放历史数据生成交易信号时,是用1分钟K线“动态模拟” 这个价格运行呢?还是直接使用60分钟K线来进行判断买卖。
两者的回测精确度还是很不少区别,譬如日内小节的一些体市再开始交易的跳空。
更正一下,
那种写法,在jupyter 测试明显 错误,后来想到是受了mc那种运行模式的影响,完全写错了
def SQ_IsRising(self, arrayvalue, barcount: int, NotStrict: bool=True,
array: bool = False
) -> Union[int, np.ndarray]:
""""
判断是上涨趋势,回溯barcount个价格序列,从左向右循环比较,均大为上升
"""
arraylen = len(arrayvalue)
result = np.zeros(arraylen)
for i in range(barcount,arraylen):
sum = 0
for j in range(-barcount,-1):
prevalue = arrayvalue[i+j]
curvalue = arrayvalue[i+j+1]
if curvalue > prevalue:
sum = sum + 1
if sum == barcount - 1:
result[i] = 1
if array:
return result
return result[-1]
但仍然不确定是否正确,因为在jupyter 直接调用像am.sma这样的指标,是成功输出序列的。
但这个指标不会。不知道哪里出了问题
这个有用 正是我所需要的
非常感谢分享