Огромен брой търговци използват известния индекс на относителна сила, за да им помогнат при вземането на решения, и въпреки че той може да служи само като потвърждаващ индикатор, той все пак има своята тежест при много решения за търговия или най-малкото за определяне на времето на решенията. RSI е създаден от Дж. Уелс Уайлдър през 1978 г. като индикатор за импулс с оптимален период на преглед от 14 бара. Той е ограничен между 0 и 100 с 30 и 70 съответно като договорени зони на свръхпродаденост и свръхкупуване. RSI може да се използва чрез 3 известни техники:

Току-що публикувах нова книга след успеха на Нови технически индикатори в Python. Той включва по-пълно описание и добавяне на сложни стратегии за търговия със страница в Github, посветена на непрекъснато актуализирания код. Ако смятате, че това ви интересува, не се колебайте да посетите връзката по-долу или ако предпочитате да закупите PDF версията, можете да се свържете с мен в Linkedin.



В това малко проучване ние ще тестваме първата RSI техника и ще видим дали докосването на ниво 30 или 70 може да осигури точка на обръщане или корекция. С други думи, трябва ли да разработим система, която търгува, когато RSI докосне тези нива? Ще се опитаме да оптимизираме сигналите въз основа на периода на задържане и периода на RSI.

Първият ред във функцията по-долу е корекция/трансформация от експоненциалната подвижна средна в pandas към оригиналната по-плавна версия, която обикновено се използва в RSI пакетите. Препоръчвам да използвате по-стара версия на pandas, тъй като функцията ewma по-долу е отхвърлена в по-новите версии.

def rsi(Data, rsi_lookback, which = 1): #OHLC Data
    
    rsi_lookback = (rsi_lookback * 2) - 1 # From exp to smoothed
    # Get the difference in price from previous step
    Data = pd.DataFrame(Data)
    delta = Data.iloc[:, 3].diff()
    delta = delta[1:] 
    
    # Make the positive gains (up) and negative gains (down) Series
    up, down = delta.copy(), delta.copy()
    up[up < 0] = 0
    down[down > 0] = 0
    
    roll_up = pd.stats.moments.ewma(up, rsi_lookback)
    roll_down = pd.stats.moments.ewma(down.abs(), rsi_lookback)
    
    roll_up = roll_up[rsi_lookback:]
    roll_down = roll_down[rsi_lookback:]
    Data = Data.iloc[rsi_lookback + 1:,].values
    
    # Calculate the RSI
    RS = roll_up / roll_down
    RSI = (100.0 - (100.0 / (1.0 + RS)))
    RSI = np.array(RSI)
    RSI = np.reshape(RSI, (-1, 1))
    
    Data = np.concatenate((Data, RSI), axis = 1)

Ще се опитаме да оптимизираме сигналите тук, като настроим параметрите. Тестваните обратно двойки, както обикновено, ще бъдат шестте основни двойки, на времевата рамка 3H, като се използва цена на транзакция от 1 пипс за всяка сделка (индикативно), задържане на позициите за 10 периода (3 x 10 = 30 часа) и с RSI (14, 25, 75). Анализираните исторически данни обхващат от 2005 г. до днес.

Очевидно чистият RSI метод не работи. Ами ако оптимизираме периода на задържане и периода на RSI. Можете да го направите за всички двойки, но за да не правим статията по-дълга, отколкото трябва, ние ще оптимизираме само EURUSD (т.е. ако може да се оптимизира).

Криви на собствения капитал след опит за оптимизиране на периода на задържане (т.е. преминаване през различни периоди на задържане)

Вижда се, че не можем да направим много по отношение на чиста RSI стратегия (което вече беше идеята преди написването на статията). Ключови изводи, преди да преминем към по-напреднала стратегия по-долу:

  • Не вярвайте на публикации от хора, които твърдят, че имат добри резултати само от използването на RSI. Това е или аномалия, или бране на череши. Индикатор, който е толкова прост от субективна област, никога не може да даде необичайна възвръщаемост. Ако беше така, щеше да бъде артбитражиран.
  • RSI може да се използва само като потвърждаващ фактор в рамките на вариращ пазар. Скоро ще публикувам друга статия, за да покажа, че тя наистина добавя стойност към вече съществуваща рамка за търговия.
  • Винаги правете масов бек-тест и се опитвайте да не променяте твърде много параметрите. Работата само с една ценна книга през един времеви период крещи за прекомерно приспособяване и чиста случайност.
  • RSI зависи от текущото състояние на пазара. Ако варира, тогава вероятно ще осигури добри сигнали. Ако е в тенденция, тогава е по-добре да използвате други инструменти.

Бърз поглед към графиката на сигнала от горната стратегия:

Ами ако сега опитаме нещо ново?

Какво ще стане, ако се опитаме да разберем дали пазарът е в тенденция или варира и чрез тази информация решим дали търгуваме RSI сигналите или не. Чрез използването на лентите на Болинджър трябва да изчислим разширяващата се променлива, която ни казва дали цените са на път да се развият в тенденция и дали RSI сигналите няма да са толкова добри.

Идеята остава проста:

  • Условия за покупка: Ако разширяващата се променлива остане в границите на Bollinger и разширяването на лентите е по-малко от предварително определен марж, както и RSI достига зоната на свръхпродаденост, тогава започваме купуване поръчайте.
  • Условия за продажба: Ако разширяващата се променлива остане в границите на Bollinger и разширяването на лентите е по-малко от предварително определен марж, както и RSI достига зоната на свръхпокупка, тогава ние инициираме продажба (кратък) ред.

Каква е разширяващата се променлива? Това е просто движещият се спред между горната и долната лента на Болинджър. Ако изчислим този спред, можем да изчислим стандартното отклонение на неговите движения. Ако се движи доста над или под отклоненията, тогава е ясно, че не варираме и не сме във фазата на нормалност. Това служи като филтър за всички сигнали, дадени от RSI. Понякога достига нивото на свръхпокупка точно в началото на тенденцията, което прави резултата много лош.

Ето един пример по-долу за EURNOK, който показва, че когато лентите на Болинджър се разширят много, тогава RSI сигналите не трябва да се вземат под внимание.

Условията за обратно тестване ще бъдат същите като горните за 3H времева рамка на шестте основни FX двойки. Нека да видим новата диаграма на сигнала и да разберем как работи:

Първият панеле ценовата диаграма с червените стрелки като сигнали за продажба и зелените стрелки като сигнали за покупка.

Ако също се интересувате от повече технически индикатори и използването на Python за създаване на стратегии, тогава моята най-продавана книга за техническите индикатори може да ви заинтересува:



Вторият панел е индикаторът RSI. Не забравяйте, че купуваме на 30 и продаваме на 70.

Третият панел е спредът на Болинджър с 2,00 стандартно отклонение на спреда. Това е за измерване на приблизителното състояние на пазара. Следователно, ако спредът е по-голям от горното му отклонение или по-нисък от долното му отклонение, докато имаме сигнал от RSI, ние не го приемаме. Това е показано от двете вертикални черни линии на графиката, където имахме сигнал от RSI, но спредът (в третия панел) беше по-голям от неговото отклонение. Сега започваме да сравняваме нашите първоначални резултати от RSI с новите резултати от модифицираната обвързана с диапазон стратегия:

Видимо резултатите са много по-добри. Те все още не са достойни за заглавието „страхотна стратегия“, но филтърът за спред на Болинджър подобри резултатите, доказвайки, че приближаването до откриване на състоянието на пазара ще подобри вашите търговски резултати.

За разлика от много други публикации и статии, които ще ви дадат стратегията за светия граал и ще ви обещаят голямо богатство, аз се занимавам с демистифициране и намиране на последователни, съобразени с риска печеливши стратегии, които действително работят. И за да направим това, трябва да изградим стратегията блок по блок, а не да очакваме код за машинно обучение, който ще търгува вместо нас и ще ни направи богати за една нощ, това е просто примамка за кликване. Съветвам ви да ги изпробвате, за да видите сами разочароващите резултати. Някога чудили ли сте се защо ги публикуват публично? Дали защото работят или защото не? Ще ви позволя да помислите върху това.

Защо е написана тази статия?

  • Покажете, че използването на систематична RSI стратегия не работи. Доказахме това; въпреки че не беше необходимо да го доказваме. Базовата интуиция ни казва, че очевидните неща не работят.
  • Представете кода за RSI и лентите на Болинджър за амбициозни бек-тестери, за да ги използват в своите стратегии и евентуално да намерят „единствения“.
  • Покажете, че комбинирането на някои интуитивни техники може да подобри резултатите.

Други примери на сигнални диаграми, използващи филтъра за разпространение на Болинджър:

Ако искате повече съдържание от този вид, не забравяйте да ме последвате.

Код на лентите на Болинджър

def BollingerBands(Data, boll_lookback, volatility, onwhat, where_ma, where_up, where_down):
       
    # Calculating means
    for i in range(len(Data)):
        try:
            Data[i, where_ma] = (Data[i - boll_lookback:i + 1, onwhat].mean())
    
        except IndexError:
            pass
for i in range(len(Data)):
        Data[i, where_up] = ((Data[i - boll_lookback:i, onwhat].std()) * volatility) + Data[i, where_ma]
        
    for i in range(len(Data)):
        Data[i, where_down] = Data[i, where_ma] - ((Data[i - boll_lookback:i, onwhat].std()) * volatility) 
        
    return Data