#4557 - Mon Apr 19 2010 04:14 PM
Re: Выставление ордеров через API TSLab
[Re: Nektodron]
|
enthusiast
Registered: Thu Jan 21 2010
Записи: 319
|
Если у скриптов разное имя, то чужие позиции они видеть не должны. Одинаковое имя сигнал не причем.
var rtFORTS = (ISecurityRt) security; rtFORTS.NewOrder(OrderType.Limit, isBuy, price, quintity, "Entry"); Какие ещё можно использовать OrderType и где о ISecurityRt можно почитать в TSLab API Docs ?
|
Наверх
|
|
|
|
#4558 - Mon Apr 19 2010 04:17 PM
Re: Выставление ордеров через API TSLab
[Re: Craft]
|
addict
Registered: Tue Mar 23 2010
Записи: 415
|
Какие ещё можно использовать OrderType Fall, Growth, Limit и Market
|
Наверх
|
|
|
|
#4559 - Mon Apr 19 2010 04:26 PM
Re: Выставление ордеров через API TSLab
[Re: ast]
|
enthusiast
Registered: Thu Jan 21 2010
Записи: 319
|
Какие ещё можно использовать OrderType Fall, Growth, Limit и Market ast, источник информации можешь указать?
|
Наверх
|
|
|
|
#4562 - Mon Apr 19 2010 04:38 PM
Re: Выставление ордеров через API TSLab
[Re: Nektodron]
|
enthusiast
Registered: Thu Jan 21 2010
Записи: 319
|
А в SharpDevelop где глянуть? И что это за типы ордеров Fall (падение), Growth (рост) - аналоги Стоп или?
|
Наверх
|
|
|
|
#4564 - Mon Apr 19 2010 05:38 PM
Re: Выставление ордеров через API TSLab
[Re: Nektodron]
|
enthusiast
Registered: Thu Jan 21 2010
Записи: 319
|
Спасибо за разъяснения, Nektodron.
|
Наверх
|
|
|
|
#4591 - Mon Apr 19 2010 11:12 PM
Re: Выставление ордеров через API TSLab
[Re: Craft]
|
enthusiast
Registered: Thu Jan 21 2010
Записи: 319
|
Nektodron, захотелось сразу опробовать ISecurityRt, попробовал на примере из хэлпа:
int barsCount = source.Bars.Count; for (int i = 0; (i < barsCount); i++) var rtFORTS = (ISecurityRt) security; { IPosition le = source.Positions.GetLastActiveForSignal("LE"); if (le == null) { //source.Positions.BuyIfGreater(i + 1, 1, high[i], "LE"); source.Positions.ISecurityRt.NewOrder(OrderType.Growth, isBuy, high[i], 1, "LE");
} else { le.CloseAtStop(i + 1, low[i], "LX"); } IPosition se = source.Positions.GetLastActiveForSignal("SE"); if (se == null) { //source.Positions.SellIfLess(i + 1, 1, low2[i], "SE"); source.Positions.rtFORTS.NewOrder(OrderType.Fall, isSell, low2[i], 1, "SE"); } else { se.CloseAtStop(i + 1, high2[i], "SX"); } }
Выдаёт ошибку: Элемент 'ВнешниСкрипт' содержит ошибку: c:\Users\Пользователь\Documents\SharpDevelop Projects\ISecurityRt.cs(48,4) : error CS1023: Внедренный оператор не может быть объявлением или оператором с идентификатором
Подскажите, что я делаю не так. Куда необходимо поместить var rtFORTS = (ISecurityRt) security;? Перепробовал все варианты, может проблема в оформлении класса ISecurityRt, помогите оформить правильно?
|
Наверх
|
|
|
|
#4599 - Tue Apr 20 2010 09:24 AM
Re: Выставление ордеров через API TSLab
[Re: Craft]
|
addict
Registered: Tue Mar 23 2010
Записи: 415
|
To Craft: я написал так в начале функции Execute: ISecurityRt sourceRt = source as ISecurityRt; Ну и, соответственно, потом: TSLab.DataSource.OrderType fall = TSLab.DataSource.OrderType.Fall;
buy = true;
sourceRt.NewOrder(fall, buy, myPrice, 1, "Long"); Может, что-то тут коряво. Нектодрон, поправьте, пожалуйста. Появилось еще несколько вопросов. Оказывается, непросто писать скрипт без позиций... Судя по форуму, это пытаются делать только 2-3 человека, остальные даже боятся приступать, т.к. нет документации. Давайте попробуем восполнить этот пробел! Итак: 1. Не получается выбрать ордера с сортировкой. Делаю, как вы привели в примере: var orders = sourceRt.Orders.OrderBy(ord => ord.Date); Получаю: System.Collections.Generic.IEnumerable<TSLab.Script.Realtime.IOrder>" не содержит определение для "OrderBy". 2. Как можно выбрать не все ордера, а только, например, по какому-то сигналу? Кстати, поле Comment в ордере - соответствует string signal в команде NewOrder? 3. Как можно выяснить, что какой-то ордер на открытие позиции (например, типа Fall) мы уже закрыли на предыдущей итерации (например, ордером типа Growth)? Как это происходит без NewOrder понятно, там остается открытой позиция, а тут позиции ведь как таковой нет.
|
Наверх
|
|
|
|
#4624 - Tue Apr 20 2010 11:57 AM
Re: Выставление ордеров через API TSLab
[Re: Nektodron]
|
addict
Registered: Tue Mar 23 2010
Записи: 415
|
Один еще вопрос не ответили: поле Comment в ордере - соответствует string signal в команде NewOrder? Т.е. по нему можно же выбирать, например, все длинные позиции, которые при открытии были обозначены как "Long"?
Nektodron, я, наверно, поразбираюсь еще с Linq и прочим, но почему вы не хотите дать пользователям рабочий пример скрипта с использованием NewOrder как основу? Вы же такой пример можете написать минут за 10-15, а каждому пользователю придется потратить несколько дней, а то и недель.
И еще, вы понимаете, что я занимаюсь этим извращением с NewOrder только по одной причине: нет нормальных лимитных заявок по открытию и закрытию позиций, о чем написано в начале темы. Вы что-то с этим решаете?
|
Наверх
|
|
|
|
#4625 - Tue Apr 20 2010 12:05 PM
Re: Выставление ордеров через API TSLab
[Re: ast]
|
enthusiast
Registered: Thu Jan 21 2010
Записи: 319
|
Nektodron, я, наверно, поразбираюсь еще с Linq и прочим, но почему вы не хотите дать пользователям рабочий пример скрипта с использованием NewOrder как основу? Вы же такой пример можете написать минут за 10-15, а каждому пользователю придется потратить несколько дней, а то и недель. Присоединяюсь, что за стиль общения выдавать огрызки кода вырванные из контекста?
|
Наверх
|
|
|
|
#4636 - Tue Apr 20 2010 02:37 PM
Re: Выставление ордеров через API TSLab
[Re: Craft]
|
enthusiast
Registered: Thu Jan 21 2010
Записи: 319
|
Nektodron, как в текущем контексте необходимо прописать Buy и Sell, чтобы программа/лаборатория созданная для торговли наконец-то начала понимать, что такое - Купить и что такое - Продать?
public virtual void Execute(IContext ctx, ISecurity source)
{
ISecurityRt sourceRt = source as ISecurityRt;
...
Условия алгоритмам Hi_Low
...
int barsCount = source.Bars.Count;
for (int i = 0; (i < barsCount); i++)
{
IPosition le = source.Positions.GetLastActiveForSignal("LE");
if (le == null)
{
TSLab.DataSource.OrderType Growth = TSLab.DataSource.OrderType.Growth;
sourceRt.NewOrder(Growth, Buy, high[i], 1, "LE");
}
else
{
le.CloseAtStop(i + 1, low[i], "LX");
}
IPosition se = source.Positions.GetLastActiveForSignal("SE");
if (se == null)
{
TSLab.DataSource.OrderType Fall = TSLab.DataSource.OrderType.Fall;
sourceRt.NewOrder(Fall, Sell, low2[i], 1, "SE");
}
else
{
se.CloseAtStop(i + 1, high2[i], "SX");
}
} Элемент 'ВнешниСкрипт' содержит ошибку: c:\Users\Пользователь\Documents\SharpDevelop Projects\ISecurityRt.cs(61,32) : error CS0103: Имя 'Buy' отсутствует в текущем контексте c:\Users\Пользователь\Documents\SharpDevelop Projects\ISecurityRt.cs(74,30) : error CS0103: Имя 'Sell' отсутствует в текущем контексте
|
Наверх
|
|
|
|
#4638 - Tue Apr 20 2010 02:46 PM
Re: Выставление ордеров через API TSLab
[Re: Craft]
|
addict
Registered: Tue Mar 23 2010
Записи: 415
|
Имя 'Buy' отсутствует в текущем контексте Его же надо сначала объявить. Например, так: bool Buy = true; (и false, если надо продать)
|
Наверх
|
|
|
|
|
|