I'm new to Pinescript and am trying to build a strategy that would place an initial order at a limit price and will DCA (dollar cost average) the position if the price drops by x percent. I've managed to get initial order placed with the code below, but cannot make the rest of it working. TradingView would place initial order and but would not DCA. I'm using a loop to place those subsequent orders. I'd appreciate your any insights you could provide into it.
//@version=4
strategy("DCA calculcator - version 2.0", shorttitle = 'DCA calculator', overlay = false)
base_order = input(title = 'Base order value', type = input.integer, defval = 100)
safe_order = input(title = 'Safe order value', type = input.integer, defval = 100)
take_profit = input(title = 'Take profit level', type = input.integer, defval = 2) / 100
price_deviation = input(1.5, type=input.float, title="Price deviation to open safety order (%)", minval=0.0, step=0.1)/100
safe_order_step_scale = input(1.0, type=input.float, title="Safety Order Step Scale", step=0.1)
max_safe_order = input(title = 'Max safe order', type = input.integer, defval = 4)
start_time = input(type = input.time, title = 'Trade start time', defval = timestamp("1 April 2021 06:00"), group = "Trade start and end time")
end_time = input(type = input.time, title = 'Trade end time', defval = timestamp("1 July 2021 06:00"), group = "Trade start and end time")
//declarations
var bo_price = 0.0
var open_trades = 0
var deal_start_condition = false
//utility functions
within_window() => time >= start_time and time <= end_time
plot_color() => (within_window() and strategy.opentrades == 0) ? color.new(color.blue, 50) : color.new(color.red, 100)
so_qty(so_level) => safe_order / so_level
safety_order_deviation(index) => price_deviation * pow(safe_order_step_scale, index - 1)
safety_order_price(index, last_safety_order_price) => last_safety_order_price * (1 - safety_order_deviation(index))
var so_level = 0.0
var last_so_level = 0.0
safe_order_gen(so_price) => so_price * 0.98
//placing base order
if within_window()
bo_price := close
strategy.entry("BO placed", limit=bo_price, long=strategy.long, qty=base_order/bo_price)
last_so_level := bo_price
for index = 1 to 3
so_price = last_so_level * 0.99
strategy.entry('SO placed', long=strategy.long, limit=so_price, qty = safe_order / so_price)
last_so_level := so_price
plot(bo_price, color = color.green)
plot(last_so_level, color = color.blue, title = 'SO price')