Стратегии и роботы > Ограничение докупки временем

Обсуждение, описание стратегий и роботов, идеи для стратегий
RuDi
Сообщения: 11
Зарегистрирован: 01 июл 2022, 08:11
Благодарил (а): 1 раз

Ограничение докупки временем

Непрочитанное сообщение RuDi » 01 июл 2022, 09:15

Добрый день.
Совершенно не разбираюсь в написании кода, но очень хочется автоматизировать торговлю. Помогите пжл.
Если робот купил, но RSI все еще находится в значении меньше 30, то нужно остановить последующие срабатывание сигнала на покупку на 5 мин, но на сигнал о продаже не должно распространятся.
Аналогично продажа.
Если робот продал, но RSI все еще находится в значении выше 60, то нужно остановить последующие срабатывание сигнала на продажу на 5 мин, но на сигнал о покупке не должно распространятся.

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

function Initialize()
{
   StrategyName = "MyMTS1";
   AddParameter("Period", 10, "", 1);
   AddInput("Input1", Inputs.Candle, 10, true, "");
   LongLimit = 1;
   ShortLimit = -1;
}

function OnUpdate()
{
   /// ПРАВИЛО 1
   if ( (RSI(Input1.Close, Period) > 60) )
   {
      EnterShort(1);
   }

   /// ПРАВИЛО 2
   if ( (RSI(Input1.Close, Period) < 30) )
   {
      EnterLong(1);
   }

}

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

Re: Ограничение докупки временем

Непрочитанное сообщение evge » 01 июл 2022, 10:37

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

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

function Initialize()
{
   StrategyName = "MyMTS1";
   AddParameter("Period", 10, "", 1);
   AddParameter("Bars", 25, "Кол-во баров остановки торговли в туже сторону", 1);
   AddInput("Input1", Inputs.Candle, 10, true, "");
   LongLimit = 1;
   ShortLimit = -1;
   AddGlovalVariable("NSell", Types.Int, 0);
   AddGlovalVariable("NBuy", Types.Int, 0);
}

function OnUpdate()
{
   NSell++; NBuy++;

   /// ПРАВИЛО 1
   if ( (RSI(Input1.Close, Period) > 60) && NSell >= Bars )
   {
      NSell = 0;
      EnterShort(1);
   }

   /// ПРАВИЛО 2
   if ( (RSI(Input1.Close, Period) < 30) && NBuy >= Bars )
   {
      NBuy = 0;
      EnterLong(1);
   }

}
никогда такого не было и вот опять


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

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

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