newest pro 3.7, нет ни у каво ломаной версии ?
К сожалению, не работает этот код в новом билде, там по наличию #property show_inputs и int start() уже всё понятно, что декомпил под старый билд, в новом используется OnTick(), а #property show_inputs вообще для совы не используется, она свои настройки и так выкидывает. Попробовал поправить, пока не вышло, спать уже хочу. Завтра попробую добить, если есть у кого желание помочь, велком ))
Арбитражник, как и копировщик сделок, по сути это связка 2 советников. В новых билдах эти связки делают по другому. Надо искать свежие версии, написанные под новые (600 и выше) билды.К сожалению, не работает этот код в новом билде, там по наличию #property show_inputs и int start() уже всё понятно, что декомпил под старый билд, в новом используется OnTick(), а #property show_inputs вообще для совы не используется, она свои настройки и так выкидывает. Попробовал поправить, пока не вышло, спать уже хочу. Завтра попробую добить, если есть у кого желание помочь, велком ))
Попробуй этот,вроде работает:
Арбитражник, как и копировщик сделок, по сути это связка 2 советников. В новых билдах эти связки делают по другому. Надо искать свежие версии, написанные под новые (600 и выше) билды.
Можно попробовать установить и запускать терминалы как портативные и разрешить DLL. Может старые советники заработают, но не факт.
Попробуй этот,вроде работает:
Вот работающий в ex4
Как это не работает?! Я его поставил со вчерашнего дня на проверку,всё работает.Не знаю,почему у вас не работает.в нем тоже самое и в итоге 2016.11.18 00:26:17.918 'QuoteGrabber' is not expert and cannot be executed
да ладно, допилю тот первый, там кода всего ничего, посидеть надо просто плотно, разобраться.
//+------------------------------------------------------------------+
//| ArbitrageVisualiser.mq4 |
//| Copyright 2016, |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2016"
#property link
#property version "1.00"
#property strict
input bool Trade = false; // Торговать разницу котировок или нет
input bool IsMaster = true; // false ставим на счет с быстрыми котировками, true на счет с запаздывающими
input double PointsDifference = 0.0005; // размер запаздывания котировок для открытия позы
input int Slippage = 0; // проскальзывание для 4-х значных котировок
input double LotSizeMultiplier = 0.1; // множитель лота для ордеров
input int OrderMagic = 453535;
double Lots;
int filehandleBid, filehandleAsk;
datetime dateBid, dateAsk;
double priceBid, priceAsk;
void OnTick()
{
if(IsMaster == false)
{
filehandleBid=FileOpen("BidQuote.csv", FILE_WRITE|FILE_CSV|FILE_COMMON); // пишем в файл биды с быстрого счета
FileWrite(filehandleBid, MarketInfo(Symbol(), MODE_BID),TimeCurrent());
FileClose(filehandleBid);
filehandleAsk=FileOpen("AskQuote.csv", FILE_WRITE|FILE_CSV|FILE_COMMON); // пишем в файл аски с быстрого счета
FileWrite(filehandleAsk, MarketInfo(Symbol(), MODE_ASK),TimeCurrent());
FileClose(filehandleAsk);
}
if(IsMaster == true)
{
filehandleBid=FileOpen("BidQuote.csv", FILE_READ|FILE_CSV|FILE_COMMON); // читаем из файла биды
priceBid = FileReadNumber(filehandleBid);
dateBid = FileReadDatetime(filehandleBid);
FileClose(filehandleBid);
filehandleAsk=FileOpen("AskQuote.csv", FILE_READ|FILE_CSV|FILE_COMMON); // читаем из файла аски
priceAsk = FileReadNumber(filehandleAsk);
dateAsk = FileReadDatetime(filehandleAsk);
FileClose(filehandleAsk);
ObjectCreate(0,"LineBid",OBJ_HLINE,0,0,priceBid); // рисуем линию бид
ObjectSetInteger(0,"LineBid",OBJPROP_COLOR, Green);
ObjectSetInteger(0,"LineBid",OBJPROP_STYLE, 4);
ObjectMove(0,"LineBid", 0, 0, priceBid);
ObjectCreate(0,"LineAsk",OBJ_HLINE,0,0,priceAsk); // рисуем линию аск
ObjectSetInteger(0,"LineAsk",OBJPROP_COLOR, Red);
ObjectSetInteger(0,"LineAsk",OBJPROP_STYLE, 4);
ObjectMove(0,"LineAsk", 0, 0, priceAsk);
if (MarketInfo(Symbol(), MODE_ASK) <= priceAsk - PointsDifference && Trade == true)
{
if(CountOrders()==0)
{
Lots = LotsOptimized();
if(OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, Bid-PointsDifference, Bid+PointsDifference, NULL, 0, Green) == false) GetLastError();
}
Print("Buy Ok");
}
if (MarketInfo(Symbol(), MODE_BID) >= priceBid + PointsDifference && Trade == true)
{
if(CountOrders()==0)
{
Lots = LotsOptimized();
if(OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, Ask+PointsDifference, Ask-PointsDifference, NULL, 0, Red) == false) GetLastError();
}
Print("Sell Ok");
}
}
}
int CountOrders()
{
int result=0;
for (int k=0; k <OrdersTotal(); k++)
{
if (OrderSelect(k,SELECT_BY_POS)==true)
{
if (OrderType()==OP_BUY || OrderType()==OP_SELL)
{result++;}
else
{}
}
}
return(result);
}
double LotsOptimized()
{
double lot;
lot=NormalizeDouble(AccountFreeMargin()*LotSizeMultiplier/1000.0,2);
if(lot<0.01) lot=0.01;
if(lot>200) lot=200;
return(lot);
}
//+------------------------------------------------------------------+
Ловите:Привет! Работающий арбитражник.
Код://+------------------------------------------------------------------+ //| ArbitrageVisualiser.mq4 | //| Copyright 2016, | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2016" #property link #property version "1.00" #property strict input bool Trade = false; // Торговать разницу котировок или нет input bool IsMaster = true; // false ставим на счет с быстрыми котировками, true на счет с запаздывающими input double PointsDifference = 0.0005; // размер запаздывания котировок для открытия позы input int Slippage = 0; // проскальзывание для 4-х значных котировок input double LotSizeMultiplier = 0.1; // множитель лота для ордеров input int OrderMagic = 453535; double Lots; int filehandleBid, filehandleAsk; datetime dateBid, dateAsk; double priceBid, priceAsk; void OnTick() { if(IsMaster == false) { filehandleBid=FileOpen("BidQuote.csv", FILE_WRITE|FILE_CSV|FILE_COMMON); // пишем в файл биды с быстрого счета FileWrite(filehandleBid, MarketInfo(Symbol(), MODE_BID),TimeCurrent()); FileClose(filehandleBid); filehandleAsk=FileOpen("AskQuote.csv", FILE_WRITE|FILE_CSV|FILE_COMMON); // пишем в файл аски с быстрого счета FileWrite(filehandleAsk, MarketInfo(Symbol(), MODE_ASK),TimeCurrent()); FileClose(filehandleAsk); } if(IsMaster == true) { filehandleBid=FileOpen("BidQuote.csv", FILE_READ|FILE_CSV|FILE_COMMON); // читаем из файла биды priceBid = FileReadNumber(filehandleBid); dateBid = FileReadDatetime(filehandleBid); FileClose(filehandleBid); filehandleAsk=FileOpen("AskQuote.csv", FILE_READ|FILE_CSV|FILE_COMMON); // читаем из файла аски priceAsk = FileReadNumber(filehandleAsk); dateAsk = FileReadDatetime(filehandleAsk); FileClose(filehandleAsk); ObjectCreate(0,"LineBid",OBJ_HLINE,0,0,priceBid); // рисуем линию бид ObjectSetInteger(0,"LineBid",OBJPROP_COLOR, Green); ObjectSetInteger(0,"LineBid",OBJPROP_STYLE, 4); ObjectMove(0,"LineBid", 0, 0, priceBid); ObjectCreate(0,"LineAsk",OBJ_HLINE,0,0,priceAsk); // рисуем линию аск ObjectSetInteger(0,"LineAsk",OBJPROP_COLOR, Red); ObjectSetInteger(0,"LineAsk",OBJPROP_STYLE, 4); ObjectMove(0,"LineAsk", 0, 0, priceAsk); if (MarketInfo(Symbol(), MODE_ASK) <= priceAsk - PointsDifference && Trade == true) { if(CountOrders()==0) { Lots = LotsOptimized(); if(OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, Bid-PointsDifference, Bid+PointsDifference, NULL, 0, Green) == false) GetLastError(); } Print("Buy Ok"); } if (MarketInfo(Symbol(), MODE_BID) >= priceBid + PointsDifference && Trade == true) { if(CountOrders()==0) { Lots = LotsOptimized(); if(OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, Ask+PointsDifference, Ask-PointsDifference, NULL, 0, Red) == false) GetLastError(); } Print("Sell Ok"); } } } int CountOrders() { int result=0; for (int k=0; k <OrdersTotal(); k++) { if (OrderSelect(k,SELECT_BY_POS)==true) { if (OrderType()==OP_BUY || OrderType()==OP_SELL) {result++;} else {} } } return(result); } double LotsOptimized() { double lot; lot=NormalizeDouble(AccountFreeMargin()*LotSizeMultiplier/1000.0,2); if(lot<0.01) lot=0.01; if(lot>200) lot=200; return(lot); } //+------------------------------------------------------------------+
Ловите:
Ловите:
напишите как правильно пользоваться этой штукой!!! спасибо буду очень признателен!
меняете настройки, там в коде закомментировано. Торгует только мастер, слэйв не торгует. Сделки открываются когда на слэйве котировки выше\ниже котировок мастера на величину PointsDifference. Т.е. если на мастере аск < чем аск на слейве на величину PointsDifference то покупаем, и наоборот для продаж. .
вот автор пишет :
Да спасибо!
а вот
1...........input bool Trade = false; // Торговать разницу котировок или нет
2...........input bool IsMaster = true; // false ставим на счет с быстрыми котировками, true на счет с запаздывающими
то есть на мастер я ставлю 1 - false и 2 - false
а на слейв 1 - true и 2 - true,
или я не так понял? торговать разницу включаем только на слайве ведь так?
такую торговлю режут на корню с блокировкой счета,так что не обольщайтесь