Список форумов AmiSite.ru AmiSite.ru
Форум по Ами
 FAQ  •  Поиск  •  Пользователи  •  Группы   •  Регистрация  •  Профиль  •  Войти и проверить личные сообщения  •  Вход
 Помогите написать индикатор Следующая тема
Предыдущая тема
Начать новую тему  Ответить на тему
Автор Сообщение
atom



Зарегистрирован: 14.04.2010
Сообщения: 7

СообщениеДобавлено: Пт Окт 22, 2010 1:58 pm Ответить с цитатой Вернуться к началу

Добрый день. Помогите написать индикатор который считает разницу между последними ценами двух инструментов, например, между газпромом и лукойлом.
Спасибо.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пт Окт 22, 2010 2:55 pm Ответить с цитатой Вернуться к началу

Код:
LastValue(Foregn("GAZP", "Close")) - LastValue(Foregn("LKOH", "Close"));

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
atom



Зарегистрирован: 14.04.2010
Сообщения: 7

СообщениеДобавлено: Ср Окт 27, 2010 11:58 am Ответить с цитатой Вернуться к началу

000 писал(а):
Код:
LastValue(Foregn("GAZP", "Close")) - LastValue(Foregn("LKOH", "Close"));


большое спасибо
Посмотреть профиль Отправить личное сообщение
promoter



Зарегистрирован: 13.10.2010
Сообщения: 10

СообщениеДобавлено: Пн Ноя 22, 2010 4:22 pm Ответить с цитатой Вернуться к началу

Добрый день.

Создал функцию в Ами
function AMA_Kauf (Period, Fast, Slow)
{
..................
}

Как к ней обратиться в коде торгового алгоритма?

В Omege это выглядит так:

Line1=$AMA_Kauf (Period, Fast1, Slow);
Line2=$AMA_Kauf (Period, Fast2, Slow);
Value = AverageFC(C,Len);
IF Line1 > Line2 AND C > Value Then
Begin exitshort at Close; Buy at Close;
End;
IF Line1 < Line2 AND C < Value Then
Begin exitlong at Close; Sell at Close;
End;
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Ноя 22, 2010 6:12 pm Ответить с цитатой Вернуться к началу

А зачем функцию было создавать?
Я вопрос не понял.

Систему на таком мувинге в Ами пришут примерно так.

Код:
Per = 10;

fast = 2/(2+1);
slow = 2/(30+1);
dir=abs(C-Ref(C,-Per));
vol=Sum(abs(C-Ref(C,-1)),Per);
ER=dir/vol;
sc =( ER*(fast-slow)+slow)^2;
AMAKauf = AMA(P, SC);

Buy = Cross(C, AMAKauf);
Sell = Cross(AMAKauf, C);
Short = Cross(AMAKauf, C);
Cover = Cross(C, AMAKauf);

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
promoter



Зарегистрирован: 13.10.2010
Сообщения: 10

СообщениеДобавлено: Пн Ноя 22, 2010 6:44 pm Ответить с цитатой Вернуться к началу

По 2 причинам:
функцию можно использовать в других алгоритмах, не заморачиваясь повторным написанием кода
проще понять особенности AFL (синтаксис и пр.), в сравнении с EL в данном случае
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Пн Ноя 22, 2010 6:48 pm Ответить с цитатой Вернуться к началу

В хелпере раздел User-definable functions, procedures

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
promoter



Зарегистрирован: 13.10.2010
Сообщения: 10

СообщениеДобавлено: Чт Ноя 25, 2010 12:19 pm Ответить с цитатой Вернуться к началу

Не подскажете, в чём заключается ошибка (выделил красным) выдаваемая компилятором?

SetBarsRequired(100000,0);
GraphXSpace = 3;
Line1=0; Line2=0; Value=0; Period=10; Fast1=2; Fast2=5; Slow=30; Len=30;
Fast1 = Param("Быстрая1", 3, 1, 6, 0.1);
Fast1 = Param("Быстрая2", 3, 1, 6, 0.1);
Fast1 = Param("Быстрая", 3, 1, 6, 0.1);
Line1 = function AMA_Kauf(Period, Fast1, Slow);
Line2 = function AMA_Kauf(Period, Fast2, Slow);
......................

функцию компилятор пропустил

function AMA_Kauf (Period, Fast, Slow)
{fa = 2/(Fast+1);
sl = 2/(Slow+1);
dir=abs(Close-Ref(Close,-Period));
vol=Sum(abs(Close-Ref(Close,-1)),Period);
ER=dir/vol;
sc =( ER*(fa-sl)+sl)^2;
AMA_Kauf=AMA( Close, sc );
return AMA_Kauf;
}
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Ноя 25, 2010 12:53 pm Ответить с цитатой Вернуться к началу

Код:
SetBarsRequired(100000,0);
GraphXSpace = 3;
Line1=0; Line2=0; Value=0; Period=10; Fast1=2; Fast2=5; Slow=30; Len=30;
Fast1 = Param("Быстрая1", 3, 1, 6, 0.1);
Fast1 = Param("Быстрая2", 3, 1, 6, 0.1);
Fast1 = Param("Быстрая", 3, 1, 6, 0.1);
Line1 = function AMA_Kauf(Period, Fast1, Slow);
Line2 = function AMA_Kauf(Period, Fast2, Slow);

А где задается Slow?
Но это не единственная ошибка.
Зачем 3 раза одну и ту же переменную Fast1 задавать?
Вот эти две строки можно смело выкинуть
Код:
Fast1 = Param("Быстрая1", 3, 1, 6, 0.1);
Fast1 = Param("Быстрая2", 3, 1, 6, 0.1);

Они все равно не работают.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
promoter



Зарегистрирован: 13.10.2010
Сообщения: 10

СообщениеДобавлено: Чт Ноя 25, 2010 1:48 pm Ответить с цитатой Вернуться к началу

А где задается Slow?

Но это не единственная ошибка.
Зачем 3 раза одну и ту же переменную Fast1 задавать?


SetBarsRequired(100000,0);
GraphXSpace = 3;
Line1=0; Line2=0; Value=0; Period=10; Fast1=2; Fast2=5; Slow=30; Len=30;
Fast1 = Param("Быстрая1", 3, 1, 6, 0.1);
Fast2 = Param("Быстрая2", 3, 1, 6, 0.1);
Line1 = function AMA_Kauf(Period, Fast1, Slow);
Line2 = function AMA_Kauf(Period, Fast2, Slow);

slow=30 - (выделил красным) или я что-тo не понял

ошибка в той же строке
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Ноя 25, 2010 2:00 pm Ответить с цитатой Вернуться к началу

Хм. Прошу прощения, не заметил.
А сам код функции до её вызова или после? Должен быть до.
Типа так
Код:

function AMA_Kauf (Period, Fast, Slow)
{fa = 2/(Fast+1);
sl = 2/(Slow+1);
dir=abs(Close-Ref(Close,-Period));
vol=Sum(abs(Close-Ref(Close,-1)),Period);
ER=dir/vol;
sc =( ER*(fa-sl)+sl)^2;
AMA_Kauf=AMA( Close, sc );
return AMA_Kauf;
}

SetBarsRequired(100000,0);
GraphXSpace = 3;
Line1=0; Line2=0; Value=0; Period=10; Fast1=2; Fast2=5; Slow=30; Len=30;
Fast1 = Param("Быстрая1", 3, 1, 6, 0.1);
Fast2 = Param("Быстрая2", 3, 1, 6, 0.1);
Line1 = function AMA_Kauf(Period, Fast1, Slow);
Line2 = function AMA_Kauf(Period, Fast2, Slow);

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
promoter



Зарегистрирован: 13.10.2010
Сообщения: 10

СообщениеДобавлено: Чт Ноя 25, 2010 2:07 pm Ответить с цитатой Вернуться к началу

А я думал функцию можно создавать отдельно от торгового алгоритма, поэтому сделал отдельно.
Возможно в таком случае к ней обращаться нужно иначе?
Посмотреть профиль Отправить личное сообщение
promoter



Зарегистрирован: 13.10.2010
Сообщения: 10

СообщениеДобавлено: Чт Ноя 25, 2010 2:13 pm Ответить с цитатой Вернуться к началу

Сделал как у Вас - ошибка в там же (error 30).
Посмотреть профиль Отправить личное сообщение
000
Site Admin


Зарегистрирован: 10.12.2007
Сообщения: 9106

СообщениеДобавлено: Чт Ноя 25, 2010 8:30 pm Ответить с цитатой Вернуться к началу

Код:

function AMA_Kauf(Period, Fast, Slow)
{
  fa = 2/(Fast + 1);
  sl = 2/(Slow + 1);
  dir = abs(Close - Ref(Close, -Period));
  vol = Sum(abs(Close - Ref(Close,-1)), Period);
  ER = dir/vol;
  sc =( ER*(fa - sl) + sl)^2;
  AMA_K = AMA(Close, sc);
return AMA_K;
}

SetBarsRequired(100000,0);
GraphXSpace = 3;
Line1=0; Line2=0; Value=0; Period = 10; Fast1=2; Fast2=5; Slow=30; Len=30;
Fast1 = Param("Быстрая1", 3, 1, 6, 0.1);
Fast2 = Param("Быстрая2", 3, 1, 6, 0.1);
Line1 = AMA_Kauf(Period, Fast1, Slow);
Line2 = AMA_Kauf(Period, Fast2, Slow);

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
promoter



Зарегистрирован: 13.10.2010
Сообщения: 10

СообщениеДобавлено: Чт Ноя 25, 2010 9:36 pm Ответить с цитатой Вернуться к началу

Спасибо.
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



Следующая тема
Предыдущая тема
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы не можете скачивать файлы


Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme :: Часовой пояс: GMT + 3

File Attachment © by Meik Sievertsen