Стратегии и роботы > Stop приостановка работы робота на 10 минут
Stop приостановка работы робота на 10 минут
Доброе время суток всем. № день бьюсь над проблемой и соответственно курю форумы. Как сделать чтобы при срабатывании стоп робот перестал работать на 10 минут а после снова начал алгоритм работы ?
- evge
- Администратор
- Сообщения: 1812
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: Stop приостановка работы робота на 10 минут
Здравствуйте!
Как вариант, для рабочего ТФ стратегии = M1 и ниже.
Если ТФ будет выше, то время стопа будет считаться не в момент события, а кратно таймфрейму.
Тоже будет работать, но с погрешностью равной ТФ.
В примере пауза сработает в минутах и для стопа и для тейка по BreakingStop
Как вариант, для рабочего ТФ стратегии = 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;
}
}
никогда такого не было и вот опять
Re: Stop приостановка работы робота на 10 минут
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 минут
Asp писал(а):А как можно написать чтобы стратегия остановилась по достижении определенной прибыли, а с на ступлением нового дня запустилась вновь?
Как останавливать торговлю при достижении дохода за день
никогда такого не было и вот опять
Re: Stop приостановка работы робота на 10 минут
var currentBalance = GetCurrentBalance(RazdelGroupType.FORTS);
var LossNum = currentBalance.DailyPL;
if (BarDate(0) != BarDate(1)) LossNum = 0;
if (LossNum >= 300) ClosePosition(); CancelActiveOrders(false); return;
а так работоспособно? Если поместить в начало OnUpdate, до торговых команд.
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 минут
код точно не рабочий.
там где в условии пишем в строке не одну а несколько команд надо взять в фигурные скобки, это первое что сразу видно как ошибку:
здесь тоже странная конструкция
т.е. только первый бар дня будет 0, остальное время работает var LossNum = currentBalance.DailyPL, какой в этом смысл?
вторая строка лишняя, здесь не нужно искать начало дня
там где в условии пишем в строке не одну а несколько команд надо взять в фигурные скобки, это первое что сразу видно как ошибку:
Код: Выделить всё
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 гостей