Автор |
Сообщение |
ifrm
Зарегистрирован: 16.02.2008
Сообщения: 20
|
Существует система, которая должна работать с несколькими валютными парами (пока что может работать только с одной). Проблема заключается в том что для разных валютных пар, оптимизатор выдаёт разные оптимальные значения переменных используемых системой. Как сделать так, чтобы в момент бактестинга по какой-либо валютной паре, бактестер использовал значения переменных предназначенных именно для этой валютной пары?
Полагаю что часть исходных кодов поможет лучше понять суть проблемы:
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
|
Хм. Скорее всего функция 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
|
К сожалению, не сработало.
Может стоит использовать цикл for и в него вложить ifы (но я пока не могу понять как "выразиться" кодом), либо же попытать сделать через iif, но это можети сильно уменьшить производительность ... |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Цитата: |
К сожалению, не сработало. |
Как это не сработало? У меня такая конструкция работает несколько лет на разных версиях ами.
Вероятно дело в том, как в дальнейшем используются массивы
TrailingStopLongLevel
TrailingStopLongStepping
TrailingStopShortLevel
TrailingStopShortStepping |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
ifrm
Зарегистрирован: 16.02.2008
Сообщения: 20
|
В дальнейшем, к эти массивам обращаються функция plot, и цикл for |
|
|
Посмотреть профиль Отправить личное сообщение |
|
ifrm
Зарегистрирован: 16.02.2008
Сообщения: 20
|
Проблема решена)
Неверно:
Код: |
if(Name() == "AUD-1");
|
Правильно:
Код: |
if(Name() == "AUD-1")
|
Разница была в точке с запятой. Синтаксис, синтаксис и еще раз синтакис. Однако, проверка синтаксиса встроеная в Amibroker ошибку не замечает |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Блин. Был не внимателен.
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
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|