• Demo счет NinjaTrader, регистрируется в брокерской компании NinjaTrader Brokerage . NinjaTrader™, LLC
    Ссылка на демо счет NinjaTrader
    Фид на соединении Continuum/CQG.
    Для справки: Continuum - это брэнд CQG.
    Обратите внимание, что в настоящее время CQG не высылает логин и пароль на электронные адреса от mail.ru, bk.ru, list.ru, inbox.ru, поэтому необходимо повторить регистрацию с электронного адреса от другого домейна (yahoo, gmail, и тд).
  • NinjaTrader с зарекомендовавшим себя брокерским сервисом предоставляет наилучшие условия для фьючерсной торговли, включая:
    • Низкие комиссии: Экономьте на торгах через низкие и понятные комиссии
    • Низкая маржа: Всего $50 для микро контрактов
    • Низкие минимумы: Откройте счет от $100
    • Бесплатная платформа: Включает весь необходимый функционал для торговли в реале
  • Уважаемые посетители форума!
    При регистрации на форуме отправляется письмо подтверждения на ваш почтовый ящик, если письмо не пришло, просьба проверить папку "спам" вашего почтового ящика, возможно письмо попало туда.
  • Сколько я реально плачу комиссии?
    Подробнее по ссылке

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

R

round

New Member
NinjaTrader
  • #1
Доброго времени суток! Начал знакомиться с работой стратегий в Нинзе и сразу столкнулся с такой проблемой:
Если в стратегии включены стопы:
SetStopLoss("", CalculationMode.Ticks, 12, false);
SetProfitTarget("", CalculationMode.Ticks, 3);
то позиция, открытая стратегией, закрывается только по стопам, а сигналы в противоположном направлении почему-то игнорируются... ::sad24.gif::
Если же стопы убрать, то открытая позиция нормально реверсируется по противоположным сигналам.
Подскажите, плиз, как сделать, чтобы срабатывали и стопы, и противоположные сигналы? ::huh.gif::
(стратегия брал простейшую - на пересечение линий индикатора, версия Нинзи - 6.5.1000.15, стратегию тестировал на Market Replay)
 
N

NTDeveloper

New Member
NinjaTrader
  • #2
приведите полный код Вашей стратегии, возможно что-то получится подсказать
 
R

round

New Member
NinjaTrader
  • #3
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 (чтобы они не срабатывали)
и в результате у меня позиция открывается по первому пересечению линий стохастика и потом вообще не закрывается,
несмотря на многочисленные сигналы в противоположном направлении... :-(
 
N

NTDeveloper

New Member
NinjaTrader
  • #4
а для чего вы используете EnterLongLimit и EnterShortLimit для входа по рынку, если можно просто EnterLong и EnterShort?

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

round

New Member
NinjaTrader
  • #5
Да, входы по маркету работают без игнорирования противоположных сигналов.
(???) не понимаю, какая для Нинзи разница...
Лимитным ордерам я как-то больше "доверяю", но если так, буду использовать входы по маркету. Спасибо за участие! ::smile24.gif::
 
N

NTDeveloper

New Member
NinjaTrader
  • #6
Разница в том, что когда у вас уже есть рыночный ордер и вы в стратегии отправляете лимитный, то ninja игнорирует этот лимитный ордер, т.к. пытается дождаться закрытия текущего. Она не понимает, что лимитный ордер по цене хуже текущей это фактически рыночный ордер..
 
R

round

New Member
NinjaTrader
  • #7
я не совсем понял, что значит "уже есть рыночный ордер".
в смысле - есть открытая позиция?

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

NTDeveloper

New Member
NinjaTrader
  • #8
round сказал(а):
в смысле - есть открытая позиция?
да

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

broker_mirus

Administrator
Команда форума
Помогли тебе - помоги другим!
NinjaTrader
  • #9
NTDeveloper сказал(а):
round сказал(а):
в смысле - есть открытая позиция?
да

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

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

NTDeveloper

New Member
NinjaTrader
  • #10
R

round

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

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

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

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

Да, я тоже выражаю огромную благодарность - этого я как раз и добивался,
но таких волшебных выражений до сей поры не знал... ::smile24.gif::
 
Д

Дмитрий 1

Active Member
NinjaTrader
  • #12
(Добавление)
NTDeveloper сказал(а):
а для чего вы используете EnterLongLimit и EnterShortLimit для входа по рынку, если можно просто EnterLong и EnterShort?

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

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

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

Какое решение посоветуете - поставить входы по лимитным ордерам или есть другое решение?
 

vladko (Владимир Ковалюк)

Well-Known Member
NinjaTrader
  • #13
Дмитрий 1 сказал(а):
При открытой позиции не принимать сигналы на открытие других позиций. Входы стоят по маркету.

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

Дмитрий 1

Active Member
NinjaTrader
  • #14
vladko сказал(а):
Дмитрий 1|12:2 сказал(а):
При открытой позиции не принимать сигналы на открытие других позиций. Входы стоят по маркету.

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

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

vladko, спасибо большое!
 
Д

Дмитрий 1

Active Member
NinjaTrader
  • #15
подскажите код по ограничению количества сделок.

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

заранее спасибо........
 
Привал

Привал

Well-Known Member
NinjaTrader
  • #16
Дмитрий 1 сказал(а):
подскажите код по ограничению количества сделок.

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

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

может вот так
Код:
         protected override void Initialize()
        {
                        EntriesPerDirection = 10;               // максимальное число разрешенных входов
        }
 
A

anik

Member
NinjaTrader
  • #17
Здесь, конечно, пояснить надо.... После закрытия всех позиций они снова начнут открываться или для продолжения работы стратегии необходимо будет ее отключить и заново включить ???
 
A

anik

Member
NinjaTrader
  • #18
где бы найти библиотеку констант и переменных или даже готовый функций для нт7 типа этого:
protected override void Initialize()
{
EntriesPerDirection = 10; // максимальное число разрешенных входов
}
 
  • Like
Реакции: Alex_Dyachenko
Верх Низ