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

Нужно написать робота по Мартингейлу

Добавлено: 14 сен 2016, 16:44
andrewvoso
Нужен исполнитель, который напишет робота по системе Мартингейла.
Идея:
1. Рынок Фортс, индекс на фьючерс сбербанка. м5.
2. Вход в рынок одним контрактом в направлении лонг с одновременным выставлением tp 20 пунктов и sl 20 пунктов.
3. В случае получения прибыли по сделке, открывается новая сделка на 1 контракт по цене закрытия предыдущей сделки.
4. В случае получения убытка, открывается новая сделка количеством контрактов - (предыдущее количество*2) по цене закрытия предыдущей убыточной сделки.
5. Робот должен работать постоянно.

Если кто-то может реализовать, прошу написать в этой ветке или в личку.

Re: Нужно написать робота по Мартингейлу

Добавлено: 14 сен 2016, 22:24
evge
andrewvoso писал(а):2. Вход в рынок одним контрактом в направлении лонг с одновременным выставлением tp 20 пунктов и sl 20 пунктов.


Что является сигналом на вход?

andrewvoso писал(а):3. В случае получения прибыли по сделке, открывается новая сделка на 1 контракт по цене закрытия предыдущей сделки.


Непонятное и неоптимизированное действие. Зачем тогда закрывать позицию если снова придётся её открывать по той же цене? По моему тут просто нужно сдвигать стоп в безубыток и ставить новый тейк.

Если вся хитрость в том, что до этого могла быть открыта позиция больше чем 1 контракт, то всё равно не ясно зачем закрывать позицию полностью? Может закрывать тогда не полностью, а до 1 контракта и ставить новый тейк и стоп?

Re: Нужно написать робота по Мартингейлу

Добавлено: 14 сен 2016, 22:33
evge
Ещё нужно учитывать такой момент.
Если правило жесткое открытия позиции по цене закрытия предыдущей сделки, то тут будут ситуации когда сделки последующие просто не исполнятся из-за проскальзывания на больших движениях, т.к. цена уже не вернётся (в тот же момент или на следующем баре) или вернется через N баров к цене закрытия предыдущей сделки.

Re: Нужно написать робота по Мартингейлу

Добавлено: 06 окт 2016, 22:59
andrewvoso
Хорошо, вы всё правильно описали.
Сколько будет стоить программа с указанными вами параметрами?

Re: Нужно написать робота по Мартингейлу

Добавлено: 16 янв 2017, 19:48
vdm
andrewvoso писал(а):Нужен исполнитель, который напишет робота по системе Мартингейла.
Идея:
1. Рынок Фортс, индекс на фьючерс сбербанка. м5.
2. Вход в рынок одним контрактом в направлении лонг с одновременным выставлением tp 20 пунктов и sl 20 пунктов.
3. В случае получения прибыли по сделке, открывается новая сделка на 1 контракт по цене закрытия предыдущей сделки.
4. В случае получения убытка, открывается новая сделка количеством контрактов - (предыдущее количество*2) по цене закрытия предыдущей убыточной сделки.
5. Робот должен работать постоянно.

Если кто-то может реализовать, прошу написать в этой ветке или в личку.

Система Мартингейла не применима при игре на бирже. На срочном рынке вам никто не даст манипулировать плечом. У фьючерсов фиксированые (в зависимости от интрумента плечи). Необходимость поддерживать ГО под "шаги" мартингейла "съест" всю прибыль. Поэтому данный метод используют лишь на форексе

Re: Нужно написать робота по Мартингейлу

Добавлено: 01 мар 2017, 22:20
evge
Пример стратегии Мартингейла.

E_MARTIN-01.png
E_MARTIN-01.png (44.66 КБ) 22296 просмотров


E_MARTIN-02.png
E_MARTIN-02.png (37.43 КБ) 22296 просмотров


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

/**E_MARTIN
Developed by evge;
Algorithm = Усреднение;**/

function Initialize()
{
   StrategyName = "E_MARTIN";
   AddParameter("StartPos", 100, "", 1);
   AddParameter("TP", 0.1, "", 1);
   AddParameter("SL", -10, "", 1);
   AddParameter("PeriodSMA", 13, "", 1);
   AddParameter("PeriodEMA", 8, "", 1);
   AddInput("Input1", Inputs.Candle, 5, true, "SBER=МБ ЦК");
   LongLimit = 1000;
   ShortLimit = -1000;

   AddGlobalVariable("Dir", Types.Int, 0);  // Текущее направление
}

function OnUpdate()
{

// пример стратегии с усреднением
// evge 01.03.2017 http://alfadirect4.ru

   var S = SMA(Input1.Close, PeriodSMA);
   var E = EMA(Input1.Close, PeriodEMA);
   
   var Pos = CurrentPosition();
   var Lot = (Pos == 0) ? (int)StartPos : Math.Abs(Pos);

   // Условие входа в лонг
   var isLong = E[1] < S[1] && E[0] > S[0] && Dir >= 0;

   // Условие входа в шорт
   var isShort =  E[1] > S[1] && E[0] < S[0] && Dir <= 0;

   if (isLong) Dir = 1;
   if (isShort) Dir = -1;

   // Вход
   if (Pos == 0)
   {
      if ( isLong )
      {
         EnterLong(Lot);
      }
      else
      if ( isShort )
      {
         EnterShort(Lot);
      }
   }
 
   // Усреднение
   if ( Pos != 0 && CurrentPLper() < 0 )
   {
      if ( isLong && Pos > 0 )
      {
         EnterLong(Lot);
      }
      else
      if ( isShort && Pos < 0 )
      {
         EnterShort(Lot);
      }
   }

   // Выход по Take
   if ( (CurrentPLper() > TP) )
   {
      ClosePosition();
      Dir = 0;
   }

   // Стоп :(
   if ( (CurrentPLper() < SL) )
   {
      ClosePosition();
      Dir = 0;
   }
}


Скачать код

E_MARTIN.ads
(1.57 КБ) 2124 скачивания


Данный пример каждый следующий лот входа при убытке ставит равным по размеру текущей открытой позиции, т.е. это мартингейл (1, 2, 4, 8, 16, 32, 64....)

Если нужно просто усреднение, то нужно

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

   var Lot = (Pos == 0) ? (int)StartPos : Math.Abs(Pos);

заменить на

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

   var Lot = (int)StartPos;

Re: Нужно написать робота по Мартингейлу

Добавлено: 17 апр 2019, 11:26
Orange2000
Евгений, приветствую.
а в чем тут TP и SL задается?

Re: Нужно написать робота по Мартингейлу

Добавлено: 17 апр 2019, 11:29
evge
В процентах