Помню где-то выкладывали примеры готовых роботов для торговли на разнице котировок в МТ5, но не помню где.
Если у кого есть перед глазами ссылка - скиньте в тему, пожалуйста.
Типа такого, но хотелось бы уже под МТ5, возможно пошустрее и с другими вариантами сравнения цен из 2х терминалов.
Например, мне кажется правильней считать не среднюю цену, а разницу Bid Master - Ask Slave для растущей цены и Ask Master - Bid Slave, чтобы спред уже был компенсирован в расчетах.
а зачем это вообще делать, это уже давно не работает
Специально для таких комментариев дописал, что это не Форекс. Не работает у дилеров, которые гепы маскируют задержками котировок, а я говорю про спот - фьючерс, где сами котировки разные.
они одинаковые, просто торговаться могут по разным ценам, - для этого цена 2-го инструмента просто приводится к цене 1-го
если арбитражить инструменты с реально большими задержками до нескольких минут и разными ценами, например криптовалюты - то там уже другая техника
вот пример есть, остальное легко дописать
https://www.mql5.com/ru/code/817
- голосов: 22
- 2012.01.13
- o_o
- www.mql5.com
Спасибо, но там только мониторинг котировок, а меня как раз "другая техника" интересовала.
Например, банальный междилинг, который на Форексе - это засек когда на покупку 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) ); }
Спасибо, но там только мониторинг котировок, а меня как раз "другая техника" интересовала.
Например, банальный междилинг, который на Форексе - это засек когда на покупку Bid мастерa выше Ask слейва и уверен, что сейчас цена на слейве подтянется до уровня, при этом уже гарантировано можешь взять разницу большую, чем спред на слейве.
На бирже - да, задержки и в минуту бывают, но они цена гарантирована, поэтому и интересовали "техники". Спот двигается быстро и может вильнуть несколько раз вверх-вниз, при этом, если движение не сильное, то фьючерс не следует за ним, может даже в другую сторону отклониться, поэтому надо ловить только сильные движения и обязательно стоп ставить, чтобы не потерять в момент, когда движение на фьючерсе закончилось раньше, чем началось на споте. Также нельзя тупо сравнивать разницу Ask / Bid, потому что они никогда не выравниваются, например, Bid спота почти всегда ниже Ask фьючерса, но при этом фьючерс НЕ пытается идти вверх догоняя спот.
Пока сделал так, если цена в пределах одного бара на М1 шелохнулась больше, чем на размер спреда, то возможно моментум нормальый и пробую входить со стопом на границе спреда, но возможно есть более вменяемые методы...
Там, скорее, более эффективный будет 2-ногий, ну то есть все по правилам парного трейдинга
потому что в таких котировках уже не будет явного ведущего\ведомого сигналов, а вразнобой
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Помню где-то выкладывали примеры готовых роботов для торговли на разнице котировок в МТ5, но не помню где.
Если у кого есть перед глазами ссылка - скиньте в тему, пожалуйста.
Типа такого, но хотелось бы уже под МТ5, возможно пошустрее и с другими вариантами сравнения цен из 2х терминалов.
Например, мне кажется правильней считать не среднюю цену, а разницу Bid Master - Ask Slave для растущей цены и Ask Master - Bid Slave, чтобы спред уже был компенсирован в расчетах.
https://www.mql5.com/ru/forum/72662/page5#comment_2295915
P.S. Это не Forex, надо проверить вменяемость одного биржевого брокера.