Pine script 设置位置大小

Pine script 设置位置大小,pine-script,trading,Pine Script,Trading,我的策略()完全有效,但现在我正试图管理资金在交易中的投入方式 以下是我目前的情况: 我有一个SL设置在最后10个小节的最低低点,一个TP设置在1.5xSL。 我的策略。退出: strategy.exit("EXIT LONG","LONG", stop=longSL, limit=longTP) 在这里之前,一切都很顺利 问题: 即使我使用: strategy("TEST MACD DEFAULT", shorttitle=&quo

我的策略()完全有效,但现在我正试图管理资金在交易中的投入方式

以下是我目前的情况:
我有一个SL设置在最后10个小节的最低低点,一个TP设置在1.5xSL。
我的策略。退出:

strategy.exit("EXIT LONG","LONG", stop=longSL, limit=longTP)
在这里之前,一切都很顺利

问题:
即使我使用:

strategy("TEST MACD DEFAULT", shorttitle="MACD", overlay=true, initial_capital=1000, default_qty_type=strategy.equity, default_qty_value=1, currency=currency.EUR, process_orders_on_close=true, pyramiding=0)
这笔钱没有按我想要的方式投入交易

我想要什么:
我有1000欧元的资本。
我希望我的SL(已设置为最后10个酒吧的最低值)为我资本的1%=10欧元。
我的TP为1.5xSL,因此将为15欧元。
这意味着我每输一笔交易,我就损失10欧元,每赢一笔交易,我就赢15欧元。
但这不是我所拥有的:

问题:
我怎样才能做到这一点

这是我的代码(仅适用于多头头寸):

/@version=4
策略(“测试MACD默认值”,shorttitle=“MACD”,overlay=true,初始资本=1000,默认数量类型=strategy.cash,默认数量值=10,币种=currency.EUR,处理订单时关闭=true,聚合=0)
//MACD
[macdLine,信号线,41;]=macd(关闭,12,26,9)
//EMA 200
均线=均线(收盘价,200)
绘图(ema,title=“ema 200”,颜色=color.yellow,线宽=2)
//长期条件
longCheckCondition=barssince(交叉线(macdLine,信号线))
longCondition1=LongCheckConditionEMA
longCondition=longCondition1和longCondition2、longCondition3和strategy.opentrades==0
//止损
浮动长度L=na
longl:=longCondition?最低(低,11)[1]:longl[1]
//获利
longEntryPrice=收盘价
longDiffSL=abs(longEntryPrice-longSL)
浮点数=na
longp:=长条件?close+(1.5*longDiffSL):longTP[1]
//出入境
如果长时间
strategy.entry(“LONG”,strategy.LONG)
策略.退出(“多头退出”,“多头”,停止=多头,限制=多头)
//绘图停止损失
longPlotSL=strategy.opentrades>0和strategy.position\u size>0?朗塞尔:不
绘图(longPlotSL,title='LONG STOP LOSS',线宽=2,style=plot.style\u linebr,color=color.red)
//阴谋获利
longPlotTP=strategy.opentrades>0和strategy.position\u size>0?龙塔:那
绘图(longPlotTP,title='LONG TAKE profice',线宽=2,style=plot.style\u linebr,color=color.green)

如果您真的想在整个脚本中使用起始资本来调整止损点的大小,则需要使用以下方法在第一个栏中保存其值:

var initialCapital = strategy.equity
如果您想使用您当前的权益,请使用
strategy.equity

这里我们使用第一个选项。诀窍是使用止损点的值来确定头寸大小,使止损点代表您愿意承担风险的目标资本百分比,然后使用
quantity=
参数在
strategy.entry()
调用中指定该大小

您可以通过脚本的输入更改键值:

//@version=4
strategy("TEST MACD DEFAULT", shorttitle="MACD", overlay=true, precision = 4, initial_capital=1000, default_qty_type=strategy.cash, default_qty_value=10, currency=currency.EUR, process_orders_on_close=true, pyramiding=0)
i_pctStop = input(1., "% of Risk to Starting Equity Use to Size Positions") / 100
i_tpFactor = input(1.5, "Factor of stop determining target profit")

// Save the strat's equity on the first bar, which is equal to initial capital.
var initialCapital = strategy.equity

// MACD
[macdLine, signalLine, _] = macd(close, 12, 26, 9)

// EMA 200
ema = ema(close, 200)
plot(ema, title="EMA 200", color=color.yellow, linewidth=2)

// LONG CONDITIONS
longCheckCondition = barssince(crossover(macdLine, signalLine))
longCondition1 = longCheckCondition <= 3 ? true : false
longCondition2 = macdLine < 0 and signalLine < 0
longCondition3 = close > ema
longCondition = longCondition1 and longCondition2 and longCondition3 and strategy.opentrades == 0

// STOP LOSS
float longSL = na
longSL := longCondition ? lowest(low, 11)[1] : longSL[1]

// TAKE PROFIT
longEntryPrice = close
longDiffSL = abs(longEntryPrice - longSL)
float longTP = na
longTP := longCondition ? close + (i_tpFactor * longDiffSL) : longTP[1]

positionValue = initialCapital * i_pctStop / (longDiffSL / longEntryPrice)
positionSize = positionValue / longEntryPrice

// ENTRY/EXIT
if longCondition
    strategy.entry("LONG", strategy.long, qty=positionSize)
    strategy.exit("EXIT LONG","LONG", stop=longSL, limit=longTP)

// PLOT STOP LOSS
longPlotSL = strategy.opentrades > 0 and strategy.position_size > 0 ? longSL : na
plot(longPlotSL, title='LONG STOP LOSS', linewidth=2, style=plot.style_linebr, color=color.red)

// PLOT TAKE PROFIT
longPlotTP = strategy.opentrades > 0 and strategy.position_size > 0 ? longTP : na
plot(longPlotTP, title='LONG TAKE PROFIT', linewidth=2, style=plot.style_linebr, color=color.green)
可以用来代替:

var initialCapital = strategy.equity

@罗布改正了!您可以删除(-1)请;)太好了,你搞定了!非常感谢你!我还有两个问题(可能相互关联):1。当您计算头寸大小时,您是否将pip值转换为合同?(如果是,你在哪里找到的公式)2。为什么不是10欧元一输15欧元一赢@该配方是一种行业标准。没有原创)如果你使用杠杆,你的公式将需要调整。损失/目标数字的绝对值可能会随着佣金和延误而变化,或者如果您的订单不是在收盘时执行,而是在下一个开盘时执行,并且存在缺口。哦,好的,我明白了!经过一些研究,我发现我可以直接使用:
positionSize=(initialCapital*I_pctStop)/longDiffSL
。你为什么要对positionValue多做一步?嘿!所以我使用的是
positionSize=(initialCapital*I_pctStop)/longDiffSL
,但它只使用
currency=currency.NONE
。如果我使用
currency=currency.EUR
,我需要将
initialCapital
转换为第二种货币。但要做到这一点,我需要欧元和第二种货币之间的交叉汇率。在EURXXX对上工作时很容易获得,但在其他对上(例如CADJPY)则不容易获得。那么,你知道一种方法来计算每一种货币的欧元交叉汇率,还是另一种方法来解决这个问题@松树编码公司
var initialCapital = strategy.initial_capital
var initialCapital = strategy.equity