#72020 - Sun Aug 02 2015 06:03 PM
Одновременное исполнение в шорт и лонг
|
stranger
Registered: Thu Jun 25 2015
Записи: 24
|
Делаю так: ...тра та та
else //если позиции нет:
{
symbol.Positions.BuyIfGreater(bar + 1, 1, orderEntry_1, "Открытие Лонг");
symbol.Positions.SellIfLess(bar + 1, 1, orderEntry_2, "Открытие Шорт");
} т.е. выставляю лимтные заявки на баре i+1 в шорт и лонг. Возникли сомнения. Можно ли так писать? Не получиться ли так, что одновременно сработаю обе заявки на баре i+1?
Отредактировано Alias (Sun Aug 02 2015 06:08 PM)
|
Наверх
|
|
|
|
#72022 - Sun Aug 02 2015 07:12 PM
Re: Одновременное исполнение в шорт и лонг
[Re: Alias]
|
Carpal Tunnel
Registered: Thu Sep 27 2012
Записи: 2860
|
могут и обе если свеча захватит обе цены.
_________________________
__
|
Наверх
|
|
|
|
#72028 - Sun Aug 02 2015 10:45 PM
Re: Одновременное исполнение в шорт и лонг
[Re: ra81]
|
stranger
Registered: Thu Jun 25 2015
Записи: 24
|
А как сделать так, чтобы если BuyIfGreater сработал, то SellIfLess уже бы не отрабатывал? В велслабе, например, используется такая конструкция: if (BuyAtStop(bar + 1, orderEntry_1) == null)
{
ShortAtStop(bar + 1, orderEntry_2);
} А в ТС лабе как?
Отредактировано Alias (Sun Aug 02 2015 10:51 PM)
|
Наверх
|
|
|
|
#72031 - Sun Aug 02 2015 11:43 PM
Re: Одновременное исполнение в шорт и лонг
[Re: Alias]
|
member
Registered: Thu Oct 16 2014
Записи: 101
|
В таком случае нужно применить компрессию, что бы пересчет произошем например через минуту, в таком случае алгоритм увидит одну открытую позицию и следовательно новую открывать не будет (если конечно в алгоритме написано такое условие) В любом случае новый пересчет произойдет только с новой свечей. Например так:
#region Сброс параметров
signalLong = false; // изначально нет длинной позиции
signalShort = false; // изначально нет короткой позиции
#endregion
#region Сигналы на вход в позицию
if (LongPos == null // Нет длинной позиции
&& ShortPos == null // Нет короткой позиции
&& Остальныу есловия входа)
{
signalLong = true; // Если все условия выше выполнениы подается сигнал на открытие длинной позиции
}
if (LongPos == null // Нет длинной позиции
&& ShortPos == null // Нет короткой позиции
&& Остальные условия входа )
{
signalShort = true; // Если все условия выше выполнениы подается сигнал на открытие короткой позиции
}
#endregion
// Исполнение сигналов
#region Выполнение сигналов для длинной позиции
LongPos = source.Positions.GetLastActiveForSignal("OpenLong",bar); // Условие идентификации длинной позиции
if (LongPos == null) // Если нет активной длинной позиции
{
if (signalLong) // Если есть сигнал Buy,
{
source.Positions.BuyIfGreater (bar+1,Lot,точка входа, "OpenLong"); // Выдаем ордер на открыте новой длинной позиции
}
}
else
{
LongPos.CloseAtStop(bar+1,точка выхода,"Stop_Long" ); // Если есть открвтая длинная позици пробуем выйти по стоп лос ордеру
}
#endregion
#region Выполнение сигналов для короткой позиции
ShortPos = source.Positions.GetLastActiveForSignal("OpenShort",bar); // Условие идентификации короткой позиции
if (ShortPos == null) // Если нет активной короткой позиции
{
if (signalShort) // Если есть сигнал Short
{
source.Positions.SellIfLess(bar+1,Lot, точка входа, "OpenShort"); // Выдаем ордер на открыте новой короткой позиции.
}
}
else
{
ShortPos.CloseAtStop(bar+1, точка выхода, "Stop_Short"); // Пытаемся выйти по стоп лос ордеру
}
}
#endregion
|
Наверх
|
|
|
|
#72038 - Mon Aug 03 2015 05:44 AM
Re: Одновременное исполнение в шорт и лонг
[Re: Alias]
|
Carpal Tunnel
Registered: Thu Sep 27 2012
Записи: 2860
|
А как сделать так, чтобы если BuyIfGreater сработал, то SellIfLess уже бы не отрабатывал? В велслабе, например, используется такая конструкция:
if (BuyAtStop(bar + 1, orderEntry_1) == null)
{
ShortAtStop(bar + 1, orderEntry_2);
} А в ТС лабе как? то что вы нарисовали в велслабе не работает в реале, просто потому что бара еще нет и позиции на нем тоже еще нет. И в тслабе тоже не работает по этой же причине. Сделать никак невозможно чтобы не сработало одновременно, только установкой такой цены чтобы не могло сработать.
_________________________
__
|
Наверх
|
|
|
|
#72046 - Mon Aug 03 2015 04:25 PM
Re: Одновременное исполнение в шорт и лонг
[Re: ra81]
|
stranger
Registered: Thu Jun 25 2015
Записи: 24
|
Ясно. А если так. Вроде как ТСлаб не открывает позицию по одному и тому же сигналу. У меня позиции называются "Открытие Шорт" и "Открытие Лонг". Если я везде назову "Открыте позиции": ...тра та та
else //если позиции нет:
{
symbol.Positions.BuyIfGreater(bar + 1, 1, orderEntry_1, "Открытие Позиции");
symbol.Positions.SellIfLess(bar + 1, 1, orderEntry_2, "Открытие Позиции");
} то если сработает первая заявка, то вторая уже по этому сигналу открыться не должна. Так можно делать?
Отредактировано Alias (Mon Aug 03 2015 04:27 PM)
|
Наверх
|
|
|
|
#72048 - Mon Aug 03 2015 04:46 PM
Re: Одновременное исполнение в шорт и лонг
[Re: Alias]
|
Carpal Tunnel
Registered: Thu Sep 27 2012
Записи: 2860
|
полагаю так будет работать. хотя проблема пропущенных входов остается и может случиться так что ни один не сработает.
_________________________
__
|
Наверх
|
|
|
|
|
|