Форекс советник "Валютный арбитраж"

pulio5g

Местный житель

К сожалению, не работает этот код в новом билде, там по наличию #property show_inputs и int start() уже всё понятно, что декомпил под старый билд, в новом используется OnTick(), а #property show_inputs вообще для совы не используется, она свои настройки и так выкидывает. Попробовал поправить, пока не вышло, спать уже хочу. Завтра попробую добить, если есть у кого желание помочь, велком ))
 

Sprinter500

Активный участник
newest pro 3.7, нет ни у каво ломаной версии ?

У меня есть не ломанная, но она работает со специальным дата-фидом с CQG и Saxo. К сожалению может ставится только на 2 графика. Но этого достаточно если использовать скажем с индексами DAX и US30 как делают большинство. Если надо пиши на скайп: igorm1000
 

Kent175

Активный участник
К сожалению, не работает этот код в новом билде, там по наличию #property show_inputs и int start() уже всё понятно, что декомпил под старый билд, в новом используется OnTick(), а #property show_inputs вообще для совы не используется, она свои настройки и так выкидывает. Попробовал поправить, пока не вышло, спать уже хочу. Завтра попробую добить, если есть у кого желание помочь, велком ))
Попробуй этот,вроде работает:
 

Вложения

  • QuoteGrabber.rar
    6,5 КБ · Просмотры: 117
Последнее редактирование:

Ugar

Гуру форума
К сожалению, не работает этот код в новом билде, там по наличию #property show_inputs и int start() уже всё понятно, что декомпил под старый билд, в новом используется OnTick(), а #property show_inputs вообще для совы не используется, она свои настройки и так выкидывает. Попробовал поправить, пока не вышло, спать уже хочу. Завтра попробую добить, если есть у кого желание помочь, велком ))
Попробуй этот,вроде работает:
Арбитражник, как и копировщик сделок, по сути это связка 2 советников. В новых билдах эти связки делают по другому. Надо искать свежие версии, написанные под новые (600 и выше) билды.
Можно попробовать установить и запускать терминалы как портативные и разрешить DLL. Может старые советники заработают, но не факт.
 

pulio5g

Местный житель
Арбитражник, как и копировщик сделок, по сути это связка 2 советников. В новых билдах эти связки делают по другому. Надо искать свежие версии, написанные под новые (600 и выше) билды.
Можно попробовать установить и запускать терминалы как портативные и разрешить DLL. Может старые советники заработают, но не факт.

Да не, дело не в этом. Скомпилированный работает в новом билде как надо, а если его декомпилировать, получаем код под старый билд, так как декомпилятор старый, нового как известно нет, код просто надо адаптировать под новый билд. Сегодня не смогу, поздно домой попал, может на днях доведу до ума. Главное потом под мт5 и cTrader перегнать.
 

Ontario

Местный знаток
Вот работающий в ex4
 

Вложения

  • SoeHoeCom_Quotesgrabber preffix.ex4
    2,9 КБ · Просмотры: 54

Kent175

Активный участник
в нем тоже самое и в итоге 2016.11.18 00:26:17.918 'QuoteGrabber' is not expert and cannot be executed

да ладно, допилю тот первый, там кода всего ничего, посидеть надо просто плотно, разобраться.
Как это не работает?! Я его поставил со вчерашнего дня на проверку,всё работает.Не знаю,почему у вас не работает.
 

Omukchaan

Элитный участник
Привет! Работающий арбитражник.
Код:
//+------------------------------------------------------------------+
//|                                          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);
}
//+------------------------------------------------------------------+
 

Kent175

Активный участник
ArbitrageVisualiser

Привет! Работающий арбитражник.
Код:
//+------------------------------------------------------------------+
//|                                          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.ex4
    9,8 КБ · Просмотры: 75
  • ArbitrageVisualiser.mq4
    3,9 КБ · Просмотры: 113

Omukchaan

Элитный участник
напишите как правильно пользоваться этой штукой!!! спасибо буду очень признателен!

вот автор пишет :

меняете настройки, там в коде закомментировано. Торгует только мастер, слэйв не торгует. Сделки открываются когда на слэйве котировки выше\ниже котировок мастера на величину PointsDifference. Т.е. если на мастере аск < чем аск на слейве на величину PointsDifference то покупаем, и наоборот для продаж. .
 

M220

Интересующийся
вот автор пишет :

Да спасибо!

а вот
1...........input bool Trade = false; // Торговать разницу котировок или нет
2...........input bool IsMaster = true; // false ставим на счет с быстрыми котировками, true на счет с запаздывающими

то есть на мастер я ставлю 1 - false и 2 - false
а на слейв 1 - true и 2 - true,
или я не так понял? торговать разницу включаем только на слайве ведь так?
 

Omukchaan

Элитный участник
Да спасибо!

а вот
1...........input bool Trade = false; // Торговать разницу котировок или нет
2...........input bool IsMaster = true; // false ставим на счет с быстрыми котировками, true на счет с запаздывающими

то есть на мастер я ставлю 1 - false и 2 - false
а на слейв 1 - true и 2 - true,
или я не так понял? торговать разницу включаем только на слайве ведь так?

в коде есть ссылка на личку автора. У него есть продукт выставлен - и демо итд. Там есть полное описание.
 

Ontario

Местный знаток
такую торговлю режут на корню с блокировкой счета,так что не обольщайтесь
 
Верх