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

Робот по осциллятору

Добавлено: 08 окт 2018, 17:53
State
Доброго дня.

Подскажите как правильно написать скрипт.
В конструкторе собрал, но он не компилируется. Указывает на ошибки, но их не понял.

Задумка такая, что при пробитии снизу вверх значения индикатора открывается лонг со стопом/профитом.
Соответственно при пробитии вниз другого значения открывается шорт тоже с стоп/профит.



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

function Initialize()
{
   StrategyName = "MyMTS";
   AddParameter("P1", 0, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 0;
   ShortLimit = 0;
   AddChartIndicator("MY.SOH", new Dictionary <string, double>{{"nK", 5},{"nD", 3},{"nSignal", 3}});
}

function OnUpdate()
{
   /// ПРАВИЛО 1
   if ( (CrossAbove(MY.SOH(Input1, 5, 3, 3)["sD"], 20) == true) )
   {
      EnterLong();
      BreakingStop(0.5, 2.0, SignalPriceType.DeltaInPercentFromAveragePrice);
      Stop();
   }

   /// ПРАВИЛО 2
   if ( (CrossBelow(MY.SOH(Input1, 5, 3, 3)["sD"], 80) == true) )
   {
      EnterShort();
      BreakingStop(0.5, 2.0, SignalPriceType.DeltaInPercentFromAveragePrice);
      Stop();
   }

}

Re: Робот по осциллятору

Добавлено: 08 окт 2018, 18:17
evge

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

function Initialize()
{
   StrategyName = "MyMTS";
   AddParameter("P1", 0, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 0;
   ShortLimit = 0;
   AddChartIndicator("MY.SOH", new Dictionary <string, double>{{"nK", 5},{"nD", 3},{"nSignal", 3}});
}

function OnUpdate()
{
   var I = Input1;
   var MSO = MY.SOH(I, 5, 3, 3)["sD"];

   /// ПРАВИЛО 1
   if ( MSO[1] <= 20 && MSO[0] > 20 )
   {
      EnterLong();
      BreakingStop(0.5, 2.0, SignalPriceType.DeltaInPercentFromAveragePrice);
   }

   /// ПРАВИЛО 2
   if ( MSO[1] >= 80 && MSO[0] < 80 )
   {
      EnterShort();
      BreakingStop(0.5, 2.0, SignalPriceType.DeltaInPercentFromAveragePrice);
   }

}

Re: Робот по осциллятору

Добавлено: 08 окт 2018, 18:31
evge
Stop() зачем нужен? Ведь остановится робот после открытия позиции, или так задумано?

Re: Робот по осциллятору

Добавлено: 08 окт 2018, 18:48
State
Stop тут лишний. Ошибся. Спасибо за ответ! Проверю завтра)

Re: Робот по осциллятору

Добавлено: 09 окт 2018, 10:40
State
Еще возник вопрос.
Я установил, что торговля максимум 1 лотом (на фортс). Но на тестах робот торгует частями, то есть 0,59, 0.8 лота и тд. Разве такое возможно?

Re: Робот по осциллятору

Добавлено: 09 окт 2018, 10:44
Simonov
Даже интересно стало. А скриншот можете приложить? В первый раз про такое слышу.

Re: Робот по осциллятору

Добавлено: 09 окт 2018, 11:00
State
Упс.....извиняюсь......не туда посмотрел. Новичок в этом деле..... :oops:

Re: Робот по осциллятору

Добавлено: 10 окт 2018, 12:45
State
Поправьте, пожалуйста.
Не компилируется код. Пишет, что ожидается ; в строке 23.... Но знак там есть. Не пойму в чем дело.

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

/**

Algorithm = ОСЦИЛЛЯТОР (трендовый);
**/

function Initialize()
{
   StrategyName = "St 10";
   AddParameter("SL", 0, "", 0.1);
   AddParameter("TP", 0, "", 0.1);
   AddParameter("K", 5, "", 1);
   AddParameter("D", 3, "", 1);
   AddParameter("Signal", 3, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 1;
   ShortLimit = -1;
   AddChartIndicator("Stochastic Oscillator", new Dictionary <string, double>{{"Period %K", 5},{"Period %D", 3},{"Period Signal", 3}});
}

function OnUpdate()
{
   var I = Input1;
   var S = Stochastic Oscillator (I, 5, 3, 3)["D"];

   /// ПРАВИЛО 1
if ( S[1] <= 20 && S[0] > 20 )
   {
      EnterLong();
      BreakingStop(SL, TP, SignalPriceType.DeltaFromAveragePrice);
   }
   /// ПРАВИЛО 2
   if ( S[1] >= 80 && S[0] < 80 )
   {
      EnterShort();
      BreakingStop(SL, TP, SignalPriceType.DeltaFromAveragePrice);
   }
}

Re: Робот по осциллятору

Добавлено: 10 окт 2018, 14:50
HMV
var S = SO(I, 5, 3, 3)["D"];

Re: Робот по осциллятору

Добавлено: 10 окт 2018, 14:57
State
Спасибо! Заработало!

Если не секрет, где в терминале смотреть такие обозначения индикаторов вшитых?