Стратегии и роботы > Вход по лимитной заявке и индикатору.
Вход по лимитной заявке и индикатору.
Здравствуйте.
Возможно ли реализовать следующую стратегию, если да, то как?
Лимитная заявка следует вдоль индикатора. Например, цена выше скользящей средней (EMA 50), лимитник на покупку=ЕМА и смещается вслед за ней. Когда происходит откат к средней, лимитка срабатывает.
Закрытие позиции аналогично, лимиткой, например, на касание PSAR, если он сверху.
Возможно ли реализовать следующую стратегию, если да, то как?
Лимитная заявка следует вдоль индикатора. Например, цена выше скользящей средней (EMA 50), лимитник на покупку=ЕМА и смещается вслед за ней. Когда происходит откат к средней, лимитка срабатывает.
Закрытие позиции аналогично, лимиткой, например, на касание PSAR, если он сверху.
- evge
- Администратор
- Сообщения: 1812
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: Вход по лимитной заявке и индикатору.
Здравствуйте!
Если это все условия, то примерно так:
здесь выход из позиции long это ожидание когда цена пересечет PSAR снизу - вверх.
т.е. если цена после входа в позицию выше PSAR, то стратегия сначала дождётся когда цена станет ниже PSAR, а затем будет выход только при пересечении PSAR снизу - вверх.
Если это все условия, то примерно так:
Код: Выделить всё
/**
**/
function Initialize()
{
StrategyName = "FollowEMA";
AddParameter("Period", 20, "EMA Period", 1);
AddParameter("Step", 0.02, "PSAR Step", 1);
AddParameter("Maximum", 0.2, "PSAR Maximum", 1);
AddInput("Input1", Inputs.Candle, 1, true, "");
LongLimit = 1000;
ShortLimit = -1000;
AddChartIndicator("EMA", new Dictionary <string, string>{{"Period", "Period"}});
AddChartIndicator("ParabolicSAR", new Dictionary <string, string>{{"Step","Step"},{"Maximum","Maximum"}});
}
function OnUpdate()
{
var I = Input1;
var C = Input1.Close;
var E = EMA(I, Period);
var P = PSAR(I, Step, Maximum);
var CP = CurrentPosition();
if (C[0] > E[0] && CP == 0)
{
CancelActiveOrders(true);
EnterLongLimit(E[0]);
}
if (C[0] > P[0] && C[1] < P[1] && CP > 0) CloseLong();
}
здесь выход из позиции long это ожидание когда цена пересечет PSAR снизу - вверх.
т.е. если цена после входа в позицию выше PSAR, то стратегия сначала дождётся когда цена станет ниже PSAR, а затем будет выход только при пересечении PSAR снизу - вверх.
никогда такого не было и вот опять
Re: Вход по лимитной заявке и индикатору.
Спасибо!
На графике входы показаны на следующей свече после пересечения - это потому что отображение в тестере? В реалтайме будет вход в момент пересечения?
По выходу, не совсем так, нужно не Close , а SellLimit, обратной заявкой, привязанной к PSAR (так же как в случае с EMA), если открыта лонговая позиция.
На графике входы показаны на следующей свече после пересечения - это потому что отображение в тестере? В реалтайме будет вход в момент пересечения?
По выходу, не совсем так, нужно не Close , а SellLimit, обратной заявкой, привязанной к PSAR (так же как в случае с EMA), если открыта лонговая позиция.
Re: Вход по лимитной заявке и индикатору.
Нужно, чтобы так работало ) А если касание не произошло, цена пробила PSAR вверх, заявка убиралась.
- evge
- Администратор
- Сообщения: 1812
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: Вход по лимитной заявке и индикатору.
по закрытию со слежением аналогично, CloseLongLimit(Price)
с проверкой конечно же, что цена на текущий момент ниже чем PSAR
с проверкой конечно же, что цена на текущий момент ниже чем PSAR
Код: Выделить всё
function Initialize()
{
StrategyName = "FollowEMA";
AddParameter("Period", 20, "EMA Period", 1);
AddParameter("Step", 0.02, "PSAR Step", 1);
AddParameter("Maximum", 0.2, "PSAR Maximum", 1);
AddInput("Input1", Inputs.Candle, 1, true, "");
LongLimit = 1000;
ShortLimit = -1000;
AddChartIndicator("EMA", new Dictionary <string, string>{{"Period", "Period"}});
AddChartIndicator("ParabolicSAR", new Dictionary <string, string>{{"Step","Step"},{"Maximum","Maximum"}});
}
function OnUpdate()
{
var I = Input1;
var C = Input1.Close;
var E = EMA(I, Period);
var P = PSAR(I, Step, Maximum);
var CP = CurrentPosition();
if (C[0] > E[0] && CP == 0)
{
CancelActiveOrders(true);
EnterLongLimit(E[0]);
}
if (C[0] < P[0] && CP > 0)
{
CancelActiveOrders(true);
CloseLongLimit(P[0]);
}
}
никогда такого не было и вот опять
Re: Вход по лимитной заявке и индикатору.
Спасибо, теперь вроде все как надо. Осталось довести до ума ))
- evge
- Администратор
- Сообщения: 1812
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: Вход по лимитной заявке и индикатору.
но тут надо учитывать что переставляется заявка лимитная тоже только если цена ниже, как только пересекла PSAR то может и не закрыться, т.к. лимитная заявка не будет снята предыдущая и новая не установится, будет ждать исполнения.
Но суть понятна, далее условиями можно сделать как нужно.
Но суть понятна, далее условиями можно сделать как нужно.
никогда такого не было и вот опять
- evge
- Администратор
- Сообщения: 1812
- Зарегистрирован: 04 фев 2016, 09:46
- Откуда: Млечный путь, планета Земля
- Благодарил (а): 83 раза
- Поблагодарили: 367 раз
- Контактная информация:
Re: Вход по лимитной заявке и индикатору.
выше исходники поправил, там была в первом условии ошибка поэтому входы были там где ожидалось по тестам.
if (C[0] < E[0] && CP == 0)
заменено на
if (C[0] > E[0] && CP == 0)
т.е. перевыставление заявки нужно когда цена выше EMA
if (C[0] < E[0] && CP == 0)
заменено на
if (C[0] > E[0] && CP == 0)
т.е. перевыставление заявки нужно когда цена выше EMA
никогда такого не было и вот опять
Re: Вход по лимитной заявке и индикатору.
А стоп сюда как еще добавить, чтобы он корректно работал? На случай форсмажора.
Вернуться в «Стратегии и роботы»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя