这是我的策略标题脚本:
strategy(title="NEWSTRAT",shorttitle="NS" , initial_capital=1000, currency=currency.USD, pyramiding = 5, overlay=true)
我创造了大约5种不同的策略。和";strategy.close"。根据标题,我想花费1000美元,但我希望每个条目使用相同的金额(在本例中为200美元)。
我的问题:
1-我必须在"strategy.entry"中指定它吗?作为一个参数,或者我应该把它添加到策略标题中?(为了从"initial_capital"中平等分配订单金额量"strategy.entry"s)
2-我将金字塔设置为5。有时我看到同一策略占用了很长时间,如果初始策略占用了很长时间,是否有办法阻止新的进入。入口仍未关闭。(例如:"strategy.entry("LongA";长时间检测条目。由于波动,另一种策略识别另一种类似的入场策略为"strategy.entry("LongA")"并进入long,即使是最初的"策略"。仍然开放。所以我希望它不要输入"strategy。entry("LongA")"long(相同条目),如果有其他打开的策略。entry("LongA")"
谢谢
现在可能太晚了,但希望这能帮助那些像我一样看到这篇文章的人。
@vaibhav maathur使用default_qty_type =策略是正确的。现金,然后使用default_qty_value =(初始资本除以金字塔数量)来平均分配你的资本在你的交易。
关于你问题的第二部分"我如何停止重复条目",有几种方法可以做到这一点。
1。使用strategy.opentrades。entry_id函数(trade_num)
此函数返回未平仓交易的id。如果你的策略是做很多交易,那么你可能不知道你的订单的trade_num。因此,我们可以简单地遍历所有未完成的交易,以检查是否有任何未完成的交易具有匹配的id。如果它已经存在,那么就不要开一个新的交易。
。
for x=0 to strategy.opentrades -1 by 1
if strategy.opentrades.entry_id(x) == "Long A"
buyCondition := false
if buyCondition
strategy.entry("Long A",strategy.long)
这种方法的问题是它只会发现未平仓交易,而不会发现任何已经下了但尚未完成的限价/止损单。如果存在具有相同id的待处理订单,则新订单将修改它。
2。创建自己的数组来跟踪订单
每次下订单时,只需将该订单的id添加到数组中。每次你结束交易,就把它从数组中移除。然后,您可以使用相同的方法遍历数组来检查具有该id的订单是否已经存在。
此方法将捕获尚未完成的挂起订单。
。
var array_OpenOrders = array.new_string(na)
if buyCondition
for x=0 to array.size(array_OpenOrders) -1 by 1
if array.get(array_OpenOrders, x) == "Long A"
buyCondition := false
if buyCondition
strategy.entry("Long A", strategy.long)
array.push(array_OpenOrders, "Long A")
if sellCondition
strategy.exit("Sell Long A", "Long A", Limit = close)
for x=0 to array.size(array_OpenOrders)
if array.get(array_OpenOrder,x) == "Long A"
array.remove(array_OpenOrders,x)
我想你可能需要使用策略。cash作为策略声明语句中的default_qty_type:Strategy (" Strategy .cash", overlay = true, default_qty_value = 1000, default_qty_type = Strategy)。
可以搜索策略。请参阅Pine Script语言参考手册,了解更多详细信息。
同样,策略。Fixed可以帮助在每个条目中购买完全相同数量的股票或合约。
问题在于策略。入口或策略。订单语句不能指定数量作为参数,以获得用于订单的确切现金或确切固定数量的股票/合约。