Блог им. robotrade

Ну и дураааааак!!!

Давайте представим себе человека, который не умеет торговать от слова «совсем». Пришел на рынок и сразу купил. Или продал. Может, монетку бросил — не важно. Выбор инструментов, тренды-откаты, индикаторы… Неее, ни о чем подобном не слышал.

Вариантов два:

1. пареньку не повезло — обычная история. Рынок пошел не туда. А чего ожидал этот лошара мальчуган? Или блондинка девица.
В этом варианте три стандартные возможности: закрыться с убытком, еще купить (усредниться: цена-то интереснее стала), просто сидеть и ждать (авось, цена обратно вернется, хоть в ноль удастся закрыться).

2. случилось невероятное — наш перец оказался везучим и увидел прибыль.
Тут тоже три возможности: зафиксировать прибыль, ничего не делать (авось, цена дальше пойдет), и бредовая: еще купить (вдруг он додумался не на всю котлету сразу закупиться и что-то в загашнике у него еще осталось).

Давайте мыслить позитивно. Пусть наш персонаж будет на этот раз везучим, и он получил-таки прибыль. Однако, он все же торговать не умеет, поэтому он не додумался зафиксировать прибыль, а… что бы поабсурднее-то придумать. А, так он еще купил! Не, он не дожидался отката. Прямо в ночь, на вечерке, на самых хаях по рынку вмазал с диким проскальзыванием. Ну, вообще не в теме человек… Бывает.

Веселиться, так веселиться… А пусть ему во второй раз повезет и цена еще чуть дальше пойдет. Что должен сделать здравомыслящий человек, когда увидит не просто прибыль, а очень приличную прибыль? Не, это не наш случай. Наш-то опять купил!

В общем, я сокращу тут историю. Он был совсем упоротым и накуренным, поэтому каждый раз покупал и покупал, когда можно было зафиксировать жирную-прежирную прибыль. И получил результаты, указанные ниже.

Тут нет ни фундаментального анализа рынка, ни технического. Тут вообще ничего нет, кроме прикольного money management, который позволяет вам сократить риски.

Желаете писать роботов в 90 строк кода — изучайте OsEngine. Чат алготрейдеров здесь.

Ну и дураааааак!!!

Ну и дураааааак!!!


using System.Collections.Generic;
using OsEngine.Entity;
using OsEngine.OsTrader.Panels;
using OsEngine.OsTrader.Panels.Tab;


namespace OsEngine.Robots.Trend
{
    public class MyTrend : BotPanel
    {
        public MyTrend(string name, StartProgram startProgram) : base(name, startProgram)
        {
            TabCreate(BotTabType.Simple);
            _tab = TabsSimple[0];
            _tab.CandleFinishedEvent += _tab_CandleFinishedEvent;

            Percentage = CreateParameter("Percentage", 0.2m, 0.1m, 3, 0.1m);
        }

        public StrategyParameterDecimal Percentage;     // процент от цены, через который мы пирамидимся
        private BotTabSimple _tab;

        decimal LastPrice = 0;                          // цена последней сделки
        Direction CurDirection = Direction.None;        // текущее направление торговли

        public enum Direction
        {
            None = 0, Up = 1, Down = -1
        }

        public override string GetNameStrategyType()
        {
            return "MyTrend";
        }

        public override void ShowIndividualSettingsDialog()
        {

        }

        private void _tab_CandleFinishedEvent(List candles)
        {
            List positions = _tab.PositionsOpenAll;
            if (positions.Count == 0)
            {
                if (CurDirection != Direction.Up)   // в первый раз вообще пофиг, куда и когда открываться - сразу покупаем, если позиций нет
                {
                    _tab.BuyAtMarket(1);
                    CurDirection = Direction.Up;
                    LastPrice = _tab.PriceBestAsk;
                }
                else
                {
                    _tab.SellAtMarket(1);
                    CurDirection = Direction.Down;
                    LastPrice = _tab.PriceBestBid;
                }
                return;
            }

            // здесь уже точно есть поза - проверяем направление и цену
            if (CurDirection == Direction.Up && (_tab.PriceBestAsk - LastPrice) / LastPrice * 100 > Percentage.ValueDecimal)
            {   // добавляем лонг - пирамидимся
                _tab.BuyAtMarket(1);
                LastPrice = _tab.PriceBestAsk;
                return;
            }
            else if (CurDirection == Direction.Down && (LastPrice - _tab.PriceBestBid) / LastPrice * 100 > Percentage.ValueDecimal)
            {   // добавляем шорт - пирамидимся
                _tab.SellAtMarket(1);
                LastPrice = _tab.PriceBestBid;
                return;
            }
            
            if ((CurDirection == Direction.Up && (LastPrice - _tab.PriceBestAsk) / LastPrice * 100 > Percentage.ValueDecimal)
                || (CurDirection == Direction.Down && (_tab.PriceBestBid - LastPrice) / LastPrice * 100 > Percentage.ValueDecimal))
            {   // поехали против тренда - кроем всё
                //_tab.CloseAllAtMarket(); -- не срабатывает корректно почему-то: не закрывает все на одной свече
                foreach (Position p in positions)
                {
                    if (p.State == PositionStateType.Open)
                    {
                        _tab.CloseAtMarket(p, p.OpenVolume);
                    }
                }
            }
        }   // _tab_CandleFinishedEvent()
    }
}

★12
42 комментария
Вариантов два:
Этих вариантов всегда только два. Просто «дурак» знает, что ничего не знает, а «профи» думает, что знает…
avatar
Deimon, строго наоборот
avatar
Во, это про меня, дурака.
avatar
Это на одной выборке или усреднённые данные тестирования по разным выборкам данных?
avatar
Burzhui, инструмент один, период один. Разные Percentage. Оптимизируемый параметр.
avatar
(1:10) || algo, понял
avatar
Пусть купит искуственный интеллект… если дурак или лошара...

avatar
Astrolog, труд по доставке вашего, и моего сообщения и его публикации в вебе уже автоматирован.
вы пользуетесь.

пользуйтесь тогда голубями.
и сделки тоже письмами  брокеру отправляйте.

так нет терминалом пользуетесь.
и автоматизацию ругаете.

напоминает феминистку  которая пользуется всем что создано мужчинами вокруг (придумано и реализовано).
и называет мужиков козлами.
avatar
I did exactly the wrong thing. The cotton showed me a loss and I kept it. The wheat showed me a profit and I sold it out. © Обязаны знать кто
avatar
Слишком простенько для рабочей системы. Форвад есть у этих тестов?
avatar
Joni2, это универсальное правило. Достаточно для рабочей системы.
Тесты сами сделайте. Исходник выложен.

Я не оптимизировал ничего. Картинки — по двум разным Percentage на одной и той же выборке.
avatar
(1:10) || algo, смотрел как-то давно OS E. Сырая и с багами. Автор предлагал фиксить за него ошибки. Ситуация изменилась или по старому?
avatar
Sergey, баги есть и всегда будут. Находятся и фиксятся. При расширении функционала новые появляются, и по кругу. Проект живой, код открытый.
avatar
Sergey, 
По основному функционалу все баги давно выловлены. Уже несколько лет торгую — все нормально.
Там правда постоянно что-то новое добавляется. Но туда не лезу, поэтому не знаю глючно ли…
avatar
(1:10) || algo, Что тут тестировать то? Рабочая система на порядок должна быть и сложнее и изощреннее)
avatar
Joni2, чем проще, тем лучше. Чтоб зарабатывать, не обязательно быть гурманом.
avatar
(1:10) || algo, Иной раз простота — хуже воровства) На реальном рынке такие простые правила уже дано не работают конечно (как и пересечения средних и прочая банальщина). Но для того кто начинает изучать ваш пакет и алго — такой пример вполне сгодится и может быть началом длинного и трудного пути. Предупреждайте хотя бы начинающих — что работать все же придется и много и результат вашей работы — заранее неизвестен.
avatar
Joni2, пересечения средних работают. Это тоже. На вполне себе реальном рынке.
avatar
 А средняя сделка какая?
avatar
Кот Матроскин, это демонстрация пирамидинга без оптимизации. Покупается 1 штука фигзнаетчего на каждом шаге.
avatar
(1:10) || algo, 
да я понимаю)
Это я из любопытства спросил. Обычно такие простые вещи с очень маленькой средней сделкой — т.е. в реальном мире совершенно не торгуемые. Или торгуемые, но через танцы с бубном
avatar
Кот Матроскин, а в тренд можно сколько угодно запихать…
avatar
а ты тестил на тиках или на свечках в OS?
avatar
Йонатан Берсон, без разницы. На любых ТФ, в которые Percentage влезает.
avatar
(1:10) || algo, ну х.з я когда тестил там у меня на тиках и свечках был разный результат ;)
avatar
Йонатан Берсон, что логично: чем больше ТФ, тем грубее. Вы ж по закрытию свечи только проверяете, что там с Percentage относительно предыдущей покупки. На недельках попробуйте =)))
avatar
(1:10) || algo, на недельках понятно что будет… я на М15 и М5 тестил в основном)
avatar
Йонатан Берсон, а инструмент и период какой, как там?
avatar
(1:10) || algo, Ри и Br за пол года, в ломы было больше склейки качать.  Результат был так се, потом из поля интереса пропало из-за других нагрузок, думаю зимой опять начать пилить когда времени будет больше
avatar
а в строчке:
Percentage = CreateParameter("Percentage", 0.2m, 0.1m, 3, 0.1m);
что за параметры 0.2m, 0.1m, 3, 0.1m?
avatar
Виталий, создается оптимизируемый параметр:
1. метка/название в форме параметров
2. стандартное значение
3-5. значения для оптимизатора: от, до, шаг
avatar
спасибо!
avatar
а ваши та системы более сложные или вот так просто и рубите капусту?
avatar
Виталий, это демонстрационная штука. Эффективнее влить всё сразу и высиживать тренд, либо сразу стопиться.
avatar
(1:10) || algo, Процентные шаги цены -правильный путь.Их всего 8 или 10.Это значит что цель час графика от 1% до 2 % при шаге (размере свечи) 0.2%.Мораль -сначала считаем средний размах свечи те размер шага и далее считаем шаги до 10. Коррекция в 2 раза меньше те  0.5%-1% и это 4-5 шагов цены на 1 час тайме. Эта стратегия основана на свечном анализе.Свечной анализ предел в торговле.Поглощение и Харами — это 2 главных сигнала входа.Выход и защита прибыли зависит от жадности трейдера. Шаг 4х часа 0.4%. 2х час 0.3%.День  0.6% для акций и 1.2%-1.8% для фьючерсов типа нефть. Стоп лосс равен одной средней свече тайма при правильном входе типа Харами .
avatar
(1:10) || algo, странный чат у вас.только зашел, матом не ругался, а через 5 мин меня админ выкинул из чата.Программисты все такие нервные? Представился тренером для гур.Так назвали сумасшедшим?
avatar
ezomm, гг =) а зачем понтами трясти? :) обычно поглумятся сначала, а уж потом банят )
avatar
(1:10) || algo, так я не парюсь.Мне надо чат с гурами чтобы их тренировать.
avatar
ezomm, ну, вам-то надо, а гурам это зачем? :)
Можете на кошках потренироваться или на мне. Я не гурий, но охотно впитаю всё, что вы мне расскажете!
avatar
Браво, ezoom за конкретику.
Тех.задания берете на создание робота?
avatar
AstonM, Я не программист.Баловался в Метастоке 7.2 с Бейсиком.Это давно было.В 2007  я все понял и выкинул проги  ВА и ТА.Просто я долго размышлял и делал выводы.Опыт делает свое дело.Я глазами торгую.
avatar
AstonM, я могу взять ваше техзадание ) Если алгоритм интересный, то бесплатно, а если не интересный, то за деньги.
avatar

теги блога (1:10) || algo

....все тэги



UPDONW
Новый дизайн