У вас не стоит Flash Player
Настройки
#82058 - Fri Jun 23 2017 12:43 PM Оптимизация таймфрейма
Vladimir2803 Offline
member

Registered: Thu Oct 16 2014
Записи: 101
Здравствуйте, подскажите пожалуйста, кто нибудь пробовал оптимизировать таймфрейм как параметр скрипта.

Я попробовал оптимизировать таймфрейм компрессии скрипта, сначала вылезла ошибка индекса за пределами диапазона, я загнал этот параметр в расчет Startbar.
Ошибка перестала вылазить, но получаются странные вещи, часть результатов оптимизации не сходиться с их реальным применением, то есть когда я двойным щелчком устанавливаю выбранные результаты скрипт показывает совсем другие числа.

Кто нибудь сталкивался с такой проблемой?

Наверх
#82062 - Fri Jun 23 2017 02:34 PM Re: Оптимизация таймфрейма [Re: Vladimir2803]
ViL Offline
TSLab
Carpal Tunnel

Registered: Sun Oct 17 2010
Записи: 8134
Такое бывает, если сначала сделать оптимизацию, потом изменить скрипт. Оптимизированное уже не будет совпадать, по понятным причинам.
Еще возможны сценарии такого поведения, нужно хотя бы видеть скрипт, что он и как делает, что бы рассуждать о них.
Когда есть вопрос о работе с АПИ, всегда можно легко проверить себя, создав в визуале прототип и посмотреть ,что сделал кодогенератор. На одном уровне с папкой логов - папка temp, новые компиляции *.cs идут сверху.

Наверх
#82068 - Fri Jun 23 2017 03:27 PM Re: Оптимизация таймфрейма [Re: Vladimir2803]
jhgjrht Offline
writer

Registered: Sun Nov 21 2010
Записи: 428
С большой долей уверенности, могу сказать, что проблема из-за некорректной работы какого-то индикатора. Точнее индикатор не привязывается к таймфрейму и при оптимизации берет из кеша несоответствующие данные.
Вот пример, в контексте проблемы
_________________________
Не пишите мне! Никому ничего делать не буду.

Наверх
#82073 - Fri Jun 23 2017 11:00 PM Re: Оптимизация таймфрейма [Re: ViL]
Vladimir2803 Offline
member

Registered: Thu Oct 16 2014
Записи: 101
Originally Posted By: ViL
Такое бывает, если сначала сделать оптимизацию, потом изменить скрипт. Оптимизированное уже не будет совпадать, по понятным причинам.
Еще возможны сценарии такого поведения, нужно хотя бы видеть скрипт, что он и как делает, что бы рассуждать о них.
Когда есть вопрос о работе с АПИ, всегда можно легко проверить себя, создав в визуале прототип и посмотреть ,что сделал кодогенератор. На одном уровне с папкой логов - папка temp, новые компиляции *.cs идут сверху.

Скрипт после оптимизации я не меняю, просто устанавливаю в него параметры из таблицы оптимизации двойным щелчком.
Про визуальный редактор я знаю, сам часто пользуюсь этой фишкой когда хочу посмотреть как сделать что то неизвестное, но целиком свой скрипт там сделать будет для меня проблематично, так как прийдеться изучать как им полноценно пользоваться.

Наверх
#82074 - Fri Jun 23 2017 11:22 PM Re: Оптимизация таймфрейма [Re: Vladimir2803]
Nektodron Offline

Carpal Tunnel

Registered: Thu Oct 23 2008
Записи: 5492
jhgjrht выше описал наиболее вероятную причину, скорее всего сжатый таймфрейм не указан, как параметр индикатора при помещении его в кеш. Что-то еще, без кода индикатора и примера его использования, сказать нельзя.

Наверх
#82075 - Fri Jun 23 2017 11:33 PM Re: Оптимизация таймфрейма [Re: jhgjrht]
Vladimir2803 Offline
member

Registered: Thu Oct 16 2014
Записи: 101
Originally Posted By: jhgjrht
С большой долей уверенности, могу сказать, что проблема из-за некорректной работы какого-то индикатора. Точнее индикатор не привязывается к таймфрейму и при оптимизации берет из кеша несоответствующие данные.
Вот пример, в контексте проблемы


Спасибо огромное за помощь, вы просто волшебник!!
Прочитал тему по вашей ссылке, подправил свой скрипт и все заработало как надо.
Если не сложно посмотрите грамотно ли я все прописал из индикаторов в скрипте только канал для стопов, оптимизирую:
- Compress_time
- Stop_S
- Stop_L

Code:
var compressed = source.CompressTo(new Interval(Compress_time, DataIntervals.MINUTE));

IList<double> cStop_S = ctx.GetData("cStop_S", new string[] {Stop_S .ToString(),Compress_time.ToString()},
delegate { return Series.Highest(compressed.HighPrices, Stop_S); });
		    
 IList<double> cStop_L = ctx.GetData("cStop_L", new[] {Stop_L .ToString(),Compress_time.ToString() },
delegate { return Series.Lowest(compressed.LowPrices, Stop_L); });

var DStop_L = compressed.Decompress(cStop_L, DecompressMethodWithDef.Default); 
var DStop_S = compressed.Decompress(cStop_S, DecompressMethodWithDef.Default); 

Exit_Short = DStop_S[bar];
Exit_Long = DStop_L[bar];

else
{
LongPos.CloseAtStop(bar+1,Exit_Long, "Stop_Long"); 
}
// Здесь идет другой блок видения короткой позиции а не два else подряд
else 
{
ShortPos.CloseAtStop(bar+1,Exit_Short,"Stop_Short_2"); 
}
			    

Наверх
#82076 - Sat Jun 24 2017 12:08 AM Re: Оптимизация таймфрейма [Re: Vladimir2803]
Vladimir2803 Offline
member

Registered: Thu Oct 16 2014
Записи: 101
И еще такой вопрос:
Можно ли как то сделать, что бы свечи компрессии не обрубались в конце дня?

Наверх
#82077 - Sat Jun 24 2017 09:59 AM Re: Оптимизация таймфрейма [Re: Vladimir2803]
jhgjrht Offline
writer

Registered: Sun Nov 21 2010
Записи: 428
Пожалуйста! smile
Вроде нормально. Синтаксически можно чуть короче:
var DStop_L = ctx.GetData( "cStop_L", new[] { Stop_L.ToString(), Compress_time.ToString() },
() => compressed.Decompress( Series.Lowest( compressed.LowPrices, Stop_L ) ) );

Нарезание свечей при компрессии происходит только по временному интервалу, поэтому, если промежуток между исходными свечами больше этого интервала, то и сжатые свечи разделятся. Ночь, например, на фортсе длится 10 часов и использование любого интервала сжатия меньше этого приведет к новой сжатой свече в начале дня. Штатной возможности сжимать свечи группами по указанному их количеству нет, насколько мне известно.
_________________________
Не пишите мне! Никому ничего делать не буду.

Наверх
#82099 - Sun Jul 02 2017 07:13 AM Re: Оптимизация таймфрейма [Re: jhgjrht]
Vladimir2803 Offline
member

Registered: Thu Oct 16 2014
Записи: 101
Originally Posted By: jhgjrht
Пожалуйста! smile
Вроде нормально. Синтаксически можно чуть короче:
var DStop_L = ctx.GetData( "cStop_L", new[] { Stop_L.ToString(), Compress_time.ToString() },
() => compressed.Decompress( Series.Lowest( compressed.LowPrices, Stop_L ) ) );

Нарезание свечей при компрессии происходит только по временному интервалу, поэтому, если промежуток между исходными свечами больше этого интервала, то и сжатые свечи разделятся. Ночь, например, на фортсе длится 10 часов и использование любого интервала сжатия меньше этого приведет к новой сжатой свече в начале дня. Штатной возможности сжимать свечи группами по указанному их количеству нет, насколько мне известно.


Я так понял если использовать ваш вариант расчета скрипта, то последующая декомпрессия не нужна?

А поможет ли в ситуации с обрезанием свечей установка точного времени первой свечи? по моему в tslab это называется сдвиг( видел инструкцию на сайте rusalgo).
Я так понимаю что в таком случае обрежиться только последняя свеча дня.

Наверх
#82135 - Mon Jul 10 2017 02:22 PM Re: Оптимизация таймфрейма [Re: Vladimir2803]
jhgjrht Offline
writer

Registered: Sun Nov 21 2010
Записи: 428
Нужна, и она там есть (функция Decompress). Я лишь скомпоновал вызовы функций в две строки.

Поэкспериментируйте...
_________________________
Не пишите мне! Никому ничего делать не буду.

Наверх


Moderator:  ViL, sar