У вас не стоит Flash Player
Page 1 of 2 1 2 >
Настройки
#68429 - Sun Feb 22 2015 04:54 PM Как реализовано подчеркивание на стопзаявках?
Barda4ok Offline
stranger

Registered: Sun Oct 12 2014
Записи: 18
Подскажите пожалуйста знающие, как реализовано в коде подчеркивание на стоп-заявках, хотелось бы сделать такие же подчеркивания и на лимитках

Наверх
#68431 - Sun Feb 22 2015 05:17 PM Re: Как реализовано подчеркивание на стопзаявках? [Re: Barda4ok]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
там где должен стоять стоп рисуется автоматом линия. А как вы хотите ставить лимитки ниже цены?? Не путаете? Профит можно ставить лимиткой используя опцию в агенте.

В любом случае рисуйте свои линии, никто не воспрещает. Используйте стандартные методы. Какие? Посмотрите в любой индикатор и увидите.


Отредактировано ra81 (Sun Feb 22 2015 05:18 PM)
_________________________
__


Наверх
#68432 - Sun Feb 22 2015 05:37 PM Re: Как реализовано подчеркивание на стопзаявках? [Re: ra81]
Barda4ok Offline
stranger

Registered: Sun Oct 12 2014
Записи: 18
торгую лимитками, а стоп расчитывается в цикле, тот же МА с уменьшающимся периодом, вот и хочу, чтобы стоп также красиво черточками отрисовывался. желательно прям в цикле его и рисовать на текущем баре, есть какой нибудь способ?

Наверх
#68433 - Sun Feb 22 2015 06:40 PM Re: Как реализовано подчеркивание на стопзаявках? [Re: Barda4ok]
ra81 Offline
Carpal Tunnel

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


Наверх
#68435 - Sun Feb 22 2015 09:00 PM Re: Как реализовано подчеркивание на стопзаявках? [Re: ra81]
Barda4ok Offline
stranger

Registered: Sun Oct 12 2014
Записи: 18
да,не совсем правильно выразился на счет стопа, у меня это просто изменяющийся уровень, при пересечении которого начинает выставляться лимитка, например по Close предыдущего бара

Наверх
#68436 - Sun Feb 22 2015 09:01 PM Re: Как реализовано подчеркивание на стопзаявках? [Re: Barda4ok]
Barda4ok Offline
stranger

Registered: Sun Oct 12 2014
Записи: 18
к сожалению с моим уровнем программирования не могу справиться с этой на первый взгляд легкой задачей

Наверх
#68437 - Sun Feb 22 2015 09:07 PM Re: Как реализовано подчеркивание на стопзаявках? [Re: Barda4ok]
Barda4ok Offline
stranger

Registered: Sun Oct 12 2014
Записи: 18
если бы стоп расчитывался вне цикла, то да все просто, но он считается в цикле и не всегда он есть. ведь есть же какой то простой способ на определенном баре рисовать линии, подскажите если есть пожалуйста

Наверх
#68440 - Mon Feb 23 2015 07:05 AM Re: Как реализовано подчеркивание на стопзаявках? [Re: Barda4ok]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
Originally Posted By: Barda4ok
если бы стоп расчитывался вне цикла, то да все просто, но он считается в цикле и не всегда он есть. ведь есть же какой то простой способ на определенном баре рисовать линии, подскажите если есть пожалуйста

Ну вот вам лень немного взять и посмотреть как сделано у других? Не отпирайтесь что лень smile
Вот собственно так
Code:
var pane = ctx.CreatePane(secRts.Symbol, 100, false);
pane.UpdatePrecision(PaneSides.RIGHT, secRts.Decimals);

var color = new Color(System.Drawing.Color.Black.ToArgb());
var gl = pane.AddList(secRts.Symbol, secRts, CandleStyles.BAR_CANDLE, color, PaneSides.RIGHT);

color = new Color(System.Drawing.Color.Brown.ToArgb());
gl = pane.AddList("level0", f9Level0,ListStyles.LINE , color,LineStyles.SOLID, PaneSides.RIGHT);
_________________________
__


Наверх
#68443 - Mon Feb 23 2015 10:03 PM Re: Как реализовано подчеркивание на стопзаявках? [Re: ra81]
Barda4ok Offline
stranger

Registered: Sun Oct 12 2014
Записи: 18
Наконец выстрадал эти несчастные подчеркивания))), неужели нет способа попроще? С моим уровнем кодинга это действительно было не просто. Могу Тслабу только пожелать подтягиваться за старшим братом))) в плане визуализации.

using System;
using System.Collections.Generic;
using TSLab.Script;
using TSLab.Script.Handlers;
using TSLab.Script.Optimization;
using TSLab.Script.Helpers;

namespace TSLab
{


public class TsLab : IExternalScript
{
public IPosition LastActivePosition = null;

#region Константы


#endregion

#region Параметры оптимизации

// период SMA
public OptimProperty StopSmaPeriod = new OptimProperty(20, 20, 200, 20);

#endregion

public virtual void Execute(IContext ctx, ISecurity symbol)
{
var firstValidValue = 0;

#region Индикаторы

var stopSma = ctx.GetData("sma", new string[] { StopSmaPeriod.ToString() },
() => Series.SMA(symbol.ClosePrices, StopSmaPeriod));
firstValidValue = Math.Max(firstValidValue, StopSmaPeriod);

// серия значений стоп-уровня
IList<double> stopPrice = new List<double>(symbol.Bars.Count);

#endregion

#region Переменные

double stopLoss = 0;

#endregion

#region основной цикл - проход по барам

for (int bar = 0; bar < symbol.Bars.Count; bar++)
{
if (bar < firstValidValue)
{
stopLoss = 0;
stopPrice.Add(stopLoss);
continue;
}

LastActivePosition = symbol.Positions.GetLastPositionActive(bar); // получить ссылку на последнию позицию

#region Сигналы на вход и выход

var isSignalBuy = symbol.ClosePrices[bar] > symbol.HighPrices[bar - 1];
isSignalBuy &= symbol.LowPrices[bar] > stopSma[bar];
var isSignaShort = symbol.ClosePrices[bar] < symbol.LowPrices[bar - 1];
isSignaShort &= symbol.HighPrices[bar] < stopSma[bar];

#endregion

#region Исполнение сигналов на вход

if (LastActivePosition == null) // Если позиции нет
{
stopLoss = 0;

if (isSignalBuy) // Если поступил сигнал на покупку
symbol.Positions.BuyAtMarket(bar + 1, 1, "LE"); // покупаем

else if (isSignaShort) // Если поступил сигнал на продажу
symbol.Positions.SellAtMarket(bar + 1, 1, "SE"); //продаем

}

#endregion

#region Сопровождение и выход

else // Если есть активная позиция
{
var barsHeld = bar - LastActivePosition.EntryBarNum + 1;
var smaPeriod = StopSmaPeriod - barsHeld;
smaPeriod = smaPeriod < 5 ? 5 : smaPeriod;

var adoptSma = ctx.GetData("sma", new string[] { smaPeriod.ToString() },
() => Series.SMA(symbol.ClosePrices, smaPeriod));

if (LastActivePosition.IsLong) //если позиция длинная
{
if (bar == LastActivePosition.EntryBarNum)
stopLoss = adoptSma[LastActivePosition.EntryBarNum - 1];
else
stopLoss = Math.Max(stopLoss, adoptSma[bar]); //"Ни шагу назад"

if(symbol.ClosePrices[bar] < stopLoss)
LastActivePosition.CloseAtPrice(bar + 1, symbol.ClosePrices[bar], "LX");
}
else //если позиция короткая
{
if (bar == LastActivePosition.EntryBarNum)
stopLoss = adoptSma[LastActivePosition.EntryBarNum - 1];
else
stopLoss = Math.Min(stopLoss, adoptSma[bar]); //"Ни шагу назад"

if (symbol.ClosePrices[bar] > stopLoss)
LastActivePosition.CloseAtPrice(bar + 1, symbol.ClosePrices[bar], "SX");
}
}

#endregion

stopPrice.Add(stopLoss);

}

#endregion

#region прорисовка графиков

var pane = ctx.CreatePane(symbol.ToString(), 100, false);
pane.UpdatePrecision(PaneSides.RIGHT, symbol.Decimals);

var color = new Color(System.Drawing.Color.Black.ToArgb());
pane.AddList(symbol.Symbol, symbol, CandleStyles.BAR_CANDLE, color, PaneSides.RIGHT);

color = new Color(System.Drawing.Color.Brown.ToArgb());
pane.AddList("StopLevel", stopPrice, ListStyles.POINT, color, LineStyles.SOLID, PaneSides.RIGHT);

color = new Color(System.Drawing.Color.Blue.ToArgb());
pane.AddList("SMA", stopSma, ListStyles.LINE, color, LineStyles.SOLID, PaneSides.RIGHT);

#endregion

}
}
}

Наверх
#68445 - Tue Feb 24 2015 06:11 AM Re: Как реализовано подчеркивание на стопзаявках? [Re: Barda4ok]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
Не знаю кого вы имели ввиду Старшим братом, но все проще некуда. Тут скорее Вам нужно подтягивать свой уровень кодинга.
_________________________
__


Наверх
#68447 - Tue Feb 24 2015 02:58 PM Re: Как реализовано подчеркивание на стопзаявках? [Re: ra81]
Barda4ok Offline
stranger

Registered: Sun Oct 12 2014
Записи: 18
Дак и так стараюсь, год назад о C# не знал вобще ничего)), а старший брат естественно Велс

Наверх
#68448 - Tue Feb 24 2015 02:59 PM Re: Как реализовано подчеркивание на стопзаявках? [Re: Barda4ok]
Barda4ok Offline
stranger

Registered: Sun Oct 12 2014
Записи: 18
Может курс какой нибудь сделаете "визуализация в Тслаб через API"

Наверх
#68449 - Tue Feb 24 2015 03:18 PM Re: Как реализовано подчеркивание на стопзаявках? [Re: Barda4ok]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
Originally Posted By: Barda4ok
Может курс какой нибудь сделаете "визуализация в Тслаб через API"

Тут боюсь пахнет 1 часом видео :)). На курс никак не тянет. В тслабе все не сложнее велса. Просто вы не знаете еще как. И в велсе вы тоже стоп ненастоящий рисовать будете не менее сложным образом. Уж я его знаю хорошо.
_________________________
__


Наверх
#68450 - Tue Feb 24 2015 03:43 PM Re: Как реализовано подчеркивание на стопзаявках? [Re: ra81]
Barda4ok Offline
stranger

Registered: Sun Oct 12 2014
Записи: 18
Жаль, инфы по примитивам в Тслаб через API не нашел((, но надеюсь что для меня это тоже станет когда то элементарными вещами

Наверх
#68451 - Tue Feb 24 2015 03:45 PM Re: Как реализовано подчеркивание на стопзаявках? [Re: Barda4ok]
Barda4ok Offline
stranger

Registered: Sun Oct 12 2014
Записи: 18
Я понимаю что это не стоп)), это просто уровень после которого срабатывает условие на выход лимиткой

Наверх
#68452 - Tue Feb 24 2015 04:18 PM Re: Как реализовано подчеркивание на стопзаявках? [Re: Barda4ok]
Barda4ok Offline
stranger

Registered: Sun Oct 12 2014
Записи: 18
Спасибо что не оставили без внимания smile

Наверх
#68453 - Tue Feb 24 2015 05:14 PM Re: Как реализовано подчеркивание на стопзаявках? [Re: Barda4ok]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
Originally Posted By: Barda4ok
Жаль, инфы по примитивам в Тслаб через API не нашел((, но надеюсь что для меня это тоже станет когда то элементарными вещами

так нет примитивов. можно рисовать только свечи и линии. Вот и все. ну гистограмму еще. По большей части этого достаточно. Возможно кому то нужны круги треугольники и квадраты, ну да бог с ними. В версии 2 будут круги квадраты.
_________________________
__


Наверх
#68454 - Tue Feb 24 2015 06:33 PM Re: Как реализовано подчеркивание на стопзаявках? [Re: ra81]
Barda4ok Offline
stranger

Registered: Sun Oct 12 2014
Записи: 18
Вот что я изначально имел ввиду, показано в коде велса, в таком же примере, все делается одной строчкой. А вобще удобно очень сделано у них QuickRef, вот бы в Тслаб так)) и если в QuickRef открыть папку Cosmetic Chart, то увидим много инструментов для визуализации. Поскорей бы версия 2 smile

using System;
using System.Drawing;
using WealthLab;
using WealthLab.Indicators;


namespace WLD.Strategies
{
class Drawing : WealthScript
{

#region Объявление параметров торговой системы

readonly StrategyParameter _period; // Период ATR

#endregion

#region Инициализация параметров торговой системы

public Drawing()
{
_period = CreateParameter("ATR Period", 160, 20, 200, 20);
}

#endregion

protected override void Execute()
{
var firstValidValue = 0; // Первый бар ТС, на котором все паттерны и индикаторы существуют и стабилизированы

PlotStops(); // Отображать уровни, на которых были попытки выхода по S/L
ClearDebug(); // Очистить окно отладки
HideVolume(); // Скрыть объемы

#region Индикаторы

var period = _period.ValueInt;
DataSeries stopSma = SMA.Series(Close, period);
PlotSeries(PricePane, stopSma, Color.Red, LineStyle.Solid, 1);
firstValidValue = Math.Max(firstValidValue, stopSma.FirstValidValue * 3); // Первое значение индикатора с условием стабилизации

#endregion

double stopLevel = 0;

for (var bar = firstValidValue; bar < Bars.Count; bar++) // Пробегаемся по всем свечкам
{
var isSignalBuy = Close[bar] > High[bar - 1]; // Сигналы на вход в длинную и короткую позиции
isSignalBuy &= Low[bar] > stopSma[bar];
var isSignalShort = Close[bar] < Low[bar - 1]; // Сигналы на вход в длинную и короткую позиции
isSignalShort &= High[bar] < stopSma[bar];

if (!IsLastPositionActive) // Если позиции нет
{
if (isSignalBuy) // Если пришел сигнал на покупку
{
BuyAtMarket(bar + 1, "Buy"); // Пробуем войти в длинную позицию
stopLevel = SMA.Value(bar - 1, Close, period);
}

else if (isSignalShort) // Если пришел сигнал на короткую продажу
{
ShortAtMarket(bar + 1, "Short");
stopLevel = SMA.Value(bar - 1, Close, period);
}

}
else // Если позиция есть
{
var pos = LastActivePosition; // Позиция, с которой будем работать

var barsHeld = bar - pos.EntryBar + 1;
var smaPeriod = period - barsHeld;
smaPeriod = smaPeriod < 5 ? 5 : smaPeriod;
var adoptSma = SMA.Value(bar - 1, Close, smaPeriod);


if (pos.PositionType == PositionType.Long) // Для длинной позиции
{
stopLevel = Math.Max(stopLevel, adoptSma);
if (Close[bar] < stopLevel)
ExitAtLimit(bar + 1, pos, Close[bar]);
}
else // Для короткой позиции
{
stopLevel = Math.Min(stopLevel, adoptSma);
if (Close[bar] > stopLevel)
ExitAtLimit(bar + 1, pos, Close[bar]);
}

DrawCircle(PricePane, 4, bar, stopLevel, Color.Green, Color.DarkGreen, LineStyle.Solid, 1, true); // Вот также хотелось бы в Тслабе

}
}
}
}
}

Наверх
#68455 - Wed Feb 25 2015 08:03 AM Re: Как реализовано подчеркивание на стопзаявках? [Re: Barda4ok]
ra81 Offline
Carpal Tunnel

Registered: Thu Sep 27 2012
Записи: 2860
в тслабе линия рисуется в 2 строки. Это много тяжелее конечно smile. Но нет шариков квадратиков, я уже выше сказал.
_________________________
__


Наверх
#68456 - Wed Feb 25 2015 03:04 PM Re: Как реализовано подчеркивание на стопзаявках? [Re: ra81]
Barda4ok Offline
stranger

Registered: Sun Oct 12 2014
Записи: 18
Ну да ладно, проект быстро развивающийся, все еще впереди))

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


Moderator:  ViL, sar