У вас не стоит Flash Player
Настройки
#72020 - Sun Aug 02 2015 06:03 PM Одновременное исполнение в шорт и лонг
Alias Offline
stranger

Registered: Thu Jun 25 2015
Записи: 24
Делаю так:

Code:
...тра та та
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]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
могут и обе если свеча захватит обе цены.
_________________________
__


Наверх
#72028 - Sun Aug 02 2015 10:45 PM Re: Одновременное исполнение в шорт и лонг [Re: ra81]
Alias Offline
stranger

Registered: Thu Jun 25 2015
Записи: 24
А как сделать так, чтобы если BuyIfGreater сработал, то SellIfLess уже бы не отрабатывал?


В велслабе, например, используется такая конструкция:
Code:
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]
Vladimir2803 Offline
member

Registered: Thu Oct 16 2014
Записи: 101
В таком случае нужно применить компрессию, что бы пересчет произошем например через минуту, в таком случае алгоритм увидит одну открытую позицию и следовательно новую открывать не будет (если конечно в алгоритме написано такое условие) В любом случае новый пересчет произойдет только с новой свечей.
Например так:

Code:

  #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]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
Originally Posted By: Alias
А как сделать так, чтобы если BuyIfGreater сработал, то SellIfLess уже бы не отрабатывал?


В велслабе, например, используется такая конструкция:
Code:
if (BuyAtStop(bar + 1, orderEntry_1) == null)
{
  ShortAtStop(bar + 1, orderEntry_2);
}


А в ТС лабе как?

то что вы нарисовали в велслабе не работает в реале, просто потому что бара еще нет и позиции на нем тоже еще нет. И в тслабе тоже не работает по этой же причине.
Сделать никак невозможно чтобы не сработало одновременно, только установкой такой цены чтобы не могло сработать.
_________________________
__


Наверх
#72046 - Mon Aug 03 2015 04:25 PM Re: Одновременное исполнение в шорт и лонг [Re: ra81]
Alias Offline
stranger

Registered: Thu Jun 25 2015
Записи: 24
Ясно.

А если так.
Вроде как ТСлаб не открывает позицию по одному и тому же сигналу.

У меня позиции называются "Открытие Шорт" и "Открытие Лонг".
Если я везде назову "Открыте позиции":

Code:
...тра та та
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]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
полагаю так будет работать. хотя проблема пропущенных входов остается и может случиться так что ни один не сработает.
_________________________
__


Наверх


Moderator:  ViL, sar