(1:10) || algo
(1:10) || algo личный блог
04 августа 2020, 12:45

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

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

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

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()
    }
}

42 Комментария
  • Deimon
    04 августа 2020, 13:17
    Вариантов два:
    Этих вариантов всегда только два. Просто «дурак» знает, что ничего не знает, а «профи» думает, что знает…
  • 0xFF0000FF
    04 августа 2020, 13:30
    Во, это про меня, дурака.
  • Burzhui
    04 августа 2020, 13:32
    Это на одной выборке или усреднённые данные тестирования по разным выборкам данных?
  • Astrolog
    04 августа 2020, 13:43
    Пусть купит искуственный интеллект… если дурак или лошара...

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн