Стратегии и роботы > Stop приостановка работы робота на 10 минут

Обсуждение, описание стратегий и роботов, идеи для стратегий
botanik9
Сообщения: 5
Зарегистрирован: 24 сен 2018, 11:47
Благодарил (а): 2 раза

Stop приостановка работы робота на 10 минут

Непрочитанное сообщение botanik9 » 24 сен 2018, 15:12

Доброе время суток всем. № день бьюсь над проблемой и соответственно курю форумы. Как сделать чтобы при срабатывании стоп робот перестал работать на 10 минут а после снова начал алгоритм работы ?

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

Re: Stop приостановка работы робота на 10 минут

Непрочитанное сообщение evge » 24 сен 2018, 16:29

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

Как вариант, для рабочего ТФ стратегии = M1 и ниже.
Если ТФ будет выше, то время стопа будет считаться не в момент события, а кратно таймфрейму.
Тоже будет работать, но с погрешностью равной ТФ.

В примере пауза сработает в минутах и для стопа и для тейка по BreakingStop

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

/**

**/

function Initialize()
{
   StrategyName = "B";
   AddParameter("Pause", 20, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 100;
   ShortLimit = -100;
   
   AddGlobalVariable("StopTime", Types.Double, 0);
}

function OnUpdate()
{
   if (BarDate(0) != BarDate(1) && StopTime != 0) StopTime = -(BarTime(1).TotalMinutes - StopTime);
   if (CurrentPosition() == 0 && StopTime == 0) StopTime = BarTime().TotalMinutes;
   if (BarTime().TotalMinutes - StopTime <= Pause) return;

   var I = Input1;
   
   if (I.Open[0] < I.Close[0] && CurrentPosition() == 0)
      {
      EnterShort();
      BreakingStop(0.05, 0.1, SignalPriceType.DeltaInPercentFromAveragePrice);
      StopTime = 0;
      }
   if (I.Open[0] > I.Close[0] && CurrentPosition() == 0)
      {
      EnterLong();
      BreakingStop(0.05, 0.1, SignalPriceType.DeltaInPercentFromAveragePrice);
      StopTime = 0;
      }
   
}
никогда такого не было и вот опять

botanik9
Сообщения: 5
Зарегистрирован: 24 сен 2018, 11:47
Благодарил (а): 2 раза

Re: Stop приостановка работы робота на 10 минут

Непрочитанное сообщение botanik9 » 24 сен 2018, 16:50

Спасибо большое

Asp
Сообщения: 59
Зарегистрирован: 20 янв 2020, 11:17
Благодарил (а): 10 раз
Поблагодарили: 1 раз

Re: Stop приостановка работы робота на 10 минут

Непрочитанное сообщение Asp » 09 фев 2022, 21:54

evge писал(а):Здравствуйте!

Как вариант, для рабочего ТФ стратегии = M1 и ниже.
Если ТФ будет выше, то время стопа будет считаться не в момент события, а кратно таймфрейму.
Тоже будет работать, но с погрешностью равной ТФ.

В примере пауза сработает в минутах и для стопа и для тейка по BreakingStop

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

/**

**/

function Initialize()
{
   StrategyName = "B";
   AddParameter("Pause", 20, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 100;
   ShortLimit = -100;
   
   AddGlobalVariable("StopTime", Types.Double, 0);
}

function OnUpdate()
{
   if (BarDate(0) != BarDate(1) && StopTime != 0) StopTime = -(BarTime(1).TotalMinutes - StopTime);
   if (CurrentPosition() == 0 && StopTime == 0) StopTime = BarTime().TotalMinutes;
   if (BarTime().TotalMinutes - StopTime <= Pause) return;

   var I = Input1;
   
   if (I.Open[0] < I.Close[0] && CurrentPosition() == 0)
      {
      EnterShort();
      BreakingStop(0.05, 0.1, SignalPriceType.DeltaInPercentFromAveragePrice);
      StopTime = 0;
      }
   if (I.Open[0] > I.Close[0] && CurrentPosition() == 0)
      {
      EnterLong();
      BreakingStop(0.05, 0.1, SignalPriceType.DeltaInPercentFromAveragePrice);
      StopTime = 0;
      }
   
}

А как можно написать чтобы стратегия остановилась по достижении определенной прибыли, а с на ступлением нового дня запустилась вновь?
Мусор в твоём глазу больше уродует картину мироздания чем пятна на солнце

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

Re: Stop приостановка работы робота на 10 минут

Непрочитанное сообщение evge » 10 фев 2022, 23:22

Asp писал(а):А как можно написать чтобы стратегия остановилась по достижении определенной прибыли, а с на ступлением нового дня запустилась вновь?


Как останавливать торговлю при достижении дохода за день
никогда такого не было и вот опять

Asp
Сообщения: 59
Зарегистрирован: 20 янв 2020, 11:17
Благодарил (а): 10 раз
Поблагодарили: 1 раз

Re: Stop приостановка работы робота на 10 минут

Непрочитанное сообщение Asp » 11 фев 2022, 13:51

var currentBalance = GetCurrentBalance(RazdelGroupType.FORTS);
var LossNum = currentBalance.DailyPL;
if (BarDate(0) != BarDate(1)) LossNum = 0;
if (LossNum >= 300) ClosePosition(); CancelActiveOrders(false); return;
а так работоспособно? Если поместить в начало OnUpdate, до торговых команд.
Мусор в твоём глазу больше уродует картину мироздания чем пятна на солнце

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

Re: Stop приостановка работы робота на 10 минут

Непрочитанное сообщение evge » 11 фев 2022, 21:12

код точно не рабочий.

там где в условии пишем в строке не одну а несколько команд надо взять в фигурные скобки, это первое что сразу видно как ошибку:

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

if (LossNum >= 300) ClosePosition(); CancelActiveOrders(false); return;


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

if (LossNum >= 300) { ClosePosition(); CancelActiveOrders(false); return; }


здесь тоже странная конструкция

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

var LossNum = currentBalance.DailyPL;
if (BarDate(0) != BarDate(1)) LossNum = 0;


т.е. только первый бар дня будет 0, остальное время работает var LossNum = currentBalance.DailyPL, какой в этом смысл?
вторая строка лишняя, здесь не нужно искать начало дня
никогда такого не было и вот опять


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

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

Сейчас этот форум просматривают: Bing [Bot] и 12 гостей