Автор |
Сообщение |
nemoy
Зарегистрирован: 05.10.2014
Сообщения: 29
|
000 писал(а): |
Ну можно например поставить счетчик доливок и после нескольких доливок прекращать доливать. Однако если цена пойдет против позы дальше, то убытки будут.....
А может так случиться, что цена никогда больше не вернется на прежние уровни и никогда не сократит позицию.... |
я в этом направлении и копаю. задал число ступеней доливок через эквити деленное на стоимость сайза
stoimost_size=size*C[i];
max_kolich_step=floor(equity/stoimost_size);
kolich_sdelanyh_step=kolich_sdelanyh_step+1;
а как засунуть в цикл equity? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Никак. А зачем?
Задавай сайз как процент от эквити и ты всегда будешь знать на сколько шагов хватит. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
shaly
Зарегистрирован: 01.07.2008
Сообщения: 53
Откуда: Омск
|
Вопрос связан с добавлением и сокращением позиции. Есть тиковый график, пробую протестировать следующий код
Код: |
quant = 10;
SetPositionSize(quant, 4);
SetTradeDelays(0, 0, 0, 0);
Buy = C == HHV(C, 300);
Sell = C == LLV(C, 100);
Short = C == LLV(C, 300);
Cover = C == HHV(C, 100);
//Buy = ExRem(Buy, Sell);
//Sell = ExRem(Sell, Buy);
//Short = ExRem(Short, Cover);
//Cover = ExRem(Cover, Short);
Pos[0] = 0;
for (i = 1; i < BarCount; i++)
{
if (Buy[i] == 1 AND Pos[i] == 0 AND Volume[i] < quant)
{
Pos[i] = Volume[i];
}
else if (Buy[i] == 1 AND Pos[i] < quant )
{
Pos[i] = Pos[i-1] + Volume[i];
Buy[i] = sigScaleIn;
}
else if (Sell[i] == 1 AND Pos[i] != 0 AND Volume[i] < quant)
{
Pos[i] = Pos[i-1] - Volume[i];
Buy[i] = sigScaleOut;
}
else if (Short[i] == 1 AND Pos[i] == 0 AND Volume[i] < quant)
{
Pos[i] = Volume[i];
}
else if (Short[i] == 1 AND Pos[i] < quant AND Volume[i] < quant)
{
Pos[i] = Pos[i-1] + Volume[i];
Short[i] = sigScaleIn;
}
else if (Cover[i] == 1 AND Pos[i] != 0 AND Volume[i] < quant)
{
Pos[i] = Pos[i-1] - Volume[i];
Short[i] = sigScaleOut;
}
else
Pos[i] = Pos[i-1];
}
Plot(C, "Close", colorBlack, styleCandle);
Plot(Volume, "Volume", colorWhite, styleHistogram | styleOwnScale);
PlotShapes(Buy*shapeUpArrow, colorGreen, 0, C);
PlotShapes(Sell*shapeDownTriangle, colorRed, 0, C);
PlotShapes(Short*shapeDownArrow, colorRed, 0, C);
PlotShapes(Cover*shapeUpTriangle, colorGreen, 0, C);
|
Смысл в следующем, quant - это размер позиции, который необходимо набрать при появлении сигнала, но так как на одном тике не всегда бывает нужный объем, то приходится добирать на последующих тиках. При закрытии позиции приходится сокращать ее частями, по той же самой причине. Но в данном коде не удается это реализовать, все делается по цене первого тика с сигналом и умножаетсяна объем, что исправить или добавить? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Посмотрел не очень подробно. Понял так.
Есть сигнал Buy. Начинаем набирать позу. На первом тике кпили, надо добирать на следующем, а сигнала Buy там нет....
По моему следует при поступлении сигнала поставить ключ и дальше действовать от значения ключа. При полном наборе/закрытии позы ключ снимаем.
В этом проблема? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
shaly
Зарегистрирован: 01.07.2008
Сообщения: 53
Откуда: Омск
|
000 писал(а): |
Посмотрел не очень подробно. Понял так.
Есть сигнал Buy. Начинаем набирать позу. На первом тике кпили, надо добирать на следующем, а сигнала Buy там нет....
По моему следует при поступлении сигнала поставить ключ и дальше действовать от значения ключа. При полном наборе/закрытии позы ключ снимаем.
В этом проблема? |
На следующем баре, где есть сигнал - так точнее. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Я правильно понял проблему? И, если да, нормальное ли решение порекомендовал? |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
shaly
Зарегистрирован: 01.07.2008
Сообщения: 53
Откуда: Омск
|
000 писал(а): |
Я правильно понял проблему? И, если да, нормальное ли решение порекомендовал? |
С решением пока не все понятно. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Ну типа
Код: |
if (Buy[i] == 1 AND Pos[i] == 0)
BuyKey = 1; |
И дальше как было, только вместо Buy используй BuyKey до тех пор пока Pos[i] не станет равно quant. Как только станет
Точно так же и с остальными сигналами. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
shaly
Зарегистрирован: 01.07.2008
Сообщения: 53
Откуда: Омск
|
000 писал(а): |
Ну типа
Код: |
if (Buy[i] == 1 AND Pos[i] == 0)
BuyKey = 1; |
И дальше как было, только вместо Buy используй BuyKey до тех пор пока Pos[i] не станет равно quant. Как только станет
Точно так же и с остальными сигналами. |
В общем никак, поставишь quant =10, будет с 10 считать, поменяешь на другое, будет тупо другое подставлять. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
shaly писал(а): |
В общем никак, поставишь quant =10, будет с 10 считать, поменяешь на другое, будет тупо другое подставлять. |
Не понял... |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
shaly
Зарегистрирован: 01.07.2008
Сообщения: 53
Откуда: Омск
|
000 писал(а): |
shaly писал(а): |
В общем никак, поставишь quant =10, будет с 10 считать, поменяешь на другое, будет тупо другое подставлять. |
Не понял... |
То есть подразумевается безграничная ликвидность, надо тебе объем 1000 контрактов, она посчитает сделку с 1000 контрактами, хотя в данных сделка была с одним контрактом. То есть пока не удается посчитать результат в зависимости от реальных объемов. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
А, теперь понял.
Так тебе надо задавать объем сделки при помощи
SetPositionSize(qqq, 4)
В цикле определяй размер конкретной сделки/доливки и после цикла напиши типа
Код: |
SetPositionSize(pos, 4); |
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
shaly
Зарегистрирован: 01.07.2008
Сообщения: 53
Откуда: Омск
|
000 писал(а): |
А, теперь понял.
Так тебе надо задавать объем сделки при помощи
SetPositionSize(qqq, 4)
В цикле определяй размер конкретной сделки/доливки и после цикла напиши типа
Код: |
SetPositionSize(pos, 4); |
|
В этом коде:
Код: |
quant = 18;
SetTradeDelays(0, 0, 0, 0);
Buy1 = C == HHV(C, 300) AND TimeNum() > 100001;
Sell1 = IIf(C == LLV(C, 100)AND TimeNum() > 100001,1,0);
Short1 = C == LLV(C, 300) AND TimeNum() > 100001;
Cover1 = IIf(C == HHV(C, 100) AND TimeNum() > 100001,1,0);
Tr = Flip(Buy1, Sell1);
Tr[0] = 0;
Pos[0] = 0;
Ras[0] = 0;
Buy1[0] = 0;
//Short1[0] = 0;
Sell1[0] = 0;
//Cover1[0] = 0;
for (i = 1; i < BarCount; i++)
{
if (Buy1[i] == 1 AND Tr[i-1] == 0) {
Pos[i] = Volume[i];
}
else if (Buy1[i] == 1 AND Tr[i] == 1 ){
Pos[i] = Pos[i-1] + Volume[i];
}
else if (Sell1[i] == 1 AND Tr[i-1] == 1){
Ras[i] = Volume[i];
}
else if (Sell1[i] == 1 AND Tr[i] == 0){
Ras[i] = Ras[i-1] + Volume[i];
}
else
{
Pos[i] = Pos[i-1];
Ras[i] = Ras[i-1];
}
}
Buy = IIf(Buy1 AND Pos <= quant, sigScaleIn,0);
Sell = IIf (Sell1 AND Ref(Ras,-1) < quant, sigScaleIn,0);
qqq = IIf(quant > Pos, Volume, quant - Pos);
rrr = IIf(quant > Ras, Volume, quant - Ras);
SetPositionSize(qqq,4);
SetPositionSize(rrr, 4);
Plot(C, "Close", colorBlack, styleCandle);
Plot(V, "Volume", colorWhite, styleHistogram | styleOwnScale);
PlotShapes(Buy*shapeUpArrow, colorGreen, 0, C);
PlotShapes(Sell*shapeDownTriangle, colorRed, 0, C);
//PlotShapes(Short*shapeDownArrow, colorRed, 0, C);
//PlotShapes(Cover*shapeUpTriangle, colorGreen, 0, C);
|
удалось добавлять объем до нужного лимита на нескольких тиках после первого сигнала, а вот разгрузка позиции идет одним залпом, по цене первого тика, что добавить, чтобы разгружалась по мере появления объемов на последующих барах? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Сокращение позиции делается не так
А так
))) |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
shaly
Зарегистрирован: 01.07.2008
Сообщения: 53
Откуда: Омск
|
000 писал(а): |
Сокращение позиции делается не так
А так
))) |
Не помогло, либо ошибка - нет Sell, либо торговля по первому тику. Разгружать не получается. Просто во всех кодах на форуме при тестировании в крайнем столбце (Scale In/Out) вторая цифра после слеша всегда 0. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|