• Тинькофф Банк-лучшие банковские продукты еще выгоднее
    Выбирайте продукт от банка Тинькофф
  • Уважаемые форумчане, друзья и посетители!
    Поступило предложение ( ссылка на обсуждение ) на сбор средств поддержания форума в рабочем состоянии с 1 июня ( оплата хостинга, бэкап ежедневный на другой хостинг и тд), отчетность будет предоставляться ежемесячно. Пока на ЮMoney ( яндекс деньги), доступно картой перевод, далее добавлю другие способы. Сумму перевода указывайте на ваш выбор исходя из своих возможностей.
    Форум продолжает свою работу благодаря Вашим пожертвованиям.

Нужна помощь с отменой лимитных ордеров

marakano

New Member
NinjaTrader
Привет !

Проблема в следующем:
Прописываю условия при которых выставляется лимитник на покупку(продажу) через EnterLongLimit и все работает цена подходит и ордера открываются и споровождаются, но мне надо чтоб лимитник удалялся например через 10 баров.

Вопрос:
Как это прописать, Help заглядывал CancelOrder(), пытался примеры прописать у себя в стратегии так вообще ничего не выставляется и не убирается.

Кто в теме подскажите ....

Код очень простой:

protected override void OnBarUpdate()
EntryHandling = EntryHandling.UniqueEntries;

ManageOrders();

if (Position.MarketPosition != MarketPosition.Flat) return;

if (Time[0]>=dt_begin && Time[0]<=dt_end && Position.MarketPosition==MarketPosition.Flat && FirstTickOfBar )
{
//LONG

if (Close[2]<Open[2]
&& Close[1]>Close[2]
&& Close[0]>Close[1])
{
double half=(((Low[1]+High[1])/2)+Low[1])/2;
EnterLongLimit(0, true, 1, half, "LongLimit1");
EnterLongLimit(0, true, 1, half, "LongLimit2");
GoLong();

}

}

if (Time[0]>=dt_begin && Time[0]<=dt_end && Position.MarketPosition==MarketPosition.Flat && FirstTickOfBar)
{
//SHORT

if (Close[2]>Open[2]
&& Close[1]<Close[2]
&& Close[0]<Close[1])
{
double half=(((High[1]+Low[1])/2)+High[1])/2;
EnterShortLimit(0, true, 1, half, "ShortLimit1");
EnterShortLimit(0, true, 1, half, "ShortLimit2");
GoShort();

}


}
 
Запоминать номер бара при выставлении ордера (CurrentBar).
И на каждом следующем баре проверять разницу между текущим баром и запомненным.
 
Подскажи где ошибка ?

public class Кed : Strategy
{
#region Variables
private IOrder myEntryOrder = null;
private int barNumberOfOrder = 0;
#endregion


protected override void OnBarUpdate()

EntryHandling = EntryHandling.UniqueEntries;
ManageOrders();

if (Position.MarketPosition != MarketPosition.Flat) return;

if (Time[0]>=dt_begin && Time[0]<=dt_end && Position.MarketPosition==MarketPosition.Flat && FirstTickOfBar )
{
//LONG

if (Close[2]<Open[2]
&& Close[1]>Close[2]
&& Close[0]>Close[1])

{
double half=(((Low[1]+High[1])/2)+Low[1])/2;
myEntryOrder = EnterLongLimit(0, true, 1, half, "LongLimit1");
myEntryOrder = EnterLongLimit(0, true, 1, half, "LongLimit2");
barNumberOfOrder = CurrentBar;

GoLong();

}
if (CurrentBar > barNumberOfOrder + 10)
CancelOrder(myEntryOrder);

}
 
Тебе еще нужно запоминать что ордер выставлен. Ну и проверку на отмену ордера нужно делать до его выставления а не после.
 
Может есть пример фаил или хоть в сторону каких методов и функций смотреть ?
 
marakano, просьба к вам и всем программистам, код заключать в соответствующие теги, который есть в редакторе сообщений форума.

 
Да почти все правильно. Надо логику немного подправить и всё.
 
Назад
Верх Низ