Блог им. diamante |Тест открытой ТС

Лениво бродив по западному интернету, нашел интересную стратегию, которая своими корнями уходит к некоему Larry Connors. Стратегия построена на простом RSI с периодом 2.

Суть ее в следующем: 
покупаем индексный ETF, когда значение меньше 15 на закрытии дня (да, это можно сделать без проблем и проскальзываний на всех ликвидных ETF) и продаем, когда клоуз текущего дня выше хая предыдущего (можете придумать свои выходы, стратегия не очень-то чувствительна к выходам). 
В общем MR в чистом виде. И в принципе это должно работать на большинстве ETF развитых рынков. 
Тестил на Multicharts.Net, код ниже. 


using System;
using System.Drawing;
using System.Linq;
using PowerLanguage.Function;
using ATCenterProxy.interop;

namespace PowerLanguage.Strategy {
        public class rsi_2_spy : SignalObject {
                public rsi_2_spy(object _ctx):base(_ctx){}
                private IOrderMarket buy_order;
                private IOrderMarket sell_order;
                
                private RSI m_RSI;
        private VariableSeries<Double> m_myrsi;
                private ISeries<double> Price { get; set; }
                
                protected override void Create() {
                        // create variable objects, function objects, order objects etc.
                        buy_order = OrderCreator.MarketThisBar(new SOrderParameters(Contracts.Default, EOrderAction.Buy));
                        sell_order = OrderCreator.MarketThisBar(new SOrderParameters(Contracts.Default, EOrderAction.Sell));
                        m_RSI = new RSI(this);
            m_myrsi = new VariableSeries<Double>(this);
                        
                }
                protected override void StartCalc() {
                        // assign inputs 
                        Price = Bars.Close;
            m_RSI.price = Price;
            m_RSI.length = 2;
                }
                protected override void CalcBar(){
                        // strategy logic 
                         m_myrsi.Value = m_RSI[0];
                        if (Bars.Close[0]>Bars.High[1]){
                                sell_order.Send();
                                return;
                        }
                        
                        if (m_RSI[0]<15){
                        buy_order.Send();
                        }
                        
                }
        }
}


( Читать дальше )

....все тэги
UPDONW
Новый дизайн