Избранное трейдера Vitastic
PORTFOLIO_EX BRENT_RUB;
DESCRIPTION Нефть в рублях;
CLIENTS_LIST ALL_CLIENTS;
FIRMS_LIST ALL_FIRMS;
PROGRAM
' =========Пользовательские настройки=============
INSTRUMENT_BRENT="BRK7" ' код инструмента BRENT
INSTRUMENT_USDRUB="USD000UTSTOM" ' код инструмента USDRUB_TOM
CLASSCODE_FUT="SPBFUT" ' код группы
CLASSCODE_ETC="CETS" ' код группы
PriceBrent = 0 + GET_PARAM(CLASSCODE_FUT,INSTRUMENT_BRENT, "OFFER")
PriceUSDRUB = 0 + GET_PARAM(CLASSCODE_ETC,INSTRUMENT_USDRUB, "OFFER")
BRENT_RUB=PriceBrent*PriceUSDRUB
' ===============СЕРВЕРНЫЕ ДАТА И ВРЕМЯ===============
SERVERDATE=GET_INFO_PARAM("TRADEDATE") ' дата сервера в формате DD.MM.YYYY
SERVERTIME=GET_INFO_PARAM("SERVERTIME") ' время сервера в формате HH:MM:SS
DATETIME(SERVERDATE,SERVERTIME) ' вызов функции даты-времени
' ===============ДАННЫЕ В ТАБЛИЦУ===============
OUTPUT_BRENT=CREATE_MAP()
OUTPUT_BRENT=SET_VALUE(OUTPUT_BRENT,"BRENT_RUB" , BRENT_RUB)
OUTPUT_BRENT=SET_VALUE(OUTPUT_BRENT,"SERVERTIME" , SERVERTIME)
OUTPUT_BRENT=SET_VALUE(OUTPUT_BRENT,"SERVERDATE" , SERVERDATE)
OUTPUT_BRENT=SET_VALUE(OUTPUT_BRENT,"INSTRUMENT" , INSTRUMENT_BRENT)
DELETE_ALL_ITEMS()
ADD_ITEM(1,OUTPUT_BRENT)
' ===============ФУНКЦИИ===============
' ФУНКЦИЯ СЕРВЕРНЫХ ДАТЫ И ВРЕМЕНИ
FUNC DATETIME(FSERVERDATE,FSERVERTIME)
CURYEAR=SUBSTR(FSERVERDATE,6,4) ' текущий год в текстовом формате
CURMONTH=SUBSTR(FSERVERDATE,3,2) ' текущий месяц в текстовом формате
CURDAY=SUBSTR(FSERVERDATE,0,2) ' текущий день в текстовом формате
CURDATE=CURYEAR & CURMONTH & CURDAY ' дата в текстовом формате
CURHOUR=SUBSTR(FSERVERTIME,0,2) ' текущие часы в текстовом формате
CURMIN=SUBSTR(FSERVERTIME,3,2) ' текущие минуты в текстовом формате
CURSEC=SUBSTR(FSERVERTIME,6,2) ' текущие секунды в текстовом формате
CURTIME=CURHOUR & CURMIN & CURSEC ' время в текстовом формате
END FUNC
END_PROGRAM
PARAMETER SERVERDATE;
PARAMETER_TITLE Дата;
PARAMETER_DESCRIPTION Дата;
PARAMETER_TYPE STRING(10);
END
PARAMETER SERVERTIME;
PARAMETER_TITLE Время;
PARAMETER_DESCRIPTION Время;
PARAMETER_TYPE STRING(10);
END
PARAMETER BRENT_RUB;
PARAMETER_TITLE Нефть (руб.);
PARAMETER_DESCRIPTION Нефть (руб.);
PARAMETER_TYPE STRING(10);
END
END_PORTFOLIO_EX
ссылка на скриптЛениво бродив по западному интернету, нашел интересную стратегию, которая своими корнями уходит к некоему 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();
}
}
}
}
Индикатор ATR (Average True Range) показывает среднюю величину изменения цены внутри дня за указанный период. Отлично подходит для выбора уровней стопов. Также индикатор показывает рост волатильности в активе, когда сохраняет высокие значения.
Работаем на Quantopian (см. сюда), код пишем на Python. Проверяем стратегии:


