Автор |
Сообщение |
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Так нельзя писать
Код: |
IIf(SignBuy == 1, PlotShapes(shapeUpArrow * SignBuy, colorGreen, 0, L, -17), Null); //Рисуем Бай сигнал
IIf(SignSell == 1, PlotShapes(shapeDownArrow * SignSell, colorRed, 0, H, -17), Null); //Рисуем Селл сигнал |
Потом напишу почему.... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
belin
Зарегистрирован: 09.09.2009
Сообщения: 230
Откуда: wealth-lab user
|
cowboy писал(а): |
Все как бы работает, но есть одно НО!, понять не могу что это, скорее всего баг Ами...
Может кто попробует у себя, чтобы убедиться, что это все таки баг? |
Попробовал, есть тонкие красные стрелочки на каждом баре, если в начало кода вставить строчку
SetBarsRequired(sbrAll,sbrAll);
и этим заставить Ами учитывать все бары, они перестают пропадать и рисуются стабильно.
Может это и глюк Ами, не знаю, но лучше всё же сначала вычислять массив, а потом плотить его, а не Plot внутри IIF. И взгляни в хелпе, наводишь курсор на IIF в редакторе и жмешь F1:
Please note that IIF is a function - so the result of evaluation is returned by that function and should be assigned to some variable. IIf always evaluates both TRUE_PART and FALSE_PART, even though it returns only one of them. Because of this, you should watch for undesirable side effects. The following example shows one common error made with IIF function: IIF( condition, result = 7, result = 9 ); // THIS IS WRONG Correct usage is: result = IIF( condition, 7, 9 ); /* 7 or 9 is *returned* and assigned to a variable depending on condition */ |
|
|
Посмотреть профиль Отправить личное сообщение |
|
cowboy
Зарегистрирован: 23.04.2011
Сообщения: 21
|
Всем Привет! Съездил не много отдохнул, на майские праздники... приступим к работе со свежими силами.. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
cowboy
Зарегистрирован: 23.04.2011
Сообщения: 21
|
Я тут так то кодю во всю уже разные простые вещи...базовых функций для этого оказалось вполне достаточно, вот попробывал закодить Импульсную систему элдера (Окрашает бар в зеленый цвет если MA + MACD растет, в красный - если они падают, и в синий - если разнонаправленное движение), получился бред какой то, опять перерисовывает понять не могу почему... может кто скажет где ошибка?
__________________________________
Код:
Fast_MACD = Param( "Fast avg", 12, 2, 200, 1 );
Slow_MACD = Param( "Slow avg", 26, 2, 200, 1 );
SignalLine_MACD = Param( "Signal avg", 9, 2, 200, 1 );
EMA_Periods = Param( "EMA", 12, 2, 200, 1 );
fl = Fast_MACD;
sl = Slow_MACD;
sil = SignalLine_MACD;
ep = EMA_Periods;
//-----------------------------------------------------------------------
sil_l = Ref(Signal(fl,sl,sil), 0); // текущее значение сигнальной линии
sil_p = Ref(Signal(fl,sl,sil), -1); // предыдущее значение сигнальной линии
ep_l = Ref(EMA(C, ep), 0); // текущее значение EMA
ep_p = Ref(EMA(C, ep), -1); // предыдущее значение EMA
//-----------------------------------------------------------------------
Rise = IIf((sil_l > sil_p & ep_l > ep_p), 1, Null);
Fall = IIf((sil_l < sil_p & ep_l < ep_p), 1, Null);
None = IIf((sil_l > sil_p & ep_l < ep_p) OR (sil_l < sil_p & ep_l > ep_p), 1, Null);
PlotOHLC( Rise*Open, Rise* High, Rise* Low, Rise* Close, "Rise", colorGreen, styleCandle );
PlotOHLC( Fall*Open, Fall* High, Fall* Low, Fall* Close, "Fall", colorRed, styleCandle );
PlotOHLC( None*Open, None* High, None* Low, None* Close, "None", colorBlue, styleCandle ); |
|
|
Посмотреть профиль Отправить личное сообщение |
|
cowboy
Зарегистрирован: 23.04.2011
Сообщения: 21
|
Еще AFL очень нравится, очень удобно, что работает с массивами...в других языках такое бы не прокатило, пришлось бы делать через цикл, я пытался в ами через цикл сделать, но тяму не хватило... |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
fl = Param( "Fast avg", 12, 2, 200, 1 );
sl = Param( "Slow avg", 26, 2, 200, 1 );
sil = Param( "Signal avg", 9, 2, 200, 1 );
ep = Param( "EMA", 12, 2, 200, 1 );
//-----------------------------------------------------------------------
sil = Signal(fl, sl, sil);
ep = EMA(C, ep);
//-----------------------------------------------------------------------
Rise = sil > Ref(sil, -1) AND ep > Ref(ep, -1);
Fall = sil < Ref(sil, -1) AND ep < Ref(ep, -1);
Color = IIf(Rise, colorGreen, IIf(Fall, colorRed, colorBlue));
SetBarFillColor(IIf(C > O, Color, colorWhite));
Plot(C, "Close", Color, styleCandle);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
cowboy
Зарегистрирован: 23.04.2011
Сообщения: 21
|
Олег Привет! Спасибо за код, делаю пока что много "лишних тело-движений", т.е. код получается не компактным...
Есть пара вопросов:
Как вставлять код на форум чтобы был как у тебя в посте?
В прошлом моем "творении" я использовал условие для сигнала Bar(-2) < Bar(-1) .. в этом коде я специально сделал условие Bar(-1) < Bar(0), думал можт кто заметит и поправит....просто я не знаю как по идеи правильно, вроде нулевой бар еще не сформирован же, т.е. правильней составлять условия -2<-1 или все же -1<0 ? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
Plot(C, "Close", ColorBlack, styleCandle);
|
На счет Bar(-1) < Bar(0)
Если сделка планируется по закрытию бара, то можно и 0 Если внутри бара, то с прошлого бара. Есть случаи когда можно и не по закрытию но 0. Например условие High > Ref(High, -1). Если на текущем (строящемся) баре хай стал выше прошлого, то до закрытия он уже ниже никак не станет. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
cowboy
Зарегистрирован: 23.04.2011
Сообщения: 21
|
Парни, а как в ами свой индекс сделать? Только через AddToComposite? ..если у меня индекс предполагает 200 бумаг, и этих индексов должно быть 30...этож месяц делать надо будет.. есть иные способы, или как можно этот процесс автоматизировать? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Через AddToComposite не обязательно. Можно через Foreign()
Вот пример
Как автоматизировать.... А бог его знает. Зависит от того какой индекс.... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
cowboy
Зарегистрирован: 23.04.2011
Сообщения: 21
|
Олег спасибо за ссылку! Что то не видел этого на сайте.. Решил не изобретать велосипед заново, а взял твой код в качестве шаблона..
В программировании оказалось это очень полезно..
Пара вопросов тебе, если разрешишь..
000 писал(а): |
Зависит от того какой индекс.... |
Эт как? Всмысле аверидж или взвешанный?
Можно ли индекс использовать не как индюк, а как инструмент, т.е. к нему применять индюки?
Создал пару индексов по твоему шаблону, можно ли теперь их как нибудь "склеить", что то код такой придумать не могу, или придется фактически новый создавать , тупо копируя все бумаги в один?
И еще, могу ли я в коде как то использовать свои кастомные индюки, т.е. как функцию, например MA + MY_INDICATOR, если он у меня сохранен в трее инструментов, или каждый раз код дублировать нужно? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
cowboy
Зарегистрирован: 23.04.2011
Сообщения: 21
|
И забыл еще, можно ли в одном окне совмещать несколько инструментов чтобы они не плясали относительно друг друга при прокрутке графика, а были статичны? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Конечно можно. Более того. Оно в принципе само получится. Это чтобы плясали надо специально использовать при выводе (ф-ция Plot) стиль styleOwnScale |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
cowboy писал(а): |
Эт как? Всмысле аверидж или взвешанный? |
В смысле возможно создать некий индекс милионом способов. Что такое индекс? Это некая сумма разных инструментов. А суммировать их можно как угодно в зависимости что ищем..
cowboy писал(а): |
Можно ли индекс использовать не как индюк, а как инструмент, т.е. к нему применять индюки?
|
Вот если его использовать как инструмент, то тогда проще создать индекс как отдельную бумагу при помощи AddToComposite(). Тогда к нему можно применять любые обычные индикаторы. Если индекс вычисляется в индикаторе, то придется писать отдельно код индикатора именно для этого случая. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
cowboy
Зарегистрирован: 23.04.2011
Сообщения: 21
|
Всем привет! Давно здесь не был))
Спасибо всем, кто помогал мне вникнуть в это интересное занятие, сейчас программирую уже на C#
По сабжу, все оказалось более чем просто, берем самый простой пример и разбираем построчно, далее берем пример сложнее и проделываем тоже самое, понимание, как оказалось приходит само-собой...и так далее, вперед к новым вершинам...
Некоторые вопросы конечно будут возникать, но всегда найдутся хорошие люди на форумах, которые обязательно подскажут |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|