Стратегии и роботы > Усреднение!

Обсуждение, описание стратегий и роботов, идеи для стратегий
Orange2000
Сообщения: 44
Зарегистрирован: 13 мар 2019, 00:45
Благодарил (а): 36 раз
Поблагодарили: 1 раз

Re: Усреднение!

Непрочитанное сообщение Orange2000 » 13 апр 2019, 21:29

буду тестировать. больше интересует доллар)) если от лонга

BugsDigger
Сообщения: 338
Зарегистрирован: 11 ноя 2018, 17:11
Благодарил (а): 21 раз
Поблагодарили: 42 раза

Re: Усреднение!

Непрочитанное сообщение BugsDigger » 14 апр 2019, 07:29

Orange2000 писал:

> в чем подвох?

В том, что это игра против рынка. Она м. идти успешно "до поры - до времени", потом из спекулянта вы можете превратиться в долговременного инвестора, если покупаете на спадах (не зря стратегия называется "Invest positive"), или получить margin call, если продаете на повышениях.

Orange2000
Сообщения: 44
Зарегистрирован: 13 мар 2019, 00:45
Благодарил (а): 36 раз
Поблагодарили: 1 раз

Re: Усреднение!

Непрочитанное сообщение Orange2000 » 16 апр 2019, 11:37

Евгений доброе утро!
В режиме советника запустил на фуче газпрома
Стартовая 3 лота
шаг 0.1%
докупка 1 лот.

Он когда все распродает в ноль опять совершает сделку на СТАРТОВЫЙ Объем, пичем не правильным уровням
Снимок.PNG
Снимок.PNG (24.52 КБ) 7040 просмотров


это можно поправить?

Аватара пользователя
evge
Администратор
Сообщения: 1652
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 64 раза
Поблагодарили: 303 раза
Контактная информация:

Re: Усреднение!

Непрочитанное сообщение evge » 16 апр 2019, 11:45

не понял, что не так?
распродал, купленное

продал в шорт и далее закрывает его.

Цена входа в противоположную сторону это "Текущая (Close) +\- дельта" заданная в параметрах

Так было и ранее при старте в стратегии StepByStep.

Когда стратегия стартует она открывает позицию не по текущей цене, а LMT ордером по цене лучше на дельту.

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

Orange2000
Сообщения: 44
Зарегистрирован: 13 мар 2019, 00:45
Благодарил (а): 36 раз
Поблагодарили: 1 раз

Re: Усреднение!

Непрочитанное сообщение Orange2000 » 16 апр 2019, 11:51

В целом не критично. Можно задать 1 лот как стартовое)
Изначально планировалось, что после старта робота в дальнейшем всегда продается-покупается 1 лот)

Аватара пользователя
evge
Администратор
Сообщения: 1652
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 64 раза
Поблагодарили: 303 раза
Контактная информация:

Re: Усреднение!

Непрочитанное сообщение evge » 16 апр 2019, 11:56

Если критично что-то, сообщайте, внесу исправления
никогда такого не было и вот опять

imaxyz
Сообщения: 1
Зарегистрирован: 11 авг 2019, 09:36

Re: Усреднение!

Непрочитанное сообщение imaxyz » 11 авг 2019, 10:05

Здравствуйте. Как немного переделать данного робота чтобы он делал покупки на дельту не в процентах а в пунктах. И проверял количество акций. Допустим я хочу покупать СберП до уровня 6р за акцию каждый рубль вниз, т.е. от текущей 194,83р я совершу 188 покупок. И задать для продажи шаг , например 12 руб, т.е. сделка которую я совершил первой закроется на Цена Сделки+12р. Также и все последующие сделки. Но в шорт открывать сделки стратегия может только от отдельно заданного уровня цены с отдельно заданным шагом для шорта. Все сделки равными лотами.

Аватара пользователя
evge
Администратор
Сообщения: 1652
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 64 раза
Поблагодарили: 303 раза
Контактная информация:

Re: Усреднение!

Непрочитанное сообщение evge » 12 авг 2019, 09:40

Здравствуйте!

Вот код, но я терминале его не проверял. Если будут проблемы сообщите.

Что изменилось:

Изменил дельту докупки \ продажи с % на пункты и разделил на Long и Short можно задать разные дельты.
Добавил отдельную дельту по закрытию, раздельно для Long и Short.

Нужно проверять, по поводу для Short ещё и уровень задать это возможно, но пока без.
Если протестировав всё устроит и нет ошибок, то добавлю и уровни от которых можно будет работать в long и short.

Код: Выделить всё

/**
**/

function Initialize()
{
   StrategyName = "UpAndDown";
   AddInput("Input1", Inputs.Candle, 5, true, "GAZP=МБ ЦК");
   AddParameter("StartQ", 3000, "Стартовое кол-во", 0);
   AddParameter("Q", 300, "Кол-во докупки", 0);
   AddParameter("LongDeltaPrice", 1.5, "LONG пунктов изменения цены для докупки и продажи", 0);
   AddParameter("LongDeltaPriceClose", 1.5, "LONG пунктов изменения цены для закрытия", 0);
   AddParameter("ShortDeltaPrice", 1.5, "SHORT пунктов изменения цены для докупки и продажи", 0);
   AddParameter("ShortDeltaPriceClose", 1.5, "SHORT пунктов изменения цены для закрытия", 0);
           
   AddGlobalVariable("xPrice", Types.Double, 10000000000.0);
   AddGlobalVariable("xPosition", Types.Double, 0.0);
   AddGlobalVariable("LastPrice", Types.DoubleList);
   AddGlobalVariable("Last", Types.Double, 0);
   AddGlobalVariable("MinPrice", Types.Double, 0);
   AddGlobalVariable("MaxPrice", Types.Double, 99999999);   
   AddGlobalVariable("Type", Types.Double, 1);
   
   AddGlobalVariable("N", Types.Int, 1); //направление "1" - Long, "-1" - Short
}

function OnUpdate()
{

// evge 13.04.2019 https://alfadirect4.ru
// модификация стратегии StepByStep от AlfaDirect

// evge 12.08.2019
// delta можно задавать раздельно для long и short и для закрытия long и short

// Переворот стратегии Long/Short
if (xPosition !=0 && CurrentPosition() == 0)
{
   N =- N;
   xPrice = 10000000000.0;
   LastPrice.Clear();
   xPosition = 0;
   MaxPrice = Double.MaxValue;
   MinPrice = 0;
}

double pos = CurrentPosition();
// Правило 1. если первый запуск, покупаем  StartQ
   if ( xPrice == 10000000000.0 && N > 0)
   {
       if ( (Q%LotSize() != 0) || (StartQ%LotSize() != 0) )
       {
          ShowMessage("StartQ или Q не кратно лоту. Робот остановлен !");
          Stop();
       }
       // Покупка StartQ
       if (StartQ > 0)       
       {
         EnterLongLimit(Input1.Close[0] + LongDeltaPrice, StartQ);
       }
         xPrice = Input1.Close[0];
    }
// Правило 1.1 старт для Short, продаем StartQ
   if ( xPrice == 10000000000.0 && N < 0)
   {
       if ( (Q%LotSize() != 0) || (StartQ%LotSize() != 0) )
       {
          ShowMessage("StartQ или Q не кратно лоту. Робот остановлен !");
          Stop();
       }
       // Продажа StartQ
       if (StartQ > 0)       
       {
         EnterShortLimit(Input1.Close[0] - ShortDeltaPrice, StartQ);
       }
         xPrice = Input1.Close[0];
    }
   
// Модуль проверки изменение позиции UP
   // если позиция выросла, добавляем уровень в список
   if (N > 0)
   {
      if ( pos > xPosition )   
      {     
           double a = xPrice;
           double b = xPosition;
                 
            while (pos - b > 0)
            {
               LastPrice.Add(a);
               a = a + LongDeltaPrice;
               b = b + Q;
             }           
           Last = xPrice;
           xPosition = pos;             
           LastPrice.Sort();
      }
      // если позиция снизилась, убираем уровень из списка
      else if ( pos < xPosition && LastPrice.Count >= 1 )
      {
         LastPrice.Sort();
         LastPrice.RemoveAt(0);
         Last = xPrice;
         xPosition = pos;             
      }   
   
      if ( LastPrice.Count <= 0 )
          MinPrice = Last;
       else
          MinPrice = LastPrice.Min();
   }
   
// Модуль проверки изменение позиции DOWN
   // если позиция снизилась, добавляем уровень в список
   if (N < 0)
   {
      if ( pos < xPosition )   
      {     
           double a = xPrice;
           double b = xPosition;
                 
            while (pos - b < 0)
            {
               LastPrice.Add(a);
               a = a - ShortDeltaPrice;
               b = b - Q;
             }           
           Last = xPrice;
           xPosition = pos;             
           LastPrice.Sort();
           LastPrice.Reverse();
      }
      // если позиция выросла, убираем уровень из списка
      else if ( pos > xPosition && LastPrice.Count >= 1 )
      {
         LastPrice.Sort();
         LastPrice.Reverse();
         LastPrice.RemoveAt(0);
         Last = xPrice;
         xPosition = pos;             
      }   
   
      if ( LastPrice.Count <= 0 )
          MaxPrice = Last;
       else
          MaxPrice = LastPrice.Max();
   }
   
                       
//Правило 2. Если цена упала и кол-во меньше допустимого,
//           то покупаем и добавляем цену покупки в начало списка
   if ( N > 0 && Input1.Close[0] < MinPrice - LongDeltaPrice && pos + Q <= LongLimit )
   {
      EnterLongLimit(Input1.Close[0] + LongDeltaPrice, Q);
        xPrice =  Input1.Close[0];
     }
//Правило 2.1. Если цена выросла и кол-во больше допустимого,
//           то продаем и добавляем цену продажи в начало списка
   if ( N < 0 && Input1.Close[0] > MaxPrice + ShortDeltaPrice && pos - Q >= ShortLimit )
   {
      EnterShortLimit(Input1.Close[0] - ShortDeltaPrice, Q);
        xPrice =  Input1.Close[0];
     }     
//Правило 3. Если цена выше цены из начала списка, то продаем и удаляем 0-й элемент списка
   if ( N > 0 && Input1.Close[0] >= MinPrice + LongDeltaPriceClose && pos > 0 )
    {
       CloseLongLimit(Input1.Close[0] - LongDeltaPriceClose, Q);
         xPrice =  Input1.Close[0];
     }
//Правило 3.1. Если цена ниже цены из начала списка, то покупаем и удаляем 0-й элемент списка
   if ( N < 0 && Input1.Close[0] <= MaxPrice - ShortDeltaPriceClose && pos < 0 )
    {
       CloseShortLimit(Input1.Close[0] + ShortDeltaPriceClose, Q);
         xPrice =  Input1.Close[0];
     }
}
никогда такого не было и вот опять

Balalayka
Сообщения: 38
Зарегистрирован: 21 сен 2018, 10:57
Благодарил (а): 2 раза
Поблагодарили: 3 раза

Re: Усреднение!

Непрочитанное сообщение Balalayka » 12 авг 2019, 13:14

Евгений добрый день!

Можете рассказать, что за функция с Clear?
В документации такого нет

Код: Выделить всё

LastPrice.Clear();

Аватара пользователя
evge
Администратор
Сообщения: 1652
Зарегистрирован: 04 фев 2016, 09:46
Откуда: Млечный путь, планета Земля
Благодарил (а): 64 раза
Поблагодарили: 303 раза
Контактная информация:

Re: Усреднение!

Непрочитанное сообщение evge » 12 авг 2019, 13:19

Balalayka писал(а): что за функция с Clear?


Добрый день!

Конечно, вот подсказка: List<T> Class Методы

Clear()
Удаляет из коллекции List<T> все элементы.
никогда такого не было и вот опять


Вернуться в «Стратегии и роботы»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 5 гостей