Автор |
Сообщение |
Евгений
Зарегистрирован: 13.12.2010
Сообщения: 45
|
Здравствуйте. Подскажите. Запоминаю цену входа :
BP = ValueWhen(Buy, BuyPrice);//цена входа в лонг
В течение этого дня цена входа помнится, а при переносе позиции на другой день уже нет.....Подскажите как исправить? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В данном случае цена будет помнится не день, а до следующего сигнала Buy.
Любой следующий сигнал на покупку собьет эту память, даже если в тестере не используется т.к. позу уже открыта.
Та много разных вариантов. Напиши зачем запоминаешь цену и что дальше с ней будешь делать. В зависимости от этого подскажу как поступить. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Евгений
Зарегистрирован: 13.12.2010
Сообщения: 45
|
При переносе позиции через ночь я в конце дня учитываю возможный Гэп утром против моей позиции. Для этого в конце дня (например в 23-40) беру текущую цену, прибавляю возможный Гэп (например 2%) и проверяю условие: чтобы возможный Гэп не выходил за пределы моей цены входа. Если выходит, то закрываю позицию. Вот для этого и нужна цена входа. (Если можно запомнить уровень стопа при входе в позицию, то я бы мог использовать и его для расчета Гэпа)/
P.S.
Еще хотелось бы помнить цену входа для расчета выхода из позиции по некоторой цели. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
В таком случае лучше и проще использовать функцию ApplyStop() |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Евгений
Зарегистрирован: 13.12.2010
Сообщения: 45
|
К сожалению не знаю как это сделать. Функцию ApplyStop() я использую для выставления стопа, а как запомнить уровень этого стопа и использовать его в моих расчетах? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Опиши подробно что именно надо сделать. Не хочешь тут пиши в личку. |
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
Евгений
Зарегистрирован: 13.12.2010
Сообщения: 45
|
Да почему не хочу?.....Просто вроде все написал. Нужно запомнить или цену входа или хотя бы уровень стопа. Вы ответили, что лучше через ApplyStop. У меня в коде прописано
ApplyStop (stopTypeLoss,stopModePoint,Stop,ExitAtStop = 1)
Stop - это размер стопа, а как мне для расчетов получить уровень стопа? |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Евгений
Зарегистрирован: 13.12.2010
Сообщения: 45
|
Неужели никто не знает ответа на мой вопрос? Отзовитесь, пожалуйста! |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Mechanic
Зарегистрирован: 10.06.2008
Сообщения: 359
|
Да непонятно, что вам нужно. Вот вы в момент покупки запомнили цену входа:
BP = ValueWhen(Buy, BuyPrice);
Она не изменится до следующего сигнала Buy. Проверяйте на здоровье эту позицию в конце дня на возможный гэп, цена входа у вас для этого есть. В чём именно проблема-то? |
|
|
Посмотреть профиль Отправить личное сообщение ICQ Number |
|
Евгений
Зарегистрирован: 13.12.2010
Сообщения: 45
|
Позиция держится несколько дней. В день входа я могу запомнить цену входа и проверить условие на гэп, допустим оно меня устраивает и я переношу позицию на следующий день. Но в конце следующего дня мне опять нужно проверить это условие, а если были сигналы на вход, то цена входа настоящая обнуляется. Вот в этом и есть проблема. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
yser
Зарегистрирован: 30.11.2011
Сообщения: 76
|
Евгений писал(а): |
Позиция держится несколько дней. В день входа я могу запомнить цену входа и проверить условие на гэп, допустим оно меня устраивает и я переношу позицию на следующий день. Но в конце следующего дня мне опять нужно проверить это условие, а если были сигналы на вход, то цена входа настоящая обнуляется. Вот в этом и есть проблема. |
тут нужно:
1. отфильтровать ненужные сигналы покупок
2. если был сигнал на закрытие от доп. проверок (например геп), нужно повторить расчет сигналов buy/sell
вот накидал пример как сделал бы сам:
Код: |
buy2 = O<C AND Ref(O<C,-1) AND Ref(O<C,-2); //все сигналы открытия
sel2a = O>C AND Ref(O>C,-1) AND Ref(O>C,-2) AND Ref(O>C,-3); //основные сигналы закрытия
sel2b = 0; //сигналы закрытия от доп.условий (например геп)
for(i=1;i<=3;i++) {
sel2 = sel2a OR sel2b; //все сигналы закрытия
buy2cnt = BarsSince(buy2); //кол-во баров между покупками
sel2cnt = BarsSince(sel2); //кол-во баров между продажами
Buy = IIf(Ref(sel2cnt < buy2cnt, -1), buy2, 0); // если предыдущий сигнал был продажей, то разрешаем покупку
Sell = IIf(Ref(buy2cnt < sel2cnt, -1), sel2, 0); // если предыдущий сигнал был покупкой, то разрешаем продажу
BP = ValueWhen(Buy, BuyPrice);
// тут необходимые проверки (запишеш свою проверку на геп) и если нужно закрыть позиции, то записываем
// в sel2b, а после нужно повторить все вычисления buy/sell заного (думаю трех повторений достаточно)
sel2b = (TimeNum() > 234000) AND (BP > (C - C*0.5/100));
}
PlotShapes(Buy * shapeSmallUpTriangle, colorGreen, 0, H);
PlotShapes(Sell * shapeSmallDownTriangle, colorRed, 0, L);
PlotShapes(buy2 * shapeSmallCircle, colorGreen, 0, H, -20);
PlotShapes(sel2 * shapeSmallCircle, colorRed, 0, L, 20);
Plot( C, "Close", ParamColor("Color", colorDefault ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
Евгений
Зарегистрирован: 13.12.2010
Сообщения: 45
|
Спасибо огромное, поразбираюсь. |
|
|
Посмотреть профиль Отправить личное сообщение |
|
Евгений
Зарегистрирован: 13.12.2010
Сообщения: 45
|
yser писал(а): |
Евгений писал(а): |
Позиция держится несколько дней. В день входа я могу запомнить цену входа и проверить условие на гэп, допустим оно меня устраивает и я переношу позицию на следующий день. Но в конце следующего дня мне опять нужно проверить это условие, а если были сигналы на вход, то цена входа настоящая обнуляется. Вот в этом и есть проблема. |
тут нужно:
1. отфильтровать ненужные сигналы покупок
2. если был сигнал на закрытие от доп. проверок (например геп), нужно повторить расчет сигналов buy/sell
вот накидал пример как сделал бы сам:
Код: |
buy2 = O<C AND Ref(O<C,-1) AND Ref(O<C,-2); //все сигналы открытия
sel2a = O>C AND Ref(O>C,-1) AND Ref(O>C,-2) AND Ref(O>C,-3); //основные сигналы закрытия
sel2b = 0; //сигналы закрытия от доп.условий (например геп)
for(i=1;i<=3;i++) {
sel2 = sel2a OR sel2b; //все сигналы закрытия
buy2cnt = BarsSince(buy2); //кол-во баров между покупками
sel2cnt = BarsSince(sel2); //кол-во баров между продажами
Buy = IIf(Ref(sel2cnt < buy2cnt, -1), buy2, 0); // если предыдущий сигнал был продажей, то разрешаем покупку
Sell = IIf(Ref(buy2cnt < sel2cnt, -1), sel2, 0); // если предыдущий сигнал был покупкой, то разрешаем продажу
BP = ValueWhen(Buy, BuyPrice);
// тут необходимые проверки (запишеш свою проверку на геп) и если нужно закрыть позиции, то записываем
// в sel2b, а после нужно повторить все вычисления buy/sell заного (думаю трех повторений достаточно)
sel2b = (TimeNum() > 234000) AND (BP > (C - C*0.5/100));
}
PlotShapes(Buy * shapeSmallUpTriangle, colorGreen, 0, H);
PlotShapes(Sell * shapeSmallDownTriangle, colorRed, 0, L);
PlotShapes(buy2 * shapeSmallCircle, colorGreen, 0, H, -20);
PlotShapes(sel2 * shapeSmallCircle, colorRed, 0, L, 20);
Plot( C, "Close", ParamColor("Color", colorDefault ), styleNoTitle | ParamStyle("Style") | GetPriceStyle() );
|
|
1. Не понятно почему есть только Bay и Sell, а где Short и Cover ? (по аналогии надо дописать самому наверное....)
2. Перестали вообще открываться длинные позиции. Я с циклами не дружу, может я не туда его вставляю......
Код: |
Ks =5;//кол-во сделок в день
Kgap=0.02;//коэффициент гэпа
Cond101=DayOfYear() ==365;// день года выхода
Stop=****;//размер стопа
ApplyStop (stopTypeLoss,stopModePoint,Stop,ExitAtStop = 1);//стоп-лосс
Size = 1; //max количество контрактов
SetPositionSize( Size, spsShares );// объем открываемой позиции
Cond1 = Cross(C,VL);// условия покупки
BuySignal = Cond1 ;
BuyPrice = Close;
SellSignal = Cond101;
Sell = SellSignal;
SellPrice = Close;
Cond11 = Cross(VS,C);// условия продажи
ShortSignal = Cond11 ;
ShortPrice = Close;
CoverSignal = Cond101;
Cover = CoverSignal;
CoverPrice = Close+skolz;
Buy = BuySignal;
Short = ShortSignal;
Equity(1);
Buy = BuySignal AND Sum(Buy ,BarsSince( BeginDay )) <= Ks;//ограничение по кол-ву сделок в день;
Short = ShortSignal AND Sum(Short ,BarsSince( BeginDay )) <= Ks;//ограничение по кол-ву сделок в день
buy2 = Cross(C,VL) AND InDay; //все сигналы открытия
sel2a = Cond101; //основные сигналы закрытия
sel2b = 0; //сигналы закрытия от доп.условий (например геп)
for(i=1;i<=3;i++) {
sel2 = sel2a OR sel2b; //все сигналы закрытия
buy2cnt = BarsSince(buy2); //кол-во баров между покупками
sel2cnt = BarsSince(sel2); //кол-во баров между продажами
Buy = IIf(Ref(sel2cnt < buy2cnt, -1), buy2, 0); // если предыдущий сигнал был продажей, то разрешаем покупку
Sell = IIf(Ref(buy2cnt < sel2cnt, -1), sel2, 0); // если предыдущий сигнал был покупкой, то разрешаем продажу
BP = ValueWhen(Buy, BuyPrice);
// тут необходимые проверки (запишеш свою проверку на геп) и если нужно закрыть позиции, то записываем
// в sel2b, а после нужно повторить все вычисления buy/sell заного (думаю трех повторений достаточно)
sel2b = (TimeNum() >= 234000) AND (C < (BP + BP*Kgap));
}
|
|
|
|
Посмотреть профиль Отправить личное сообщение |
|
000
Site Admin
Зарегистрирован: 10.12.2007
Сообщения: 9106
|
Код: |
Kgap = 0.02; //коэффициент гэпа
GapTime = 234000; // тут поставить время проверки на гэп
time = TimeNum();
skolz = ****;
Stop = ****;//размер стопа
Size = 1; //max количество контрактов
SetPositionSize( Size, spsShares );// объем открываемой позиции
VL = ****;
VS = ****;
BuySignal = Cross(C, VL);// условия покупки
ShortSignal = Cross(VS,C);// условия продажи
BuyPrice = Close;
ShortPrice = Close;
SellPrice = Close; // а где skolz?
CoverPrice = Close + skolz;
pos = 0;
OpenPrice = C[0];
for( i = 1; i < BarCount; i++ )
{
if(pos == 0)
{
if(BuySignal[i])
{
Buy[i] = 1;
OpenPrice = BuyPrice[i];
pos = 1;
}
else if(ShortSignal[i])
{
Short[i] = 1;
OpenPrice = ShortPrice[i];
pos = -1;
}
}
else if(pos == 1)
{
if(L[i] < OpenPrice - Stop) // стоп
{
Sell[i] = 1;
SellPrice[i] = OpenPrice - Stop;
pos = 0;
}
else if(GapTime == time[i])// время проверки на гэп
{
if(C[i]*(1-Kgap) < OpenPrice) // проверка на гэп
{
Sell[i] = 1;
pos = 0; // SellPrice не задаем т.к. задана до цикла
}
}
}
else if(pos == -1)
{
if(H[i] > OpenPrice + Stop) // стоп
{
Cover[i] = 1;
CoverPrice[i] = OpenPrice + Stop;
pos = 0;
}
else if(GapTime == time[i])// время проверки на гэп
{
if(C[i]*(1+Kgap) > OpenPrice) // проверка на гэп
{
Cover[i] = 1;
pos = 0; // CoverPrice не задаем т.к. задана до цикла
}
}
}
}
|
|
_________________ ceterum censeo carthaginem esse delendam
Удачи. Олег. |
|
Посмотреть профиль Отправить личное сообщение Посетить сайт автора |
|
GREEN_X5
Зарегистрирован: 13.04.2012
Сообщения: 136
|
Олег, выручай , мозг врывается, ввинтил простенький трэйлинг, но он как и положено в моем случае - дает сбой при некоторых рыночных условиях.
Подправь пожалуйста, нужен нормальный трэйлингстоп вместо моего LLV(spr,BarsSince(DwSigOk))
Код: |
// ==============Сигналы=============
// - короткие позиции
DwSigOk = mom < 0 AND Rspr>Ruplvl; // условие шорт
CloseDwOk = spr>Rspr AND spr>LLV(spr,BarsSince(DwSigOk)); // Стоп по TrailStop на развороте
// - длинные позиции----------------------------------------------
UpSigOk = mom > 0 AND Rspr<Rdwlvl; // условие лонг
CloseUpOk = spr<Rspr AND spr<HHV(spr,BarsSince(UpSigOk)); // Стоп по TrailStop на развороте
// - вход---------------------------------------------------------
DwSig = DwSigOk; // вход в шорт
CloseDw = CloseDwOk OR UpSigOk; // выход реверсом или TrailStop
UpSig = UpSigOk; // вход в лонг
CloseUp = CloseUpOk OR DwSigOk; // выход реверсом или TrailStop
//--удаляем лишние сигналы
UpSig = ExRem(UpSig, CloseUp);
CloseUp = ExRem(CloseUp, UpSig);
DwSig = ExRem(DwSig, CloseDw);
CloseDw = ExRem(CloseDw, DwSig);
|
Спасибо! |
|
|
Посмотреть профиль Отправить личное сообщение |
|
|
|
Следующая тема
Предыдущая тема
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах Вы не можете вкладывать файлы Вы не можете скачивать файлы
|
|