Подскажите шустрый советник Master - Slave для МТ5 для междилинга

 

Помню где-то выкладывали примеры готовых роботов для торговли на разнице котировок в МТ5, но не помню где.
Если у кого есть перед глазами ссылка - скиньте в тему, пожалуйста.
Типа такого, но хотелось бы уже под МТ5, возможно пошустрее и с другими вариантами сравнения цен из 2х терминалов.

Например, мне кажется правильней считать не среднюю цену, а разницу Bid Master - Ask Slave для растущей цены и Ask Master - Bid Slave, чтобы спред уже был компенсирован в расчетах.

https://www.mql5.com/ru/forum/72662/page5#comment_2295915

P.S. Это не Forex, надо проверить вменяемость одного биржевого брокера.

Почему так. Мобильная версия мт4 котировки быстрые, а мт4 брокера отстает намного. Используя это , вручную можно заработать. ;))
Почему так. Мобильная версия мт4 котировки быстрые, а мт4 брокера отстает намного. Используя это , вручную можно заработать. ;))
  • 2016.02.23
  • www.mql5.com
Мобильная версия мт4 котировки быстрые, а мт4 брокера отстает намного.
 
Andy Sanders:

Помню где-то выкладывали примеры готовых роботов для торговли на разнице котировок в МТ5, но не помню где.
Если у кого есть перед глазами ссылка - скиньте в тему, пожалуйста.
Типа такого, но хотелось бы уже под МТ5, возможно пошустрее и с другими вариантами сравнения цен из 2х терминалов.

Например, мне кажется правильней считать не среднюю цену, а разницу Bid Master - Ask Slave для растущей цены и Ask Master - Bid Slave, чтобы спред уже был компенсирован в расчетах.

а зачем это вообще делать, это уже давно не работает

 
Igor Yeremenko:

а зачем это вообще делать, это уже давно не работает

Специально для таких комментариев дописал, что это не Форекс. Не работает у дилеров, которые гепы маскируют задержками котировок, а я говорю про спот - фьючерс, где сами котировки разные.
 
Andy Sanders:
Специально для таких комментариев дописал, что это не Форекс. Не работает у дилеров, которые гепы маскируют задержками котировок, а я говорю про спот - фьючерс, где сами котировки разные.

они одинаковые, просто торговаться могут по разным ценам, - для этого цена 2-го инструмента просто приводится к цене 1-го

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

вот пример есть, остальное легко дописать

https://www.mql5.com/ru/code/817

Мониторинг котировок (пример для маппинга)
Мониторинг котировок (пример для маппинга)
  • голосов: 22
  • 2012.01.13
  • o_o
  • www.mql5.com
В данном примере запущенный эксперт создает виртуальный файл в памяти и начинает обновлять в нем котировку символа. При запуске экспертов в других терминалах, эти эксперты открывают созданный файл и аналогично начинают обновлять свои котировки в нем. Таким образом, эксперты через один общий файл обмениваются своими котировками. По просьбам...
 
Maxim Dmitrievsky:

Спасибо, но там только мониторинг котировок, а меня как раз "другая техника" интересовала.

Например, банальный междилинг, который на Форексе - это засек когда на покупку Bid мастерa выше Ask слейва и уверен, что сейчас цена на слейве подтянется до уровня, при этом уже гарантировано можешь взять разницу большую, чем спред на слейве.

На бирже - да, задержки и в минуту бывают, но они цена гарантирована, поэтому и интересовали "техники". Спот двигается быстро и может вильнуть несколько раз вверх-вниз, при этом, если движение не сильное, то фьючерс не следует за ним, может даже в другую сторону отклониться, поэтому надо ловить только сильные движения и обязательно стоп ставить, чтобы не потерять в момент, когда движение на споте закончилось раньше, чем началось на фьючерсе. Также нельзя тупо сравнивать разницу Ask / Bid, потому что они никогда не выравниваются, например, Bid спота почти всегда ниже Ask фьючерса, но при этом фьючерс НЕ пытается идти вверх догоняя спот.

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

#include <AIV/Trades.mqh>

input bool InpMaster = true;
input double InpVolume = 1;
input double InpStop = 0;
input double InpCommission = 1;
input string InpName = "A";

CHelpers * iHelpers;
CTrades * iTrades;

int iFile;
int iDirection;
double iSpike;

void OnInit()
{
  iHelpers = new CHelpers();
  iTrades = new CTrades(ORDER_FILLING_RETURN);

  iFile = FileOpen("Exchange" + InpName + ".csv",
    FILE_READ |
    FILE_WRITE |
    FILE_SHARE_READ |
    FILE_SHARE_WRITE |
    FILE_BIN |
    FILE_COMMON);

  EventSetMillisecondTimer(1000);
}

void OnDeinit(const int reason)
{
  delete(iHelpers);
  delete(iTrades);

  EventKillTimer();
 
  FileClose(iFile);
}

void OnTick()
{
}

void OnTimer()
{
  exchangeRates();
}

void exchangeRates()
{
  string symbol = Symbol();

  MqlRates internal = iHelpers.getBarData(symbol, PERIOD_CURRENT);

  internal.high = iHelpers.getCurrentPrice(symbol, 1); // slave ASK
  internal.low = iHelpers.getCurrentPrice(symbol, -1); // slave BID

  if (InpMaster)
  {
    setRange(internal); // save master quotes
  }
  else
  {
    int inPositions = iTrades.getPositionsCount(symbol);

    if (inPositions == 0)
    {
      MqlRates external = getRange(); // get master quotes
     
      int exDirection = 0;
     
      double inStop = 0;
      double inSpread = internal.high - internal.low;
      double inValue = iTrades.getPositionsIncome(symbol);
      double exSpread = external.high - external.low;
      double exSpike = 0;
     
      bool isSpike = false;
   
      if (external.close > external.open) // master is going up
      {
        inStop = internal.low;
        isSpike = external.low > internal.high;
        exSpike = external.low - external.open;
        exDirection = 1;
      }

      if (external.close < external.open) // master is going down
      {
        inStop = internal.high;
        isSpike = internal.low > external.high;
        exSpike = external.open - external.high;
        exDirection = -1;
      }

      if (isSpike && exSpike > exSpread) // open position if move is fast and significant
      {
        iSpike = exSpike;
        iDirection = exDirection;
        compare(exDirection, exSpike, internal, external);
        iTrades.openPosition(symbol, exDirection, InpVolume, inStop);
      }
    }
    else
    {
      double inSpike = iTrades.getPositionsDistance(symbol, iDirection);

      if (inSpike > iSpike) // if slave moved up or down the same amount of ticks as master, prices are equal, close positions 
      {
        iTrades.closePositions(symbol);
      }
    }
  }
}

MqlRates getRange()
{
  MqlRates external = {0};

  FileSeek(iFile, 0, SEEK_SET);
  FileReadStruct(iFile, external);

  return external;
}

void setRange(MqlRates &internal)
{
  FileSeek(iFile, 0, SEEK_SET);
  FileWriteStruct(iFile, internal);
  FileFlush(iFile);
}

void compare(int direction, double spike, MqlRates &internal, MqlRates &external)
{
  int precision = iHelpers.getPrecision(Symbol());

  Print(
    (direction > 0 ? "Long" : "Short") + " : " +
    DoubleToString(external.open, precision) + " vs " + DoubleToString(internal.open, precision) + " => " +
    "Ask" + " : " + DoubleToString(external.high, precision) + " vs " + DoubleToString(internal.high, precision) + " => " +
    "Bid" + " : " + DoubleToString(external.low, precision) + " vs " + DoubleToString(internal.low, precision) + " => " +
    DoubleToString(spike, precision)
  );
}
 
Andy Sanders:

Спасибо, но там только мониторинг котировок, а меня как раз "другая техника" интересовала.

Например, банальный междилинг, который на Форексе - это засек когда на покупку Bid мастерa выше Ask слейва и уверен, что сейчас цена на слейве подтянется до уровня, при этом уже гарантировано можешь взять разницу большую, чем спред на слейве.

На бирже - да, задержки и в минуту бывают, но они цена гарантирована, поэтому и интересовали "техники". Спот двигается быстро и может вильнуть несколько раз вверх-вниз, при этом, если движение не сильное, то фьючерс не следует за ним, может даже в другую сторону отклониться, поэтому надо ловить только сильные движения и обязательно стоп ставить, чтобы не потерять в момент, когда движение на фьючерсе закончилось раньше, чем началось на споте. Также нельзя тупо сравнивать разницу Ask / Bid, потому что они никогда не выравниваются, например, Bid спота почти всегда ниже Ask фьючерса, но при этом фьючерс НЕ пытается идти вверх догоняя спот.

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

Там, скорее, более эффективный будет 2-ногий, ну то есть все по правилам парного трейдинга

потому что в таких котировках уже не будет явного ведущего\ведомого сигналов, а вразнобой