Страница 1 из 1

forts_Delta_MATrail

Добавлено: 24 июн 2025, 17:51
ip851874
Доброго дня!
Как то на вебинаре обсуждали данную стратегию только с тейком фикс. В данной версии идет переворот по смене сигнала. Помогите с кодом, добавить тейк в % :)
Заранее благодарю за проявленное внимание к вопросу.

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

/**Идея: построить линию разниц покупок и продаж, определять смену направления при ;
Сигналы:
- сигнал на открытие позиции ЛОНГ выдается, если значение DeltaCumLine больше линии индикатора MATrail;
- сигнал на открытие позиции ШОРТ выдается, если значение DeltaCumLine меньше линии индикатора MATrail;
Параметры:
Period – период индикатора MATrail,
pStop - уровень стопа в % после открытия позиции.
Если стоп <= 0, то стоп не ставится
В стратегии используются:
- индикатор DeltaCumLine - показывает разницу количества покупок и продаж;
- индикатор MATrail - следящий индикатор;
Algorithm = ФОРТС Тренд;**/

function Initialize()
{
   StrategyName = "forts_Delta_MATrail";
   AddParameter("Period", 85, "Период MATrail", 1);
   AddParameter("pStop", 0, "Стоп в процентах", 0);
   AddInput("Input1", Inputs.Candle, 1, true, "MXU9=ФОРТС");
   AddChartIndicator("MY.str_Delta_MATra", new Dictionary <string, string>{{"Period", "Period"}});
}

function OnUpdate()
{
   var delta = MY.DeltaCumLine(Input1);
   double line = MY.MATrail(delta, Period)[0];
   double line1 = MY.MATrail(delta, Period)[1];
   double pos = CurrentPosition();
   
   if ( (delta[0] > line) && (delta[1] <= line1))
   {
         EnterLong();
         if (pStop > 0)
            StopLoss(pStop, SignalPriceType.DeltaInPercentFromAveragePrice);
         
   }
   if ( (delta[0] < line) && (delta[1] >= line1))
   {
         EnterShort();
         if (pStop > 0)
            StopLoss(pStop, SignalPriceType.DeltaInPercentFromAveragePrice);
   }


}




Re: forts_Delta_MATrail

Добавлено: 25 июн 2025, 09:17
evge
Добрый день,

добавьте в Initialize параметр нужного процента тейка.

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

AddParameter("TP", 2, "Тейк в процентах", 0);


затем в OnUpdate добавьте условие закрытия позиции при достижении этого тейка

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

if ( CurrentPLper() >= TP )
   {
      ClosePosition();
   }


код стратегии с этими изменениями:

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

/**Идея: построить линию разниц покупок и продаж, определять смену направления при ;
Сигналы:
- сигнал на открытие позиции ЛОНГ выдается, если значение DeltaCumLine больше линии индикатора MATrail;
- сигнал на открытие позиции ШОРТ выдается, если значение DeltaCumLine меньше линии индикатора MATrail;
Параметры:
Period – период индикатора MATrail,
pStop - уровень стопа в % после открытия позиции.
TP - % тейк профита для закрытия позциии
Если стоп <= 0, то стоп не ставится
В стратегии используются:
- индикатор DeltaCumLine - показывает разницу количества покупок и продаж;
- индикатор MATrail - следящий индикатор;
Algorithm = ФОРТС Тренд;**/

function Initialize()
{
   StrategyName = "forts_Delta_MATrail";
   AddParameter("Period", 85, "Период MATrail", 1);
   AddParameter("pStop", 0, "Стоп в процентах", 0);
   AddParameter("TP", 2, "Тейк в процентах", 0);
   AddInput("Input1", Inputs.Candle, 1, true, "MXU9=ФОРТС");
   AddChartIndicator("MY.str_Delta_MATra", new Dictionary <string, string>{{"Period", "Period"}});
}

function OnUpdate()
{
   var delta = MY.DeltaCumLine(Input1);
   double line = MY.MATrail(delta, Period)[0];
   double line1 = MY.MATrail(delta, Period)[1];
   double pos = CurrentPosition();
   
   if ( (delta[0] > line) && (delta[1] <= line1))
   {
         EnterLong();
         if (pStop > 0)
            StopLoss(pStop, SignalPriceType.DeltaInPercentFromAveragePrice);
         
   }
   if ( (delta[0] < line) && (delta[1] >= line1))
   {
         EnterShort();
         if (pStop > 0)
            StopLoss(pStop, SignalPriceType.DeltaInPercentFromAveragePrice);
   }

   if ( CurrentPLper() >= TP )
   {
      ClosePosition();
   }
}

Re: forts_Delta_MATrail

Добавлено: 25 июн 2025, 14:28
ip851874
Благодарю! :D