takeprofit & stoploss
Atom Ответить
11.01.2012


tmt

Фотография
BigGrin я наверное уже замучал))
Вот из этого примера https://www.stocksharp.co...27-985a-1654e8d9cfc1.htm не понятно мне, сл и тп для общей позиции устанавливается? (просто когда ставим там сл и тп, мы нигде не упоминаем longPos)
И есть ли где рабочий пример, так проще понять.

Теги:


Спасибо:




41 Ответов
1 2  >
tmt

Фотография
Дата: 12.01.2012
Ответить


Попробовал вот так.. Но ошибки показывает..

**Элемент "ChildStrategies" не существует в текущем контексте.

**Наиболее подходящий перегруженный метод для "StockSharp.Algo.Strategies.StrategyRule<System.Collections.Generic.IEnumerable<StockSharp.BusinessEntities.MyTrade>>.
Do(System.Action<StockSharp.Algo.Strategies.StrategyRule<System.Collections.Generic.
IEnumerable<StockSharp.BusinessEntities.MyTrade>>,System.Collections.Generic.IEnumerable<StockSharp.BusinessEntities.MyTrade>>)"

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

**Вместе с аргументами-типами нельзя использовать не универсальный тип "System.Collections.IEnumerable"

**Аргумент "1": преобразование типа из "группа методов" в "System.Action<StockSharp.Algo.Strategies.StrategyRule<System.Collections.Generic.
IEnumerable<StockSharp.BusinessEntities.MyTrade>>,System.Collections.Generic.IEnumerable<StockSharp.BusinessEntities.MyTrade>>" невозможно

Помогите пожалуйста


Код
namespace SampleSmartConsole
{
    using System;
using System.Net;
    using System.Linq;
    using System.Threading;
using System.Collections;

    using Ecng.Collections;
    using Ecng.Common;

    using StockSharp.BusinessEntities;
    using StockSharp.Smart;
    using StockSharp.Algo;
using StockSharp.Algo.Strategies;


    class Program
    {
        private static Security _instrument;
        private static Portfolio _portfolio;
private static MarketDepth _depth;
private static Position _position;


public class buy : Strategy
{
public void OpenPosition()
{
// создаем заявку для открытия длинной позиции
var longPos = this.BuyAtMarket();

// регистрируем правило, отслеживающее появление новых сделок по заявке
this
.When(longPos.NewTrades())
.Do(OnNewOrderTrades)
.Periodical(() => longPos.IsMatched());

// отправляем заявку на регистрацию
RegisterOrder(longPos);
}
}


private void OnNewOrderTrades(IEnumerable<MyTrade> trades)
{
// для каждой сделки добавляем для защитную пару стратегии
var protectiveStrategies = trades.Select(t =>
{
// выставляет тейк-профит в 40 пунктов
var takeProfit = new TakeProfitStrategy(t, 40);

// выставляет стоп-лосс в 20 пунктов
var stopLoss = new StopLossStrategy(t, 20);

return new TakeProfitStopLossStrategy(takeProfit, stopLoss);
});

ChildStrategies.AddRange(protectiveStrategies);
}


        static void Main()
        {
            try
            {
                // для теста выбираем бумагу
                const string secCode = "RIH2";

                //Console.Write("Введите логин: ");
                //var login = Console.ReadLine();
var login = "ST12858";

                //Console.Write("Введите пароль: ");
                //var password = Console.ReadLine();
var password = "8YDJ7E";

                //Console.Write("Введите номер счета, через который будет выставлена заявка: ");
                //var account = Console.ReadLine();
var account = "ST12858-RF-01";

IPAddress ipadress = IPAddress.Parse("95.131.26.246");
IPEndPoint ip = new IPEndPoint(ipadress, 8090);

                using (var waitHandle = new AutoResetEvent(false))
                {
                    // создаем шлюз к Smart-у
                    using (var trader = new SmartTrader(login, password, ip))
                    {
                        // подписываемся на событие успешного подключения
                        // все действия необходимо производить только после подключения
                        trader.Connected += () =>
                        {
                            Console.WriteLine("Подключение было произведено успешно.");

                            // извещаем об успешном соединени
                            waitHandle.Set();
                        };

                        Console.WriteLine("Производим подключение...");

                        trader.Connect();

                        // дожидаемся события об успешном соединении
                        waitHandle.WaitOne();

                        // подписываемся на все портфели-счета
                        trader.NewPortfolios += portfolios =>
                        {
                            // необходимое условие работы в SmartCOM
                            portfolios.ForEach(trader.RegisterPortfolio);

                            if (_portfolio == null)
                            {
                                _portfolio = portfolios.FirstOrDefault(p => p.Name == account);

                                if (_portfolio != null)
                                {
                                    Console.WriteLine("Портфель {0} появился.", account);

if (_instrument != null && _depth != null && _position != null)
                                        waitHandle.Set();
                                }
                            }
                        };

                        // подписываемся на событие появление инструментов
trader.NewPositions += positions =>
{
if (_position == null)
{
_position = positions.FirstOrDefault(sec => sec.Security.Code == secCode);
if (_position != null)
{
Console.WriteLine("Информация о портфеле появилась.");
if (_portfolio != null && _depth != null && _instrument != null)
waitHandle.Set();
}
}
};
                        trader.NewSecurities += securities =>
                        {
                            if (_instrument == null)
                            {
// находим инструмент и присваиваем ее переменной _instrument
_instrument = securities.FirstOrDefault(sec => sec.Code == secCode && sec.Type == SecurityTypes.Future);

                                if (_instrument != null)
                                {
                                    Console.WriteLine("Инструмент появился.");
trader.RegisterQuotes(_instrument); // запускаем экспорт стакана
if (_portfolio != null && _depth != null && _position != null)
                                        waitHandle.Set();
                                }
                            }
                        };

// подписываемся на событие обновления стакана
trader.QuotesChanged += depths =>
{
if (_depth == null && _instrument != null)
{
_depth = depths.FirstOrDefault(d => d.Security == _instrument);

if (_depth != null)
{
Console.WriteLine("Стакан появился.");

if (_portfolio != null && _position != null)
waitHandle.Set();
}
}
};

                        // подписываемся на событие появления моих новых сделок
                        trader.NewMyTrades += myTrades =>
                        {
                            foreach (var myTrade in myTrades)
                            {
                                var trade = myTrade.Trade;
                                Console.WriteLine("Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.", trade.Id, trade.Price, trade.Security.Code, trade.Volume, trade.Time);
                            }
                        };

                        Console.WriteLine("Дожидаемся появления в программе инструмента и портфеля {0}...".Put(account));

                        // запускаем экспорт по инструментам и портфелям
                        trader.StartExport();

                        // дожидаемся появления портфеля и инструмента
                        waitHandle.WaitOne();

                        trader.SecuritiesChanged += securities =>
                        {
                            // если инструмент хоть раз изменился (по нему пришли актуальные данные)
                            if (securities.Contains(_instrument))
                                waitHandle.Set();
                        };

                        Console.WriteLine("Дожидаемся обновления данных по инструменту...");

                        // запускаем обновление по инструменту
                        trader.RegisterSecurity(_instrument);
                        waitHandle.WaitOne();

                        // запоминаем первоначальное значение середины спреда
var totb = _depth.TotalBidsVolume;
var tota = _depth.TotalAsksVolume;

int maxaskv = 0;
int maxbidv = 0;
int maxaskp = 0;
int maxbidp = 0;
var asks = _depth.Asks;
var bids = _depth.Bids;
for (int i = 0; i < 50; i++)
{
if (asks[i].Volume > maxaskv) { maxaskv = (int)asks[i].Volume; maxaskp = (int)asks[i].Price; }
if (bids[i].Volume > maxbidv) { maxbidv = (int)bids[i].Volume; maxbidp = (int)bids[i].Price; }
//Console.WriteLine("asks {0}", asks[i].Price);
//Console.WriteLine("asks {0}", asks[i].Volume);
}
Console.WriteLine("maxask {0}", maxaskv);
Console.WriteLine("maxbid {0}", maxbidv);

                        if (_instrument.BestBid == null)
                            throw new Exception("Нет лучшего бида для котировки.");

Console.WriteLine("общий объем bid {0}", totb);
Console.WriteLine("общий объем ask {0}", tota);
// objem = _instrument.OpenInterest;
//Console.WriteLine("открытые позиции {0}", objem);
//Console.WriteLine("asks {0}", asks[0]);

                        while (true)
                        {
var objem = _position.CurrentValue;
Console.WriteLine("открытые позиции {0}", objem);

                            // если спред вышел за пределы нашего диапазона
/*if (totb > tota)
{*/
var order = new Order
{
Portfolio = _portfolio,
Price = _instrument.ShrinkPrice(_instrument.BestAsk.Price),
Security = _instrument,
Volume = 1,
Direction = OrderDirections.Sell,
};
trader.RegisterOrder(order);
Console.WriteLine("Заявка {0} зарегистрирована.", order.Id);
//break;
/*}
else
{
var order = new Order
{
Portfolio = _portfolio,
Price = _instrument.ShrinkPrice(_instrument.BestBid.Price),
Security = _instrument,
Volume = 1,
Direction = OrderDirections.Buy,
};
trader.RegisterOrder(order);
Console.WriteLine("Заявка {0} зарегистрирована.", order.Id);
//break;
}
                                //Console.WriteLine("Текущее значение середины спреда {0:0.##}", _instrument.BestBid.Price + mid);
*/
                            // ждем 1 секунду
                            Thread.Sleep(1000);
                        }

                        // останавливаем экспорт
                        trader.StopExport();
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
            }
        }
    }
}
Автор топика
Спасибо:

ak

Фотография
Дата: 12.01.2012
Ответить


Форматируйте код (значек справа от "Цитата" - "Выберите тип подсветки кода"), потому что так понять что-либо очень сложно.
  1. Обработчик OnNewOrderTrades должен быть методом класса стратегии (находиться внутри {}).
  2. Generic тип IEnumerable<Type> принадлежит сборке System.Collections.Generic (using System.Collections.Generic;)

А логин и пароль в коде измененные, правда? Я на это очень надеюсь.





Спасибо: Sergey Masyura tmt

tmt

Фотография
Дата: 13.01.2012
Ответить


Спасибо сделал вот так, а насчет логина(пароля) они реальные.. от демки правда..
А как теперь этот класс вызвать? (можно ли так)
Код
var ord = new buy();


Код
        public class buy : Strategy
        {
            public void OpenPosition()
            {
                // создаем заявку для открытия длинной позиции
                //var longPos = this.BuyAtMarket();
                var longPos = new Order
                {
                    Portfolio = _portfolio,
                    Price = _instrument.ShrinkPrice(_instrument.BestAsk.Price),
                    Security = _instrument,
                    Volume = 1,
                    Direction = OrderDirections.Sell,
                };

                // регистрируем правило, отслеживающее появление новых сделок по заявке
                this
                .When(longPos.NewTrades())
                .Do(OnNewOrderTrades)
                .Periodical(() => longPos.IsMatched());

                // отправляем заявку на регистрацию
                RegisterOrder(longPos);
            }

            private void OnNewOrderTrades(IEnumerable<MyTrade> trades)
            {
                // для каждой сделки добавляем для защитную пару стратегии
                var protectiveStrategies = trades.Select(t =>
                {
                    // выставляет тейк-профит в 40 пунктов
                    var takeProfit = new TakeProfitStrategy(t, 40);

                    // выставляет стоп-лосс в 20 пунктов
                    var stopLoss = new StopLossStrategy(t, 20);

                    return new TakeProfitStopLossStrategy(takeProfit, stopLoss);
                });

                ChildStrategies.AddRange(protectiveStrategies);
            }
        }
Автор топика
Спасибо:

ak

Фотография
Дата: 13.01.2012
Ответить


tmt Перейти
Спасибо сделал вот так, а насчет логина(пароля) они реальные.. от демки правда..
А как теперь этот класс вызвать? (можно ли так)
Код
var ord = new buy();



А вы сами попробуйте ;-) Не могу сейчас проверить, но насколько я помню родительский класс Strategy содержит конструктор без параметров (или конструктор по умолчанию - не важно). Ваш класс также имеет конструктор по умолчанию - так что такой конструкцией вы создадите объект стратегии. Но вот чтобы ее запустить (заставить работать) надо переопределить (override) как минимум один метод, какой - внимательно читать тут https://stocksharp.ru/do...e0-aba8-0d4b93dea60e.htm
Спасибо:

tmt

Фотография
Дата: 13.01.2012
Ответить


ak Перейти
tmt Перейти
Спасибо сделал вот так, а насчет логина(пароля) они реальные.. от демки правда..
А как теперь этот класс вызвать? (можно ли так)
Код
var ord = new buy();



А вы сами попробуйте ;-) Не могу сейчас проверить, но насколько я помню родительский класс Strategy содержит конструктор без параметров (или конструктор по умолчанию - не важно). Ваш класс также имеет конструктор по умолчанию - так что такой конструкцией вы создадите объект стратегии. Но вот чтобы ее запустить (заставить работать) надо переопределить (override) как минимум один метод, какой - внимательно читать тут https://stocksharp.ru/do...e0-aba8-0d4b93dea60e.htm


Да так то я уже попробовал)) выяснил что не работает. Сейчас прочту и снова попробую
Автор топика
Спасибо:

Alexander

Фотография
Дата: 13.01.2012
Ответить


tmt Перейти
Да так то я уже попробовал)) выяснил что не работает. Сейчас прочту и снова попробую


У нас если что есть поддержка платная, там на подобные вопросы как раз отвечаем.
Это если лень разбираться по документации и примерам.
Спасибо:

tmt

Фотография
Дата: 13.01.2012
Ответить


Это выходит нужно добавить override примерно вот так, а потом он сам запустится, как вызов метода Strategy.Start произойдет? и условия для открытия уже в OpenPosition нужно добавлять, а не в programm..

Код
        public class buy : Strategy
        {
            public override void OpenPosition()
            {
                // создаем заявку для открытия длинной позиции
                //var longPos = this.BuyAtMarket();
                var longPos = new Order
                {
                    Portfolio = _portfolio,
                    Price = _instrument.ShrinkPrice(_instrument.BestAsk.Price),
                    Security = _instrument,
                    Volume = 1,
                    Direction = OrderDirections.Sell,
                };

                // регистрируем правило, отслеживающее появление новых сделок по заявке
                this
                .When(longPos.NewTrades())
                .Do(OnNewOrderTrades)
                .Periodical(() => longPos.IsMatched());

                // отправляем заявку на регистрацию
                RegisterOrder(longPos);
            }

            private void OnNewOrderTrades(IEnumerable<MyTrade> trades)
            {
                // для каждой сделки добавляем для защитную пару стратегии
                var protectiveStrategies = trades.Select(t =>
                {
                    // выставляет тейк-профит в 40 пунктов
                    var takeProfit = new TakeProfitStrategy(t, 40);

                    // выставляет стоп-лосс в 20 пунктов
                    var stopLoss = new StopLossStrategy(t, 20);

                    return new TakeProfitStopLossStrategy(takeProfit, stopLoss);
                });

                ChildStrategies.AddRange(protectiveStrategies);
            }
        }
Автор топика
Спасибо:

tmt

Фотография
Дата: 13.01.2012
Ответить


просмотрев пример sma для quik. Увидел, что сначало объявляется класс SmaStrategy, а потом _strategy присваиваем саму стратегию, после уже _strategy.Start();
Код
_strategy = new SmaStrategy(_candleManager, new SimpleMovingAverage { Length = 80 }, new SimpleMovingAverage { Length = 10 }, _timeFrame)
				{
					Volume = 1,
					Security = _lkoh,
					Portfolio = Portfolios.SelectedPortfolio,
					Trader = _trader,
				};

Но вот мне не нужны машки... как реализовать?
Автор топика
Спасибо:

tmt

Фотография
Дата: 13.01.2012
Ответить


сделал вот так, вроде как должно работать, но ошибка "\"SampleSmartConsole.Program.buy.OpenPosition()\": не найден метод, пригодный для переопределения"

Код
namespace SampleSmartConsole
{
	using System;
    using System.Net;
	using System.Linq;
	using System.Threading;
    using System.Collections.Generic;

	using Ecng.Collections;
	using Ecng.Common;

	using StockSharp.BusinessEntities;
	using StockSharp.Smart;
	using StockSharp.Algo;
    using StockSharp.Algo.Strategies;

	class Program
	{
		private static Security _instrument;
		private static Portfolio _portfolio;
        private static MarketDepth _depth;
        private static Position _position;
        private static buy _strategy;

		static void Main()
		{
			try
			{
				// для теста выбираем бумагу
				const string secCode = "RIH2";

				//Console.Write("Введите логин: ");
				//var login = Console.ReadLine();
                var login = "ST12858";

				//Console.Write("Введите пароль: ");
				//var password = Console.ReadLine();
                var password = "8YDJ7E";

				//Console.Write("Введите номер счета, через который будет выставлена заявка: ");
				//var account = Console.ReadLine();
                var account = "ST12858-RF-01";

                IPAddress ipadress = IPAddress.Parse("95.131.26.246");
                IPEndPoint ip = new IPEndPoint(ipadress, 8090);
                
				using (var waitHandle = new AutoResetEvent(false))
				{
					// создаем шлюз к Smart-у
					using (var trader = new SmartTrader(login, password, ip))
					{
						// подписываемся на событие успешного подключения
						// все действия необходимо производить только после подключения
						trader.Connected += () =>
						{
							Console.WriteLine("Подключение было произведено успешно.");

							// извещаем об успешном соединени
							waitHandle.Set();
						};

						Console.WriteLine("Производим подключение...");

						trader.Connect();

						// дожидаемся события об успешном соединении
						waitHandle.WaitOne();

						// подписываемся на все портфели-счета
						trader.NewPortfolios += portfolios =>
						{
							// необходимое условие работы в SmartCOM
							portfolios.ForEach(trader.RegisterPortfolio);

							if (_portfolio == null)
							{
								_portfolio = portfolios.FirstOrDefault(p => p.Name == account);

								if (_portfolio != null)
								{
									Console.WriteLine("Портфель {0} появился.", account);

                                    if (_instrument != null && _depth != null && _position != null)
										waitHandle.Set();
								}
							}
						};

						// подписываемся на событие появление инструментов
                        trader.NewPositions += positions =>
                        {
                            if (_position == null)
                            {
                                _position = positions.FirstOrDefault(sec => sec.Security.Code == secCode);
                                if (_position != null)
                                {
                                    Console.WriteLine("Информация о портфеле появилась.");
                                    if (_portfolio != null && _depth != null && _instrument != null)
                                        waitHandle.Set();
                                }
                            }
                        };
						trader.NewSecurities += securities =>
						{
							if (_instrument == null)
							{
                                // находим инструмент и присваиваем ее переменной _instrument
                                _instrument = securities.FirstOrDefault(sec => sec.Code == secCode && sec.Type == SecurityTypes.Future);

								if (_instrument != null)
								{
									Console.WriteLine("Инструмент появился.");
                                    trader.RegisterQuotes(_instrument); // запускаем экспорт стакана
                                    if (_portfolio != null && _depth != null && _position != null)
										waitHandle.Set();
								}
							}
						};

                        // подписываемся на событие обновления стакана
                        trader.QuotesChanged += depths =>
                        {
                            if (_depth == null && _instrument != null)
                            {
                                _depth = depths.FirstOrDefault(d => d.Security == _instrument);

                                if (_depth != null)
                                {
                                    Console.WriteLine("Стакан появился.");

                                    if (_portfolio != null && _position != null)
                                       waitHandle.Set();
                                }
                            }
                        };

						// подписываемся на событие появления моих новых сделок
						trader.NewMyTrades += myTrades =>
						{
							foreach (var myTrade in myTrades)
							{
								var trade = myTrade.Trade;
								Console.WriteLine("Сделка {0} по цене {1} по бумаге {2} по объему {3} в {4}.", trade.Id, trade.Price, trade.Security.Code, trade.Volume, trade.Time);
							}
						};

						Console.WriteLine("Дожидаемся появления в программе инструмента и портфеля {0}...".Put(account));

						// запускаем экспорт по инструментам и портфелям
						trader.StartExport();

						// дожидаемся появления портфеля и инструмента
						waitHandle.WaitOne();

						trader.SecuritiesChanged += securities =>
						{
							// если инструмент хоть раз изменился (по нему пришли актуальные данные)
							if (securities.Contains(_instrument))
								waitHandle.Set();
						};

						Console.WriteLine("Дожидаемся обновления данных по инструменту...");

						// запускаем обновление по инструменту
						trader.RegisterSecurity(_instrument);
						waitHandle.WaitOne();

						// запоминаем первоначальное значение середины спреда
                        var totb = _depth.TotalBidsVolume;
                        var tota = _depth.TotalAsksVolume;

                        int maxaskv = 0;
                        int maxbidv = 0;
                        int maxaskp = 0;
                        int maxbidp = 0;
                        var asks = _depth.Asks;
                        var bids = _depth.Bids;
                        for (int i = 0; i < 50; i++)
                        {
                            if (asks[i].Volume > maxaskv) { maxaskv = (int)asks[i].Volume; maxaskp = (int)asks[i].Price; }
                            if (bids[i].Volume > maxbidv) { maxbidv = (int)bids[i].Volume; maxbidp = (int)bids[i].Price; }
                            //Console.WriteLine("asks {0}", asks[i].Price);
                            //Console.WriteLine("asks {0}", asks[i].Volume);
                        }
                        Console.WriteLine("maxask {0}", maxaskv);
                        Console.WriteLine("maxbid {0}", maxbidv);

						if (_instrument.BestBid == null)
							throw new Exception("Нет лучшего бида для котировки.");

                        Console.WriteLine("общий объем bid {0}", totb);
                        Console.WriteLine("общий объем ask {0}", tota);
                        // objem = _instrument.OpenInterest;
                        //Console.WriteLine("открытые позиции {0}", objem);
                        //Console.WriteLine("asks {0}", asks[0]);

						while (true)
						{
                            var objem = _position.CurrentValue;
                            Console.WriteLine("открытые позиции {0}", objem);


                            _strategy = new buy();
                            _strategy.Start();

                            //Strategy.Start();
                            /*
							// если спред вышел за пределы нашего диапазона
                            if (totb > tota)
                            {
                                var order = new Order
                                {
                                    Portfolio = _portfolio,
                                    Price = _instrument.ShrinkPrice(_instrument.BestAsk.Price),
                                    Security = _instrument,
                                    Volume = 1,
                                    Direction = OrderDirections.Sell,
                                };
                                trader.RegisterOrder(order);
                                Console.WriteLine("Заявка {0} зарегистрирована.", order.Id);
                                //break;
                            }
                            else
                            {
                                var order = new Order
                                {
                                    Portfolio = _portfolio,
                                    Price = _instrument.ShrinkPrice(_instrument.BestBid.Price),
                                    Security = _instrument,
                                    Volume = 1,
                                    Direction = OrderDirections.Buy,
                                };
                                trader.RegisterOrder(order);
                                Console.WriteLine("Заявка {0} зарегистрирована.", order.Id);
                                //break;
                            }
								//Console.WriteLine("Текущее значение середины спреда {0:0.##}", _instrument.BestBid.Price + mid);
                            */
							// ждем 1 секунду
							Thread.Sleep(1000);
						}

						// останавливаем экспорт
						trader.StopExport();
					}
				}
			}
			catch (Exception ex)
			{
				Console.WriteLine(ex);
			}
		}

        public class buy : Strategy
        {
            public override void OpenPosition()
            {
                var objem = _position.CurrentValue;
                if (objem == 0)
                {
                    // создаем заявку для открытия длинной позиции
                    //var longPos = this.BuyAtMarket();
                    var longPos = new Order
                    {
                        Portfolio = _portfolio,
                        Price = _instrument.ShrinkPrice(_instrument.BestAsk.Price),
                        Security = _instrument,
                        Volume = 1,
                        Direction = OrderDirections.Sell,
                    };

                    // регистрируем правило, отслеживающее появление новых сделок по заявке
                    this
                    .When(longPos.NewTrades())
                    .Do(OnNewOrderTrades)
                    .Periodical(() => longPos.IsMatched());

                    // отправляем заявку на регистрацию
                    RegisterOrder(longPos);
                }
            }

            private void OnNewOrderTrades(IEnumerable<MyTrade> trades)
            {
                // для каждой сделки добавляем для защитную пару стратегии
                var protectiveStrategies = trades.Select(t =>
                {
                    // выставляет тейк-профит в 40 пунктов
                    var takeProfit = new TakeProfitStrategy(t, 40);

                    // выставляет стоп-лосс в 20 пунктов
                    var stopLoss = new StopLossStrategy(t, 20);

                    return new TakeProfitStopLossStrategy(takeProfit, stopLoss);
                });

                ChildStrategies.AddRange(protectiveStrategies);
            }
        }
	}
}
Автор топика
Спасибо:

vfreeman

Фотография
Дата: 13.01.2012
Ответить


tmt Перейти
сделал вот так, вроде как должно работать, но ошибка "\"SampleSmartConsole.Program.buy.OpenPosition()\": не найден метод, пригодный для переопределения"

Код
namespace SampleSmartConsole
{
	using System;
    using System.Net;
	using System.Linq;
	using System.Threading;
    using System.Collections.Generic;

	using Ecng.Collections;
	using Ecng.Common;

	using StockSharp.BusinessEntities;
	using StockSharp.Smart;
	using StockSharp.Algo;
    using StockSharp.Algo.Strategies;

}


возможно не хватает нужного

Код
using XXX;


где собственно и реализован метод OpenPosition

на нечто подобное недавно наступал
Спасибо:

BigBen

Фотография
Дата: 13.01.2012
Ответить


[quote=tmt;15613]сделал вот так, вроде как должно работать, но ошибка "\"SampleSmartConsole.Program.buy.OpenPosition()\": не найден метод, пригодный для переопределения"

public class buy : Strategy
{
public override void OpenPosition()
{
....................................................
}
}

В базовом классе Strategy отсутствует метод OpenPosition(), так что переопределять нечего.
Спасибо:

tmt

Фотография
Дата: 13.01.2012
Ответить


BigBen Перейти
В базовом классе Strategy отсутствует метод OpenPosition(), так что переопределять нечего.

Подскажите пожалуйста, как тогда делать? (я это брал из примера https://stocksharp.ru/do...27-985a-1654e8d9cfc1.htm )

Цитата:
возможно не хватает нужного
using XXX;

Ссылки на сборки все указаны =)
Автор топика
Спасибо:

BigBen

Фотография
Дата: 13.01.2012
Ответить


В указанном примере присутствует следующая строка:

public void OpenPosition()

Модификатор override не указан.
Спасибо:

tmt

Фотография
Дата: 13.01.2012
Ответить


BigBen Перейти
В указанном примере присутствует следующая строка:

public void OpenPosition()

Модификатор override не указан.

без нее компилируется программа, но при запуске (видимо как доходит до этого класса) прога вылетает
Автор топика
Спасибо:

BigBen

Фотография
Дата: 14.01.2012
Ответить


Что значит "прога вылетает"?
Спасибо:

tmt

Фотография
Дата: 14.01.2012
Ответить


BigBen Перейти
Что значит "прога вылетает"?

ну вообще программа у меня не должна выключаться, а она выключается.. незнаю как это еще объяснить
Автор топика
Спасибо:

BigBen

Фотография
Дата: 14.01.2012
Ответить


Какие сообщения выводятся на консоль?
Программа зациклилась?
Программа завершает свою работу?
Спасибо:

tmt

Фотография
Дата: 14.01.2012
Ответить


BigBen Перейти
Какие сообщения выводятся на консоль?
Программа зациклилась?
Программа завершает свою работу?

Последнее что должно выводить "открытые позиции" -кол-во купленных акций (очень быстро.. ничего толком не увидишь)
Если честно, то я не знаю зациклилась ли она или нет, но она выключается, хотя она не должна выключаться, а должна крутиться в цикле..

Я чуть поже попробую еще посмотреть что это может быть, щас параллельно изучаю сам язык си шарп просто =)
Автор топика
Спасибо:

BigBen

Фотография
Дата: 16.01.2012
Ответить


Чтобы окно не закрывалось, введи после
trader.StopExport(); // останавливаем экспорт
например,
Console.WriteLine("StopExport");
Console.ReadKey();

и после
Console.WriteLine(ex);
например,
Console.WriteLine("catch");
Console.ReadKey();


До нажатия любой клавиши окно не закроется.
Спасибо:

tmt

Фотография
Дата: 16.01.2012
Ответить


BigBen Перейти
Чтобы окно не закрывалось, введи после
trader.StopExport(); // останавливаем экспорт
например,
Console.WriteLine("StopExport");
Console.ReadKey();

и после
Console.WriteLine(ex);
например,
Console.WriteLine("catch");
Console.ReadKey();


До нажатия любой клавиши окно не закроется.

Спасибо, я после Console.WriteLine(ex); забыл поставить реадкей.. Вот что выводит


на 247 строке у меня вот что
Код
246  buy _strategy = new buy();
247  _strategy.Start();
Автор топика
Спасибо:

Alexander

Фотография
Дата: 16.01.2012
Ответить


Советую хотя бы раз прочитать документацию. Количество подобных вопросов уменьшится. :)
В документации и примерах есть как именно инициализировать, создавать и запускать стратегию.
Спасибо:

tmt

Фотография
Дата: 16.01.2012
Ответить


А где мне искать, какой шлюз? я почитал, и в примерах шлюз создается
Код
var trader = new SmartTrader(login, password, ip)
а инициализация вроде как понятно. как ее делать..
<имя класса> <объект> = new <класс>
Автор топика
Спасибо:

BigBen

Фотография
Дата: 17.01.2012
Ответить


Для начала, в посте https://stocksharp.ru/posts/m/15613/
buy _strategy = new buy();
_strategy.Start();

находятся внутри бесконечного цикла
while (true)

Эачем?
Спасибо:

tmt

Фотография
Дата: 17.01.2012
Ответить


BigBen Перейти
Для начала, в посте https://stocksharp.ru/posts/m/15613/
buy _strategy = new buy();
_strategy.Start();

находятся внутри бесконечного цикла
while (true)

Эачем?

Из цикла я давно убрал, поставил перед (да и цикл думаю можно убрать, если класс будет повторяться)
Автор топика
Спасибо:

BigBen

Фотография
Дата: 17.01.2012
Ответить


Не знаю, как в последней версии программы, но по тексту в https://stocksharp.ru/posts/m/15613/ не видно, чтобы вызывался метод OnStarting(), т.е. отсутствует

protected override void OnStarting()
{
.........................................................
}
Спасибо:
1 2  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy