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

Применение стопов в стратегиях

round

New Member
NinjaTrader
Доброго времени суток! Начал знакомиться с работой стратегий в Нинзе и сразу столкнулся с такой проблемой:
Если в стратегии включены стопы:
SetStopLoss("", CalculationMode.Ticks, 12, false);
SetProfitTarget("", CalculationMode.Ticks, 3);
то позиция, открытая стратегией, закрывается только по стопам, а сигналы в противоположном направлении почему-то игнорируются... ::sad24.gif::
Если же стопы убрать, то открытая позиция нормально реверсируется по противоположным сигналам.
Подскажите, плиз, как сделать, чтобы срабатывали и стопы, и противоположные сигналы? ::huh.gif::
(стратегия брал простейшую - на пересечение линий индикатора, версия Нинзи - 6.5.1000.15, стратегию тестировал на Market Replay)
 
приведите полный код Вашей стратегии, возможно что-то получится подсказать
 
NTDeveloper сказал(а):
приведите полный код Вашей стратегии, возможно что-то получится подсказать
привожу полный код:
#region Using declarations
using System;
using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Xml.Serialization;
using NinjaTrader.Cbi;
using NinjaTrader.Data;
using NinjaTrader.Indicator;
using NinjaTrader.Gui.Chart;
using NinjaTrader.Strategy;
#endregion

namespace NinjaTrader.Strategy
{
[Description("Enter the description of your strategy here")]
public class Stoh1 : Strategy
{
#region Variables
#endregion

protected override void Initialize()
{
SetProfitTarget("", CalculationMode.Ticks, 99);
SetStopLoss("", CalculationMode.Ticks, 99, false);

CalculateOnBarClose = true;
}

protected override void OnBarUpdate()
{
if (CrossAbove(Stochastics(7, 14, 3).K, Stochastics(7, 14, 3).D, 1))
{
EnterLongLimit(DefaultQuantity, GetCurrentAsk(), "");
}

if (CrossBelow(Stochastics(7, 14, 3).K, Stochastics(7, 14, 3).D, 1))
{
EnterShortLimit(DefaultQuantity, GetCurrentBid(), "");
}
}
#region Properties
#endregion
}
}
Стопы специально выставил по 99 (чтобы они не срабатывали)
и в результате у меня позиция открывается по первому пересечению линий стохастика и потом вообще не закрывается,
несмотря на многочисленные сигналы в противоположном направлении... :-(
 
а для чего вы используете EnterLongLimit и EnterShortLimit для входа по рынку, если можно просто EnterLong и EnterShort?

Попробуйте вместо EnterLongLimit(DefaultQuantity, GetCurrentAsk(), ""); использовать EnterLong(DefaultQuantity) и для шорта аналогично...
Если не получится, скажите, дальше подумаем
 
Да, входы по маркету работают без игнорирования противоположных сигналов.
(???) не понимаю, какая для Нинзи разница...
Лимитным ордерам я как-то больше "доверяю", но если так, буду использовать входы по маркету. Спасибо за участие! ::smile24.gif::
 
Разница в том, что когда у вас уже есть рыночный ордер и вы в стратегии отправляете лимитный, то ninja игнорирует этот лимитный ордер, т.к. пытается дождаться закрытия текущего. Она не понимает, что лимитный ордер по цене хуже текущей это фактически рыночный ордер..
 
я не совсем понял, что значит "уже есть рыночный ордер".
в смысле - есть открытая позиция?

Кстати, прошу подсказать, как заставить стратегию начинать работать именно с того момента, когда её запускаешь, и игнорировать всю предысторию (по крайней мере в части торговли). А то стратегия при запуске сразу ведет себя так, как будто уже давным-давно работает и пытается закрывать позиции, которых вообще нет, т.е. которые были бы, если бы она давно была запущена. И зависают всякие стопы - "осколки минувших дней" ::huh.gif::
В результате получается некий сдвиг по фазе - открывается позиция, которая на самом деле должна была просто закрыть предыдущую (которой реально не было).
Короче, полнейший бардак... Никак не могу найти, где "выключить" такое поведение стратегий ::sad24.gif::
Заранее благодарю за ответ!
 
round сказал(а):
в смысле - есть открытая позиция?
да

А по поводу второго вопроса немного не понятно, вы сейчас говорите о том коде, который приводили выше? Или какой то другой код? Наверняка то, что зависает это из за каких либо особенностей алгоритма..
Пока не могу ничего конкретного подсказать без кода. Единственное можете сразу после
Код:
protected override void OnBarUpdate()
{
вписать
Код:
if(Historical) return;
 
NTDeveloper сказал(а):
round сказал(а):
в смысле - есть открытая позиция?
да

А по поводу второго вопроса немного не понятно, вы сейчас говорите о том коде, который приводили выше? Или какой то другой код? Наверняка то, что зависает это из за каких либо особенностей алгоритма..
Пока не могу ничего конкретного подсказать без кода. Единственное можете сразу после
Код:
protected override void OnBarUpdate()
{
вписать
Код:
if(Historical) return;

NTDeveloper, спасибо огромное за помощь ))
 
NTDeveloper сказал(а):
А по поводу второго вопроса немного не понятно, вы сейчас говорите о том коде, который приводили выше? Или какой то другой код? Наверняка то, что зависает это из за каких либо особенностей алгоритма..
Да, например приведенный выше код (изменненый в части превращения лимитных ордеров в рыночные)). Или другой подобный простейший код - у меня более сложных пока еще не бывает... ::smile24.gif::

broker_mirus сказал(а):
NTDeveloper сказал(а):
Пока не могу ничего конкретного подсказать без кода. Единственное можете сразу после
CODE:
protected override void OnBarUpdate()
{

вписать
CODE:
if(Historical) return;

NTDeveloper, спасибо огромное за помощь ))

Да, я тоже выражаю огромную благодарность - этого я как раз и добивался,
но таких волшебных выражений до сей поры не знал... ::smile24.gif::
 
(Добавление)
NTDeveloper сказал(а):
а для чего вы используете EnterLongLimit и EnterShortLimit для входа по рынку, если можно просто EnterLong и EnterShort?

Попробуйте вместо EnterLongLimit(DefaultQuantity, GetCurrentAsk(), ""); использовать EnterLong(DefaultQuantity) и для шорта аналогично...
Если не получится, скажите, дальше подумаем
.

round сказал(а):
Да, входы по маркету работают без игнорирования противоположных сигналов.

Обратная ситуация у меня ....... нужно поставить ограничение. При открытой позиции не принимать сигналы на открытие других позиций. Входы стоят по маркету.

Какое решение посоветуете - поставить входы по лимитным ордерам или есть другое решение?
 
vladko сказал(а):
Дмитрий 1|12:2 сказал(а):
При открытой позиции не принимать сигналы на открытие других позиций. Входы стоят по маркету.

Код:
if (Position.MarketPosition==MarketPosition.Flat)
{
  //входим в рынок
}

как все просто .........

vladko, спасибо большое!
 
подскажите код по ограничению количества сделок.

после заключения например 10 сделок, дальнейшие сигналы на вход не принимаются.

заранее спасибо........
 
Дмитрий 1 сказал(а):
подскажите код по ограничению количества сделок.

после заключения например 10 сделок, дальнейшие сигналы на вход не принимаются.

заранее спасибо........

может вот так
Код:
		protected override void Initialize()
        {
			EntriesPerDirection = 10;		// максимальное число разрешенных входов
        }
 
Здесь, конечно, пояснить надо.... После закрытия всех позиций они снова начнут открываться или для продолжения работы стратегии необходимо будет ее отключить и заново включить ???
 
где бы найти библиотеку констант и переменных или даже готовый функций для нт7 типа этого:
protected override void Initialize()
{
EntriesPerDirection = 10; // максимальное число разрешенных входов
}
 
Назад
Верх Низ