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



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

СообщениеДобавлено: Вт Май 06, 2014 9:56 pm Ответить с цитатой Вернуться к началу

Все доброго вечера!
Возникла неопознанная проблема. У меня размер позиции при входе равен 20 %, при доливке добирается до полного капитала. Но почему то при шортах всё ОК, а при лонгах доливка происходит не 80% а на 20% только. Подскажите в чём может быть проблема?

Прошу прощения тсоздал тему не в том месте( Как переместить не нашёл, переместите плз.
Код:
Код:
///////// Установки аккаунта ///////////
SetOption ("MaxOpenPositions",15);
RoundLotSize = 1;
SetTradeDelays( 1, 1, 1, 1 );
BuyPrice=SellPrice=CoverPrice=ShortPrice=Open;
//SellPrice=CoverPrice=Close;
SetPositionSize(20,spsPercentOfEquity);

////////////Оптимизация//////////////////


per = Optimize( "Periods",120, 10,200,10 );
per2 = Optimize( "Periods2",120, 10,200, 10);

kl = 1; //Optimize ("Koef ATR",4,1,10,1);
perATR = 6;//Optimize ("ATR",6,1,20,1);
trailValue =3;// Optimize ("Trailstop",2,0,4,0.5);
rateOfSure= 0;//Optimize ("ROSure",0.0005,0,0.01,0.0005);
maxStopValue = 1;//Optimize ("maxStopValue ",1,0,2,0.5);
maxProfitValue = 1;// Optimize ("maxProfitValue ",10,0,200,10);
perEMA = 40;//Optimize ("perEMA",40,10,400,10);
perMACD1 = 12;//Optimize ("perMACD1",12,10,200,10);
perMACD2 = 26;//Optimize ("perMACD2",26,10,200,10);
sigMACD = MACD (perMACD1 ,perMACD2 );
DeltaEQ = 10;//Optimize ("deltaEQ",10,20,200,10);
//barsStop = Optimize ("barsStop",8,2,40,2);
 
////////////Прорисовка/////////////////////
Plot( LLV(C,per) , "Close", colorWhite ,styleLine);
Plot( HHV(C,per) , "Close", colorWhite ,styleLine);
Plot( LLV(C,per2) , "Close",colorOrange ,styleLine);
Plot( HHV(C,per2) , "Close",colorOrange   ,styleLine);
//Plot ( EMA(C,perEMA), "SMA", colorGreen,styleLine);

////////////Начальные значения//////////////////////
SetBarsRequired(sbrAll, sbrAll);
ValATR =  kl*ATR(perATR);
SellSignal = CoverSignal = BuySignal = ShortSignal = 0;

Buy = Sell = Short = Cover = 0;
pos = BuyInSignal = ShortInSignal = EqOutSignal = eqMax = TimeSignal = 0;
oto=0;

//////////////////Стопы и профиты/////////////////
//ApplyStop (stopTypeTrailing,stopModePercent,trailValue,2);
//ApplyStop (stopTypeLoss,stopModePercent,maxStopValue,2,False,barsStop);
//ApplyStop (stopTypeProfit,stopModePercent,maxProfitValue,2);


//////////////////Сигналы/////////////////////////
EMASig = EMA(C,perEMA);
TimeSignal = TimeNum() > 180000;
BuySignal =условие;
SellSignal = условие;

ShortSignal =условие;
CoverSignal = условие;

/////////////////Цикл//////////////////////
for (i=0; i<BarCount;i++) {
   
   eqMax[i] = e[i];
   if (i>=10) {
      eqMax[i] = e[i];
         for (k=0; k<10; k++) {
            if (e[i-k] > eqMax[i] ) {
               eqMax[i] = e[i-k];
            }
         }
   }
   if (pos==0) {
      if (BuySignal[i] == 1 ) {
         Buy[i] = 1;
         pos = 1;
         EntryPrice = C[i];
         continue;
      }
      if (ShortSignal[i] == 1) {
         Short[i] = 1;
         pos = -1;
         EntryPrice = C[i];
         continue;
      }
   }
   else if (pos == 1){
      //EqOutSignal[i] = eqMax[i] - e[i] >DeltaEQ;
      BuyInSignal[i] = H[i] >= EntryPrice+ValATR[i];
      if (SellSignal[i] > 0 ) {
         Sell[i] = 1;
         pos = 0;
         continue;
      }
      if (EqOutSignal[i] > 0) {
         Sell[i] = 1;
         pos = 0;
         continue;
      }
      else if (BuyInSignal[i] > 0) {
         Buy[i] = sigScaleIn;
      }
   }
   else if (pos == -1) {
      //EqOutSignal[i] = eqMax[i] - e[i] >DeltaEQ;
      ShortInSignal[i] = L[i] <= EntryPrice-ValATR[i];
      if (CoverSignal[i] > 0) {
         Cover[i] = 1;
         pos = 0;
         continue;
      }
      if (EqOutSignal[i] > 0) {
         Cover[i] = 1;
         pos = 0;
         continue;
      }
      else if (ShortInSignal[i] > 0) {
         Short[i] = sigScaleIn;
      }
   }
}
//BuySignal = ExRem(BuySignal, BuyInSignal);
//ShortSignal = ExRem(ShortSignal, ShortInSignal);

SetPositionSize(80,spsPercentOfEquity*(ShortInSignal==1));   
SetPositionSize(80,spsPercentOfEquity*(BuyInSignal==1));


Последний раз редактировалось: mtrader (Ср Май 07, 2014 10:09 pm), всего редактировалось 1 раз
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

Код у тебя не маленький поэтому разбираться лень.
Могу дать совет.
Сделай по другому.
Добавь массив Size и в цикле, когда определяешь сигналы присваивай ему соответственно значения Size[i] = 20; или Size[i] = 80;, а в конце поставишь один раз
SetPositionSize(Size, spsPercentOfEquity);

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



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

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

000 писал(а):
Код у тебя не маленький поэтому разбираться лень.
Могу дать совет.
Сделай по другому.
Добавь массив Size и в цикле, когда определяешь сигналы присваивай ему соответственно значения Size[i] = 20; или Size[i] = 80;, а в конце поставишь один раз
SetPositionSize(Size, spsPercentOfEquity);

Такая простая мысль, а сам не догадался) Спасибо. Вечером попробую.
Посмотреть профиль Отправить личное сообщение
mtrader



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

СообщениеДобавлено: Ср Май 07, 2014 9:33 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Код у тебя не маленький поэтому разбираться лень.
Могу дать совет.
Сделай по другому.
Добавь массив Size и в цикле, когда определяешь сигналы присваивай ему соответственно значения Size[i] = 20; или Size[i] = 80;, а в конце поставишь один раз
SetPositionSize(Size, spsPercentOfEquity);

Сделал. Но абсолютно тоже самое получается(
Посмотреть профиль Отправить личное сообщение
mtrader



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

СообщениеДобавлено: Ср Май 07, 2014 10:04 pm Ответить с цитатой Вернуться к началу

почистил код. Олег, посмотри плз как будет время:

Код:

////////////Начальные значения//////////////////////
SetBarsRequired(sbrAll, sbrAll);
ValATR =  kl*ATR(perATR);
SellSignal = CoverSignal = BuySignal = ShortSignal = 0;

Buy = Sell = Short = Cover = 0;
pos = BuyInSignal = ShortInSignal = EqOutSignal = eqMax = TimeSignal =0;
size= 20;


//////////////////Сигналы/////////////////////////
BuySignal = H >HHV(Ref (C,-1),per);
SellSignal =  L  <LLV(Ref (C,-1),per2);

ShortSignal = L < LLV(Ref (C,-1),per);
CoverSignal = H > HHV(Ref (C,-1),per2);

/////////////////Цикл//////////////////////
for (i=0; i<BarCount;i++) {
   
   if (pos==0) {
      if (BuySignal[i] == 1 ) {
         size[i]=20;
         Buy[i] = 1;
         pos = 1;
         EntryPrice = C[i];
         continue;
      }
      if (ShortSignal[i] == 1) {
         size[i]=20;
         Short[i] = 1;
         pos = -1;
         EntryPrice = C[i];
         continue;
      }
   }
   else if (pos == 1){
      BuyInSignal[i] = H[i] >= EntryPrice+ValATR[i];
      if (SellSignal[i] > 0 ) {
         Sell[i] = 1;
         pos = 0;
         continue;
      }
      if (BuyInSignal[i] > 0) {
         size[i] = 80;
         Buy[i] = sigScaleIn;

      }
   }
   else if (pos == -1) {
      ShortInSignal[i] = L[i] <= EntryPrice-ValATR[i];
      if (CoverSignal[i] > 0) {
         Cover[i] = 1;
         pos = 0;
         continue;
      }
      else if (ShortInSignal[i] > 0) {
         size[i] = 80;
         Short[i] = sigScaleIn;
         
      }
   }
}


SetPositionSize(size,spsPercentOfEquity);
Посмотреть профиль Отправить личное сообщение
mtrader



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

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

В общем хрень какая то, посмотрел на разных исторических данных, делается как нужно, а в первоначально тестируемом промежутке - косячит.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Ср Май 07, 2014 10:47 pm Ответить с цитатой Вернуться к началу

Сделал так
Код:

///////// Установки аккаунта ///////////
SetOption ("MaxOpenPositions",15);
RoundLotSize = 1;
SetTradeDelays( 1, 1, 1, 1 );
BuyPrice=SellPrice=CoverPrice=ShortPrice=Open;
//SellPrice=CoverPrice=Close;
//SetPositionSize(20,spsPercentOfEquity);

////////////Оптимизация//////////////////
//GAZP 60% (20,20,1,6,3,0)  5% в месяц /- все расчёты с учетом комиссий

per = Optimize( "Periods",20, 10,200,10 );
per2 = Optimize( "Periods2",20, 10,200, 10);

kl = 1; //Optimize ("Koef ATR",4,1,10,1);
perATR = 6;//Optimize ("ATR",6,1,20,1);
trailValue =3;// Optimize ("Trailstop",2,0,4,0.5);
rateOfSure= 0;//Optimize ("ROSure",0.0005,0,0.01,0.0005);
maxStopValue = 1;//Optimize ("maxStopValue ",1,0,2,0.5);
maxProfitValue = 1;// Optimize ("maxProfitValue ",10,0,200,10);
perEMA = 40;//Optimize ("perEMA",40,10,400,10);
perMACD1 = 12;//Optimize ("perMACD1",12,10,200,10);
perMACD2 = 26;//Optimize ("perMACD2",26,10,200,10);
sigMACD = MACD (perMACD1 ,perMACD2 );
DeltaEQ = 10;//Optimize ("deltaEQ",10,20,200,10);
//barsStop = Optimize ("barsStop",8,2,40,2);
 
////////////Прорисовка/////////////////////
Plot( LLV(C,per) , "Close", colorWhite ,styleLine);
Plot( HHV(C,per) , "Close", colorWhite ,styleLine);
Plot( LLV(C,per2) , "Close",colorOrange ,styleLine);
Plot( HHV(C,per2) , "Close",colorOrange   ,styleLine);
//Plot ( EMA(C,perEMA), "SMA", colorGreen,styleLine);

////////////Начальные значения//////////////////////
SetBarsRequired(sbrAll, sbrAll);
ValATR =  kl*ATR(perATR);
SellSignal = CoverSignal = BuySignal = ShortSignal = 0;

Buy = Sell = Short = Cover = 0;
pos = BuyInSignal = ShortInSignal = EqOutSignal = eqMax = TimeSignal = 0;
oto=0;

//////////////////Стопы и профиты/////////////////
//ApplyStop (stopTypeTrailing,stopModePercent,trailValue,2);
//ApplyStop (stopTypeLoss,stopModePercent,maxStopValue,2,False,barsStop);
//ApplyStop (stopTypeProfit,stopModePercent,maxProfitValue,2);


//////////////////Сигналы/////////////////////////
EMASig = EMA(C,perEMA);
TimeSignal = TimeNum() > 180000;
BuySignal = TimeNum() == 104459; //условие;
SellSignal = TimeNum() > 181459; //условие;

ShortSignal = 0; //условие;
CoverSignal = 0; //условие;

/////////////////Цикл//////////////////////
for (i=0; i<BarCount;i++) {
   if (pos==0) {
      if (BuySignal[i] == 1 ) {
         Buy[i] = 1;
         pos = 1;
         EntryPrice = C[i];
         continue;
      }
      if (ShortSignal[i] == 1) {
         Short[i] = 1;
         pos = -1;
         EntryPrice = C[i];
         continue;
      }
   }
   else if (pos == 1){
      //EqOutSignal[i] = eqMax[i] - e[i] >DeltaEQ;
      BuyInSignal[i] = H[i] >= EntryPrice+ValATR[i];
      if (SellSignal[i] > 0 ) {
         Sell[i] = 1;
         pos = 0;
         continue;
      }
      if (EqOutSignal[i] > 0) {
         Sell[i] = 1;
         pos = 0;
         continue;
      }
      else if (BuyInSignal[i] > 0) {
         Buy[i] = sigScaleIn;
      }
   }
   else if (pos == -1) {
      //EqOutSignal[i] = eqMax[i] - e[i] >DeltaEQ;
      ShortInSignal[i] = L[i] <= EntryPrice-ValATR[i];
      if (CoverSignal[i] > 0) {
         Cover[i] = 1;
         pos = 0;
         continue;
      }
      if (EqOutSignal[i] > 0) {
         Cover[i] = 1;
         pos = 0;
         continue;
      }
      else if (ShortInSignal[i] > 0) {
         Short[i] = sigScaleIn;
      }
   }
}
SetPositionSize( IIf(Buy == sigScaleIn OR Short == sigScaleIn, 80, 20), spsPercentOfEquity);

Все работает.

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


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

СообщениеДобавлено: Ср Май 07, 2014 10:56 pm Ответить с цитатой Вернуться к началу

Опять таки так
Код:

////////////Начальные значения//////////////////////
SetBarsRequired(sbrAll, sbrAll);
ValATR =  1*ATR(10);
SellSignal = CoverSignal = BuySignal = ShortSignal = 0;

Buy = Sell = Short = Cover = 0;
pos = BuyInSignal = ShortInSignal = EqOutSignal = eqMax = TimeSignal =0;


//////////////////Сигналы/////////////////////////
BuySignal = H > HHV(Ref (C,-1),10);
SellSignal =  L  <LLV(Ref (C,-1),20);

ShortSignal = L < LLV(Ref (C,-1),10);
CoverSignal = H > HHV(Ref (C,-1),20);

/////////////////Цикл//////////////////////
for (i=0; i<BarCount;i++) {
   
   if (pos==0) {
      if (BuySignal[i] == 1 ) {
         Buy[i] = 1;
         pos = 1;
         EntryPrice = C[i];
         continue;
      }
      if (ShortSignal[i] == 1) {
         Short[i] = 1;
         pos = -1;
         EntryPrice = C[i];
         continue;
      }
   }
   else if (pos == 1){
      BuyInSignal[i] = H[i] >= EntryPrice+ValATR[i];
      if (SellSignal[i] > 0 ) {
         Sell[i] = 1;
         pos = 0;
         continue;
      }
      if (BuyInSignal[i] > 0) {
         Buy[i] = sigScaleIn;
      }
   }
   else if (pos == -1) {
      ShortInSignal[i] = L[i] <= EntryPrice-ValATR[i];
      if (CoverSignal[i] > 0) {
         Cover[i] = 1;
         pos = 0;
         continue;
      }
      else if (ShortInSignal[i] > 0) {
         Short[i] = sigScaleIn;
      }
   }
}

SetPositionSize( IIf(Buy == sigScaleIn OR Short == sigScaleIn, 80, 20), spsPercentOfEquity);

работает.

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



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

СообщениеДобавлено: Чт Май 08, 2014 7:32 am Ответить с цитатой Вернуться к началу

Спасибо!
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen