Автор |
Сообщение |
atom
Зарегистрирован: 14.04.2010
Сообщения: 7
|
Добрый день. Помогите написать индикатор который считает разницу между последними ценами двух инструментов, например, между газпромом и лукойлом.
Спасибо. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
LastValue(Foregn("GAZP", "Close")) - LastValue(Foregn("LKOH", "Close")); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
atom
Зарегистрирован: 14.04.2010
Сообщения: 7
|
000 писал(а): |
Код: |
LastValue(Foregn("GAZP", "Close")) - LastValue(Foregn("LKOH", "Close")); |
|
большое спасибо |
|
|
Посмотреть профиль Отправить личное сообщение |
|
promoter
Зарегистрирован: 13.10.2010
Сообщения: 10
|
Добрый день.
Создал функцию в Ами
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
|
А зачем функцию было создавать?
Я вопрос не понял.
Систему на таком мувинге в Ами пришут примерно так.
Код: |
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
|
По 2 причинам:
функцию можно использовать в других алгоритмах, не заморачиваясь повторным написанием кода
проще понять особенности AFL (синтаксис и пр.), в сравнении с EL в данном случае |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В хелпере раздел User-definable functions, procedures |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
promoter
Зарегистрирован: 13.10.2010
Сообщения: 10
|
Не подскажете, в чём заключается ошибка (выделил красным) выдаваемая компилятором?
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
|
Код: |
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
|
А где задается 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
|
Хм. Прошу прощения, не заметил.
А сам код функции до её вызова или после? Должен быть до.
Типа так
Код: |
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
|
А я думал функцию можно создавать отдельно от торгового алгоритма, поэтому сделал отдельно.
Возможно в таком случае к ней обращаться нужно иначе? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
promoter
Зарегистрирован: 13.10.2010
Сообщения: 10
|
Сделал как у Вас - ошибка в там же (error 30). |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
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
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|