Блог им. VadimKorotkov

Вопрос от новичка (алготрейдинг), застрял на коде стратегии со стоп-ордером, язык PineScript, платформа TradingView

Всем привет!
Помогите, пожалуйста, разобраться, в работе кода.

Почему две версии кода выводят сигналы по-разному

// 1-st version 
if ( true ) 
    strategy.entry( "long",  strategy.long,  when = close >= long_condition ) 
    strategy.entry( "short", strategy.short, when = close <= short_condition )

// 2-nd version 
if ( true ) 
    strategy.entry( "long",  strategy.long,  stop = long_condition ) 
    strategy.entry( "short", strategy.short, stop = short_condition )


Примечания:

согласно справочнику
— стоп ордер на покупку исполняется, когда цена станет такой же или хуже уровня указанного в ордере (то есть цена равна или больше уровня)
— на продажу аналогично (то есть равна или меньше)

ссылка на справочную инфу по синтаксису PineScript
strategy.entry()
11 комментариев
Не не не, это не для средних умов, ты сюда не ходи, ты туда ходи а то совсем глупым будешь. А на трейдингвью форуме что говорят на это англичане?
avatar

the Rolling Stones, с английским под трейдинг у меня не слишком хорошо, решил попробовать популярные русские форумы трейдинга, прежде чем идти на специализированный

вопросы по коду они размещают на stackoverflow

скорее всего, позже попрошу знакомых грамотно перевести мой вопрос, а ответы я, думаю, смогу понять 

А что там то when то stop
avatar

the Rolling Stones, а в этом суть вопроса

when это условие, по которому сработает открытие позиции обычным ордером

а stop это условие, по которому сработает открытие позиции стоп-ордером


логика кода, на мой взгляд одинаковая, но работают они почему-то по разному, не могу понять почему, об этом и спрашиваю

и там и там условия одинаковые, например, лонг позиция

обычный ордер срабатывает, когда цена равна или хуже (больше)
стоп-ордер срабатывает, когда цена равна или хуже (больше)

но тестер показывает всё так, будто коды работают по-разному

Мне кажется, Вы тут мудрите зачем-то с when. План действий на самом деле лучше принять такой: 

1. Определяем longCondition, чтобы в результате в этой переменной мы имели true / false на каждой конкретной свече. Аналогично определяем shortCondition
2. Дальше 
if (longCondition)
    statregy.entry("long", strategy.long)
else if (shortCondition)
    strategy.entry("short", strategy.short)

Так мы получим реверс, он же переворот из лонга в шорт. Дальше, если нам нужны дополнительные условия на закрытие сделок, помимо переворота, юзаем или strategy.close или strategy.exit

avatar

tashik, спасибо большое за внимание к моей проблеме

я проверял предложенный Вами вариант
вывод сигналов будет аналогичным when

а проблема в том, что мне нужен вывод аналогичный stop
чтобы перетащить его на другую платформу, где более мощный тестер

но я не могу понять логику этого stop

условия-то одинаковые
if( condition ) то же самое что when = condition
по сути они должны быть тем же самым, что stop = condition
но это не так
и я не понимаю почему

надеюсь, нормально объяснил)))

UPD
Если Вам интересно, кажется, Sergeyka (2020-11-30 22:34) помог решить мою проблему (надо будет потестить). 

Вадим Коротков, условия разные. Ниже написали почему. Поэтому я разделяю люгику, чтобы все не мешалось в кучу, стопы, сетапы. 
avatar
1 вариант срабатывает если ЗАКРЫТИЕ свечи было больше/меньше условия

2 вариант срабатывает если даже свеча просто пробила условие, при этом цена закрытия не имеет значения
avatar

Sergeyka, Вам тоже большое спасибо за внимание к моей проблеме.

Скорее всего, Вы правы… (надо будет потестить)

Интересно получилось. Я, конечно, сам себе создал проблему)))

Дело в том, что я привык на платформе смотреть работу стратегии в режиме реального времени. 
Её результаты отличаются от тех, что показывает тестер.

Потому что в реальном времени на каждый тик стратегия проверяет текущую цену формирующейся свечи актива.
А это цена close

А в тестере стратегия проверяет не цену каждого тика (тестер не слишком гибкий), но и не именно ЗАКРЫТИЕ свечи. Вероятно в формате stop, она проверяет любое из имеющихся данных по свече, скорее всего, это цены OHLC (точно не знаю).

Вот и получается, что когда я явно задаю close, тестер проверяет только close и выдаёт соответствующие результаты.
А когда я задаю stop, то он, как Вы и заметили, проверяет свечу «целиком», насколько это возможно (OHLC или сгенерированные тики).

Я об этом не подумал из-за того, что привык постоянно следить только за текущей ценой close, т.е. тиками формирующейся свечи.

Проще говоря, я об этом не подумал, потому что я невнимательный :3

Вадим Коротков, хи хи, вот так то вам за два месяца освоить алго с нуля при очень сильном желании.
avatar
the Rolling Stones, да, уж, теперь мне вероятно ещё годы нужно обрабатывать пробитие свечами нужного мне уровня))

теги блога Вадим Коротков

....все тэги



UPDONW
Новый дизайн