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



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

СообщениеДобавлено: Пн Ноя 25, 2013 1:32 pm Ответить с цитатой Вернуться к началу

000 писал(а):
А всетаки включи на всякий пожарный.


какой инструмент вписать? один их торгуемых?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Ноя 25, 2013 1:33 pm Ответить с цитатой Вернуться к началу

Да.

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



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

СообщениеДобавлено: Пн Ноя 25, 2013 1:40 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Да.


без изменений.

а ты пробовал мой код у себя запускать? правильно считает?
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Ноя 25, 2013 1:45 pm Ответить с цитатой Вернуться к началу

Пока нет. Я и не стану пробовать именно твой код. Я его максимально упрощу и погоняю. Прямо сейчас не охота. Может вечером. Laughing

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



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

СообщениеДобавлено: Пн Ноя 25, 2013 1:50 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Пока нет. Я и не стану пробовать именно твой код. Я его максимально упрощу и погоняю. Прямо сейчас не охота. Может вечером. Laughing


ок. куда уж проще?)
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Ноя 26, 2013 12:37 am Ответить с цитатой Вернуться к началу

Проще это вот так. И кстати работает нормально
Код:

//--------------------------------------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

СообщениеДобавлено: Вт Ноя 26, 2013 12:54 am Ответить с цитатой Вернуться к началу

А совсем правильно вот так
Код:

//--------------------------------------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

СообщениеДобавлено: Вт Ноя 26, 2013 2:23 am Ответить с цитатой Вернуться к началу

000 писал(а):
Проще это вот так. И кстати работает нормально
Код: ...


ну хорошо, пусть будет так. ты б мог изменить строчку
Код:
Eq = 0.33 * bo.Equity;

на
Код:
Eq = 0.66 * bo.Equity;


или просто второй код запустить не изменяя распределения бумаг в портфеле и сделать скрин детального рапорта где-то в середине. был бы тебе очень благодарен.

т.к. эти коды по сути такие же и выдают такие же(как и мой) результаты у меня.

edit: а нет, забей. я, кажется, понял, где ами глючит в моём случае. вот что обозначают эти Short(6) на скрине? похоже это "6 - потеря капитала". остальное в лс.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Ноя 26, 2013 8:13 am Ответить с цитатой Вернуться к началу

А чо? Одной бумаги должно было быть 1/3 пОртфеля а другой 2/3 ???? Я думал поровну.

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



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

СообщениеДобавлено: Вт Ноя 26, 2013 2:25 pm Ответить с цитатой Вернуться к началу

000 писал(а):
А чо? Одной бумаги должно было быть 1/3 пОртфеля а другой 2/3 ???? Я думал поровну.


ну да. но суть ошибки-то от этого не меняется. сбой дают все коды.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Вт Ноя 26, 2013 2:48 pm Ответить с цитатой Вернуться к началу

А что мешает дать одной бумаге 20% от доступных денег а другой 40% ? Соотношение бумаг остается и тестер не станет закрывать позу из-за нехатки средств.

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



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

СообщениеДобавлено: Вт Ноя 26, 2013 3:06 pm Ответить с цитатой Вернуться к началу

000 писал(а):
А что мешает дать одной бумаге 20% от доступных денег а другой 40% ? Соотношение бумаг остается и тестер не станет закрывать позу из-за нехатки средств.


пробовал понижать позы, ничего не меняется. лс
Посмотреть профиль Отправить личное сообщение
MrDrJOKER



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

СообщениеДобавлено: Вс Апр 05, 2015 1:22 am Ответить с цитатой Вернуться к началу

опять вернулся к этому коду. в этот раз без 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

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

Здравствуйте! Пользуясь выше изложенным кодом, создал свой более простой, идея проста ребаллансировать части портфеля на каждом баре, но по неизвестной мне причине не работает.
Код:


_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

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

Еще актуально?

_________________
ceterum censeo carthaginem esse delendam
Удачи. Олег.
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen