бар-призрак

11/14/2011 5:07:25 PM
Gravatar
Total Posts 27

бар-призрак

Доброго дня!

Есть стратегия, которая работает на дневках и покупает по цене закрытия текущего дня.

Технически это выглядит так: за 5 минут конца торгов "виртуально" закрываем для себя торговый день, и принимаем решение о покупке-продаже.

Но как это сделать в велсе?

То есть задача состоит до окончания торгов "увидеть" BullishLongWhiteLine.

Пока начинаю городить огород из выгрузок дневных данных в формате TXT и забиванием туда вручную данных из квика... Но неужели в велсе нельзя сделать более изящно?...

[CODE]

using System;

using System.Collections.Generic;

using System.Text;

using System.Drawing;

using WealthLab;

using WealthLab.Indicators;

using WealthLab.Rules.Candlesticks;

namespace WealthLab.Strategies

{

public class MyStrategy : WealthScript

{

protected override void Execute()

{

bool[] bullishLongWhiteLine;

CandlePattern.BullishLongWhiteLine(this, "+Long White", true, out bullishLongWhiteLine);

for(int bar = GetTradingLoopStartBar(1); bar < Bars.Count; bar++)

{

if (IsLastPositionActive)

{

Position p = LastPosition;

if (p.EntrySignal.Contains("Group1|"))

{

double Target = p.EntryPrice*1.05;

SellAtLimit(bar, p, Target, "take proit");

ExitAtClose(bar, p, "exit at close");

}

}

else

{

if (bullishLongWhiteLine[bar])

{

BuyAtClose(bar, "Group1|");

}

}

}

}

}

}

[/CODE]

11/14/2011 6:20:56 PM
Gravatar
Total Posts 115

RE:бар-призрак

Можно изменить масштаб времени, используя метод SetScaleCompressed, [U]при этом не забыть восстановить масштаб времени обратно![/U].

[CODE]

DataSeries SMA20 = SMA.Series( Close, 20 ); //базовый временной ряд

SetScaleCompressed( 15 ); //перешли к новому масштабу времени

DataSeries SMA20_15 = SMA.Series( Close, 20 ); // ещё один временной ряд с другим масштабом времени

RestoreScale(); //восстановили исходный масштаб

SMA20_15 = Synchronize( SMA20_15 ); //синхронизировали

[/CODE]

Тогда алгоритм таков:

0. Меняем масштаб времени

1. Загружаем новый временной ряд (скажем на минутках)

2. Восстанавливаем исходный масштаб и синхронизируемся.

3. На новом временном ряде проверяем условие, что осталось нужное время до конца торгов, используя метод Date.

11/15/2011 6:25:25 AM
Gravatar
Total Posts 27

RE:бар-призрак

Ага, вот как оно оказывается..

А как на минутках обнаружить BullishLongWhiteLine ? Ну, она же на дневках должна быть видна, а тут минутки.

11/15/2011 3:43:35 PM
Gravatar
Total Posts 115

RE:бар-призрак

BullishLongWhiteLine - паттерн который характеризуется тем, что цены открытия около низких цен периода, а цены закрытия около максимальных цен периода. Стало быть, если Вы подадите первым аргументом CandlePattern.BullishLongWhiteLine минутный ряд, то он Вам найдет этот паттерн в минутных данных. Таким образом, проще проверить это условие вручную:

1. Пусть bar_star - номер минутного бара, который Вы считаете последним в торговом дне (скажем начало последней пятиминутки), minutes - ряд на минутках ,пусть Open_low - минимальная цена открытия на дневках, а Close_high - максимальная. Пусть, кроме того, threshold_low и threshold_high - пороги, с которыми вы будете сравнивать цены открытия и закрытия.

2. Вместо условия [CODE]

if (bullishLongWhiteLine[bar])

{

BuyAtClose(bar, "Group1|");

} [/CODE]

Вы ставите условие

[CODE]

if ( (minutes.Open[bar_star] - Open_low < threshold_low) & (Close_high - minutes.Close[bar_star] < threshold_high) )

{

do something;

}

[/CODE]

В принципе, разность можно смотреть по модулю.