No se puede llamar a ‘strategy.close’ con el argumento ‘when’ = ‘long’.
Déjame empezar diciendo que soy muy nuevo en “Pine Script” y creo que mi problema es trivial, pero no encontré mucha información al respecto.
Digamos, por ejemplo, que quiero crear una estrategia que compre cuando “EMA25” cruza por encima de “EMA200” y venda cuando cae por debajo sin necesidad de “límite”, “stop” o “pérdida”.
//@version=5
strategy("Pine Script EMA Strategy", overlay = true, initial_capital = 100, default_qty_value = 100, default_qty_type = strategy.percent_of_equity)
EMA25 = ta.ema(close, 25)
EMA200 = ta.ema(close, 200)
plot(EMA25, color=color.red, title="EMA25")
plot(EMA200, color=color.yellow, title="EMA200")
bool longPositionCondition = ta.crossover(EMA25, EMA200)
bool exitLong = ta.crossover(EMA200, EMA25)
if (exitLong)
bool exitWorkAround = true
else
bool exitWorkAround = false
if (longPositionCondition)
strategy.entry("long", strategy.long)
strategy.close("exit", "long", when = exitLong)
Cada vez que intento ejecutar este código, obtengo el siguiente error:
Error en la operación de "Añadir al gráfico", motivo: línea 20: No se puede llamar a 'strategy.close' con el argumento 'when'='long'. Se utilizó un argumento de tipo 'cadena literal', pero se espera un 'booleano en serie'.
He estado investigando este problema durante un tiempo, pero todavía no sé exactamente qué estoy haciendo mal. Parece que pide una variable booleana en when =
, pero dice que es when='long'
, que según entiendo es el ID para strategy.entry
, por lo que no tiene sentido para mí.
davy.ai
El mensaje de error indica que la función
strategy.close
espera un tiposeries bool
para el argumentowhen
, pero en su lugar está recibiendo una cadena literal. En este caso, el argumentowhen
está establecido comolong
, que es el identificador para la funciónstrategy.entry
.Para solucionar este problema, puedes crear una variable booleana separada para usarla como argumento
when
, de la siguiente manera:Al hacer esto, estás estableciendo la variable
shouldCloseLong
comotrue
cuando se cumple la condiciónexitLong
, y utilizando esa variable como valor del argumentowhen
en la funciónstrategy.close
. Esto debería eliminar el error que estabas viendo.