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



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

СообщениеДобавлено: Пт Окт 10, 2008 11:08 pm Ответить с цитатой Вернуться к началу

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

Полагаю что часть исходных кодов поможет лучше понять суть проблемы:

1. Это работает нормально только с одной валютной парой.
Код:
TrailingStopLongLevel        = Param("LTS Level",    0.0060, 0.0010, 0.0075, 0.0005);
TrailingStopLongStepping     = Param("LTS Stepping", 0.0025, 0.0010, 0.0100, 0.0005);
TrailingStopShortLevel       = Param("STS Level",    0.0130, 0.0010, 0.0075, 0.0005);
TrailingStopShortStepping    = Param("STS Stepping", 0.0020, 0.0010, 0.0100, 0.0005);


2. Это попытка получить желаемый эффект, но почему-то при прогоне бактеста по NZD, переменные используються от AUD. При прогоне по AUD и NZD одновременно переменные все равно используються от AUD

Код:
if( Name() == "AUD-1" ); 
{
   TrailingStopLongLevel        = Param("LTS Level",    0.0060, 0.0010, 0.0200, 0.0005);
   TrailingStopLongStepping     = Param("LTS Stepping", 0.0025, 0.0010, 0.0050, 0.0005);
   TrailingStopShortLevel       = Param("STS Level",    0.0130, 0.0010, 0.0200, 0.0005);
   TrailingStopShortStepping    = Param("STS Stepping", 0.0020, 0.0010, 0.0050, 0.0005);
}
if( Name() == "NZD-1" ); 
{
   TrailingStopLongLevel        = Param("LTS Level",    0.0070, 0.0010, 0.0200, 0.0005);
   TrailingStopLongStepping     = Param("LTS Stepping", 0.0025, 0.0010, 0.0050, 0.0005);
   TrailingStopShortLevel       = Param("STS Level",    0.0020, 0.0010, 0.0200, 0.0005);
   TrailingStopShortStepping    = Param("STS Stepping", 0.0020, 0.0010, 0.0050, 0.0005);
}


Заранее признателен за любые умные мысли ...
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вс Окт 12, 2008 9:44 pm Ответить с цитатой Вернуться к началу

Хм. Скорее всего функция Param в данной ситуации ожидаемо работать не будет. Предлогаю на одном (тестовом) коде определить необходимые параметры для каждого инструмента и затем в рабочем коде написать
Код:

if( Name() == "AUD-1" ); 
{
   TrailingStopLongLevel        = 0.0060;
   TrailingStopLongStepping     = 0.0025;
   TrailingStopShortLevel       = 0.0130;
   TrailingStopShortStepping    = 0.0020;
}
if( Name() == "NZD-1" ); 
{
   TrailingStopLongLevel        = 0.0070;
   TrailingStopLongStepping     = 0.0025;
   TrailingStopShortLevel       = 0.0020;
   TrailingStopShortStepping    = 0.0020;
}

Так гарантировано стработает.

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



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

СообщениеДобавлено: Пн Окт 13, 2008 11:21 pm Ответить с цитатой Вернуться к началу

К сожалению, не сработало.
Может стоит использовать цикл for и в него вложить ifы (но я пока не могу понять как "выразиться" кодом), либо же попытать сделать через iif, но это можети сильно уменьшить производительность ...
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Окт 13, 2008 11:37 pm Ответить с цитатой Вернуться к началу

Цитата:
К сожалению, не сработало.

Как это не сработало? У меня такая конструкция работает несколько лет на разных версиях ами.
Вероятно дело в том, как в дальнейшем используются массивы
TrailingStopLongLevel
TrailingStopLongStepping
TrailingStopShortLevel
TrailingStopShortStepping

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



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

СообщениеДобавлено: Вт Окт 14, 2008 12:07 am Ответить с цитатой Вернуться к началу

В дальнейшем, к эти массивам обращаються функция plot, и цикл for
Посмотреть профиль Отправить личное сообщение
ifrm



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

СообщениеДобавлено: Вт Окт 14, 2008 12:30 am Ответить с цитатой Вернуться к началу

Проблема решена)
Неверно:
Код:

if(Name() == "AUD-1");

Правильно:
Код:

if(Name() == "AUD-1")


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


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

СообщениеДобавлено: Вт Окт 14, 2008 12:33 am Ответить с цитатой Вернуться к началу

Блин. Был не внимателен.
1. В строках типа if( Name() == "AUD-1" ); точку с запятой в конце не надо.
Этот Код
Код:

if(Name() =="CHF")
{
   TrailingStopLongLevel        = 0.0060;
   TrailingStopShortStepping    = 0.0010;
}
if(Name() == "GBP")
{
   TrailingStopLongLevel        = 0.0070;
   TrailingStopShortStepping    = 0.0020;
}

Plot(TrailingStopLongLevel, "", colorRed);
Plot(TrailingStopShortStepping, "", colorGreen);

У меня гарантированно работает, но ИМХО лучше написать так
Код:

if(Name() =="CHF")
{
   TrailingStopLongLevel        = 0.0060;
   TrailingStopShortStepping    = 0.0010;
}
else if(Name() == "GBP")
{
   TrailingStopLongLevel        = 0.0070;
   TrailingStopShortStepping    = 0.0020;
}
else
{
   TrailingStopLongLevel        = 0.0050;
   TrailingStopShortStepping    = 0.0030;
}
Plot(TrailingStopLongLevel, "", colorRed);
Plot(TrailingStopShortStepping, "", colorGreen);

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen