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

排除基本的语法问题,策略能跑通。

可是,

这个策略是完全实现我的想法吗?怎么验证呢?
一个是可以把所有价格序列和用到的指标值全部打印出来

另一个办法是在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这样的指标,是成功输出序列的。
但这个指标不会。不知道哪里出了问题

这个有用 正是我所需要的

非常感谢分享

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

沪公网安备 31011502017034号

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