Запаздывание OI (открытый интерес) - страница 6

 
Renat Akhtyamov:

у него есть личка для этого

а Вы счас пишете в СМИ, вот и обсуждали

я Вам также доходчиво - используйте синхронные

Синхронные и использую, куда же деваться с подводной лодки.

 
Dmi3:

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


Вы или вообще не понимаете сути "кривых" мэджиков или не хотите понимать.

https://www.mql5.com/ru/blogs/post/557544

Отслеживание ордера, после команды OrderSendAsync
Отслеживание ордера, после команды OrderSendAsync
  • 2016.10.29
  • www.mql5.com
Отслеживание ордера, после команды OrderSendAsync Михаил | 23 апреля, 2015 В статье рассказывается принцип отслеживания ордера после команды OrderSendAsync, если нет события TradeTransaction
 
prostotrader:

Вы или вообще не понимаете сути "кривых" мэджиков или не хотите понимать.

https://www.mql5.com/ru/blogs/post/557544

Почему? Я прекрасно понимаю как это работает. Но я не хочу терять "прямые" меджики. Без них мне будет сложно быстро разбираться откуда и что у меня взялось на счете в текущий момент.

 
Dmi3:

Почему? Я прекрасно понимаю как это работает. Но я не хочу терять "прямые" меджики. Без них мне будет сложно быстро разбираться откуда и что у меня взялось на счете в текущий момент.

Маджик ведь большой, в него можно обернуть и постоянную часть (id стратегии, например), и "переменную" (номер запроса).

 
Stanislav Korotky:

Маджик ведь большой, в него можно обернуть и постоянную часть (id стратегии, например), и "переменную" (номер запроса).

у него он int а не long
 
Renat Akhtyamov:
у него он int а не long

Не поверите  :)  Даже с int мэджиком можно торговать 1000+ советниками с 1000000+ комбинациями стратегий в каждом.

 
prostotrader:

Слышали звон, да не знаете где он.

"Наехал" к выложенному коду.

......

Как можно говорить о результатах, если код написан из ряда вон плохо?

......

Очень многие "писаки" советников, хватаются за работу для ММВБ, даже не зная многих основ торговли на Фондовом и Срочном рынке! 


Наехали лишнего не по делу! Всё у девушки нормально было, тем более по сравнению с персонажами из соседних тем, которые лезут продавцами в Маркет, даже не сдав зачёт по информатике с Бэйсиком ))

 
Aleksey Mavrin:

Не поверите  :)  Даже с int мэджиком можно торговать 1000+ советниками с 1000000+ комбинациями стратегий в каждом.

а если есть логика в мозгах, то и без магиков норм

кстати, насчет инта к слову было, чтобы прикинул лонг, если уж как то нумерует сверхинтересно

раз уж программист, так сказать...
 
Aleksey Mavrin:


Наехали лишнего не по делу! Всё у девушки нормально было, тем более по сравнению с персонажами из соседних тем, которые лезут продавцами в Маркет, даже не сдав зачёт по информатике с Бэйсиком ))

чо там у неё нормально?

даже не понимает что на выходе должно быть и что для этого нужно сделать

даже опытные мне не ответили на коварный вопрос, потому что про такое на каждом углу нельзя рассказывать

однако я знаю как добиться верного результата, ибо посвятил изучению этой темы около 5 лет.

 
Dmi3:

Почему? Я прекрасно понимаю как это работает. Но я не хочу терять "прямые" меджики. Без них мне будет сложно быстро разбираться откуда и что у меня взялось на счете в текущий момент.

Если Вы так пишите, то не понимаете как это все работает!

Старшие биты мэджика формируются из названия символа, кроме того можно каждому советнику присваивать его ID, а младшие биты

создают серию дочерних мэджиков.

Так что ну нужно утверждать, что Вы понимаете как это работает!

//+------------------------------------------------------------------+
//|                                                    AutoMagic.mqh |
//|                                 Copyright 2017-2018 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
//version   "1.02
ulong symb_magic;
int exp_id;
//-------------------------------------------------------------------+
// Split string function                                             |
//+------------------------------------------------------------------+
string SplitString(const string a_str,ulong &a_month,ulong &a_year)
  {
   int str_size=StringLen(a_str);
   int str_tire=StringFind(a_str, "-");
   int str_tochka=StringFind(a_str, ".", str_tire);
   if((str_tire>0) && (str_tochka>0) &&(str_size > 0))
     {
      a_month= ulong(StringToInteger(StringSubstr(a_str,str_tire+1,str_tochka-str_tire-1)));
      a_year = ulong(StringToInteger(StringSubstr(a_str,str_tochka+1,str_size-str_tochka-1)));
      if((a_month > 0) && (a_year > 0)) return(StringSubstr(a_str, 0, str_tire));
     }
   return("");
  }
//-------------------------------------------------------------------+
// Get Magic function                                                |
//+------------------------------------------------------------------+
ulong GetMagic(const string a_symbol, const int sov_id)
{
  exp_id = -1;
  symb_magic = 0;
  if(SymbolSelect(Symbol(), true) == false)
  {
    Print(__FUNCTION__, ": Нет такого символа!");
    return(0);
  }
  ulong month = 0;
  ulong year = 0;
  string new_str = SplitString(a_symbol,month,year);
  if(StringLen(new_str)>0)
  {
    uchar char_array[];
    int result=StringToCharArray(new_str, char_array, 0, WHOLE_ARRAY, CP_ACP);
    if(result>0)
   {
     ulong value;
     for(int i = 0; i < result - 1; i++)
     {
       value=ulong(char_array[i]);
       value<<=(56 -(i*8));
       symb_magic += value;
     }
     month<<=24;
     symb_magic += month;
     year<<=16;
     symb_magic += year;
     exp_id = sov_id;      //New!!!
     int s_id = exp_id;
     s_id<<=8;             //New !!!   
     symb_magic += s_id;   //New !!!
     return(symb_magic);
   }
 }
  return(0); 
}
//-------------------------------------------------------------------+
// Is my magic function                                              |
//+------------------------------------------------------------------+
bool IsMyMagic(const ulong m_magic)
{
  if(m_magic > 0)
  {
    ulong stored_magic = symb_magic;
   // stored_magic>>=16;
    stored_magic>>=8;   //New!!!
    ulong in_magic = m_magic;
   // in_magic>>=16;
    in_magic>>=8;      //New!!!
    if(in_magic == stored_magic) return(true);
  }  
  return(false);
}
//-------------------------------------------------------------------+
// Get stored magic function                                         |
//+------------------------------------------------------------------+
ulong GetStoredMagic()
{
  if(symb_magic > 0) return(symb_magic);
  return(0);  
}
//-------------------------------------------------------------------+
// Get expert ID function                                            |
//+------------------------------------------------------------------+
int GetExpertId()
{
  return(exp_id);                //New!!!
}
//+------------------------------------------------------------------+

Проверим

//+------------------------------------------------------------------+
//|                                                   Test_magic.mq5 |
//|                                      Copyright 2021 prostotrader |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021 prostotrader"
#property link      "https://www.mql5.com"
#property version   "1.00"
#include "AutoMagic.mqh"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   ulong new_magic = GetMagic(Symbol(), 22);
   Print("Magic is: ", new_magic);
   ulong f_magic = new_magic;
   ulong a_letter = (f_magic>>56)&255;
   Print("7 byte: ", CharToString(uchar(a_letter)));   
   f_magic = new_magic;
   a_letter = (f_magic>>48)&255;
   Print("6 byte: ", CharToString(uchar(a_letter))); 
   f_magic = new_magic;
   a_letter = (f_magic>>40)&255;
   Print("5 byte: ", CharToString(uchar(a_letter))); 
   f_magic = new_magic;
   a_letter = (f_magic>>32)&255;
   Print("4 byte: ", CharToString(uchar(a_letter))); 
   f_magic = new_magic;
   a_letter = (f_magic>>24)&255;
   Print("3 byte (month): ", a_letter);
   f_magic = new_magic;
   a_letter = (f_magic>>16)&255;
   Print("2 byte (year)): ", a_letter);
   f_magic = new_magic;
   a_letter = (f_magic>>8)&255;
   Print("1 byte (expert id or series of magics): ", a_letter);
   f_magic = new_magic;
   a_letter = (f_magic&255);
   Print("0 byte (series of magics): ", a_letter);
//---
   return(INIT_SUCCEEDED);
  }

Результат

2021.01.19 03:05:15.363 Test_magic (GOLD-3.21,M1)       Magic is: 5138409554846225920
2021.01.19 03:05:15.363 Test_magic (GOLD-3.21,M1)       7 byte: G
2021.01.19 03:05:15.363 Test_magic (GOLD-3.21,M1)       6 byte: O
2021.01.19 03:05:15.363 Test_magic (GOLD-3.21,M1)       5 byte: L
2021.01.19 03:05:15.363 Test_magic (GOLD-3.21,M1)       4 byte: D
2021.01.19 03:05:15.363 Test_magic (GOLD-3.21,M1)       3 byte (month): 3
2021.01.19 03:05:15.363 Test_magic (GOLD-3.21,M1)       2 byte (year)): 21
2021.01.19 03:05:15.363 Test_magic (GOLD-3.21,M1)       1 byte (expert id or series of magics): 22
2021.01.19 03:05:15.363 Test_magic (GOLD-3.21,M1)       0 byte (series of magics): 0

Меняем символ и id советника на 122

2021.01.19 03:07:06.225 Test_magic (RTS-3.21,M1)        Magic is: 5932457868670630400
2021.01.19 03:07:06.225 Test_magic (RTS-3.21,M1)        7 byte: R
2021.01.19 03:07:06.225 Test_magic (RTS-3.21,M1)        6 byte: T
2021.01.19 03:07:06.225 Test_magic (RTS-3.21,M1)        5 byte: S
2021.01.19 03:07:06.225 Test_magic (RTS-3.21,M1)        4 byte: 
2021.01.19 03:07:06.225 Test_magic (RTS-3.21,M1)        3 byte (month): 3
2021.01.19 03:07:06.225 Test_magic (RTS-3.21,M1)        2 byte (year)): 21
2021.01.19 03:07:06.225 Test_magic (RTS-3.21,M1)        1 byte (expert id or series of magics): 122
2021.01.19 03:07:06.225 Test_magic (RTS-3.21,M1)        0 byte (series of magics): 0

Добавим в код

   for(int i = 0 ; i<256;i++)
   {
     Print("My magic: ", string(IsMyMagic(new_magic + ulong(i))));
}Print("My magic: ", string(IsMyMagic(new_magic + ulong(256))));

Результат

2021.01.19 10:25:45.855 Test_magic (RTS-3.21,M1)        My magic: true
2021.01.19 10:25:45.855 Test_magic (RTS-3.21,M1)        My magic: true
2021.01.19 10:25:45.855 Test_magic (RTS-3.21,M1)        My magic: true
2021.01.19 10:25:45.855 Test_magic (RTS-3.21,M1)        My magic: true
2021.01.19 10:25:45.855 Test_magic (RTS-3.21,M1)        My magic: true
2021.01.19 10:25:45.855 Test_magic (RTS-3.21,M1)        My magic: true
2021.01.19 10:25:45.855 Test_magic (RTS-3.21,M1)        My magic: true
.......................................................................
2021.01.19 10:53:40.451	Test_magic (RTS-3.21,M1)	My magic: false

Имя символа + id советника гарантируют уникальность мэджика,

а в 0 байте серия дочерних мэджиков (тоже уникальных).

Мэджик создается автоматически.

Т.к на ФОРТС стандартный логин ограничен 30 тр./сек, то 256 дочерних мэджиков Вам "за глаза" хватит, не прибегая к 1 байту.

И все эти "танцы с бубном" нужны лишь в крайнем случае, когда произошел обрыв связи (взбрыкнул сервер МТ5) и Вы не получили тикет ордера.

Документация по MQL5: Предопределенные переменные / _Symbol
Документация по MQL5: Предопределенные переменные / _Symbol
  • www.mql5.com
_Symbol - Предопределенные переменные - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5