У вас не стоит Flash Player
Настройки
#72254 - Thu Aug 13 2015 12:30 PM Отфильтровка сделок, помогите.
foxic20 Offline
stranger

Registered: Thu Aug 13 2015
Записи: 5
помогите вставить фильтр купли продажи по ЕМА на любую стратегию.


Attachments
breakout_rt_scheme.xml (208 downloads)
breakout_rt_script.cs (61 downloads)
supertrend_scheme.xml (212 downloads)
supertrend_script.cs (53 downloads)


Наверх
#72256 - Thu Aug 13 2015 01:53 PM Re: Отфильтровка сделок, помогите. [Re: foxic20]
Stan Offline
veteran

Registered: Wed Oct 02 2013
Записи: 1357
К визуальному редактору это не относится, так как они написаны на си шарпе Лабером(автор этих скриптов, если мне не изменяет память).Если не владеете навыками программирования, то ребята на этом форуме за деньги вам помогут!!

Наверх
#72257 - Thu Aug 13 2015 01:56 PM Re: Отфильтровка сделок, помогите. [Re: Stan]
Stan Offline
veteran

Registered: Wed Oct 02 2013
Записи: 1357
ДА точно как я и говорил


Attachments
Безымянный.jpg (531 downloads)


Наверх
#72258 - Thu Aug 13 2015 04:33 PM Re: Отфильтровка сделок, помогите. [Re: Stan]
foxic20 Offline
stranger

Registered: Thu Aug 13 2015
Записи: 5
Originally Posted By: Stan
ДА точно как я и говорил

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

Наверх
#72260 - Thu Aug 13 2015 08:33 PM Re: Отфильтровка сделок, помогите. [Re: foxic20]
Stan Offline
veteran

Registered: Wed Oct 02 2013
Записи: 1357
Тут извиняться не за что! если вы имеете ввиду фильтр супер тренд, то такой индикатор был в какой то из сборок от vito333 http://forum.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=40449&page=78 скачайте посмотрите

Наверх
#72262 - Thu Aug 13 2015 09:54 PM Re: Отфильтровка сделок, помогите. [Re: Stan]
foxic20 Offline
stranger

Registered: Thu Aug 13 2015
Записи: 5
Originally Posted By: Stan
Тут извиняться не за что! если вы имеете ввиду фильтр супер тренд, то такой индикатор был в какой то из сборок от vito333 http://forum.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=40449&page=78 скачайте посмотрите

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

Наверх
#72264 - Thu Aug 13 2015 11:48 PM Re: Отфильтровка сделок, помогите. [Re: foxic20]
Stan Offline
veteran

Registered: Wed Oct 02 2013
Записи: 1357
Originally Posted By: foxic20
Originally Posted By: Stan
Тут извиняться не за что! если вы имеете ввиду фильтр супер тренд, то такой индикатор был в какой то из сборок от vito333 http://forum.tslab.ru/ubb/ubbthreads.php?ubb=showflat&Number=40449&page=78 скачайте посмотрите

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


по точнее в личку напишите, помогу чем смогу.)

Наверх
#72268 - Fri Aug 14 2015 12:57 AM Re: Отфильтровка сделок, помогите. [Re: Stan]
foxic20 Offline
stranger

Registered: Thu Aug 13 2015
Записи: 5
правила на картинке


Attachments
Image 4.png (446 downloads)
Image 4.png (312 downloads)


Наверх
#72269 - Fri Aug 14 2015 07:50 AM Re: Отфильтровка сделок, помогите. [Re: foxic20]
VladMih Offline
enthusiast

Registered: Thu Apr 11 2013
Записи: 359
Originally Posted By: foxic20
по одному каналу осуществляется вход по другому выход как у черепах
100% есть видео, только не помню чьё. По-моему на ютуб-канале Саро Микаеляна надо порыть. Там если и не сразу найдете нужное, остальное тоже пригодится однозначно.

Если вы ужесточите Close>MA как написано на картинке, чтобы пробой канала был именно на следующем баре после закрытия над МАшкой, то подавляющее большинство сделок у вас будет во флете. Это ИМХО, конечно, и это на первый взгляд.

Для бара пробоя канала вверх ваше условие будет
Close[i-2]<МА[i-2] && Close[i-1]>МА[i-1] && ПробойКанала -
это строго ваш алгоритм, но по-моему лучше сделать с задержкой условия закрытия над МА, вынесенной в оптимизацию, чтобы можно было входить не только на 1-м баре и подобрать количество баров, при котором будет наилучший долгосрочный результат.

Наверх
#72270 - Fri Aug 14 2015 10:36 AM Re: Отфильтровка сделок, помогите. [Re: VladMih]
foxic20 Offline
stranger

Registered: Thu Aug 13 2015
Записи: 5
что нужно поменять в этом коде чтобы вместо NRMA стала SMA

* Стратегия: High-Low с фильтром на основе NRMA
* Платформа: TSLab версия 1.1.7.0
* Дата создания: 21.06.2010
* Реализовано: Laber
*================================================================================*/

using System;
using System.Collections.Generic;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.Script.Optimization;
using TSLab.Script.Helpers;

namespace TSLab.High_Low_NRMA
{

public class System_High_Low_NRMA : IExternalScript
{
//================================================================================
// функция вычисления индикатора NRMA (последовательность значений)
// kShift - коэффициент смещения
// kSharp - степень для усиления выраженности индикатора (2-3)
public IList<double> GenNRMA(ISecurity source, double kShift, double kSharp)
{
#region Variables
int Dir; // нарпавление индикатора NRTR (+1 вверх, -1 вниз)
int MinPeriod; // минимальное значение периода для скользящей средней
double MaxPrice, MinPrice, UpPrice, DownPrice;
double vNRTR, vRatio, vNRMA;
double vOSC, vOSC1, vOSC2; // последовательные значения для вычисления среднего

IList<double> nNRMA = new List<double>(source.Bars.Count);
#endregion
//--------------------------------------------------------------------------------
#region Init vars
Dir = 0;
MinPeriod = 2;

vOSC = 0;
vOSC1 = 0;
vOSC2 = 0;
vNRMA = 0;
#endregion
//--------------------------------------------------------------------------------
#region значения для первой свечи
MaxPrice = source.HighPrices[0];
MinPrice = source.LowPrices[0];
UpPrice = MinPrice * (1 + kShift / 100);
DownPrice = MaxPrice * (1 - kShift / 100);
#endregion

for (int bar = 0; bar < source.Bars.Count; bar++)
{
//--------------------------------------------------------------------------------
#region calculate values
int NewDir = Dir;
double NewUpPrice = source.LowPrices[bar] * (1 + kShift / 100);
double NewDownPrice = source.HighPrices[bar] * (1 - kShift / 100);

// разворот последовательности
// при движении вверх
if (Dir > -1)
{
if (source.LowPrices[bar] < DownPrice)
{
NewDir = -1;
UpPrice = NewUpPrice;
}
}
// при движении вниз
if (Dir < 1)
{
if (source.HighPrices[bar] > UpPrice)
{
NewDir = 1;
DownPrice = NewDownPrice;
}
}
Dir = NewDir;

if ((Dir > -1) && (NewDownPrice > DownPrice)) DownPrice = NewDownPrice;
if ((Dir < 1) && (NewUpPrice < UpPrice)) UpPrice = NewUpPrice;

// значение индикатора NRTR
// (принцип по аналогии с параболиком)
vNRTR = DownPrice;
if (Dir < 1) vNRTR = UpPrice;

// значение vRatio - усреднение осцилятора (на 3 бара) и возведение в степень kSharp
vOSC2 = vOSC1;
vOSC1 = vOSC;
vOSC = (100 * Math.Abs(source.ClosePrices[bar] - vNRTR) / source.ClosePrices[bar]) / kShift;
if (bar == 0)
{
vOSC1 = vOSC;
vOSC2 = vOSC;
vNRMA = source.ClosePrices[bar];
}
vRatio = Math.Pow((vOSC + vOSC1 + vOSC2) / 3, kSharp);

// значение NRMA
double Factor = 2.0 / (1 + MinPeriod);
vNRMA = vNRMA + vRatio * Factor * (source.ClosePrices[bar] - vNRMA);

#endregion
//--------------------------------------------------------------------------------
// добавление нового значения в последовательность
nNRMA.Add(vNRMA);
}
return nNRMA;
}

//================================================================================
// Параметры оптимизации задаются при помощи типа OptimProperty.
// Параметры оптимизации для длинных позиций
public OptimProperty High1Period = new OptimProperty(85, 10, 100, 5);
public OptimProperty Low1Period = new OptimProperty(60, 10, 100, 5);

// Параметры оптимизации для коротких позици
public OptimProperty Low2Period = new OptimProperty(70, 10, 100, 5);
public OptimProperty High2Period = new OptimProperty(85, 10, 100, 5);

// Параметры оптимизации для расчета индикатора NRMA
// также могут быть заданы другие параметры (kShift, kSharp и т.д.)
// ShiftParam - параметр оптимизации для коэффицента смещения на вход
public OptimProperty ShiftParam = new OptimProperty(9.8, 0.2, 20, 0.2);

//================================================================================
public virtual void Execute(IContext ctx, ISecurity source)
{
#region Variables
int MDir; // напраление адаптивной скользящей средней (+1 вверх, -1 вниз)
double kShift; // коэффициент смещения для расчета NRMA
double kSharp; // степень для усиления выраженности индикатора NRTR
double vNRMA; // значение NRMA для текущего бара
double vPrevNRMA; // значение NRMA для предыдущего бара
#endregion
//--------------------------------------------------------------------------------
#region Init vars
MDir = 0;
kShift = 10;
kSharp = 2;
#endregion
//--------------------------------------------------------------------------------
// Obtain parameters
kShift = ShiftParam;

// серия значений индикатора NRMA
// кэширование с учетом параметров kShift и kSharp
IList<double> nNRMA = ctx.GetData("NRMA", new[] {kShift.ToString()+"_"+kSharp.ToString()},
delegate { return GenNRMA(source, kShift, kSharp); });

// серия значений для направления скользящей средней
IList<double> nMDir = new List<double>(source.Bars.Count);
//================================================================================
#region Вычисляем максимумы и минимумы.
// Используем GetData для кеширования данных и ускорения оптимизация.
// При неиспользовании кэша увеличивается объем обрабатываемых данных, что ведет к сильному замедлению оптимизации.
// Следует учесть, что необходимо перечислить абсолютно все изменяемые переменные используемые в вычислениях.
// Не соблюдение этого правила приведет к некорректной работе и результатам оптимизации.
IList<double> high1 = ctx.GetData("Highest", new[] {High1Period.ToString()},
delegate { return Series.Highest(source.HighPrices, High1Period); });
IList<double> low1 = ctx.GetData("Lowest", new[] {Low1Period.ToString()},
delegate { return Series.Lowest(source.LowPrices, Low1Period); });
IList<double> high2 = ctx.GetData("Highest", new[] {High2Period.ToString()},
delegate { return Series.Highest(source.HighPrices, High2Period); });
IList<double> low2 = ctx.GetData("Lowest", new[] {Low2Period.ToString()},
delegate { return Series.Lowest(source.LowPrices, Low2Period); });

#endregion
// =================================================
#region прорисовка графиков
// Берем основную панель (Pane).
IPane mainPane = ctx.First;

// Отрисовка графиков.
mainPane.AddList(string.Format("High1({0}) [{1}]", High1Period, source.Symbol), high1, ListStyles.LINE,
0x00ff00, LineStyles.SOLID, PaneSides.RIGHT);
mainPane.AddList(string.Format("Low1({0}) [{1}]", Low1Period, source.Symbol), low1, ListStyles.LINE,
0xff0000, LineStyles.SOLID, PaneSides.RIGHT);
mainPane.AddList(string.Format("Low2({0}) [{1}]", Low2Period, source.Symbol), low2, ListStyles.LINE,
0xff0000, LineStyles.DASH, PaneSides.RIGHT);
mainPane.AddList(string.Format("High2({0}) [{1}]", High2Period, source.Symbol), high2, ListStyles.LINE,
0x00ff00, LineStyles.DASH, PaneSides.RIGHT);

mainPane.AddList("NRMA", nNRMA, ListStyles.LINE, 0xa000a0, LineStyles.SOLID, PaneSides.RIGHT);

#endregion
// =================================================
#region Основной цикл обработки (торговля).

int barsCount = source.Bars.Count;
vNRMA = nNRMA[0];
for (int bar = 0; (bar < barsCount); bar++)
{
//--------------------------------------------------------------------------------
#region calculate values
// значение NRMA
vPrevNRMA = vNRMA;
vNRMA = nNRMA[bar];

// изменение направления индикатора NRMA
if ((MDir > -1) && (vNRMA < vPrevNRMA)) MDir = -1;
if ((MDir < 1) && (vNRMA > vPrevNRMA)) MDir = 1;

// добавление новых значений в последовательность
nMDir.Add(MDir);

#endregion
//--------------------------------------------------------------------------------
#region execute signals
//--------------------------------------------------------------------------------
// выполнение сигналов для длинной позиции
IPosition LongPos = source.Positions.GetLastActiveForSignal("LN");
if (LongPos == null)
{
// Если нет активной длинной позиции,
if (MDir > 0)
{
// если направление индикатора NRMA вверх
// выдаем условный ордер на открыте новой длинной позиции.
source.Positions.BuyIfGreater(bar + 1, 1, high1[bar], "LN");
}
}
else
{
// Если есть активная длинная позиция,
// выдаем условный ордер на закрыте длинной позиции.
LongPos.CloseAtStop(bar + 1, low1[bar], "LX");
}
//--------------------------------------------------------------------------------
// выполнение сигналов для короткой позиции
IPosition ShortPos = source.Positions.GetLastActiveForSignal("SN");
if (ShortPos == null)
{
// Если нет активной короткой позиции,
if (MDir < 0)
{
// если направление индикатора NRMA вниз
// выдаем условный ордер на открыте новой короткой позиции.
source.Positions.SellIfLess(bar + 1, 1, low2[bar], "SN");
}
}
else
{
// Если есть активная короткая позиция,
// выдаем условный ордер на закрыте короткой позиции.
ShortPos.CloseAtStop(bar + 1, high2[bar], "SX");
}
#endregion
}
#endregion
//================================================================================
#region прорисовка графиков
// Создаем дополнительную панель.
IPane FilterPane = ctx.CreatePane("Filtr", 10, false, false);

// Отрисовка графика фильтра позиции
FilterPane.AddList(string.Format("Filter NRMA"), nMDir, ListStyles.LINE,
0x00ff00, LineStyles.SOLID, PaneSides.RIGHT);

#endregion
// =================================================
}
}

Наверх


Moderator:  ViL, sar