Перейти к содержимому


* * - - - 3 голосов

Wealth-Lab скрипты: функции, индикаторы, части кода


  • Please log in to reply
210 ответов в этой теме

#1 Trader_Йонах

Trader_Йонах
  • Guests

Отправлено 24 October 2007 - 09:01 PM

Полное описание функций находим в меню QuickRef на левой вертикальной панели / далее через поиск или вводим в тексте скрипта (закладка Editor), название функции становится синим, выделяем его и нажимаем F1.

OffsetSeries - функция позволяет обратиться к значению к-либо серии данных из прошлого, а по сути сдвигает эту серию на n баров. Незаменима при написании скриптов паттернов с условиями типа "если вчера значение индикатора составило..."

К слову вложенные скрипты в библиотеке WLD на поверку могут оказаться полной лажей. Как например Momentum Pinball по книге Линды Рашке. Как пишет аффтар этого скрипта:

Linda said "Stop over the High / Low of the trading range of the first hour . That does not work in Wealt-Lab.

Аффтар выпей йаду, учи скрипт cool.gif В итоге там изврат идеи полный. Уверен что задача решается через функции SetScaleDaily (получить дневную серию на открытом интрадее) и OffsetSeries (получить данные RSI ROC за вчерашний день). К слову RSI ROC аффтар вроде верно уловил что не совсем обычный RSI имела в виду Линда (в переводе книги на русском это хрен поймешь).

#2 Trader_Йонах

Trader_Йонах
  • Guests

Отправлено 24 October 2007 - 09:08 PM

LastBar
Смешно сказать: ломал голову как задать выход на закрытии в интрадей, особенно на годовых данных, со сменой времени закрытия с 26 марта 2007 года (18:00 ранее 18:45). Оказалось все проще пареной репы с помощью функции LastBar:

for Bar := 2 to BarCount - 1 do
begin
if LastLongPositionActive then
begin
if (LastBar( Bar ) = true) then
begin
p := LastPosition;
SellAtMarket(Bar, p, 'At Close' );
end;

Для реал-тайм не работает, поскольку LastBar сформируется только после закрытия (должно работать через функцию GetHour( Bar ) = 18), но для тестирования с переменным временем закрытия торговых сессий в ряду данных - самое то.

С покупкой на открытии в интрадей проще:
if (BarNum( Bar ) = 0) then - и погнали.

#3 Trader_Йонах

Trader_Йонах
  • Guests

Отправлено 24 October 2007 - 09:11 PM

Скользящий стоп по алгоритму SmartTrade, исключительно для тестирования стратегий, которые будут использованы вручную в Смарте, без привязки к МТС. Ну просто потому что в WLD есть своя функция InstallTrailingStop которая решает эту задачу по своему (по своему алгоритму).

var TStop, TStopPrice: float;
var Bar, p, TSBar: integer;
for Bar := 1 to BarCount - 1 do
begin
if LastLongPositionActive then - здесь только для лонгов!
begin
p := LastPosition;
TSBar := Bar - PositionEntryBar ( p );
TStop := Highest (Bar, #Close, TSBar); - здесь самое высокое (Highest) закрытие (#Close) после открытия позиции (можно изменить на другой вариант)
TStopPrice := TStop - #OptVar1; - по хорошему #OptVar1 это параметр оптимизации: сколько пунктов отката от хаев является оптимальным, но можно заменить его фиксированным числом.
SellAtStop( Bar + 1, TStopPrice, p, 'Trailng Stop' );

Ну а для шорта нужно задать другие параметры TStop (типа Lowest и #Close), а величину #OptVar1 соответственно прибавлять, а не вычитать.

#4 Trader_Йонах

Trader_Йонах
  • Guests

Отправлено 25 October 2007 - 08:21 PM

GetDailyBar
Как сказано в писании:
GetDailyBar returns the Bar Number of the daily series that corresponds to the specified Bar in the intraday series.
А теперь запустите нижеприведенный скрипт на интрадей данных и посмотрите какие значения "returns" возвращает эта функция для первых двух дней: ОБА первых дня (дневных бара) идут под номером ноль!
По факту это означает что при использовании оной мы получаем смещение значений дневных функций которые хотим применить на интрадей данных ровно на один день!
Косяк Лаборанта? или поднимите мне веки, плз!

var db: float;
var n, Bar, MyPane: integer;
n := CreateSeries;
for Bar := 0 to BarCount - 1 do
begin
db := GetDailyBar (Bar);
SetSeriesValue( Bar, n, db );
end;
MyPane := CreatePane( 50, true, true );
PlotSeries( n, MyPane, #Green, #Thick );

Открыл это так: решил проверить правильно ли дает сигналы система Momentum Pinball - вход в позицию на интрадей данных на следующий день после дневного экстремума RSI ROC, использовал для этого OffsetSeries чтобы сдвинуть дневную серию. Глядь - входы в дни экстремума! Убираю OffsetSeries - вход на следующий день. Нарисовал тогда этот скрипт чтобы визуально проверить значения функции GetDailyBar.

#5 Trader_Йонах

Trader_Йонах
  • Guests

Отправлено 25 October 2007 - 11:34 PM

Я сделал это: скрипт Momentum Pinball слово в слово с книги Линды Рашке побежден!
Победа интересна тем, что удалось освоить совмещение дневных индикаторов на интрадей данных и такие нетипичные сигналы как "покупка на максимуме первого часа" на 5 минутном тайм-фрейме.
По этим вопросам если интересно могу подсказать.

#6 goga

goga

    Гуру нашего муравейника

  • Трейдеры
  • PipPipPipPip
  • 3470 сообщений

Отправлено 28 October 2007 - 04:20 PM

Подскажите пожалуйста, как сделать так, чтобы с каждым последующим баром период усреднения прирастал на единицу?
  • Illireffifoni, Augmexhequeve, indignvenna and 4 others like this

#7 Trader_Йонах

Trader_Йонах
  • Guests

Отправлено 28 October 2007 - 09:07 PM

хмм, я вот попробовал вместо значения периода в функции средней поставить номер текущего бара - вроде считает цифирь, правда не проверял насколько корректную:

var db: float;
var n, Bar, MyPane: integer;
n := CreateSeries;
for Bar := 0 to BarCount - 1 do
begin
db := WMA (Bar, TrueRangeSeries, Bar);
SetSeriesValue( Bar, n, db );
end;
MyPane := CreatePane( 50, true, true );
PlotSeries( n, MyPane, #Green, #Thick );

#8 goga

goga

    Гуру нашего муравейника

  • Трейдеры
  • PipPipPipPip
  • 3470 сообщений

Отправлено 28 October 2007 - 09:39 PM

Цитата(Йонах @ 29.10.2007, 0:07) Просмотреть сообщение

хмм, я вот попробовал вместо значения периода в функции средней поставить номер текущего бара - вроде считает цифирь, правда не проверял насколько корректную:

var db: float;
var n, Bar, MyPane: integer;
n := CreateSeries;
for Bar := 0 to BarCount - 1 do
begin
db := WMA (Bar, TrueRangeSeries, Bar);
SetSeriesValue( Bar, n, db );
end;
MyPane := CreatePane( 50, true, true );
PlotSeries( n, MyPane, #Green, #Thick );

Спасибо.
До этого дошла и моя мысль rolleyes.gif , но показалось, что уж больно долго считается (год пятиминуток за минуту обсчитывается). Думал, что может товарищи нашли уже более оптимизированный вариант. smile.gif
Буду рыть дальше.

#9 Trader_Йонах

Trader_Йонах
  • Guests

Отправлено 29 October 2007 - 08:15 AM

Цитата(goga @ 28.10.2007, 23:39) Просмотреть сообщение

Спасибо.
До этого дошла и моя мысль rolleyes.gif , но показалось, что уж больно долго считается (год пятиминуток за минуту обсчитывается). Думал, что может товарищи нашли уже более оптимизированный вариант. smile.gif
Буду рыть дальше.

на интрадее среднее с периодом в виде номера бара считается только внутри дня с первого бара до последнего (там внутридневная нумерация). вот только в каких случаях имеет смысл такой плавающий период усреднения?

#10 goga

goga

    Гуру нашего муравейника

  • Трейдеры
  • PipPipPipPip
  • 3470 сообщений

Отправлено 29 October 2007 - 09:12 AM

Цитата(Йонах @ 29.10.2007, 10:15) Просмотреть сообщение

Цитата(goga @ 28.10.2007, 23:39) Просмотреть сообщение

Спасибо.
До этого дошла и моя мысль rolleyes.gif , но показалось, что уж больно долго считается (год пятиминуток за минуту обсчитывается). Думал, что может товарищи нашли уже более оптимизированный вариант. smile.gif
Буду рыть дальше.

на интрадее среднее с периодом в виде номера бара считается только внутри дня с первого бара до последнего (там внутридневная нумерация). вот только в каких случаях имеет смысл такой плавающий период усреднения?

Вопрос снимается с обсуждения. biggrin.gif
http://forex.kbpauk....ge/1#Post121945
Вездесущий Lift и здесь подсуетился. smile.gif

#11 Trader_Йонах

Trader_Йонах
  • Guests

Отправлено 30 October 2007 - 02:01 PM

Цитата(kot99 @ 30.10.2007, 13:14) Просмотреть сообщение

ткните носом где в WL WATR ??? и есть ли...если нет - может у кого код для расчета завалялся ?

WMA (Bar, TrueRangeSeries, Period), где
WMA - скользящая взвешенная средняя (любая)
Bar - которая приводит значение для текущего бара
TrueRangeSeries - усредняя и взвешивая серию значений TrueRange (в данном примере а вообще любое)
Period - прямо указанное число баров (период усреднения)

Если хотим сделать индикатор для рисования на графике вот его код:

function WATRSeries( ATRperiod: Integer ): integer;
begin
var Bar: integer;
var sName: string;
var Value: float;

sName := 'WATR(' + IntToStr( ATRperiod ) + ')';
Result := FindNamedSeries( sName );
if Result >= 0 then
Exit;
Result := CreateNamedSeries( sName );
for Bar := 0 to BarCount() - 1 do
begin
{ Calculate your indicator value here }
Value := WMA (Bar, TrueRangeSeries, ATRPeriod);
SetSeriesValue( Bar, Result, Value );
end;
end;

function WATR( Bar: integer; ATRperiod: Integer ): float;
begin
Result := GetSeriesValue( Bar, WATRSeries( ATRperiod ) );
end;

#12 kot99

kot99

    Гуру нашего муравейника

  • Трейдеры
  • PipPipPipPip
  • 1002 сообщений

Отправлено 30 October 2007 - 02:03 PM

да, догнал уже...спасибо tongue.gif

#13 Lift

Lift

    Гуру нашего муравейника

  • Трейдеры
  • PipPipPipPip
  • 2831 сообщений

Отправлено 30 October 2007 - 04:37 PM

Цитата(goga @ 29.10.2007, 9:12) Просмотреть сообщение

Вездесущий Lift и здесь подсуетился. smile.gif

Это был первый заход на ВЛ, но я до сих пор так его и не освоил, - туповат huh.gif
Вот с омегой не туплю, а тут как баран на новые ворота.
Там мы с SGN часть финишных постов удалили, что бы не смущать народ wink.gif


#14 kot99

kot99

    Гуру нашего муравейника

  • Трейдеры
  • PipPipPipPip
  • 1002 сообщений

Отправлено 02 November 2007 - 07:59 AM

в процессе ознакомления с современными технологиями создания адаптивных скользящих средних наткнулся на JMA. на первый взгляд вещь интересная.
код для WL есть у кого ? для metatrader на форумах валяется, а для WL не нашел sad.gif
я так понял суть работы JMA никто до конца не догоняет, и вещь вообщем то коммерческая...black box так сказать.
но кто-то добыл исходники и теперь они гуляют по просторам сети...
вообщем если у кого есть информация по JMA давайте ей делиться.

#15 goga

goga

    Гуру нашего муравейника

  • Трейдеры
  • PipPipPipPip
  • 3470 сообщений

Отправлено 02 November 2007 - 08:28 AM

Цитата(kot99 @ 2.11.2007, 9:59) Просмотреть сообщение

в процессе ознакомления с современными технологиями создания адаптивных скользящих средних наткнулся на JMA. на первый взгляд вещь интересная.
код для WL есть у кого ? для metatrader на форумах валяется, а для WL не нашел sad.gif
я так понял суть работы JMA никто до конца не догоняет, и вещь вообщем то коммерческая...black box так сказать.
но кто-то добыл исходники и теперь они гуляют по просторам сети...
вообщем если у кого есть информация по JMA давайте ей делиться.

На пауке есть целая ветка про это. Но если хотите, то могу потом из дома сюда кинуть.

#16 kot99

kot99

    Гуру нашего муравейника

  • Трейдеры
  • PipPipPipPip
  • 1002 сообщений

Отправлено 02 November 2007 - 08:31 AM

Цитата(goga @ 2.11.2007, 11:28) Просмотреть сообщение

Цитата(kot99 @ 2.11.2007, 9:59) Просмотреть сообщение

в процессе ознакомления с современными технологиями создания адаптивных скользящих средних наткнулся на JMA. на первый взгляд вещь интересная.
код для WL есть у кого ? для metatrader на форумах валяется, а для WL не нашел sad.gif
я так понял суть работы JMA никто до конца не догоняет, и вещь вообщем то коммерческая...black box так сказать.
но кто-то добыл исходники и теперь они гуляют по просторам сети...
вообщем если у кого есть информация по JMA давайте ей делиться.

На пауке есть целая ветка про это. Но если хотите, то могу потом из дома сюда кинуть.


ссылочку можно ? не могу найти что-то на пауке...sad.gif

#17 goga

goga

    Гуру нашего муравейника

  • Трейдеры
  • PipPipPipPip
  • 3470 сообщений

Отправлено 02 November 2007 - 08:41 AM

Цитата(kot99 @ 2.11.2007, 10:31) Просмотреть сообщение

ссылочку можно ? не могу найти что-то на пауке...sad.gif

Точную не помню.

#18 kot99

kot99

    Гуру нашего муравейника

  • Трейдеры
  • PipPipPipPip
  • 1002 сообщений

Отправлено 02 November 2007 - 09:49 AM

Цитата(goga @ 2.11.2007, 11:41) Просмотреть сообщение

Цитата(kot99 @ 2.11.2007, 10:31) Просмотреть сообщение

ссылочку можно ? не могу найти что-то на пауке...sad.gif

Точную не помню. Попробуйте из этой ветки
_hxxp://forex.kbpauk.ru/showflat.php/Cat/0/...ge/1#Post121945[/url] выйти в раздел Велс Лаб и там прямо на первой странице есть эта тема, название которой я, впрочем, тоже не помню. unsure.gif

P.S. Напряг моск и вспомнил пароль biggrin.gif - _hxxp://forex.kbpauk.ru/showflat.php?Cat=0&...e=1&fpart=1


премного благодарен rolleyes.gif

#19 Trader_Йонах

Trader_Йонах
  • Guests

Отправлено 02 November 2007 - 10:43 AM

хочу вас уверить что чем проще система, тем надежней она работает. WATR с коэффициентом привязанный к одной из границ ценового диапазона показывает столь же "впечатляющие" результаты, что и магический Юрик
попробуйте создать индикатор для восходящего тренда:
Value := Highest (Bar, #High, HighPeriod) - WMA (Bar, TrueRangeSeries, ATRPeriod) * Factor;
и для нисходящего:
Value := Lowest (Bar, #Low, LowPeriod) + WMA (Bar, TrueRangeSeries, ATRPeriod) * Factor;
или реверсивный, когда при пересечении ценами линии текущего индикатора меняется направление на противоположное.
ну а подбор периода усреднения и значения коэффициента Factor дает просто "поразительные" результаты.

чем больше изучаю тему трендоследящих систем, тем больше понимаю что по соотношению риск / доходность как торговые системы они меня не устраивают совершенно. оставлю ка я их институциональным инвесторам :-)

хотя следить за индикаторами тренда от этого не перестану

#20 sormat

sormat

    Новичок

  • Трейдеры
  • Pip
  • 4 сообщений

Отправлено 02 November 2007 - 11:40 AM

Коллеги, Poul просит не давать прямые ссылки на свой форум.Лучше делать ссылки хитрыми, типа ht_tp и т.п.




Rambler's Top100 Яндекс.Метрика