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



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

СообщениеДобавлено: Ср Окт 29, 2014 8:46 pm Ответить с цитатой Вернуться к началу

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

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

Никак. А зачем?
Задавай сайз как процент от эквити и ты всегда будешь знать на сколько шагов хватит.

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



Зарегистрирован: 01.07.2008
Сообщения: 53
Откуда: Омск

СообщениеДобавлено: Пн Янв 05, 2015 11:24 am Ответить с цитатой Вернуться к началу

Вопрос связан с добавлением и сокращением позиции. Есть тиковый график, пробую протестировать следующий код
Код:

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

СообщениеДобавлено: Пн Янв 05, 2015 11:32 am Ответить с цитатой Вернуться к началу

Посмотрел не очень подробно. Понял так.
Есть сигнал Buy. Начинаем набирать позу. На первом тике кпили, надо добирать на следующем, а сигнала Buy там нет....
По моему следует при поступлении сигнала поставить ключ и дальше действовать от значения ключа. При полном наборе/закрытии позы ключ снимаем.

В этом проблема?

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



Зарегистрирован: 01.07.2008
Сообщения: 53
Откуда: Омск

СообщениеДобавлено: Пн Янв 05, 2015 11:46 am Ответить с цитатой Вернуться к началу

000 писал(а):
Посмотрел не очень подробно. Понял так.
Есть сигнал Buy. Начинаем набирать позу. На первом тике кпили, надо добирать на следующем, а сигнала Buy там нет....
По моему следует при поступлении сигнала поставить ключ и дальше действовать от значения ключа. При полном наборе/закрытии позы ключ снимаем.

В этом проблема?

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


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

СообщениеДобавлено: Пн Янв 05, 2015 11:58 am Ответить с цитатой Вернуться к началу

Я правильно понял проблему? И, если да, нормальное ли решение порекомендовал?

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



Зарегистрирован: 01.07.2008
Сообщения: 53
Откуда: Омск

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

000 писал(а):
Я правильно понял проблему? И, если да, нормальное ли решение порекомендовал?

С решением пока не все понятно.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

СообщениеДобавлено: Пн Янв 05, 2015 2:34 pm Ответить с цитатой Вернуться к началу

Ну типа
Код:
if (Buy[i] == 1  AND Pos[i] == 0)
  BuyKey = 1;

И дальше как было, только вместо Buy используй BuyKey до тех пор пока Pos[i] не станет равно quant. Как только станет
Код:
BuyKey = 0;

Точно так же и с остальными сигналами.

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



Зарегистрирован: 01.07.2008
Сообщения: 53
Откуда: Омск

СообщениеДобавлено: Пн Янв 05, 2015 8:16 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Ну типа
Код:
if (Buy[i] == 1  AND Pos[i] == 0)
  BuyKey = 1;

И дальше как было, только вместо Buy используй BuyKey до тех пор пока Pos[i] не станет равно quant. Как только станет
Код:
BuyKey = 0;

Точно так же и с остальными сигналами.

В общем никак, поставишь quant =10, будет с 10 считать, поменяешь на другое, будет тупо другое подставлять.
Посмотреть профиль Отправить личное сообщение
000
Site Admin


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

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

shaly писал(а):

В общем никак, поставишь quant =10, будет с 10 считать, поменяешь на другое, будет тупо другое подставлять.

Не понял...

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



Зарегистрирован: 01.07.2008
Сообщения: 53
Откуда: Омск

СообщениеДобавлено: Вт Янв 06, 2015 8:21 am Ответить с цитатой Вернуться к началу

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

В общем никак, поставишь quant =10, будет с 10 считать, поменяешь на другое, будет тупо другое подставлять.

Не понял...

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


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

СообщениеДобавлено: Вт Янв 06, 2015 9:34 am Ответить с цитатой Вернуться к началу

А, теперь понял.
Так тебе надо задавать объем сделки при помощи
SetPositionSize(qqq, 4)

В цикле определяй размер конкретной сделки/доливки и после цикла напиши типа
Код:
SetPositionSize(pos, 4);

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



Зарегистрирован: 01.07.2008
Сообщения: 53
Откуда: Омск

СообщениеДобавлено: Вт Янв 06, 2015 5:44 pm Ответить с цитатой Вернуться к началу

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

СообщениеДобавлено: Вт Янв 06, 2015 6:16 pm Ответить с цитатой Вернуться к началу

Сокращение позиции делается не так
Код:
Sell = sigScaleIn;

А так
Код:
Buy = sigScaleOut;

)))

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



Зарегистрирован: 01.07.2008
Сообщения: 53
Откуда: Омск

СообщениеДобавлено: Вт Янв 06, 2015 6:36 pm Ответить с цитатой Вернуться к началу

000 писал(а):
Сокращение позиции делается не так
Код:
Sell = sigScaleIn;

А так
Код:
Buy = sigScaleOut;

)))

Не помогло, либо ошибка - нет Sell, либо торговля по первому тику. Разгружать не получается. Просто во всех кодах на форуме при тестировании в крайнем столбце (Scale In/Out) вторая цифра после слеша всегда 0.
Посмотреть профиль Отправить личное сообщение
Показать сообщения:      
Начать новую тему  Ответить на тему


 Перейти:   



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


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

File Attachment © by Meik Sievertsen