Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Вопросы по AFL |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 След. |
Автор |
Сообщение |
RimiDr
Гость
|
Несколько вопросов...
1. можно ли в Ами сделать двумерный массив, если нет как это обойти?
2. как в Массив записать свои данные, например последовательность единиц и нулей? ( метатрйдере например так: array[] = {0,1,0,0,1}
3. если пишу так, то тестер находит такие ситуации:
Код: |
Buy = (High[1]>High[2]);
Sell=0;
SetTradeDelays( 1, 1, 1, 1 );
BuyPrice = Open[0];
|
а если так, то нет ни одной сделки.
Код: |
Buy = (High[2]>High[3]);
Sell=0;
SetTradeDelays( 1, 1, 1, 1 );
BuyPrice = Open[0];
|
хочу потестить свечные камбинации... |
|
|
|
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
1. можно ли в Ами сделать двумерный массив, если нет как это обойти? |
Нельзя. Придется создать много одномерных массивов. Посмотри функции VarSet() и VarGet(). Имей ввиду, что в Ами практически нет разницы между массивом и переменной.
Цитата: |
2. как в Массив записать свои данные, например последовательность единиц и нулей? ( метатрйдере например так: array[] = {0,1,0,0,1} |
Так нельзя. Если массив не длинный, то напиши
array[0] = 1;
array[1] = 0;
.....
Или через цикл если есть закономерность значения элементов
Цитата: |
3. если пишу так, то тестер находит такие ситуации:
Код: |
Buy = (High[1]>High[2]);
Sell=0;
SetTradeDelays( 1, 1, 1, 1 );
BuyPrice = Open[0];
|
|
Неправильно пишешь.
Указывая в квадратных скобках цифру ты задаешь конкретный элемент массива (Open[0] это открытие самого первого бара на графике)
Надо так
Код: |
SetTradeDelays( 1, 1, 1, 1 );
Buy = H > Ref(H, -1);
Sell = 0;
BuyPrice = Open;
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
RimiDr
Гость
|
спасибо за ответ, всего пару дней разбираюсь.
Мне бы такую штуку нужно соорудить.
Код: |
// тут функции сравнивающие хай, клоузи и пр. например
function HH(pos, massiv) // тут сравниваем соседние хаи.
{
result=False;
if (massiv==0)
if (Ref(H,pos) < Ref(H,pos-1)) result = True; else result =False;// тут знаю что ошибка, незнаю как правильно.
return result;
}
// А условие для входа собираем из функций например;
// если комбинация напр. из 3х свечек и нам нужно сравнить только их хаи
Buy = HH(i,pattern_code[0])==True AND HH(i-1,pattern_code[1])==True;
Sell=0;
|
Т.е. функция должна получить номер бара сравнить его хай (или лоу и пр.) с соседним (предыдущим) и выдать true\false.
Так мне не нужно будет для каждой комбинации писать отдельный код. |
|
|
|
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Мы с тобой думаем на разных языках.
1. Сразу имей в виду что AFL работает иначе чем MQL. MQL последовательно пробегает по всем свечкам от начала и до конца чарта, а AFL так не делает. Он сразу генерит массив результатов строки на весь график.
Если напишешь
Код: |
HighUp = H > Ref(H, -1);
|
То в результате получится массив HighUp который будет равен True на всех свечках у которых максимум выше предыдущего.
...
Глянь вот этот код, может будет понятнее http://www.amibroker.com/library/formula.php?id=423 |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
RimiDr
Гость
|
Начинаю понимать как нужно думать |
|
|
|
|
RimiDr
Гость
|
Что это за ошибка такая? Кто знает?
Код: |
pattern_code[1] = Optimize( "pattern_code[1]", 1, 1, 2, 1);
pattern_code[2
-------------^
Error 10.
Subscript out of range.
You must not access array elements outside 0..(BarCount-1) range. |
|
|
|
|
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Точно не уверен, но скорее всего оптимизируемый параметр не может быть массивом. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Если очень надо сделай так
Код: |
pattern_code_1 = Optimize( "pattern_code[1]", 1, 1, 2, 1);
pattern_code_2 = Optimize( "pattern_code[2]", 1, 1, 2, 1);
pattern_code[1] = pattern_code_1;
pattern_code[2] = pattern_code_2; |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
RimiDr
Гость
|
000 писал(а): |
Если очень надо сделай так
Код: |
pattern_code_1 = Optimize( "pattern_code[1]", 1, 1, 2, 1);
pattern_code_2 = Optimize( "pattern_code[2]", 1, 1, 2, 1);
pattern_code[1] = pattern_code_1;
pattern_code[2] = pattern_code_2; |
|
Спасибо, теперь работает. |
|
|
|
|
ID
Советник
Зарегистрирован: 07.01.2008
Сообщения: 370
|
Привет!....
В метасе была такая штука: функция FLV по-моему. Она позволяла обращаться к переменным кода без прописывания этого кода в текущем. Ну... кто метас юзал в курсе.
Вопрос: есть ли такой прибамбас в Ами? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В метасе fmlvar( "FORMULA_NAME", "VARIABLE_NAME")
В ами аналога нет. Только #include |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
polekoff
Зарегистрирован: 27.04.2008
Сообщения: 8
|
Привет господа!
Как написать вот такой стоп?
— выходить на прибыльном открытии с задержкой N дней.
Т. е. после покупки ждем несколько дней, если есть прибыль выходим по open. Если нет, проверяем следующий бар.
Так на первом прибыльном открытии
Код: |
ApplyStop( stopTypeProfit, stopModePoint, 1, ExitAtStop = 0,
volatile = True );
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Сергей
Зарегистрирован: 16.03.2008
Сообщения: 168
|
polekoff писал(а): |
Привет господа!
Как написать вот такой стоп?
— выходить на прибыльном открытии с задержкой N дней.
Т. е. после покупки ждем несколько дней, если есть прибыль выходим по open. Если нет, проверяем следующий бар.
Так на первом прибыльном открытии
Код: |
ApplyStop( stopTypeProfit, stopModePoint, 1, ExitAtStop = 0,
volatile = True );
|
|
Чем отличается от долгосрочного вложения непойму. У Вас может цена никода не выйти в +, т.е. через N и 2N и через 3N будет -. Как вы собираетесь фиксировать убыток? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
ID
Советник
Зарегистрирован: 07.01.2008
Сообщения: 370
|
polekoff писал(а): |
Привет господа!
Как написать вот такой стоп?...
[/code] |
Привет, я как-то тестировал бездоходный выход.
Вот код:
Код: |
n1=Param("day",1,0,30,1);
Buy=Cross(MA(C,28),MA(C,35));
BuyPrice=O+0.0005;
rlong=C-ValueWhen(Ref(Buy,-1),O+0.0005,1);
Sell=BarsSince(Buy)==n1 AND rlong<0;
SellPrice=O;
Short=Cross(MA(C,35),MA(C,28));
ShortPrice=O-0.0005;
rshort=ValueWhen(Ref(Short,-1),O-0.0005,1)-C;
Cover=BarsSince(Short)==n1 AND rshort<0;
CoverPrice=O; |
Только его проверить надо. Я его не юзаю |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
Начать новую тему Ответить на тему |
Список форумов AmiSite.ru » Вопросы по AFL |
На страницу Пред. 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 След. |
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|