Здравствуйте! Подскажите как описать(дополнить) в коде данного робота условия при которых робот не будет выставлять заявку при наличии сигнала, а будет ждать смены условий для входа.
Условия такие:
1) робот открыл сделку в лонг, гистограмма индикатора АО положительная.
2) гистограмма индикатора АО продолжает идти положительная, непрерывно, без смены на отрицательное значение, но цена движется постоянно вниз, падает.
3) робот закрывает длинную сделку по стопу и тут же опять открывает лонг, потому что сохраняется сигнал для входа в длинную сделку.
Как написать код, чтобы робот при таких условиях - гистограмма непрерывно положительная, а цена непрерывно падает, не входил в сделку, по все ещё присутствующему сигналу на вход в лонг, а ждал, после выхода по стопу, смены зачения на противоположный знак гистограммы индикатора АО?
С Уважением.
Стратегии и роботы > Робот Alfa_AO
Re: Робот Alfa_AO
День добрый! Тоже присоединяюсь к вопросу, переделал стратегию по MACD, но такая же проблема. Нигде в источниках как решить не нашел. Как сделать, чтобы робот после стопа не переоткрывал позицию пока не выполнится противоположное условие, например Шорт. Спасибо
Re: Робот Alfa_AO
Надо добавить еще строку в условие открытия, что не предыдущем шаге индикатор имел другое направление.
Пример для лонга
Для шорта
Пример для лонга
Для шорта
Re: Робот Alfa_AO
Спасибо огромное за отклик!
Как вот конкретно в эту стратегию это вставить и правильно ли будет срабатывать стоп?
Как вот конкретно в эту стратегию это вставить и правильно ли будет срабатывать стоп?
Код: Выделить всё
function Initialize()
{
StrategyName = "MyMTS8";
AddParameter("Pfast", 45, "быстрая ema", 1);
AddParameter("Pslow", 65, "медленная ema", 0);
AddParameter("Psig", 8, "сигнальная ema", 0);
AddInput("Input1", Inputs.Candle, 60, true, "SBERP=МБ ЦК");
LongLimit = 0;
ShortLimit = 0;
AddChartIndicator("MACD", new Dictionary <string, string>{{"PeriodFast", "Pfast"},{"PeriodSlow", "Pslow"},{"PeriodSignal", "Psig"}});
}
function OnUpdate()
{
/// ПРАВИЛО 1
if ( (MACD(Input1.Close, Pfast, Pslow, Psig).GetValue("Histogram", 0) > 0) && (Pfast < Pslow) )
{
EnterLong();
}
/// ПРАВИЛО 2
if ( (MACD(Input1.Close, Pfast, Pslow, Psig).GetValue("Histogram", 0) < 0) && (Pfast < Pslow) )
{
EnterShort();
}
/// ПРАВИЛО 3
if ( (CurrentPosition() > 0) && (Input1.Close > AverPrice()) )
{
TrailingStopLoss(0.5, SignalPriceType.DeltaInPercentFromAveragePrice);
}
}
Re: Робот Alfa_AO
oxi писал(а):Надо добавить еще строку в условие открытия, что не предыдущем шаге индикатор имел другое направление.
Пример для лонга
Снимок12345.PNG
Для шорта
Снимок23456.PNG
И в этой стратегии какая то ерунда получается на тестировании, после срабатывания стопа, в эту же минуту перезаходит в противоположном направлении. Вообщем вопрос все еще открыт...
Re: Робот Alfa_AO
1. Надо аналогично предыдущему добавить условие вида пересечение , а не больше меньше
2. Трейлинг-стоп в тестировании не будет работать (нет возможности корректно его отработать)
3. Варианты кода со стопом
2. Трейлинг-стоп в тестировании не будет работать (нет возможности корректно его отработать)
3. Варианты кода со стопом
Код: Выделить всё
function Initialize()
{
StrategyName = "MyMTS8";
AddParameter("Pfast", 45, "быстрая ema", 1);
AddParameter("Pslow", 65, "медленная ema", 0);
AddParameter("Psig", 8, "сигнальная ema", 0);
AddInput("Input1", Inputs.Candle, 60, true, "SBERP=МБ ЦК");
LongLimit = 0;
ShortLimit = 0;
AddChartIndicator("MACD", new Dictionary <string, string>{{"PeriodFast", "Pfast"},{"PeriodSlow", "Pslow"},{"PeriodSignal", "Psig"}});
}
function OnUpdate()
{
/// ПРАВИЛО 1
if ( (MACD(Input1.Close, Pfast, Pslow, Psig).GetValue("Histogram", 0) > 0)
&& (MACD(Input1.Close, Pfast, Pslow, Psig).GetValue("Histogram", 1) <= 0) )
{
EnterLong();
}
/// ПРАВИЛО 2
if ( (MACD(Input1.Close, Pfast, Pslow, Psig).GetValue("Histogram", 0) < 0)
&& (MACD(Input1.Close, Pfast, Pslow, Psig).GetValue("Histogram", 1) >= 0) )
{
EnterShort();
}
/// ПРАВИЛО выставляем стоп, если позиция в прибыли
if ( (CurrentPosition() != 0) && (CurrentPLper() > 0) )
{
CancelStopLoss();
// Вариант 1 - Фиксированный стоп к учетной цене
//StopLoss(0.5, SignalPriceType.DeltaInPercentFromAveragePrice);
// Вариант 2 - Перенос стопа под минимум/максимум
if (CurrentPosition() > 0 )
StopLoss(Input1.Low[0], SignalPriceType.Price);
if (CurrentPosition() < 0 )
StopLoss(Input1.High[0], SignalPriceType.Price);
}
}
Вернуться в «Стратегии и роботы»
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 4 гостя