У вас не стоит Flash Player
Page 1 of 2 1 2 >
Настройки
#69859 - Tue Apr 28 2015 05:23 PM Исполнение лимитной заявки
Vladimir2803 Offline
member

Registered: Thu Oct 16 2014
Записи: 101
Здравствуйте!
Есть скрипт со сжатием рабочий интервал для пересчета 1мин. все расчеты ведутся на основе 15 мин.

Позиции открываются вот таким вот образом:
source.Positions.BuyIfGreater(bar+1,Lot,H[bar], "OpenLong");
или
source.Positions.SellIfLess(bar+1,Lot,L[bar], "OpenShort");

Так вот при поступлении сигнала на открытие ставится заявка на покупку или продажу и если она не исполнилась в течении минуты она снимается и все.

По идее она должна держаться в течении 15 минут после поступления сигнала на уровне High или low 15 минутного бара давшего сигнал на вход.

Подскажите пожалуйста в чем может быть ошибка?
Поможет ли установка в настройках агента " Ждать исполнения сигнала на вход" параметра 15?

В лаборатории все работает как надо, видны входы и в середини и в начале 15 минутных баров.

Спасибо!

Наверх
#69864 - Tue Apr 28 2015 07:18 PM Re: Исполнение лимитной заявки [Re: Vladimir2803]
ViL Offline
TSLab
Carpal Tunnel

Registered: Sun Oct 17 2010
Записи: 8139
Ждать исполнения сигнала на вход" параметра 15 поможет, если на баре выставления было касание цены заявки.

Наверх
#69865 - Tue Apr 28 2015 07:30 PM Re: Исполнение лимитной заявки [Re: ViL]
Vladimir2803 Offline
member

Registered: Thu Oct 16 2014
Записи: 101
А что делать если каснаия заявки не было?

Наверх
#69871 - Tue Apr 28 2015 10:24 PM Re: Исполнение лимитной заявки [Re: Vladimir2803]
ViL Offline
TSLab
Carpal Tunnel

Registered: Sun Oct 17 2010
Записи: 8139
Очевидно выставлять заявку не на один бар.

Наверх
#69872 - Wed Apr 29 2015 12:25 AM Re: Исполнение лимитной заявки [Re: ViL]
Vladimir2803 Offline
member

Registered: Thu Oct 16 2014
Записи: 101
Originally Posted By: ViL
Очевидно выставлять заявку не на один бар.


Если не трудно, хотя бы намекните как это реализовать

Наверх
#69873 - Wed Apr 29 2015 01:32 AM Re: Исполнение лимитной заявки [Re: Vladimir2803]
ViL Offline
TSLab
Carpal Tunnel

Registered: Sun Oct 17 2010
Записи: 8139
я же не знаю как сейчас формируется сигнал. Очевидно формируется на 1 минуту, а Вам нужно на 15 мин.

Наверх
#69875 - Wed Apr 29 2015 07:26 AM Re: Исполнение лимитной заявки [Re: ViL]
ra81 Offline
Carpal Tunnel

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


Наверх
#69878 - Wed Apr 29 2015 10:24 AM Re: Исполнение лимитной заявки [Re: ra81]
Vladimir2803 Offline
member

Registered: Thu Oct 16 2014
Записи: 101
Формирование сигнала:
for (int bar = StartBar; bar < source.Bars.Count; bar++) // Подстановка необходимого значения свечи с которой робот начинает торговлю
{
#endregion

// Параметры и Сигналы

#region Сброс параметров

signalLong = false; // изначально нет длинной позиции
signalShort = false; // изначально нет короткой позиции

#endregion

#region Сигналы на вход в позицию

#endregion


// Исполнение сигналов

#region Выполнение сигналов для длинной позиции

LongPos = source.Positions.GetLastActiveForSignal("OpenLong",bar); // Условие идентификации длинной позиции

Exit_Long= Exit_L[bar]; // Расчет значения Стоп лос ордера для длинной позиции

if (LongPos == null) // Если нет активной длинной позиции
{
if (signalLong) // Если есть сигнал Buy,
{
source.Positions.BuyIfGreater(bar+1,Lot,H[bar], "OpenLong"); // Выдаем ордер на открыте новой длинной позиции
}
}
else
{
LongPos.CloseAtStop(bar+1,Exit_Long, "Stop Long"); // Если есть открвтая длинная позици пробуем выйти по стоп лос ордеру
}

#endregion

#region Выполнение сигналов для короткой позиции

ShortPos = source.Positions.GetLastActiveForSignal("OpenShort",bar); // Условие идентификации короткой позиции

Exit_Short = Exit_S[bar]; // Расчет значения Стоп лос ордера для коротокой позиции

if (ShortPos == null) // Если нет активной короткой позиции
{
if (signalShort) // Если есть сигнал Short
{
source.Positions.SellIfLess(bar+1,Lot,L[bar], "OpenShort"); // Выдаем ордер на открыте новой короткой позиции.
}
}
else // Если есть активная короткая позиция,
{
ShortPos.CloseAtStop(bar+1, Exit_Short, "Stop_Short"); // Пытаемся выйти по стоп лос ордеру
}
#endregion

Наверх
#69879 - Wed Apr 29 2015 10:25 AM Re: Исполнение лимитной заявки [Re: ra81]
Vladimir2803 Offline
member

Registered: Thu Oct 16 2014
Записи: 101
Originally Posted By: ra81
как я помню вопрос уже сто раз обсусоливался. если поискать то точно найдете решение.


Спасибо, значит буду искать

Наверх
#69885 - Wed Apr 29 2015 12:52 PM Re: Исполнение лимитной заявки [Re: Vladimir2803]
Igor_T Offline
addict

Registered: Tue Apr 01 2014
Записи: 500
Попробуйте блок - количество баров, после неправильного выхода - в сборнике от 777.
С блоком нет кажется... Аналогия на API не подскажу.
_________________________

trufanov_i@rambler.ru

Наверх
#69906 - Thu Apr 30 2015 12:06 AM Re: Исполнение лимитной заявки [Re: Igor_T]
Vladimir2803 Offline
member

Registered: Thu Oct 16 2014
Записи: 101
Перечитал темы форуиа которые нашлись по поиску, но решения даже примерного не нашел.

Наверх
#69907 - Thu Apr 30 2015 12:32 AM Re: Исполнение лимитной заявки [Re: Vladimir2803]
Kermit Offline
enthusiast

Registered: Wed Jan 18 2012
Записи: 256
Проблема точно между этими регионами )))

#region Сигналы на вход в позицию

#endregion

Смысл в том, чтобы сигнал был true в течении всей 15 минутной свечи.
И такие методы выставляют условную заявку, а не лимитную.

Наверх
#69908 - Thu Apr 30 2015 02:22 AM Re: Исполнение лимитной заявки [Re: Kermit]
Vladimir2803 Offline
member

Registered: Thu Oct 16 2014
Записи: 101
Грубо говоря в том блоке идет сравнение H L O C сжатого бара например:
O[bar]>C[bar]
$$ O[bar] < C[bar-1]
&& C[bar] > O[bar-1]

Где O,C open и close сжатого бара.

Сейчас попробовал рассчитать эти значения в этом блоке:

// Параметры и Сигналы

#region Сброс параметров

signalLong = false; // изначально нет длинной позиции
signalShort = false; // изначально нет короткой позиции

var H_L = H[bar];
var L_L = L[bar];
var C_L = C[bar];
var O_L = O[bar];

var C_B = C[bar-1];
var O_B = O[bar-1];

#endregion

Следовательно условия для входа приняли вид:

O_L>C_L[bar]
$$ O_L] < C_B
&& C_L > O_B

Понимаю что это метод научного тыка, но по другому не знаю как действовать так как не программист, знания заточены только под TSlab


Отредактировано Vladimir2803 (Thu Apr 30 2015 02:27 AM)

Наверх
#69923 - Thu Apr 30 2015 12:12 PM Re: Исполнение лимитной заявки [Re: Vladimir2803]
Kermit Offline
enthusiast

Registered: Wed Jan 18 2012
Записи: 256
Разобраться лучше всего запустив скрипт в режиме отладки и поставив брейкпоинт в месте где считается это логическое условие и посмотреть что получается на выходе и что на входе и насколько это соответствует тому, что задумывалось. Это самый лучший, правильный и быстрый способ находить ошибки.

Наверх
#69964 - Thu Apr 30 2015 11:38 PM Re: Исполнение лимитной заявки [Re: Kermit]
Vladimir2803 Offline
member

Registered: Thu Oct 16 2014
Записи: 101
Originally Posted By: Kermit
Разобраться лучше всего запустив скрипт в режиме отладки и поставив брейкпоинт в месте где считается это логическое условие и посмотреть что получается на выходе и что на входе и насколько это соответствует тому, что задумывалось. Это самый лучший, правильный и быстрый способ находить ошибки.


Спасибо за совет в будущем обязательно так буду делать!

Наверх
#69966 - Thu Apr 30 2015 11:55 PM Re: Исполнение лимитной заявки [Re: Vladimir2803]
Vladimir2803 Offline
member

Registered: Thu Oct 16 2014
Записи: 101
Решил вопрос таким вот образом.
Думаю кому нибудь это поможет в свое время:=)

Расчет сигнала производится в блоке сжатия, придавая ему значение истины или лжи ( ? 1:0):

cH[bar] = compressed.HighPrices[bar];
cL[bar] = compressed.LowPrices[bar];
cO[bar] = compressed.OpenPrices[bar];
cC[bar] = compressed.ClosePrices[bar];
var cSL = new double[compressed.Bars.Count];

for (int bar = StartBar; bar < compressed.Bars.Count; bar++)
{
cH[bar] = compressed.HighPrices[bar];
cL[bar] = compressed.LowPrices[bar];
cO[bar] = compressed.OpenPrices[bar];
cC[bar] = compressed.ClosePrices[bar];


cSL[bar] = cC[bar]>cO[bar]
&& cC[bar] <= cO[bar-1]
&& cO[bar] >= cC[bar-1] ? 1:0 ;

Дальше полученный сигнал и параметры сжатой свечи нужно расжать

var H = compressed.Decompress(cH, DecompressMethodWithDef.Default);
var L = compressed.Decompress(cL, DecompressMethodWithDef.Default);
var O = compressed.Decompress(cO, DecompressMethodWithDef.Default);
var C = compressed.Decompress(cC, DecompressMethodWithDef.Default);

var SL = compressed.Decompress(cSL, DecompressMethodWithDef.Default);

Потом если в блоке пересчета скрипта сигнал на открытие поступивший от сжатой свечи принимает истинное значение (1) идет сигнал на открытие позиции.

for (int bar = StartBar; bar < source.Bars.Count; bar++)
{
// Параметры и Сигналы

#region Сброс параметров

signalLong = false;
signalShort = false;

#endregion

#region Сигналы на вход в позицию

if (LongPos == null
&& ShortPos == null // Нет короткой позиции
&& SL[bar]>0 // Если от сжатого диапазона есть сигнал SL[bar] принимает значение 1
{
signalLong = true;
}

За верное направление спасибо сайту rusalgo.com
в частности статье: http://rusalgo.com/article/vhod-i-vyhod-na-odnoj-sveche
Если там приглядеться к первому коду то все становиться понятно

Наверх
#70057 - Wed May 06 2015 04:39 PM Re: Исполнение лимитной заявки [Re: Vladimir2803]
ves Offline
enthusiast

Registered: Wed May 25 2011
Записи: 388
а если позу налили частично как брать остаток?
т.е надо 100 лотов... налили только 1... как добрать остаток в 99

Наверх
#70058 - Wed May 06 2015 05:15 PM Re: Исполнение лимитной заявки [Re: ves]
ra81 Offline
Carpal Tunnel

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


Наверх
#70060 - Wed May 06 2015 05:31 PM Re: Исполнение лимитной заявки [Re: ra81]
ves Offline
enthusiast

Registered: Wed May 25 2011
Записи: 388
Originally Posted By: ra81
новый сигнал формируйте. и добирайте. Потом не забывайте что нужно его закрыть тоже.


1 а почему на выход другая логика? остаток сбрасывается по рынку и все ок... разве нельзя делать все тоже самое со входом? странно все это... на баг похоже... может денег дать чтоб баг исправили?

Наверх
#70063 - Wed May 06 2015 06:22 PM Re: Исполнение лимитной заявки [Re: ves]
sar Offline
Pooh-Bah

Registered: Fri Jan 28 2011
Записи: 1630
Originally Posted By: ves
Originally Posted By: ra81
новый сигнал формируйте. и добирайте. Потом не забывайте что нужно его закрыть тоже.


1 а почему на выход другая логика? остаток сбрасывается по рынку и все ок... разве нельзя делать все тоже самое со входом? странно все это... на баг похоже... может денег дать чтоб баг исправили?

если интересно, попросите 2.0 бету, там уже работает так. из 100 открыли 1 далее он выставит заявку на 99 (если настройки стоят) ну или по рынку треснет.
_________________________
Обучение TSLab
https://www.youtube.com/channel/UC_ifEsHB5QTxG7LPr9n7KtA?view_as=subscriber

Наверх
Page 1 of 2 1 2 >


Moderator:  ViL, sar