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



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

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

сабж.

нужная инфа:
http://www.amibroker.com/guide/a_custombacktest.html
http://www.amibroker.com/docs/Houston2.pdf
http://www.amibroker.org/userkb/2008/03/16/amibroker-custom-backtester-interface-2/

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

Код:

//For 1 min timeframe!!!

//----------------------------MM---------------------------------------
Capital = 100000; // Initial Capital $100,000
Margin = 100;
// Position Sizing
PercentCapitalPerTrade =  100; // ie $250 out of a $10K account
SetPositionSize(PercentCapitalPerTrade*100/Margin,spsPercentOfEquity);
// Initial Trade Parameters
SetOption("InitialEquity", Capital );
SetOption("AccountMargin", Margin); // CFD trading requiring 1 % margin

//--------------------------------------Vspomogateljnie linii kanalov, peremennie i optimizatsiya-----------------------
SetTradeDelays(0,0,0,0);

all_portfolio = 5000;
open_pos_xxx = 0;
open_pos_yyy = 0;
//----------------------------------- BUY, SELL, SHORT, COVER ---------------------------------

SetOption("UseCustomBacktestProc", True );
SetCustomBacktestProc("");//  Start of custom backtest procedure
if ( Status("action") == actionPortfolio )
{
   bo = GetBacktesterObject();
   bo.PreProcess(); // Initialize backtester

   for( bar=0; bar < BarCount; bar++ )
   {
      bo.ProcessTradeSignals( bar ); CurEquity = bo.Equity;
      for( pos = bo.GetFirstOpenPos(); pos; pos = bo.GetNextOpenPos() )
      {   
         //pos variable now holds Trade object
         if( Name() == "XXX" )
         {
            if( pos.Shares == 0 )
            {
            //bo.EnterTrade( bar, Name(), True, pos.GetPrice( bar, "O" ), round( all_portfolio*0.5 / pos.GetPrice( bar, "O" ) ) );
            //Short[bar] = 1;
            }
         }

         if( Name() == "YYY" )
         {
            if( pos.Shares == 0 )
            {
            //bo.EnterTrade( bar, Name(), True, pos.GetPrice( bar, "O" ), round( all_portfolio*0.5 / pos.GetPrice( bar, "O" ) ) );
            //Short[bar] = 1;
            }
         }

      }
   }
   bo.PostProcess(); // Finalize backtester
}
//open first position
if( Name() == "XXX" )
{
   if( open_pos_xxx == 1 )
   {
      Short = 0;
   }
   else
   {
      SetPositionSize( round( all_portfolio*0.5 / LastValue( O )  ) , 4 );
      Short = 1;
      open_pos_xxx = 1;
   }
}
//open first position
if( Name() == "YYY" )
{
   if( open_pos_yyy == 1 )
   {
      Short = 0;
   }
   else
   {
      SetPositionSize( round( all_portfolio*0.5 / LastValue( O )  ) , 4 );
      Short = 1;
      open_pos_yyy = 1;
   }
}

Buy = Sell = Cover = 0;
BuyPrice = SellPrice = ShortPrice = CoverPrice = Open;

не хочет. открывает позиции по одной бумаге, да и размер позиции не тот.

где косяк?


Последний раз редактировалось: MrDrJOKER (Пн Ноя 04, 2013 4:48 am), всего редактировалось 2 раз(а)
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

А опиши словами что хотел. Я не слишком силен в адвансед интерфейсе и по коду понять не смог.

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



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

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

000 писал(а):
А опиши словами что хотел. Я не слишком силен в адвансед интерфейсе и по коду понять не смог.


да там по сути пока вся стратегия вот тут находится:
Код:

//open first position
if( Name() == "XXX" )
{
   if( open_pos_xxx == 1 )
   {
      Short = 0;
   }
   else
   {
      SetPositionSize( round( all_portfolio*0.5 / LastValue( O )  ) , 4 );
      Short = 1;
      open_pos_xxx = 1;
   }
}
//open first position
if( Name() == "YYY" )
{
   if( open_pos_yyy == 1 )
   {
      Short = 0;
   }
   else
   {
      SetPositionSize( round( all_portfolio*0.5 / LastValue( O )  ) , 4 );
      Short = 1;
      open_pos_yyy = 1;
   }
}

Buy = Sell = Cover = 0;
BuyPrice = SellPrice = ShortPrice = CoverPrice = Open;


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

я так понимаю, в нормальном афл нельзя узнать величину набраной позиции на баре?


Последний раз редактировалось: MrDrJOKER (Ср Ноя 06, 2013 12:10 am), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

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

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


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

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

MrDrJOKER писал(а):

я так понимаю, в нормальном афл нельзя узнать величину набраной позиции на баре?

В смысле сколько разных бумаг куплено/продано?

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



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

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

000 писал(а):
MrDrJOKER писал(а):

я так понимаю, в нормальном афл нельзя узнать величину набраной позиции на баре?

В смысле сколько разных бумаг куплено/продано?


да, или на какую сумму.

Код:
Вот это меня и удиило. Я несколько раз использовал адвансед нтерфейс и всегда сначала пишутся общие сигналы а потом они шлифуются в CustomBacktestProc. а у тебя как то наоборот.

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


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

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

MrDrJOKER писал(а):
000 писал(а):
MrDrJOKER писал(а):

я так понимаю, в нормальном афл нельзя узнать величину набраной позиции на баре?

В смысле сколько разных бумаг куплено/продано?


да, или на какую сумму.

Да. Из обычного AFL этого узнать нельзя.

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



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

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

000 писал(а):
Вот это меня и удиило. Я несколько раз использовал адвансед нтерфейс и всегда сначала пишутся общие сигналы а потом они шлифуются в CustomBacktestProc. а у тебя как то наоборот.


а что с моей уже написаной стратегией не так?

Код:

//open first position
if( Name() == "XXX" )
{
   if( open_pos_xxx == 1 )
   {
      Short = 0;
   }
   else
   {
      SetPositionSize( round( all_portfolio*0.5 / Open ) , 4 );
      Short = 1;
      open_pos_xxx = 1;
   }
}
//open first position
if( Name() == "YYY" )
{
   if( open_pos_yyy == 1 )
   {
      Short = 0;
   }
   else
   {
      SetPositionSize( round( all_portfolio*0.5 / Open ) , 4 );
      Short = 1;
      open_pos_yyy = 1;
   }
}

Buy = Sell = Cover = 0;
BuyPrice = SellPrice = ShortPrice = CoverPrice = Open;


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



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

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

что-то я парюсь. нужно позу по одной бумаге балансировать по позе в другой бумаге и иногда вторую по заданному объёму.

как запоминать кол-во купленых бумаг и объём другой бумаги?
пытаюсь сохранить кол-во бумаг в переменные shares_xxx и shares_yyy, но этот код не ребалансирует ничего(правила на вход те же, добавил ребалансировки в mid-level):

Код:

//--------------------------------------help-chanel lines, variables and optimisation-----------------------
SetTradeDelays(0,0,0,0);

all_portfolio = 2000000000;
trigger_pos_xxx = 0;
trigger_pos_yyy = 0;
shares_xxx = 0;
shares_yyy = 0;
//----------------------------------- BUY, SELL, SHORT, COVER ---------------------------------
SetOption("UseCustomBacktestProc", True );
SetCustomBacktestProc("");//  Start of custom backtest procedure

if ( Status("action") == actionPortfolio )
{
   bo = GetBacktesterObject();
   bo.PreProcess(); // Initialize backtester

   for( bar=0; bar < BarCount; bar++ )
   {
      bo.ProcessTradeSignals( bar ); CurEquity = bo.Equity;
      for( pos = bo.GetFirstOpenPos(); pos; pos = bo.GetNextOpenPos() )
      { 

         if( Name() == "YYY" AND pos.Shares != 0 )
         {
            shares_yyy = pos.Shares;
            //bo.EnterTrade( bar, Name(), True, pos.GetPrice( bar, "O" ), round( all_portfolio*0.5 / pos.GetPrice( bar, "O" ) ) );
            //Short[bar] = 1;
            val_yyy = pos.GetPositionValue();
            diff = val_yyy - round( 0.3333333333 * all_portfolio / pos.GetPrice( bar, "O" ) ) ;

            if( abs( diff ) > pos.GetPrice( bar, "O" ) AND TimeNum() == 093000 AND DayOfWeek() == 1 )
            {
               // sell or buy xxx (depends on diff)
               bo.ScaleTrade( bar, pos.Symbol, diff < 0, pos.GetPrice( bar, "O" ), abs( diff ) ); 
            }
         }

         //pos variable holds now Trade object
         if( Name() == "XXX" AND pos.Shares != 0 )
         {
            shares_xxx = pos.Shares;
            //bo.EnterTrade( bar, Name(), True, pos.GetPrice( bar, "O" ), round( all_portfolio*0.5 / pos.GetPrice( bar, "O" ) ) );
            val_xxx = pos.GetPositionValue();
            val_yyy = shares_yyy * Foreign("YYY", "Open");
            diff = val_xxx - val_yyy ;

            if( abs( diff ) > pos.GetPrice( bar, "O" ) AND TimeNum() == 093100 )
            {
               // sell or buy xxx (depends on diff)
               bo.ScaleTrade( bar, pos.Symbol, diff < 0, pos.GetPrice( bar, "O" ), abs( diff ) ); 
            }
         }

      }
   }
   bo.PostProcess(); // Finalize backtester
}

//open first position
if( Name() == "YYY" )
{
   if( trigger_pos_yyy == 1 )
   {
      Short = 0;
   }
   else
   {
      SetPositionSize( round( 0.3333333333 * all_portfolio / Open ) , 4 ); //0.333 of portfolio value
      Short = 1 AND ( TimeNum() >= 093000 AND TimeNum() < 160000 ) ;
      trigger_pos_yyy = 1;
   }
}

//open first position
if( Name() == "XXX" )
{
   if( trigger_pos_xxx == 1 )
   {
      Short = 0;
   }
   else
   {
      SetPositionSize( round( 0.6666666666 * all_portfolio / Open ) , 4 ); //0.666 of portfolio value
      Short = 1 AND ( TimeNum() >= 093000 AND TimeNum() < 160000 ) ;
      trigger_pos_xxx = 1;
   }
}

Buy = Sell = Cover = 0;
BuyPrice = SellPrice = ShortPrice = CoverPrice = Open;
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Как то я вопроса не понял.

Цитата:

как запоминать кол-во купленых бумаг

А это что?
Код:
shares_yyy = pos.Shares;

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



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

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

000 писал(а):
Как то я вопроса не понял.

Цитата:

как запоминать кол-во купленых бумаг

А это что?
Код:
shares_yyy = pos.Shares;


да, сложнее было получить кол-во бумаг в противоположной позиции. об этом я говорил. я их сейчас просто сохранил в переменные при наборе основной позиции.
вроде подправил, всё запомнил, но не работает, зараза. Evil or Very Mad нет ребалансировки. что не так?

вот актуальный, подправленый код:
Код:

//--------------------------------------help-chanel lines, variables and optimisation-----------------------
SetTradeDelays(0,0,0,0);

all_portfolio = 200000000;
trigger_pos_xxx = 0;
trigger_pos_yyy = 0;
shares_xxx = 0;
shares_yyy = 0;
val_xxx = 0;
val_yyy = 0;
buyprice_yyy = 0;

//----------------------------------- BUY, SELL, SHORT, COVER ---------------------------------
SetOption("UseCustomBacktestProc", True );
SetCustomBacktestProc("");//  Start of custom backtest procedure

if ( Status("action") == actionPortfolio )
{
   bo = GetBacktesterObject();
   bo.PreProcess(); // Initialize backtester

   for( bar=0; bar < BarCount; bar++ )
   {
      bo.ProcessTradeSignals( bar ); CurEquity = bo.Equity;
      for( pos = bo.GetFirstOpenPos(); pos; pos = bo.GetNextOpenPos() )
      { 

         if( Name() == "YYY" AND pos.Shares != 0 )
         {
            //shares_yyy = pos.Shares;
            //val_yyy = pos.GetPositionValue();
            val_yyy = shares_yyy * pos.GetPrice( bar, "O" );
            diff = val_yyy - shares_yyy * buyprice_yyy ; //become diff between first position size and actual

            if( abs( diff ) > pos.GetPrice( bar, "O" ) AND TimeNum() == 093000 AND DayOfWeek() == 1 )
            {
               // sell or buy xxx (depends on diff)
               //bo.ScaleTrade( bar, pos.Symbol, diff < 0, pos.GetPrice( bar, "O" ), abs( diff ) ); 
               if( diff < 0)
                  bo.ScaleTrade( bar, pos.Symbol, True, pos.GetPrice( bar, "O" ), abs( diff ) );
               else
                  bo.ScaleTrade( bar, pos.Symbol, False, pos.GetPrice( bar, "O" ), abs( diff ) );
            }
         }

         //pos variable holds now Trade object
         if( Name() == "XXX" AND pos.Shares != 0 )
         {
            //shares_xxx = pos.Shares;
            //val_xxx = pos.GetPositionValue();
            val_xxx = shares_xxx * pos.GetPrice( bar, "O" );
            val_yyy = shares_yyy * Foreign("YYY", "Open");
            diff = val_xxx - val_yyy ;

            if( abs( diff ) > pos.GetPrice( bar, "O" ) AND TimeNum() == 093100 )
            {
               // sell or buy xxx (depends on diff)
               bo.ScaleTrade( bar, pos.Symbol, diff < 0, pos.GetPrice( bar, "O" ), abs( diff ) ); 
            }
         }

      }
   }
   bo.PostProcess(); // Finalize backtester
}

//open first position
if( Name() == "YYY" )
{
   if( trigger_pos_yyy == 1 )
   {
      Short = 0;
   }
   else
   {
      SetPositionSize( round( 0.3333333333 * all_portfolio / Open ) , 4 ); //0.333 of portfolio value
      Short = 1 AND ( TimeNum() >= 093000 AND TimeNum() < 160000 ) ;
      trigger_pos_yyy = 1;
      shares_yyy = round( 0.3333333333 * all_portfolio / Open );
      buyprice_yyy = Open;
   }
}

//open first position
if( Name() == "XXX" )
{
   if( trigger_pos_xxx == 1 )
   {
      Short = 0;
   }
   else
   {
      SetPositionSize( round( 0.6666666666 * all_portfolio / Open ) , 4 ); //0.666 of portfolio value
      Short = 1 AND ( TimeNum() >= 093000 AND TimeNum() < 160000 ) ;
      trigger_pos_xxx = 1;
      shares_xxx = round( 0.6666666666 * all_portfolio / Open );
   }
}

Buy = Sell = Cover = 0;
BuyPrice = SellPrice = ShortPrice = CoverPrice = Open;
Посмотреть профиль Отправить личное сообщение
MrDrJOKER



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

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

плюнул на low-mode переписал так же в обычном AFL.
ничего не изменилось, нет ребалансировки.

Код:

//--------------------------------------help-chanel lines, variables and optimisation-----------------------
SetTradeDelays(0,0,0,0);

all_portfolio = 75000000;
trigger_pos_xxx = 0;
trigger_pos_yyy = 0;
shares_xxx = 0;
shares_yyy = 0;
val_xxx = 0;
val_yyy = 0;
buyprice_yyy = 0;

//----------------------------------- BUY, SELL, SHORT, COVER ---------------------------------
//SetOption( „PortfolioReportMode“, 1 );

//choose right ticker
if( Name() == "YYY" )
{
   //rebalance opened position
   if( trigger_pos_yyy == 1 )
   {
      val_yyy = shares_yyy * Open;
      diff = val_yyy - round( 0.3333333333 * all_portfolio ) ; //become diff between target position size and actual


      if( abs( diff ) > Open AND TimeNum() == 093000 AND DayOfWeek() == 1 )
      {
         // sell or buy yyy (depends on diff)
         if( diff > 0 )
         {
            Short = sigScaleOut;
            SetPositionSize( round( diff / Open ) , spsShares );
         }
         else
         {
            Short = sigScaleIn;
            SetPositionSize( round( diff / Open ) , spsShares );
         }
      }

   }
   //open first position
   else
   {
      SetPositionSize( round( 0.3333333333 * all_portfolio / Open ) , 4 ); //0.333 of portfolio value
      Short = TimeNum() >= 093000 AND TimeNum() < 160000 ;
      trigger_pos_yyy = 1;
      shares_yyy = round( 0.3333333333 * all_portfolio / Open );
      buyprice_yyy = Open;
   }
}

//choose right ticker
if( Name() == "XXX" )
{
   //rebalance opened position
   if( trigger_pos_xxx == 1 )
   {
      val_xxx = shares_xxx * Open;
      val_yyy = shares_yyy * Foreign("YYY", "Open");
      diff = val_xxx - val_yyy ; //become diff between target position size and actual


      // sell or buy yyy (depends on diff)
      if( abs( diff ) > Open AND TimeNum() == 093000 )
      {

         // sell or buy yyy (depends on diff)
         if( diff > 0 )
         {
            Short = sigScaleOut;
            SetPositionSize( round( diff / Open ) , spsShares );
         }
         else
         {
            Short = sigScaleIn;
            SetPositionSize( round( diff / Open ) , spsShares );
         }
      }

   }
   //open first position
   else
   {
      SetPositionSize( round( 0.6666666666 * all_portfolio / Open ) , 4 ); //0.666 of portfolio value
      Short = TimeNum() >= 093000 AND TimeNum() < 160000 ;
      trigger_pos_xxx = 1;
      shares_xxx = round( 0.6666666666 * all_portfolio / Open );
   }
}

Sell = Cover = Buy = 0;
BuyPrice = SellPrice = ShortPrice = CoverPrice = Open;


Последний раз редактировалось: MrDrJOKER (Вт Ноя 19, 2013 12:14 am), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Напиши просто по русски что именно хочешь. Больно муторно в чужом коде разбираться.

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



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

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

000 писал(а):
Напиши просто по русски что именно хочешь. Больно муторно в чужом коде разбираться.


смотри, есть две бумаги. нужно обе зашортить, а потом каждый день ребалансировать одну бумагу по второй(грубо говоря). т.е. чтоб позиции становились равной величины.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Вот так
Код:

SetTradeDelays(0,0,0,0);

val_xxx = 0;
val_yyy = 0;

Buy = DayOfWeek() < Ref(DayOfWeek(), -1);
Sell = DayOfWeek() == 4 AND Day() != Ref(Day(), -1);
Short = Cover = 0;

BuyPrice = SellPrice = ShortPrice = CoverPrice = Open;
SetPositionSize(10000, 1);

//----------------------------------- BUY, SELL, SHORT, COVER ---------------------------------
SetOption("UseCustomBacktestProc", True );

if ( Status("action") == actionPortfolio )
{
   bo = GetBacktesterObject();
   bo.PreProcess(); // Initialize backtester

   for( bar=0; bar < BarCount; bar++ )
   {
      bo.ProcessTradeSignals( bar );
      //CurEquity = bo.Equity;
      for( pos = bo.GetFirstOpenPos(); pos; pos = bo.GetNextOpenPos() ) // просматриваем все открытые позиции
      {

         if( pos.Symbol == "LKOH") // символ по которому делаем баланс
         {
            val_yyy = pos.GetPositionValue();  // запоминаем размер позиции
         }
      }
      for( pos = bo.GetFirstOpenPos(); pos; pos = bo.GetNextOpenPos() ) // просматриваем все открытые позиции второй раз
      {
         if( pos.Symbol == "SBER") // символ который балансируем
         {
            price = pos.GetPrice( bar, "O" );
            val_xxx = pos.GetPositionValue();
            bo.ScaleTrade( bar, pos.Symbol, 1, price, val_yyy - val_xxx);
         }
      }
   }
   bo.PostProcess(); // Finalize backtester
}

Чето он там пытается балансировать. Только не разобрался так или не так, но факт в том, что он меняет позицию по SBER иногда.

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


 Перейти:   



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


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

File Attachment © by Meik Sievertsen