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



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

СообщениеДобавлено: Вс Фев 11, 2018 7:32 pm Ответить с цитатой Вернуться к началу

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


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

СообщениеДобавлено: Пн Фев 12, 2018 11:39 am Ответить с цитатой Вернуться к началу

Может попробовать воспользоваться 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

СообщениеДобавлено: Пн Фев 12, 2018 1:28 pm Ответить с цитатой Вернуться к началу

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
Сообщения: 9106

СообщениеДобавлено: Пн Фев 12, 2018 2:14 pm Ответить с цитатой Вернуться к началу

Если получается вывести список сделок, то прикрутить вывод параметров вроде не должно доставить проблем. Просто дописать их во время формирования строки.

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



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

СообщениеДобавлено: Вт Фев 13, 2018 9:19 pm Ответить с цитатой Вернуться к началу

Все получилось. Вот фрагмент кода, вдруг кому пригодится:
Код:
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

СообщениеДобавлено: Ср Май 16, 2018 5:31 pm Ответить с цитатой Вернуться к началу

круто!
а как можно было бы вывести изменения определенных индикаторов на каждом баре между входом и выходом???
Пример: система вошла на баре 0 и вышла через 5. Хочу вывести клоуз каждого бара и ATR на каждом баре с 0 по 5 включительно - 10 колонок
наверняка есть какое-то готовое решение
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Чт Май 17, 2018 8:31 am Ответить с цитатой Вернуться к началу

Ищи в хелпере How to add user-defined metrics to backtest/optimization report
Я сам не очень ориентируюсь, но в случае чего немного подсказать смогу если будут вопросы.

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



Зарегистрирован: 28.04.2023
Сообщения: 1
Откуда: Москва

СообщениеДобавлено: Пн Дек 04, 2023 4:38 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Ищи в хелпере How to add user-defined metrics to backtest/optimization report
Я сам не очень ориентируюсь, но в случае чего немного подсказать смогу если будут вопросы.

Спасибо!
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
konstb



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

СообщениеДобавлено: Сб Фев 24, 2024 5:00 pm Ответить с цитатой Вернуться к началу

//----- 2 (ФАЗА-2) Блок кода для создания своих показателей тестирования

SetCustomBacktestProc("");

if( Status("action")== actionPortfolio )
{
bo = GetBacktesterObject();

bo.Backtest();

st = bo.GetPerformanceStats(0);

nTrades = 12;
//----- MDD% level
mddPer = 10;//

myNetP_RF_Kr = 100 * st.GetValue("NetProfitPercent") * st.GetValue("RecoveryFactor") * st.GetValue("KRatio");

if (st.GetValue("MaxSystemDrawdownPercent") < -1 * mddPer OR st.GetValue("RecoveryFactor") < 0 OR st.GetValue("KRatio") < 0 ) myNetP_RF_Kr = -1;

bo.AddCustomMetric( "myNetP_RF_Kr", myNetP_RF_Kr );

myNetP_RF = st.GetValue("NetProfitPercent") * st.GetValue("RecoveryFactor") ;

if ( st.GetValue("RecoveryFactor") < 0 ) myNetP_RF = 0;

bo.AddCustomMetric( "myNetP_RF", myNetP_RF );

myNetP_Kr = st.GetValue("NetProfitPercent") * st.GetValue("KRatio") ;

if (st.GetValue("MaxSystemDrawdownPercent") < -1 * mddPer OR st.GetValue("KRatio") < 0 ) myNetP_Kr = 0;

bo.AddCustomMetric( "myNetP_Kr", myNetP_Kr );



myNetP = st.GetValue("NetProfitPercent") ;

if (st.GetValue("MaxSystemDrawdownPercent") < -1 * mddPer ) myNetP = 0;

bo.AddCustomMetric( "myNetP", myNetP );



myNetPTrades = st.GetValue("NetProfitPercent") ;

if (st.GetValue("MaxSystemDrawdownPercent") < -1 * mddPer OR st.GetValue("AllQty") < nTrades ) myNetPTrades = 0;

bo.AddCustomMetric( "myNetPTrades", myNetPTrades );


myRF_Trades = st.GetValue("RecoveryFactor") ;

if (st.GetValue("RecoveryFactor") < 0 OR st.GetValue("AllQty") < nTrades ) myRF_Trades = -1;

bo.AddCustomMetric( "myRF_Trades", myRF_Trades );
//*/

/*
myRF = st.GetValue("RecoveryFactor") ;

if (st.GetValue("MaxSystemDrawdownPercent") < -1 * mddPer OR st.GetValue("RecoveryFactor") < 0 ) myRF = 0;

bo.AddCustomMetric( "myRF", myRF );
//*/

/*
myNetP_RF_Kr = st.GetValue("NetProfitPercent") * st.GetValue("RecoveryFactor") * st.GetValue("KRatio") ;

if (st.GetValue("MaxSystemDrawdownPercent") < -1 * mddPer OR st.GetValue("RecoveryFactor") < 0 OR st.GetValue("KRatio") < 0 ) myNetP_RF_Kr = 0;

bo.AddCustomMetric( "myNetP_RF_Kr", myNetP_RF_Kr );

// */
/*
myNetP_RF = st.GetValue("NetProfitPercent") * st.GetValue("RecoveryFactor") ;

if (st.GetValue("MaxSystemDrawdownPercent") < -1 * mddPer OR st.GetValue("RecoveryFactor") < 0 OR st.GetValue("KRatio") < 0 ) myNetP_RF = 0;

bo.AddCustomMetric( "myNetP_RF", myNetP_RF );
*/
/*

myNetP_RF_RRR = st.GetValue("NetProfitPercent") * st.GetValue("RecoveryFactor") * st.GetValue("RRR") ;

if (st.GetValue("MaxSystemDrawdownPercent") < -1 * mddPer OR st.GetValue("RecoveryFactor") < 0 OR st.GetValue("RRR") < 0 ) myNetP_RF_RRR = 0;

bo.AddCustomMetric( "myNetP_RF_RRR", myNetP_RF_RRR );

//*/

/*

CAR2MDD = st.GetValue("CAR") * st.GetValue("CAR/MDD") ;

if (st.GetValue("CAR") < 0 OR st.GetValue("AllQty") < nTrades) CAR2MDD = 0;

bo.AddCustomMetric( "CAR2MDD", CAR2MDD );

myRF = st.GetValue("RecoveryFactor");

if (st.GetValue("RecoveryFactor") < 0 OR st.GetValue("AllQty") < nTrades) myRF = 0;

bo.AddCustomMetric( "myRF", myRF );


myNetPRF = st.GetValue("NetProfitPercent") * st.GetValue("RecoveryFactor") ;

if (st.GetValue("MaxSystemDrawdownPercent" ) < -1 * mddPer OR st.GetValue("RecoveryFactor") < 0) myNetPRF = 0;

bo.AddCustomMetric( "myNetPRF", myNetPRF );


myNetPRF2 = st.GetValue("NetProfitPercent") * st.GetValue("RecoveryFactor") * st.GetValue("RecoveryFactor") ;

if (st.GetValue("MaxSystemDrawdownPercent") < -1 * mddPer ) myNetPRF2 = 0;

bo.AddCustomMetric( "myNetPRF2", myNetPRF2 );


myNetPRFKr = st.GetValue("NetProfitPercent") * st.GetValue("RecoveryFactor") * st.GetValue("KRatio") ;

if (st.GetValue("MaxSystemDrawdownPercent") < -1 * mddPer OR st.GetValue("RecoveryFactor") < 0 OR st.GetValue("KRatio") < 0 ) myNetPRFKr = 0;

bo.AddCustomMetric( "myNetPRFKr", myNetPRFKr );


myNet = st.GetValue("NetProfit");

if (st.GetValue("MaxSystemDrawdownPercent") < -1 * mddPer) myNet = 0;

bo.AddCustomMetric( "myNet", myNet );

myNetP = st.GetValue("NetProfitPercent");

if (st.GetValue("MaxSystemDrawdownPercent") < -1 * mddPer ) myNetP = 0;//OR st.GetValue("AllQty") < nTrades

bo.AddCustomMetric( "myNetP", myNetP );

myUi = st.GetValue("UlcerPerformanceIndex");

if (st.GetValue("MaxSystemDrawdownPercent") < -1 * mddPer) myUi = 0;

bo.AddCustomMetric( "myUi", myUi );

myKr = st.GetValue("KRatio");

if (st.GetValue("MaxSystemDrawdownPercent") < -1 * mddPer OR st.GetValue("AllQty") < nTrades) myKr = 0;

bo.AddCustomMetric( "myKr", myKr );

myNetPKr = st.GetValue("NetProfitPercent") * st.GetValue("KRatio") ;

if (st.GetValue("MaxSystemDrawdownPercent") < -1 * mddPer OR st.GetValue("KRatio") < 0 ) myNetPKr = 0;

bo.AddCustomMetric( "myNetPKr", myNetPKr );

myNetPKr2 = st.GetValue("NetProfitPercent") * st.GetValue("KRatio") * st.GetValue("KRatio") ;

if (st.GetValue("MaxSystemDrawdownPercent") < -1 * mddPer ) myNetPKr2 = 0;

bo.AddCustomMetric( "myNetPKr2", myNetPKr2 );

/*

myRRR = st.GetValue("RRR");

if (st.GetValue("MaxSystemDrawdownPercent") < -1 * mddPer) myRRR = 0;

bo.AddCustomMetric( "myRRR", myRRR );


myNetPRF = st.GetValue("NetProfitPercent") * st.GetValue("RecoveryFactor") ;

if (st.GetValue("MaxSystemDrawdownPercent") < -1 * mddPer ) myNetPRF = 0;

bo.AddCustomMetric( "myNetPRF", myNetPRF );
*/
}
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen