Читать данные из чужого приложения , чтение котировок из одного терминала в другой , игра на разнице - Арбитраж.

 

Добрый день друзья по увлечению.

Достал из архива одну разработку 2009 г.

Стояла задача читать котировки Саксобанка и тут же на разнице ( арбитраж) входить в какой либо медленной кухоньке форекс.

В принципе работало чудесно, но арбитраж на кухнях преследуется если сделки ведут к успеху вас просто  прижмут всеми известными способами,

к сравнению арбитраж на фондовом рынке совершенно не преследуется.

Очень даже неплохо выходило, но кухня через некоторое время принимала жесткие меры. Самые прикольные это отмена сделок.

На бирже это нормальная разрешенная стратегия!

Понятно что любой форексное казино , по сути это ООО Рога и Копыта , где хозяева получают от слива депозита.

На бирже ( имеется ввиду фоновый рынок) если вы сливаете , деньги уходят в реальный рынок а не на счета какого либо Остапа Бендера.

Более того , фондовые брокеры обожают арбитражников, поскольку те приносят самый высокий доход.

Выводы можете делать сами.


C учетом 2009 года,  по тем временам арендовалась очень мощная машина, 16 ядер и 64ггб, интернет оптика скорость была дикая , где то на хребте интернета в германии.

запускался терминал саксобанка, запускался мт4 и небольшой скрипт вызывающий DLL которая зачитывала в быстром саксобанке котировки прямо из окошка.

Если котировка в саксе делала резкое движение , скрип на мт4 получив через DLL разницу ( дельта настраивалась  ) делал вход по направлению сильного движения.

итак пример кода на Си++
Запуск платформы - Для продвинутых пользователей - Справка по MetaTrader 5
Запуск платформы - Для продвинутых пользователей - Справка по MetaTrader 5
  • www.metatrader5.com
По завершении установки в меню "Пуск" создается группа программ торговой платформы, а на рабочем столе дополнительно помещается ярлык программы. Используйте их для запуска. Нельзя запускать одновременно две копии платформы из одной директории. Чтобы одновременно запустить несколько копий, установите соответствующее количество программ в разные...
 
Yuriy Zaytsev:
. чуть позже опишу

давай, не томи, разные там хуки и прочее - очень хорошо с этим знаком на практике,

но беру за такие штуки дорого...

 
Denis Sartakov:

давай, не томи, разные там хуки и прочее - очень хорошо с этим знаком на практике,

но беру за такие штуки дорого...

:-) а я отдам даром.
 
//
// YuraZ
// DLL БИБЛИОТЕКА  ДЛЯ ПОЛУЧЕНИЯ КОТИРОВОК С ТЕРМИНАЛА САКСОБАНК - ИСПОЛЬЗУЕТСЯ В АРБИТРАЖНОМ СОВЕТНИКЕ В МЕДЛЕННЫХ КУХОНЬКАХ
//
#define WIN32_LEAN_AND_MEAN  
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>

#define MT4_EXPFUNC __declspec(dllexport)


#pragma pack(push,1)

struct MasInfo
  {
   double           ask;//0
   double           bid;//0
  };


#pragma pack(pop)


BOOL APIENTRY DllMain(HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved)
  {
   switch(ul_reason_for_call)
     {
      case DLL_PROCESS_ATTACH:
      case DLL_THREAD_ATTACH:
      case DLL_THREAD_DETACH:
      case DLL_PROCESS_DETACH:
         break;
     }
   return(TRUE);
  }


HWND FindHendlKey( HWND Current  ,   char* findname   );
HWND FindWindowNext( HWND Current  ,  char*  findname   );


MT4_EXPFUNC int  __stdcall GetAskBid( MasInfo *mi , char *sSym)
{
 
    char a[]    = "xxxxxxxxxx";
    char ask[]  = "                          ";
    char bid[]  = "                          ";

    HWND hWseek;
    HWND hOsym;
    HWND hOsave;
    int len;
        hWseek = GetDesktopWindow();
    HWND hOt = FindHendlKey( hWseek  ,(  char*) "Forex ордера"); // Ищем окно
        if ( hOt == 0 )
       hOt = FindHendlKey( hWseek  , ( char*) "Forex Orders");
    if ( hOt == 0 )
      return(0);

beg:
        
        hWseek = FindWindowNext ( hOt , (  char*) "Forex ордера" );  // приложени Сксобанк
        hOsave = hOt;
        //---
    hOsym = FindHendlKey( hOt  , ( char*) "...");
        hOsym = GetWindow( hOsym , GW_HWNDNEXT ); // ищем
        hOsym = GetWindow( hOsym , GW_HWNDNEXT ); // ищем
    len = SendMessage( hOsym , WM_GETTEXTLENGTH, 0 , 0 )+1;
    SendMessage( hOsym , WM_GETTEXT, len , (LPARAM) a );
        if ( strncmp( (char*)sSym+3, a, 3 ) != 0  ) // xxxSSS
        {
                hOt = hWseek;
                if (hWseek == 0 )
                         return(0);
        goto beg;
        }
        hOsym = GetWindow( hOsym , GW_HWNDNEXT ); // ищем
    len = SendMessage( hOsym , WM_GETTEXTLENGTH, 0 , 0 )+1;
    SendMessage( hOsym , WM_GETTEXT, len , (LPARAM)a );
        if ( strncmp( sSym, a, 3 ) != 0  )
        {
                hOt = hWseek;
                if (hWseek == 0 )
                         return(0);
        goto beg;
        }
        // получаем BID и ASK
        HWND temp = GetWindow( hOt , GW_CHILD ); // ищем
    temp = GetWindow( temp , GW_CHILD ); // ищем
    temp = GetWindow( temp , GW_CHILD ); // ищем
    temp = GetWindow( temp , GW_CHILD ); // ищем спустились
    temp = GetWindow( temp , GW_HWNDNEXT ); // ищем спустились BID
    HWND hBID = temp;
    len = SendMessage( hBID , WM_GETTEXTLENGTH, 0 , 0 )+1;

    SendMessage( hBID , WM_GETTEXT, len , (LPARAM) bid );

    int i;
    for ( i = 0; i <= len; i++)
        {
       if ( *(bid + i ) == ',' )
                     *(bid + i ) = '.';
        }
    mi[0].bid =   atof( bid );

    temp = GetWindow( temp , GW_HWNDNEXT ); // ищем спустились Bid
    temp = GetWindow( temp , GW_HWNDNEXT ); // ищем спустились ASK
    HWND hASK = temp;
    len = SendMessage( hASK , WM_GETTEXTLENGTH, 0 , 0 )+1;
    SendMessage( hASK , WM_GETTEXT, len , (LPARAM) ask  );
    for ( i = 0; i <= len; i++)
        {
       if ( *(ask + i ) == ',' )
                     *(ask + i ) = '.';
        }
    mi[0].ask =   atof( ask );

  return(1);
}

HWND FindHendlKey( HWND Current  ,  char*  findname   )
{
 
  char p1[]=  "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234";
  HWND temp = GetWindow( Current , GW_CHILD ); // ищем
  while ( temp != NULL )
  {
     GetWindowTextA( temp , (LPSTR) p1 , (int) strlen( (char*)findname)+1 ); 
     if ( strcmp( (char*)p1, (char*) findname ) == 0 ) // проверим а не та ли это кнопка
     {
        return( temp ); // это то что мы ищем
     }
     HWND r =   FindHendlKey( temp  ,   findname   ) ; //  не она , обойдем ее дочерние объекты
     if ( r != NULL )
     {
        return (r); // опс нашли дочку
     }
     temp = GetWindow( temp , GW_HWNDNEXT ); // проверяем следующий объект, дочерний 
  }
  return (0);
}


//
// искать на уровне нужное окно
//
HWND FindWindowNext( HWND Current  ,  char*  findname   )
{
 
  char p1[]=  "012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234";
  HWND temp = GetWindow( Current , GW_HWNDNEXT ); // ищем
  while ( temp != NULL )
  {
     GetWindowTextA( temp , (LPSTR) p1 , (int) strlen( (char*)findname)+1 ); 
     if ( strcmp( (char*)p1, (char*) findname ) == 0 ) // проверим а не та ли это кнопка
     {
        return( temp ); // это то что мы ищем
     }
     HWND r =   FindHendlKey( temp  ,   findname   ) ; // значит не она , обойдем ее дочерние объекты
     if ( r != NULL )
     {
        return (r); // опс нашли дочку
     }
     temp = GetWindow( temp , GW_HWNDNEXT ); // проверяем следующий объект, дочерний 
  }
  return (0);
}
 
арбитраж преследуется в любом брокере форекс, не только на кухнях.
 
Ivan_Invanov:
арбитраж преследуется в любом брокере форекс, не только на кухнях.

На эту тему интересно поговорить , разобрав ее по полочкам.

Выяснив истинные причины преследований арбитража на форексе

и понять  почему арбитраж допустим на фондовом рынке.

Интересно узнать разные мнения по этой теме. 

 
Yuriy Zaytsev:

На эту тему интересно поговорить , разобрав ее по полочкам.

Выяснив истинные причины преследований арбитража на форексе

и понять  почему арбитраж допустим на фондовом рынке.

Интересно узнать разные мнения по этой теме. 

Вы правда не понимаете, чем отличается дилинг от брокеража?
 
Alexey Navoykov:
Вы правда не понимаете, чем отличается дилинг от брокеража?

Давайте попробуем выяснить, что Вы имеете ввиду под "непониманием" . Из того что описано мной следует что я не понимаю разницу ?

Брокер фондовый живет с комиссий , ДЦ форекс живет далеко не только от спреда. ДЦ не выводя сделки на реальный форекс рынок , просто ждет когда клиент сольет

Опишите пожалуйста , свое видение чем отличается форекс дилинг от брокеража.

 
Yuriy Zaytsev:

На эту тему интересно поговорить , разобрав ее по полочкам.

Выяснив истинные причины преследований арбитража на форексе

и понять  почему арбитраж допустим на фондовом рынке.

Интересно узнать разные мнения по этой теме. 

Сколько Вы планируете % в мес заработать с арбитража?
 
Yuriy Zaytsev:

Давайте попробуем выяснить, что Вы имеете ввиду под "непониманием" . Из того что описано мной следует что я не понимаю разницу ?

Нет, скорее следует то, что вы делаете вид, что не понимаете разницу. Не очень понятна цель этой вашей провокации.

 
Alexey Navoykov:

Нет, скорее следует то, что вы делаете вид, что не понимаете разницу. Не очень понятна цель этой вашей провокации.

Да где  , в каком моем сообщении  вы видите какую то провокацию.

Мне интересна тема.

Я написал,  брокер живет с комиссий , дц форекс живет далеко не с комиссий.

Вы лучше опишите как вы понимаете разницу между брокеражом и форекс ДЦ.