PineScript - сумма заказа Strategy.entry

Это сценарий заголовка моей стратегии:

стратегия (title="NEWSTRAT",shorttitle="NS", initial_capital=1000, currency=currency.USD, pyramiding = 5, overlay=true)

Я создал около 5 различных "strategy.entry" и "strategy.close". Согласно заголовку я хочу потратить 1000 долларов, но я хочу, чтобы каждая запись использовала одинаковую сумму (в данном случае 200 долларов).

Мои вопросы:

1- Должен ли я указывать его в "strategy.entry" как параметр, или я должен добавить его в заголовок стратегии? (Для равенства распределить сумму заказа из "начального_капитала" сумма "strategy.entry" s)

2- Я установил пирамидинг на 5. Иногда я вижу, что стратегия отнимает много времени от того же "strategy.entry", есть ли способ заблокировать новые записи, если исходный "strategy.entry" все еще не закрыт. (Пример: " Strategy.entry ("LongA") "обнаруживает вход на долгое время. Из-за волатильности другая стратегия распознает другой аналогичный вход как" strategy.entry ("LongA") "и открывает длинную позицию, даже если исходный" strategy.entry ("LongA")" все еще открыт. Поэтому в основном я хочу, чтобы он не вводил длинную позицию "strategy.entry ("LongA")" (такая же запись), если есть еще одна открытая "стратегия.entry ("LongA")".)

Спасибо

2 ответа

Возможно, сейчас уже слишком поздно, но, надеюсь, это поможет кому-то найти этот пост, как это сделал я.

@vaibhav maathur был прав в том, что вы должны использовать default_qty_type = Strategy.cash, а затем использовать default_qty_value = (начальный капитал, разделенный на количество пирамид), чтобы равномерно распределить свой капитал по вашим сделкам.

Что касается второй части вашего вопроса «Как остановить дублирование записей», есть несколько способов сделать это.

1. Использование функции Strategy.opentrades.entry_id(trade_num)

Эта функция возвращает идентификатор открытой сделки. Если ваша стратегия совершает много сделок, возможно, вы не знаете trade_num для своего ордера. Поэтому вместо этого мы можем просто перебрать все открытые сделки, чтобы проверить, есть ли у какой-либо открытой сделки совпадающий идентификатор. Если он уже существует, не открывайте новую сделку.

например

      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)

Проблема с этим методом заключается в том, что он находит только открытые сделки и не находит какие-либо лимитные/стоп-ордера, которые были размещены, но еще не исполнены. Если есть отложенный ордер с таким же идентификатором, то новый ордер изменит его.

2. Создайте свой собственный массив для отслеживания ваших заказов

Каждый раз, когда вы размещаете заказ, просто добавляйте идентификатор этого заказа в массив. Каждый раз, когда вы закрываете эту сделку, удаляйте ее из массива. Затем вы можете использовать тот же метод перебора вашего массива, чтобы проверить, существует ли уже заказ с этим идентификатором.

Этот метод будет ловить отложенные ордера, которые еще не были исполнены.

например

      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)

Я думаю, вы могли бы использовать Strategy.cash в качестве default_qty_type в заявлении декларации стратегии:

Вы можете выполнить поиск Strategy.cash в справочном руководстве по языку Pine Script, чтобы найти более подробную информацию.

Аналогично, Strategy.fixed может помочь купить одинаковое количество акций или контрактов при каждом входе.

Загвоздка в том, что операторы Strategy.entry или Strategy.order не должны указывать количество в качестве параметра, чтобы для заказа использовались точные денежные средства или точное фиксированное количество акций/контрактов.

Другие вопросы по тегам