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



Зарегистрирован: 09.06.2008
Сообщения: 65
Откуда: Екатеринбург

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

Всем ДУ!

Вопрос: как АМИ работает с массивами и можно ли вмешиваться в этот процесс? Пример:

Buy=Cross(fMA,sMA);
Short=Cross(sMA,fMA);
Sell=Cover=0;
...
PriceOut=ValueWhen(Sell or Cover, SellPrice);
...
//выход в начале дня
Sell=iif(DayNum()!=Ref(DayNum(),-1) and PriceOUT>xx,1,Sell);
Cover=iif(DayNum()!=Ref(DayNum(),-1) and PriceOUT <xx>xx,1,Sell);
Cover=iif(DayNum()!=Ref(DayNum(),-1) and PriceOUT < xx,1,Cover);
i=i+1;
} while (i < 2);

но тогда возникает много других маленьких проблем - у нас массивы sell и cover разных итераций начинают жить своей разной жизнью и могут вызвать ложное срабатывание.
PS все вышесказанное - просто пример, а не система, хочу понять суть
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Янв 27, 2009 4:45 pm Ответить с цитатой Вернуться к началу

Чесно говоря вопрос непонял.
Зачем в коде этот
Код:

i=i+1;
} while (i < 2);

кусок цикла?

Вот эту строку
Код:

Sell=iif(DayNum()!=Ref(DayNum(),-1) and PriceOUT>xx,1,Sell);

лучше написать так
Код:

Sell = DayNum() != Ref(DayNum(),-1) and PriceOUT>xx;

При выполнении условий DayNum() != Ref(DayNum(),-1) и PriceOUT>xx в массив Sell и так запишется 1, во всех остальных случаях 0.
Такая запись как в примере годится если надо добавить выходы в уже существующий массив Sell.

И обрати внимание на тему http://amisite.ru/phpBB2/viewtopic.php?t=223

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



Зарегистрирован: 09.06.2008
Сообщения: 65
Откуда: Екатеринбург

СообщениеДобавлено: Ср Янв 28, 2009 8:16 am Ответить с цитатой Вернуться к началу

000 писал(а):
Чесно говоря вопрос непонял.
Зачем в коде этот
Код:

i=i+1;
} while (i <2>xx,1,Sell);

лучше написать так
Код:

Sell = DayNum() != Ref(DayNum(),-1) and PriceOUT>xx;

И обрати внимание на тему http://amisite.ru/phpBB2/viewtopic.php?t=223


потому что если протестить мой самый верхний код - то значение PriceOUT ВСЕГДА будет неопределено. Не смотря на то, что в Sell и Cover будут значения за весь период (если тестить хочется - надо внести изменения, могу написать рабочий пример). PriceOut НЕ ВИДИТ в этих массивах значений, потому как для нее существует только код, написаный до нее, а это Sell=Cover=0. Так что PriceOut=... живет в мире, где массивы Sell и Cover значения имеют всегда 0. Цикл нужен чтобы организовать второй проход (надо объяснить что это такое?)

Код:

Вот эту строку
Sell=iif(DayNum()!=Ref(DayNum(),-1) and PriceOUT>xx,1,Sell);
лучше написать так
Sell = DayNum() != Ref(DayNum(),-1) and PriceOUT>xx;


да бог сней со строкой, я не про оптимальность записи (к стати работать будет и так и так, верно? такой формат я использую, потому как код у меня как правило "блочный" и блоку непонятно имеют ли значения sell и cover или они =0 и проверять это блоку не интересно - он вносит свою лепту и либо ставит сигнал, либо не меняет ничего). Я про то, что нельзя использовать _предыдущие_ значения массива sell для расчета _новых_ значений массива sell. Хотя по логике - они ведь есть на прошлых барах. Распечатаны и показаны стрелками. А получить их - никак! Если я стою в _начале_ кода afl.

да, тему бегло посмотрел. вся прелесть языка ами для меня - работа с массивами как с переменными. Если раскручивать все бары по порядку (как в примерах BB) - код получается слишком сложный.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Янв 28, 2009 8:37 am Ответить с цитатой Вернуться к началу

Угу. Вроде понял.
Цитата:

Цикл нужен чтобы организовать второй проход (надо объяснить что это такое?)

Хм, оригинальное решение.
Цитата:

Я про то, что нельзя использовать _предыдущие_ значения массива sell для расчета _новых_ значений массива sell.

Да. К сожалению массив расчитывается не слева направо, а сразу весь целиком. Поэтому бывают случаи (если предыдущее значение влияет на следующее) когда полюбому придется использовать цикл. Цикл как раз позволяет сделать проход слева на право и учитывать предыдущее значение массива при расчете новых.

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen