thinkorswim

Здравствуйте. Пытаюсь программировать в тосе. Понимаю, что в чем-то проявил криворукость, но вот в чем ни как не пойму. Помогите понять почему не работает код. Смысл кода в том чтобы отрисовывать на графике индикатор отражающий сумму low+atr. Если CCI выше нуля тогда значение индикатора может только увеличиваться. Если low+atr менише предыдушего значения индикатора тогда текущее значение должно быть равно предыдущему. Иными словами индикатор либо растет либо ползет в бок. При отрицательном CCI всё с точностью до наоборот. input CCIPeriod = 30; input ATRPeriod = 5; plot UPTrend; def UPTrendTrue = CCI(CCIPeriod) > 0; def UPTrendTek = Low - AverageTrueRange(ATRPeriod); if UPTrendTrue then { UPTrend = Low - AverageTrueRange(ATRPeriod); if UPTrend[1]


Проголосовало: 0

Июн 20 2012, 18:36


Комментарии
growex

попробуем разобраться.....

Июн 20 2012, 22:41
growex

посмотрите вот это http://www.rpg-club.com/x1000m?h=content.scre.../21.06.png

в данном случае отображаются максимумы low+atr

Июн 21 2012, 00:39
melnikas

в период когда CCI положительный, рассчитываемый индикатор не должен снижаться, он либо равен high+atr либо равен предыдущему значению себя же
если cci>0 тогда
uptrend=high+atr
если uptrend[1]<uptrend тогда
uptrend=uptrend[1]
конецесли
конецесли
прошу прощения если я невнятно объясняю

Июн 21 2012, 01:39
melnikas

growex, Вы похоже хорошо в тосе разбираетесь, если Вас не затруднит ответьте пожалуйста на пару вопросов. Почему он забраковал мой код? Правильно ли я понимаю, переменной можно только один раз присвоить какое либо значение? При попытке повторно присвоить ей какое-либо значение выдается ошибка.

Июн 21 2012, 01:50
growex

Вы берете предыдущее значение, которое так же как и текущее постоянно изменяется....
Насколько я вас понял, вы хотите сохранить максимальное значение, то есть должна получится ступенчатая кривая состоящая из максимумов high+atr которая отображается в момент когда CCI > 0......насколько я понял, после пересечения cci нуля вниз значение high+atr должно обнулиться и в следующем цикле когда cci>0 все повторяется сначала.....я правильно понял?

Июн 21 2012, 09:26
melnikas

Точно! Именно так. Только при перевороте CCI с "+" на "-" индикатор не обнуляется а просто начитает рассчитываться как low-atr. Но суть Вы абсолютно чётко уловили "должна получится ступенчатая кривая"
Если говорить глобально о задаче то я пытаюсь переделать под тос, систему предназначенную для метатрейдера. Мне кажется она довольно любопытная. http://www.rpg-club.com/x1000m?h=tradelikeapr...er-system/

Июн 21 2012, 10:11
growex

вот с этого и надо начинать.....теперь понятно что нужно делать...

Июн 21 2012, 10:44
melnikas

хотелось самостоятельно сделать, уперся правда в конструкцию if then else. так и не понимаю почему в моем отрезке кода выдается ошибка?

Июн 21 2012, 10:54
growex

обязательно разберитесь с рекурсией и циклами ...они вам понадобятся при написании этого индикатора.

Июн 21 2012, 11:11
melnikas

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

plot aaa = 1;
plot bbb = 2;
if bbb == 2
{aaa = bbb;}
else
{bbb = 2;}

хотя возможно всему виной языковой порог)

Июн 21 2012, 11:21
growex

также внутри If доступны стандартные мат.операции
def aaa = if bbb==2 then bbb+2 else 1+1

Июн 21 2012, 12:45
growex

если же вы имеете в виду вот такой вид

plot <plot_name>;
if <condition> [then] {
<plot_name> = <expression1>;
} else {
<plot_name> = <expression2>;
}

то здесь также изменяется только одна основная переменная

Июн 21 2012, 12:52
melnikas

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

Июн 21 2012, 12:57
melnikas

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

input CCIPeriod = 30;
input ATRPeriod = 5;

plot UPTrend;

def UPTrendTrue = CCI(CCIPeriod) >= 0;

if UPTrendTrue then
{
UPTrend = Low - AverageTrueRange(ATRPeriod);
if UPTrend[1] < UPTrend Then
{
UPTrend = UPTrend[1];
}
}

Июн 21 2012, 13:08
growex

Сначала нужно определиться с Uptrend......если cci >= 0 то ей присваивается Low - Atr.....где else?

Июн 21 2012, 13:43
melnikas

в том то все и дело, else мне не нужен. Согласно логике моего условия else не требуется.

Июн 21 2012, 14:02
growex

а если так?

input CCIPeriod = 30;
input ATRPeriod = 5;
def UPTrend = CCI(CCIPeriod) >= 0;
plot Trend;
if UPTrend then
{Trend = Low - AverageTrueRange(ATRPeriod);} else {Trend = High + AverageTrueRange(ATRPeriod);};

обычно если else не требуется то записываем пустое значение типа .........else Double.Nan

Июн 21 2012, 14:10
growex

с максимумами будем потом разбираться, давайте сначала с определением тренда закончим

Июн 21 2012, 14:15
melnikas

так подходит,
теперь при аптренде нужно не давать снижаться
а при даунтренде не давать подниматься

Июн 21 2012, 14:20
melnikas

может попытаться использовать switch case?

Июн 21 2012, 14:23
growex

так как то?
http://www.rpg-club.com/x1000m?h=content.scre...condup.png

Июн 21 2012, 15:26
melnikas

Да, очень похоже не правду

Июн 21 2012, 15:28
melnikas

Кодом поделитесь?)

Июн 21 2012, 15:30
growex

конечно только это не то что нужно..... :)
здесь надо правильно задать условия иначе он лажает крупно

простая условная рекурсия будет выглядеть примерно как

rec conddn = if Trend > high and trend[1] > trend then max(trend, conddn[1]) else conddn[1];
plot condline = conddn;

Июн 21 2012, 15:41
growex

max (trend

Июн 21 2012, 15:42
growex

лучше так: if !Uptrend

Июн 21 2012, 15:47
growex

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

Июн 21 2012, 15:51
melnikas

отлично! похоже это то что нужно) СПАСИБО!

Июн 21 2012, 15:56
growex

Вам спасибо. :)

Июн 21 2012, 16:15
melnikas

))))) за что?

Июн 21 2012, 16:20
melnikas

Спасибо Вам ОГРОМНОЕ! Вы мне реально помогли лучше понимать возможности тоса!
Вот такой получился код

input CCIPeriod = 30;
input ATRPeriod = 5;

def atr = AverageTrueRange(ATRPeriod);

def dir = if CCI(CCIPeriod) > 0
then Low - atr
else high + atr;

rec trend = if CCI(CCIPeriod) > 0
then max(dir,trend[1])
else min(dir,trend[1]);

plot TekTrend=trend;

def col = if CCI(CCIPeriod) > 0 then 6 else 5;
TekTrend.AssignValueColor(getColor(col));

А вот так он выглядит http://www.rpg-club.com/x1000m?h=hamaha.net/i...d633c7.png

Июн 21 2012, 19:52
growex

Довольно неплохо выглядит...... :)

Июн 21 2012, 21:58
growex

вверху только дописать
declare upper;
чтобы он по умолчанию на чарт вставал.....

Июн 21 2012, 22:09
melnikas

вы на реале торгуете?

Июн 21 2012, 22:53
growex

Теперь да, также всегда дублирую сделки на демо... иногда акции но в основном опционы....правда по опционам мне доступны только лонги, так как чтобы торговать спредами нерезам нужен достаточно мощный депо.
ТОС конечно лучший в плане анализа, но также активно пользуюсь софтом от Hoadley.
Есть своя разработанная стратегия на основе так же собственных тех.индикаторов...как правило позиции открываются не более чем на три дня....относительно возможностей трейдинговой системы....как видите все довольно гибко, большим плюсом является встроенный язык, возможность написания собственных индикаторов, запросов, сканер по кастом кьюрис, да еще и приспособленность именно к опционному рынку...все это делает тос для меня лично лучшим вариантом даже несмотря на довольно высокие сопутствующие расходы.
Что касается рынка то здесь моя позиция простая - не жадничать...

Июн 22 2012, 12:55
melnikas

Опционы для меня пока темный лес) знаю о них крайне мало да и только поверхностно. Пытаюсь пока на форексе определиться как мне торговать, интрадей или на дневках. Пока мне больше по душе дневки. На них, как мне показалось, теханализ четче срабатывает. А Вы на реле давно торгуете?

Июн 22 2012, 14:00
growex

с 2009 на ммвб, тогда же начал изучать опционы но быстро понял что американская теория и практика ценообразования на нашем рынке просто не работают, нет масштаба, толком нет инструментов...... короче вот это был действительно темный лес. А тут рынок, все вписывается в определенные модели а если не вписывается то здесь и появляется возможность заработать.
Форекс.....хех.....можно начать конечно и с форекса :) , но денег на это тратить точно не нужно. Имхо информативнее и полезнее для развития в этой области начать на российских площадках торговать акциями....ну или сразу на американских если есть финансовая возможность.....вот здесь насколько мне известно люди пользуются услугами одного из брокеров...хотя я особо не вникал в суть......
Спросите у местных, я вам гарантирую что опыта получите больше чем на этом как его....."форексе"

Июн 22 2012, 14:38
melnikas

я очень хочу начать работать на америке, средства правда не позволяют открыть приличный счет. Исходя из Вашего личного опыта, как думаете какой должен быть минимальный депозит, что бы можно было начать учиться(не зарабатывать на жизнь) торговле с соблюдение манименеджмента?

Июн 22 2012, 16:08
growex

для реального счета $2000....как у наших брокеров так и у американских.......

Июн 22 2012, 16:21
melnikas

Еще раз благодарю за помощь и за ответы)

Июн 22 2012, 17:00

Разделено

Наш канал