Автор |
Сообщение |
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
Добрый день.
У себя в закромах нашел калькулятор для Трейдстейшн, который выдает статистику по каждой акции на предмет сколько за год акция сделала гэповых дней вверх или вниз, сколько гепов было закрыто и т.п.
Этот код работает в РадарСкрине, но к сожалению для радара нужен онлайн
Вот хотелось бы подобную мульку в Ами-брокере поиметь. Клон этого кода есть на одном сайте. Ниже я его приведу. Только вот он работает как-то коряво. Омега выдает по инфу по тикеру одной строкой, Ами же кучей строк. В начале думал, что нужно найти последнюю дату и там будет самый достоверный отчет. Однако оказалось, что в течении всего года количество геповых дней может уменьшаться, что есть бред
Код: |
gapped = O - Ref(C,-1);
GapUpp = Sum(gapped>0,5);
GapDwn = Sum(gapped<0>0,100);
gappeddn100 = Sum(GapDwn>0,100);
CloseLoR = Ref(C,-1)-L;
CloseHiR = H - Ref(C,-1);
fillup = Sum(CloseLoR>0,1);
filldn = Sum(CloseHiR>0,1);
GapUpfilled = GapUpp*fillup;
GapDnFilled = GapDwn*filldn;
GapUp100f = Sum(gapupfilled>0,100);
GapDn100f = Sum(gapdnfilled>0,100);
gapfilled = GapUp100f + gapdn100f;
AddColumn(Close,"Close",1.2);
AddColumn(Volume*100,"Volume",1.0);
AddColumn(gappedup100,"GappedUp100",1);
AddColumn(gappeddn100,"GappedDn100",1);
AddColumn(gapfilled,"GapFilled",1);
AddColumn(GapUp100f,"GapUp100f",1);
AddColumn(GapDn100f,"GapDn100f",1);
AddColumn(MA(absgap,100),"Avg. Gap",1.2); |
Сам пытался исправить ситуацию - но вышло еще печальнее
Спасибо |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
странно. но у меня эта функция отключена
на всякий случай прицепил файло. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
странно. но у меня эта функция отключена
|
Я её потом отключил. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
000 писал(а): |
Цитата: |
странно. но у меня эта функция отключена
|
Я её потом отключил. |
ааа
ну все равно прицепленная бумажка лучше |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
По коду.
1. Данные код выдает не за год, а за 100 торговых периодов.
2. Данные он выдает одной строкой, просто надо делать правильные настройки. Смотри картинку. Он выдает несколько строк потому, что выдает строку на каждый бар анализируемого периода. Поэтому в настройках АА надо поставить "n last quotation" "n = 1" См. картинку.
3. Расшифрую что за данные он выдает.
GappedUp100 - кол-во гепов верх за последние 100 баров
(геп считается если открытие хоть немного выше вчерашнего закрытия)
GappedDn100 - аналогично гепы вниз
GapFilled - число закрытых гепов за 100 дней. (закрытием гепа считается если сегодняшний минимум или максимум достиг вчерашнего закрытия)
GapUp100f - число закрытых гепов вверх за последние 100 баров
GapDn100f - число закрытых гепов вниз за последние 100 баров
Avg. Gap - Средняя величина гепа за последние 100 баров (кажется неправильно)
Вообще код написан довольно коряво и мне ужасно не понравился. Это если не считать того, что при расчете средней величины гепа за последние 100 баров допущена ошибка |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
Спасибо большое за ответ.
насчет корявости кода - возможно и так, но я не силен в программинге (и код не мой) поэтому что есть то есть. Хотя и меня кое-какие моменты смущают. А что именно Вам не нравиться??? (лучше уж если переделывать, то переделывать сразу правильно)
за настройки спасибо огромнейшее. сам бы я про n=1 ниразу не допер бы. Хотя вообще-то странно. по идее n=1 это дает указание посмотреть только определенное количество баров назад (я честно признаюсь - выставил там 100 = чтоб в коде совпало |
|
|
Посмотреть профиль Отправить личное сообщение |
|
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
Если быть точнее, я не совсем понимаю суть вот этой конструкции:
Код: |
gapped = O - Ref(C,-1);
GapUpp = Sum(gapped>0,5);
GapDwn = Sum(gapped<0,5);
gappedup100 = Sum(GapUpp>0,100);
gappeddn100 = Sum(GapDwn>0,100); |
В первой строчке мы определяем куда был гэп по сравнению со вчерашним закрытием (то что лучше смотреть Хай-Лоу пока опустим)
потом идет суммирование количества дней с Гэпом за последние 5 дней
а потом мы суммируем полученные значения за 100 дней....странно. Почему нельзя просто написать
GapUpp = Sum(gapped>0,100);
И не считать эти 5 дней |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А в приаттаченом коде нет суммирования за 5 дней. Там так
Код: |
GapUpp = Sum(gapped>0,1);
GapDwn = Sum(gapped<0,1);
|
т.е. суммиуется за 1 день. В принципе рабочий вариант, но вот это и есть одна из корявостей кода про которые я писал. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
000 писал(а): |
А в приаттаченом коде нет суммирования за 5 дней. Там так
Код: |
GapUpp = Sum(gapped>0,1);
GapDwn = Sum(gapped<0,1);
|
т.е. суммиуется за 1 день. В принципе рабочий вариант, но вот это и есть одна из корявостей кода про которые я писал. |
А ну да, это уже я руками влез
а вот смысл какой в этом??? Я пытался заменить на IIF но что-то не то получил....- считать вообще перестало. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
А ну да, это уже я руками влез
а вот смысл какой в этом???
|
Я не знаю какой смысл. Вероятно просто кривые руки.
Цитата: |
Я пытался заменить на IIF но что-то не то получил
|
Странно, но IIF там тоже не нужен. Я бы написал так.
Код: |
gapped = O - Ref(C,-1);
GapUpp = gapped > 0;
GapDwn = gapped < 0;
absgap = abs(gapped);
gappedup100 = Sum(GapUpp > 0, 100);
gappeddn100 = Sum(GapDwn > 0, 100);
CloseLoR = Ref(C,-1)-L;
CloseHiR = H - Ref(C,-1);
fillup = CloseLoR > 0;
filldn = CloseHiR > 0;
GapUpfilled = GapUpp*fillup;
GapDnFilled = GapDwn*filldn;
GapUp100f = Sum(gapupfilled > 0, 100);
GapDn100f = Sum(gapdnfilled > 0, 100);
gapfilled = GapUp100f + gapdn100f;
Filter = C > 5 AND MA(V, 30)>1000000/100 AND gapfilled > 5;
SetOption("NoDefaultColumns", True);
AddTextColumn( Name(), "Symbol", 77 , colorDefault);
AddColumn(Close,"Close",1.2);
AddColumn(Volume*100,"Volume",1.0);
AddColumn(gappedup100,"GappedUp100",1);
AddColumn(gappeddn100,"GappedDn100",1);
AddColumn(gapfilled,"GapFilled",1);
AddColumn(GapUp100f,"GapUp100f",1);
AddColumn(GapDn100f,"GapDn100f",1);
AddColumn(MA(absgap,100),"Avg. Gap",1.2);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег.
Последний раз редактировалось: 000 (Вт Дек 23, 2008 10:34 pm), всего редактировалось 1 раз |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
Да, так значительно лучше
Спасибо!
Сейчас доработаю и буду пользовать |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Кстати. Я там не исправлял ошибку со средней величиной гепа. По моему правильнее заменить последную строку на
Код: |
AddColumn(Sum(absgap,100)/(gappedup100 + gappeddn100), "Avg. Gap",1.2);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|