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

Открытие Сессии

Добавлено: 19 сен 2018, 18:09
aaiun
Добрый день! Спасибо, что поддерживаете ресурс, очень помогает. Никак не получается в стратегии использовать открытие сессии, хотя бы в 10.00 today. Индикатором выводится, но не передает значение в стратегию. Измучился и завис). Могли бы мне помочь. Условие простое, если выше открытия, покупаем, ниже- продаем.

Re: Открытие Сессии

Добавлено: 19 сен 2018, 18:24
evge
Приветствую!

Нужно ввести доп. глоб. переменную в которую и будем сохранять цену открытия

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

function Initialize()
{
//...
AddGlobalVariable("OpenPrice", Types.Double, 0);
//...
}


когда дата текущего бара не равна дате бара предыдущего запоминаем значение в введенной ранее глоб. переменной.

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

function OnUpdate()
{
//..
if (BarDate(0) != BarDate(1)) OpenPrice = Input1.Open[0];
//..
}


aaiun писал(а):Индикатором выводится, но не передает значение в стратегию. Измучился и завис)


здесь непонятно.

Re: Открытие Сессии

Добавлено: 19 сен 2018, 18:36
aaiun

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

function Initialize()
{
   StrategyName = "3";
   
   AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 1;
   ShortLimit = -1;

AddGlobalVariable("OpenPrice", Types.Double, 0);   
 }

function OnUpdate()   
{
if (BarDate(0) != BarDate(1)) {OpenPrice = Input1.Open[0];}

if (CurrentPosition() == 0 && (Input1.Close[0] > OpenPrice))
   {
      EnterLong();
   }
if ( CurrentPosition() == 0 && (Input1.Close[0] < OpenPrice) )
   {
   EnterShort();
   }
}

только получается, что в OpenPrice подставляется последнее значение Open[0], а не открытие сессии. если запускать советника не с самого утра.

Re: Открытие Сессии

Добавлено: 19 сен 2018, 18:41
evge
В таком коде сработает только EnterLong() и всё. Т.к. больше позиция не будет равна 0 никогда.

OpenPrice будет равен Open первого бара текущего дня.

Re: Открытие Сессии

Добавлено: 19 сен 2018, 18:55
evge

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

/**

**/

function Initialize()
{
   StrategyName = "MyMTS2";
   AddParameter("P1", 0, "", 1);
   AddInput("Input1", Inputs.Candle, 1, true, "");
   LongLimit = 1;
   ShortLimit = -1;
   
   AddGlobalVariable("OpenPrice", Types.Double, 0);
}

function OnUpdate()
{

if (BarDate(0) != BarDate(1)) OpenPrice = Input1.Open[0];

if (OpenPrice != 0) return;

if (Input1.Close[0] > OpenPrice) EnterLong();
if (Input1.Close[0] < OpenPrice) EnterShort();

}