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

Обсуждение, описание стратегий и роботов, идеи для стратегий
Konstantin
Сообщения: 17
Зарегистрирован: 11 окт 2017, 15:25
Благодарил (а): 5 раз

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

Непрочитанное сообщение Konstantin » 07 авг 2020, 13:40

evge писал(а):Код который выше, он полностью как у меня.

Спасибо! Буду разбираться, я бы такую головоломку целый месяц решал и код был бы в несколько раз длиннее :)

Максим
Сообщения: 6
Зарегистрирован: 07 апр 2019, 11:01
Благодарил (а): 6 раз

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

Непрочитанное сообщение Максим » Сегодня, 13:55

Здравствуйте. Есть простая стратегия для флета (см ниже), робот открывает позиции в зонах экстремальных значений SO (ниже 20 - лонг, выше 80 - шорт), и выставляет TP и SL = 100.
Хотелось бы, чтобы при смещении цены против открытой позиции на 50, робот открывал дополнительную позицию такого же объема, SL=50, TP=100, а TP предыдущей позиции смещал на цену открытия+1 (пункт). Например, зашли в лонг по 2100, объемом 10 лотов, TP1=2200, SL1=2000. Цена уходит до 2050. Открывается еще одна позиция, объемом 10 лотов, TP2=2150, SL2=2000, а TP1 переставляется на 2101. Как это корректно сделать?
Спасибо!

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

/**
Вход на экстремумах стохастика во флете. Ниже 20 - лонг, выше 80 - шорт.
**/
function Initialize()
{
   StrategyName = "15_Stoch";
   AddParameter("P3", 20, "Экстремум минимальный стохастик", 1);
   AddParameter("P4", 80, "Экстремум максимальный стохастик", 1);
   AddParameter("P5", 35, "K%", 1);
   AddParameter("P6", 3, "D%", 1);
   AddParameter("P7", 7, "Стохастик Сигнал", 1);
   AddParameter("P8", 100, "Тейк профит", 1);
   AddParameter("P9", 100, "Стоп лосс", 1);
   AddInput("Input1", Inputs.Candle, 15, true, "");
   LongLimit = 1;
   ShortLimit = -1;
   AddChartIndicator("Stoch", new Dictionary <string, string>{{"PeriodK", "P5"},{"PeriodD", "P6"},{"PeriodSignal", "P7"}});
}

function OnUpdate()
{
   /// ПРАВИЛО 1
   if ( (SO(Input1, P5, P6, P7).GetValue("Signal", 0) < P3) )
   {
      EnterLong();
      BreakingStop(P9, P8, SignalPriceType.DeltaFromAveragePrice);

   }

   /// ПРАВИЛО 2
   if ( (SO(Input1, P5, P6, P7).GetValue("Signal", 0) > P4) )
   {
      EnterShort();
      BreakingStop(P9, P8, SignalPriceType.DeltaFromAveragePrice);

   }

}

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

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

Непрочитанное сообщение evge » Сегодня, 15:29

Позиция по роботу одна. Стоп и тейк тоже один. Одновременно 2 позиции можно вести только храня в глоб. переменных эти данные. Но закрывать точно по стопу и тейку не получится, только в момент OnUpdate, т.е. на следующем баре за текущим. Закрывать без установки реальных стопов и тейков, ориентируясь на глоб. переменные ранее открытых и сохраненных позиций и текущую цену (OHLC).
никогда такого не было и вот опять

Максим
Сообщения: 6
Зарегистрирован: 07 апр 2019, 11:01
Благодарил (а): 6 раз

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

Непрочитанное сообщение Максим » Сегодня, 16:30

То есть, только двумя роботами можно подобное реализовать?

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

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

Непрочитанное сообщение evge » Сегодня, 17:33

Второй робот не видит позиции первого. Реализовать можно, как описал выше, но с ограничениями описанными по поводу срабатывания на эти позиции стопов и тейков. Закрываться позиции будут на закрытиях бара (правильнее на первом тике следующего бара), т.е. при наступлении события OnUpdate(), где мы смотрим текущую цену и сравниваем с позициями хранимыми в глобальных переменных робота и принимаем решение на основании отклонения от этих позиций.
никогда такого не было и вот опять


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

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

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