Автор |
Сообщение |
Marcello
Зарегистрирован: 30.05.2015
Сообщения: 69
|
Есть системка с 3 параметрами, которые дают ~6000 комбинаций. На периоде, выбранном для оптимизации, делается около 500 сделок. Можно ли в процессе оптимизации вывести в файл все сделки (то, что выводится в режиме PortfolioReportMode = 0) с указанием значений текущих параметров? Цель: получить все сделки для каждой комбиниции параметров для дальнейшего использования в другом приложении. |
|
|
Посмотреть профиль Отправить личное сообщение |
 |
000
Site Admin

Зарегистрирован: 10.12.2007
Сообщения: 8816
|
Может попробовать воспользоваться AmiBroker's OLE Automation Object Model
У объекта Analysis есть метод Report....
Analysis.Report( FileName: String ) - saves report to the file or displays it if FileName = "" |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
 |
Marcello
Зарегистрирован: 30.05.2015
Сообщения: 69
|
Analysis. This object is obsolete.
Я думал, что можно как-то использовать статус: https://www.amibroker.com/guide/afl/status.html
Что-то типа
Код: |
if( Status("action") == actionExOptimizePortfolio ) { |
А дальше использовать свойства объекта Trade:
Код: |
string Symbol
float EntryDateTime
float EntryPrice
float ExitDateTime
float ExitPrice
long BarsInTrade |
Вот только как сюда прикрутить вывод текущих значений оптимизируемых параметров? |
|
|
Посмотреть профиль Отправить личное сообщение |
 |
000
Site Admin

Зарегистрирован: 10.12.2007
Сообщения: 8816
|
Если получается вывести список сделок, то прикрутить вывод параметров вроде не должно доставить проблем. Просто дописать их во время формирования строки. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
 |
Marcello
Зарегистрирован: 30.05.2015
Сообщения: 69
|
Все получилось. Вот фрагмент кода, вдруг кому пригодится:
Код: |
SetCustomBacktestProc("");
if( Status("action") == actionPortfolio ) {
bo = GetBacktesterObject();
bo.Backtest();
logStr = "";
strDiv = "\t";
trade = bo.getFirstTrade();
if ( trade ) fh = fopen( "d:\\" + trade.Symbol + ".txt", "a");
for ( trade = bo.getFirstTrade(); trade; trade = bo.getNextTrade() ) {
logStr = trade.Symbol + strDiv;
logStr = logStr + StrFormat( "%g_%g_%g", BR, BP, SR ) + strDiv; // тут перечислены оптимизируемые параметры
logStr = logStr + DateTimeToStr( trade.EntryDateTime ) + strDiv;
logStr = logStr + StrFormat( "%g", trade.EntryPrice ) + strDiv;
logStr = logStr + DateTimeToStr( trade.ExitDateTime ) + strDiv;
logStr = logStr + StrFormat( "%g", trade.ExitPrice ) + strDiv;
logStr = logStr + StrFormat( "%g", trade.BarsInTrade ) + "\n";
if ( fh ) fputs( logStr, fh ); else _TRACE( "Error" );
}
if ( fh ) fclose( fh );
} |
|
|
|
Посмотреть профиль Отправить личное сообщение |
 |
max
Зарегистрирован: 01.08.2008
Сообщения: 253
|
круто!
а как можно было бы вывести изменения определенных индикаторов на каждом баре между входом и выходом???
Пример: система вошла на баре 0 и вышла через 5. Хочу вывести клоуз каждого бара и ATR на каждом баре с 0 по 5 включительно - 10 колонок
наверняка есть какое-то готовое решение |
|
|
Посмотреть профиль Отправить личное сообщение |
 |
000
Site Admin

Зарегистрирован: 10.12.2007
Сообщения: 8816
|
Ищи в хелпере How to add user-defined metrics to backtest/optimization report
Я сам не очень ориентируюсь, но в случае чего немного подсказать смогу если будут вопросы. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
 |
|