Каталог файлов форума

Список вложений в сообщениях, оставленных на этой конференции.

Все файлы форума: 1233

Добавлено: evge » 28 сен 2017, 10:24

Тема: Re: Стратегия Invest_Grid

Текст сообщения:

Эксперименты привели к тому что стратегию Invest_Grid работающую как в лонг так и в шорт с горяча удалил :), заменив код её с нуля написанным простым алгоритмом, который и выкладываю.

Тут всё просто и понятно. Работает как в лонг так и в шорт, для примера взяты 2 SMA быстрая и медленная.
Всё как обычно, в лонг заходим и набираем позицию на откатах указанных в параметре D
Закрывать позицию и переворачиваться начинает когда MA пересекутся в другую сторону, сначала на откатах будет закрываться ранее открытая позиция, затем начнет набирать позицию в другую сторону.

iGrid1-02.png
iGrid1-02.png (35.19 КБ) 38768 просмотров

iGrid1-01.png
iGrid1-01.png (31.15 КБ) 38768 просмотров


В итоге простой и понятный код:

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

/**Developed by evge;**/

function Initialize()
{
   StrategyName = "iGrid1";
   AddInput("I", Inputs.Candle, 5, true, "SBER=МБ ЦК");

   AddParameter("Lot", 100, "Кол-во докупки");
   AddParameter("D", 0.3, "Изм. цены для докупки");
   AddParameter("f", 20, "fast", 1);
   AddParameter("s", 180, "slow", 1);
 
   LongLimit = 5000;
   ShortLimit = -5000;
                 
   AddGlobalVariable("Last", Types.Double, 0.0);
   
   AddGlobalVariable("isLong", Types.Boolean, false);
}

function OnUpdate()
{

var IC = I.Close;
var CP = CurrentPosition();

// + Опередляем общее направление торговли
var S1 = SMA(I.Close, f);
var S2 = SMA(I.Close, s);

if (S1[0] > S2[0])
isLong = true;
else
isLong = false;
// -

if (Last == 0) Last = IC;

if (isLong && IC < Last - D)
{
   if (CP >= 0)
      EnterLong(Lot);
   else
      CloseShort(Lot);
}
else if (!isLong && IC > Last + D)
{
   if (CP <= 0)
      EnterShort(Lot);
   else
      CloseLong(Lot);
}

if (IC > Last + D) Last = IC;
if (IC < Last - D) Last = IC;

}