在交易视图的策略中,我输入了一个条目并有一个设置追踪止损的条件。同时我想要一个固定价格的止损单,但是当我下两个strategy.exit()
命令时,实际上只使用了一个,因为两者都是“止损”类型。但是可以通过调用strategy.exit()
并为其提供相同的 id来将退出命令替换为另一个退出命令。所以我的想法是用另一个替换一个退出并返回,当它适合我时,这样只有一个退出订单同时处于活动状态。
假设我有一个策略,有条件进入一个特定价格的头寸,例如conditionEnter
和enterPrice
,在进入时我也知道止损stopLossPrice
,所以我可以设置:
if conditionEnter
strategy.entry(id="longEnter", long=true, qty=1, limit=enterPrice
strategy.exit(id="longExit", from_entry="longEnter", qty_percent=100, stop=stopLossPrice)
Run Code Online (Sandbox Code Playgroud)
现在,如果conditionTrailingStopLoss
满足,我相应地替换它:
if conditionTrailingStopLoss
strategy.exit(id="longExit", from_entry="longEnter", qty=strategy.position_size * 0.2, trail_price=priceToTriggerTrailingStopLoss, trail_offset=100)
Run Code Online (Sandbox Code Playgroud)
其中priceToTriggerTrailingStopLoss
等于或低于收盘价,以便立即设置追踪止损并追踪价格 100 个分时。请注意,即使它被执行,也只会退出当前位置的五分之一。
正如预期的那样,放置追踪止损退出订单会删除原始止损退出订单 - 当使用不同的 ID 时甚至是这样。我想等到追踪止损已经执行(被填充),然后再次放置止损退出订单。但是我如何确定执行时间?
我尝试了一些东西
if strategy.position_size < strategy.position_size[1]
strategy.exit(id="longEnter", long=true, qty=1, limit=enterPrice
strategy.exit(id="longExit", from_entry="longEnter", qty_percent=100, stop=stopLossPrice)
Run Code Online (Sandbox Code Playgroud)
看到一些退出已被执行,但我从未看到两个订单都被执行。但是,更改命令的顺序确实会影响忽略这两者中的哪一个。如果在上面的一段代码中我将 更改id
为完全不同的东西,那么三个退出订单都不会被执行!
那么有人可以在这里帮忙吗?我的意思是想要有一个固定止损和一个追踪止损并不是很奇怪,它必须以某种方式起作用,对吗?
编辑:如果我在图表中向后滚动,我实际上确实看到有时一个,有时另一个退出订单被执行,但对于同一个入场订单仍然没有。
I found a solution, one can also have a stop loss order with strategy.order()
command, like this:
if conditionEnter
strategy.entry(id="longEnter", long=true, qty=1, limit=enterPrice
strategy.order(id="stopLossLong", long=strategy.short,qty=strategy.position_size, limit=syminfo.mintick, stop=stopLossPrice)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1404 次 |
最近记录: |