Автор |
Сообщение |
mtrader
Зарегистрирован: 23.02.2014
Сообщения: 23
|
Все доброго вечера!
Возникла неопознанная проблема. У меня размер позиции при входе равен 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
|
Код у тебя не маленький поэтому разбираться лень.
Могу дать совет.
Сделай по другому.
Добавь массив Size и в цикле, когда определяешь сигналы присваивай ему соответственно значения Size[i] = 20; или Size[i] = 80;, а в конце поставишь один раз
SetPositionSize(Size, spsPercentOfEquity); |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
mtrader
Зарегистрирован: 23.02.2014
Сообщения: 23
|
000 писал(а): |
Код у тебя не маленький поэтому разбираться лень.
Могу дать совет.
Сделай по другому.
Добавь массив Size и в цикле, когда определяешь сигналы присваивай ему соответственно значения Size[i] = 20; или Size[i] = 80;, а в конце поставишь один раз
SetPositionSize(Size, spsPercentOfEquity); |
Такая простая мысль, а сам не догадался) Спасибо. Вечером попробую. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
mtrader
Зарегистрирован: 23.02.2014
Сообщения: 23
|
000 писал(а): |
Код у тебя не маленький поэтому разбираться лень.
Могу дать совет.
Сделай по другому.
Добавь массив Size и в цикле, когда определяешь сигналы присваивай ему соответственно значения Size[i] = 20; или Size[i] = 80;, а в конце поставишь один раз
SetPositionSize(Size, spsPercentOfEquity); |
Сделал. Но абсолютно тоже самое получается( |
|
|
Посмотреть профиль Отправить личное сообщение |
|
mtrader
Зарегистрирован: 23.02.2014
Сообщения: 23
|
почистил код. Олег, посмотри плз как будет время:
Код: |
////////////Начальные значения//////////////////////
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
|
В общем хрень какая то, посмотрел на разных исторических данных, делается как нужно, а в первоначально тестируемом промежутке - косячит. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Сделал так
Код: |
///////// Установки аккаунта ///////////
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
|
Опять таки так
Код: |
////////////Начальные значения//////////////////////
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
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|