Общие вопросы по разработке > Завершение работы робота

Общие вопросы по разработке в Альфа-Директ 4. Обсуждение разработки пользовательских индикаторов, стратегий.
Tom
Сообщения: 2
Зарегистрирован: 01 июн 2018, 15:06
Благодарил (а): 1 раз

Завершение работы робота

Непрочитанное сообщение Tom » 01 июн 2018, 16:01

Подскажите пожалуйста:

Нужно что бы робот после получения ОПРЕДЕЛЕННОГО (Например: 3 шт.) количества Стопов за день, ОТКЛЮЧАЛСЯ.

Если такое возможно, буду очень благодарен.

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

Re: Завершение работы робота

Непрочитанное сообщение evge » 01 июн 2018, 16:58

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

Стоп вообще или стоп только в этот день?

если стоп вообще, то считаете убыточные сделки через глобальную переменную и когда достигли предела делаем:

Stop() – остановить стратегию.

Если за день, то делать аналогично:
Считаем убыточные сделки и не торгуем после предела, добавив в начало обработчика OnUpdate() следующее:

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

if (BarDate(0) != BarDate(1)) LossNum = 0;
if (LossNum >= 3) return;


т.е. выходим из обработчика если LossNum (кол-во убыточных сделок больше или равно 3)
первое условие сбрасывает счетчик, если дата текущего бара не равна дате предыдущего, т.е. следующий день.

Советую очень полезный документ:

Терминал 4.0. Скрипты пользовательских индикаторов и стратегий
никогда такого не было и вот опять

oxi
Сообщения: 160
Зарегистрирован: 20 сен 2016, 23:20
Благодарил (а): 11 раз
Поблагодарили: 65 раз

Re: Завершение работы робота

Непрочитанное сообщение oxi » 04 июн 2018, 20:12

Пример стратегии

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

function Initialize()
{
   StrategyName = "MyMTS21";
   AddParameter("P1", 0, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");
   AddGlobalVariable("globalNum", Types.Int, 0);
}

function OnUpdate()
{
// Запоминаем число операций на начало дня
if (BarDate(0) != BarDate(1))
   globalNum = RealizedPLCount();
   
// Считываем текущее число операций
int num = RealizedPLCount();

int LossNum = 0;
// пробегаемся циклом по всем операциям с начала дня и считаем убыточные
int j = 0;
for (int i = globalNum; i < num; i++)
   if( (RealizedPL(j++)) < 0) LossNum++;

// Если их больше 3х не торгуем
if (LossNum >= 3)
{
   if (CurrentPosition() != 0) ClosePosition();
   return;
}

if (Input1.Close[0] > Input1.Close[1])
   EnterLong();
if (Input1.Close[0] < Input1.Close[1])
   EnterShort();

}


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

Re: Завершение работы робота

Непрочитанное сообщение evge » 04 июн 2018, 20:19

Аналогично, через RealizedPL(), но уже в ЛС подсказал Tom :)
никогда такого не было и вот опять


Вернуться в «Общие вопросы по разработке»

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

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