Автор |
Сообщение |
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
000 писал(а): |
А всетаки включи на всякий пожарный. |
какой инструмент вписать? один их торгуемых? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Да. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
без изменений.
а ты пробовал мой код у себя запускать? правильно считает? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Пока нет. Я и не стану пробовать именно твой код. Я его максимально упрощу и погоняю. Прямо сейчас не охота. Может вечером. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
000 писал(а): |
Пока нет. Я и не стану пробовать именно твой код. Я его максимально упрощу и погоняю. Прямо сейчас не охота. Может вечером. |
ок. куда уж проще?) |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Проще это вот так. И кстати работает нормально
Код: |
//--------------------------------------help-chanel lines, variables and optimisation-----------------------
SetTradeDelays(0,0,0,0);
rebalance_time = 101500;
val_xxx = 0;
val_yyy = 0;
//----------------------------------- BUY, SELL, SHORT, COVER ---------------------------------
//SetOption( "PortfolioReportMode", 1 );
SetOption("UseCustomBacktestProc", True );
SetCustomBacktestProc("");// Start of custom backtest procedure
if ( Status("action") == actionPortfolio )
{
bo = GetBacktesterObject();
bo.PreProcess(); // Initialize backtester
TN = TimeNum();
for( bar=0; bar < BarCount; bar++ )
{
bo.ProcessTradeSignals( bar );
for( pos = bo.GetFirstOpenPos(); pos; pos = bo.GetNextOpenPos() )
{
if( pos.Symbol == "LKOH" AND TN[bar] == rebalance_time )
{
price = pos.GetPrice( bar, "O" );
val_yyy = pos.GetPositionValue();
Eq = 0.33 * bo.Equity;
if( Val_yyy != Eq)
bo.ScaleTrade( bar, pos.Symbol, Val_yyy < Eq, price, abs(Val_yyy - Eq) );
}
if( pos.Symbol == "SBER" AND TN[bar] == rebalance_time )
{
price = pos.GetPrice( bar, "O" );
val_xxx = pos.GetPositionValue();
Eq = 0.33 * bo.Equity;
if( Val_xxx != Eq)
bo.ScaleTrade( bar, pos.Symbol, Val_xxx < Eq, price, abs(Val_xxx - Eq) );
}
}
}
bo.PostProcess(); // Finalize backtester
}
//open first position
Short = 1;
Buy = Sell = Cover = 0;
BuyPrice = SellPrice = ShortPrice = CoverPrice = Open;
SetPositionSize(33, 2);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А совсем правильно вот так
Код: |
//--------------------------------------help-chanel lines, variables and optimisation-----------------------
SetTradeDelays(0,0,0,0);
rebalance_time = 101500;
val = 0;
//----------------------------------- BUY, SELL, SHORT, COVER ---------------------------------
//SetOption( "PortfolioReportMode", 1 );
SetOption("UseCustomBacktestProc", True );
SetCustomBacktestProc("");// Start of custom backtest procedure
if ( Status("action") == actionPortfolio )
{
bo = GetBacktesterObject();
bo.PreProcess(); // Initialize backtester
TN = TimeNum();
for( bar=0; bar < BarCount; bar++ )
{
bo.ProcessTradeSignals( bar );
if(TN[bar] == rebalance_time)
{
for( pos = bo.GetFirstOpenPos(); pos; pos = bo.GetNextOpenPos() )
{
price = pos.GetPrice( bar, "O" );
val = pos.GetPositionValue();
Eq = 0.33 * bo.Equity;
if( Val != Eq)
bo.ScaleTrade( bar, pos.Symbol, Val < Eq, price, abs(Val - Eq) );
}
}
}
bo.PostProcess(); // Finalize backtester
}
//open first position
Short = 1;
Buy = Sell = Cover = 0;
BuyPrice = SellPrice = ShortPrice = CoverPrice = Open;
SetPositionSize(33, 2);
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
000 писал(а): |
Проще это вот так. И кстати работает нормально
Код: ... |
ну хорошо, пусть будет так. ты б мог изменить строчку
Код: |
Eq = 0.33 * bo.Equity; |
на
Код: |
Eq = 0.66 * bo.Equity; |
или просто второй код запустить не изменяя распределения бумаг в портфеле и сделать скрин детального рапорта где-то в середине. был бы тебе очень благодарен.
т.к. эти коды по сути такие же и выдают такие же(как и мой) результаты у меня.
edit: а нет, забей. я, кажется, понял, где ами глючит в моём случае. вот что обозначают эти Short(6) на скрине? похоже это "6 - потеря капитала". остальное в лс. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А чо? Одной бумаги должно было быть 1/3 пОртфеля а другой 2/3 ???? Я думал поровну. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
000 писал(а): |
А чо? Одной бумаги должно было быть 1/3 пОртфеля а другой 2/3 ???? Я думал поровну. |
ну да. но суть ошибки-то от этого не меняется. сбой дают все коды. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А что мешает дать одной бумаге 20% от доступных денег а другой 40% ? Соотношение бумаг остается и тестер не станет закрывать позу из-за нехатки средств. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
000 писал(а): |
А что мешает дать одной бумаге 20% от доступных денег а другой 40% ? Соотношение бумаг остается и тестер не станет закрывать позу из-за нехатки средств. |
пробовал понижать позы, ничего не меняется. лс |
|
|
Посмотреть профиль Отправить личное сообщение |
|
MrDrJOKER
Зарегистрирован: 22.06.2009
Сообщения: 489
|
опять вернулся к этому коду. в этот раз без low-level. так и не захотел он корректно в моем случае работать.
пытаюсь сделать балансировку в начале месяца, но, например, 1-е число не всегда торговый день, т.е. Day() == 1 не прокатывает, как и вариант ниже. как бы реализовать балансирование в начале нового месяца?
хм ... этот код мне тоже фигню рисует.
Код: |
_SECTION_BEGIN("last Month");
TimeFrameSet( inDaily );
LastDate = Ref( datenum(), -1);
TimeFrameRestore();
LastDate1Min = TimeFrameExpand( LastDate, in1Minute);
Plot( LastDate1Min%100 , "last Month", colorRed, styleLine);
_SECTION_END();
|
Код: |
_SECTION_BEGIN("new Month");
monthBegin = Month() != Ref( Month(), -1 );
dayBegin = Day() != Ref( Day(), -1 );
firstDay = Flip( monthBegin, DayBegin );
Plot( firstDay, "new Month", colorRed, styleLine);
_SECTION_END();
|
оно и понятно, через TimeFrameSet к дате не добраться.
edit: ура, решил)
Код: |
_SECTION_BEGIN("new Month");
monthBegin = Month() != Ref( Month(), -1 );
nextDayBegin = Day() != Ref( Day(), -1 ) AND NOT monthBegin;
firstDay = Flip( monthBegin, nextDayBegin );
Plot( firstDay, "new Month", colorRed, styleLine);
_SECTION_END();
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
Jackson
Зарегистрирован: 12.08.2013
Сообщения: 18
|
Здравствуйте! Пользуясь выше изложенным кодом, создал свой более простой, идея проста ребаллансировать части портфеля на каждом баре, но по неизвестной мне причине не работает.
Код: |
_SECTION_BEGIN("off_option");
instr_1 = "GAZP_1510_1810";
instr_2 = "SBER_1510_1810";
instr_3 = "LKOH_1510_1810";
instr_4 = "NVTK_1510_1810";
instr_5 = "NLMK_1510_1810";
instr_6 = "ROSN_1510_1810";
instr_equity = 0.15;
//--------------------------------------help-chanel lines, variables and optimisation-----------------------
SetTradeDelays(0,0,0,0);
val_pos = 0;
// open first positions
Buy =1 ;
Sell = Cover = Short = 0;
BuyPrice = SellPrice = ShortPrice = CoverPrice = Open;
SetPositionSize(instr_equity*100, spsPercentOfEquity);
//----------------------------------- BUY, SELL, SHORT, COVER ---------------------------------
SetOption( "PortfolioReportMode", 1 );
SetOption("UseCustomBacktestProc", True );
SetCustomBacktestProc("");// Start of custom backtest procedure
if ( Status("action") == actionPortfolio )
{
bo = GetBacktesterObject();
bo.PreProcess(); // Initialize backtester
for( bar=5; bar < BarCount; bar++ )
{
bo.ProcessTradeSignals( bar );
for( pos = bo.GetFirstOpenPos(); pos; pos = bo.GetNextOpenPos())
{ price = pos.GetPrice(bar, "C");
val_pos = pos.GetPositionValue();//--current size
Eq = instr_equity * bo.Equity;//--start size
if( val_pos != Eq)
{
bo.ScaleTrade( bar, pos.Symbol, val_pos < Eq, price, abs(val_pos - Eq) );
}
}//for pos
}//for bars
bo.PostProcess(); // Finalize backtester
}
//
_SECTION_END(); |
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Еще актуально? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
|