ПО-FORTS МТ5 ( FORTS )- скальпинг спреда в биржевом стакане

coder-ex

Пользователь
Ну что бы меня забанить нужно нарушение их правил подтвердить т.к. я верифицированный пользователь форума, на мне висят в магазине продукты, если меня забанить, то продукты нужно удалить, но этого я так понимаю делать нельзя если их кто либо приобретал т.к. приобретенные продукты висят в терминалах купивших... короче там завязка, мне нужно там конкретно обосраться что бы дали пинок под зад, а ты просто обычный пользователь, тебя можно и забанить просто так.

МТ5 мне кстати больше нравиться чем мт4, главная вишка которая мне больше всего привлекла это их шифрование разработок при компиляции, ты же думаю слышал что продукцию скаченную с маркета взломать невозможно, они код шифруют.
Вот эта функция теперь и для простых смертных доступна, помимо защиты ты можешь и шифрануть своего робота, все по воздуху происходит, компилируешь, робот отправляется к ним на сервер, там обрабатывается и возвращается.
я пока не разобрался еще с одной фишкой - с преобразованиями
Посмотреть вложение 2557
можно код в разные форматы преоразовывать, может тоже нужная вещь.
это просто конвертация символов, а не защита )) для защиты там используются ключи шифрования, ex5 это байт-код, понятный процессору, в общем сложно так что либо объяснить если ты не понимаешь самой сути компиляции
любой написанный код на ЯП высокого уровня, преобразуется в байт-код понятный процессору (тот же Си или С++) либо виртуальной машине (.NET ЯП - java, C#)
во вложении пример кода С++ преобразованный в ассемблерный код, перед сборкой в байт-код с ключом оптимизации в g++ 03, т.е. я запустил с дополнительным флагом S компилятор, что бы не собирать в исполняемый байт-код
 

Вложения

Константин

Администратор
это просто конвертация символов, а не защита )) для защиты там используются ключи шифрования, ex5 это байт-код
Я не об этом, в мт5 сейчас появился второй тип компиляции файлов - MQL5протектед, тот же принцип используется когда ты продаешь через маркет, только там еще дополнительно к железу идет привязка тем кто купил, тут же тебе в код вставляют протекцию которая защищает твои разработки от взлома.
 

coder-ex

Пользователь
Я не об этом, в мт5 сейчас появился второй тип компиляции файлов - MQL5протектед, тот же принцип используется когда ты продаешь через маркет, только там еще дополнительно к железу идет привязка тем кто купил, тут же тебе в код вставляют протекцию которая защищает твои разработки от взлома.
я же тебе это объясняю изнутри - что такое исполняемый файл, а ex5 это исполняемый файл в среде МТ5, это тот же байт-код, если ты в этот байт-код вставишь ключ шифрования, то что бы его исполнить, у процессора так же должен быть ключ для дешифровки, что бы исполнить этот байт-код )) MQ видимо внутри МТ5 сделали такую возможность и не более, т.е. МТ5 если видит зашифрованный исполняемый файл, то применяет к нему ключ дешифровки, это обычный реверс )) а значит нет ни чего невозможного, но т.к. стоимость разработок в МТ5 низкая, то и ломать это смысла нет, дешевле оплатить разработку, а не ее реверс ))
 

coder-ex

Пользователь
тезка, по AMP ситуация печальная, менеджер из техподдержки мне написал, что типа ему импортный коллега подтвердил, что данные транслируются, last цена есть, но он в силу того, что у него слабый ПК и МТ5 он не держит из-за малого колличества памяти, скрин сделать не сможет ))) короче бред какой то, просто скрывают факт того, что видимо все таки кухня...
значит как назреет тема выхода на импортные площадки, буду писать коннектор и выходить предположительно на IB, написать робота на С++ при наличии коннектора труда не составит ))
 

Константин

Администратор
тезка, по AMP ситуация печальная, менеджер из техподдержки мне написал, что типа ему импортный коллега подтвердил, что данные транслируются, last цена есть, но он в силу того, что у него слабый ПК и МТ5 он не держит из-за малого колличества памяти, скрин сделать не сможет ))) короче бред какой то, просто скрывают факт того, что видимо все таки кухня...
Да конечно кухня, у них даже демо через жопу работает, я нашел еще 2-х брокеров русскоязычных, хотел демку открыть у одного, мне звонит, мол демо заказывали, говорю да, а в АМП открывали демку, говорю да, ну тогда нет смысла у нас открывать т.к. мы являемся их партнерами, короче у АМП еще есть несколько дочек видимо, через которых они привлекают клиентов... - разве нормальный лицензированный брокер будет такое мутить, думаю нет, вот бы я открыл счет в БКС, а потом бы узнал что на самом деле торгую через Открытие... чушь полнейшая, разве так работают... мутят они там, вон ребята писали мол деньги завели, а теперь уже 3 недели вывести не могут.
 

coder-ex

Пользователь
ты кстати что делаешь с ордером big когда его цена постановки находится в минусовой области сетки? я его перевожу в плюсовую зону с дельтой несколько пипсов, что бы не крылось с минусом, но правильно ли это не знаю ))
 

Константин

Администратор
ты кстати что делаешь с ордером big когда его цена постановки находится в минусовой области сетки?
Не понял что за ордер и что за постановка, если ты про лимитки, то они у меня динамические, при любом срабатывании какой либо лимитки вся сетка перестраивается.
Я думал раньше что при такой торговли будет куча не эффективных транзакций и попадания на штраф, но с новыми правилами вроде бы все нормально.
Нашел тут счетчик и функцию расчета дней до конца клиринга, думаю поработать с ними, по клирингам то полюбому вставлю что бы за 2 дня до окончания действия фьючерса робот прекращал торговлю

Щас еще ищу хороший метод по расчету маржи, как бы свой есть, но он очень простой, он вычисляет согласно ГО инструмента сколько нужно залоговых средств на установку ордера или лимитки, если их хватает, то работаем... хочу что то наподобии -
Задаем % депо, к примеру 90% депозита, 10 оставляем в резерв.
Как только задействовали 90% маржи, больше не чего не выставляется
как то так.
Ограничивать и расширять сетку по лотности мне понравилось, но трейдеру придется самому расчитывать сколько он на свое депо сможет открыть ордеров, а тут можно было просто задавать % маржи. 20% одни диапазоны 40% другие и т.д.
 
Последнее редактирование:

coder-ex

Пользователь
Не понял что за ордер и что за постановка, если ты про лимитки, то они у меня динамические, при любом срабатывании какой либо лимитки вся сетка перестраивается.
Я думал раньше что при такой торговли будет куча не эффективных транзакций и попадания на штраф, но с новыми правилами вроде бы все нормально.
Нашел тут счетчик и функцию расчета дней до конца клиринга, думаю поработать с ними, по клирингам то полюбому вставлю что бы за 2 дня до окончания действия фьючерса робот прекращал торговлю

Щас еще ищу хороший метод по расчету маржи, как бы свой есть, но он очень простой, он вычисляет согласно ГО инструмента сколько нужно залоговых средств на установку ордера или лимитки, если их хватает, то работаем... хочу что то наподобии -
Задаем % депо, к примеру 90% депозита, 10 оставляем в резерв.
Как только задействовали 90% маржи, больше не чего не выставляется
как то так.
Ограничивать и расширять сетку по лотности мне понравилось, но трейдеру придется самому расчитывать сколько он на свое депо сможет открыть ордеров, а тут можно было просто задавать % маржи. 20% одни диапазоны 40% другие и т.д.
по клирингу зачем что то искать и выдумывать, у меня в классе CCheck есть несколько статметодов, при набивке кластеров они переключают в течении дня контракт на новый если в этот день закрытие контракта, зачем устраивать какие то счетчики:
Код:
/*!
   \brief   Текущий фьючерсный контракт
   \param   const string a_name - шаблон имени фьючерса
   \param   const datetime a_date - дата определяемого тикера
   \return  тикер текущего фьючерса
*/
static string CCheck::CurrFutures(const string a_name,const datetime a_date/*=0*/) {
...
//---
   return _ticker;
}
если нужно узнать какой будет следующий фьючерс то прибавь к текущему времени 3 месяца, я внутри дня прибавляю небольшую дельту в секундах и получаю в диапазоне запросов после 19:00 уже свежий контракт если он есть ))
Код:
_contract[_cnt].ticker = CCheck::CurrFutures(a_name, _contract[_cnt - 1].t_expir + 3600);
а еще можно проверить на праздники
Код:
   datetime _t1 = StructToTime(_time);    // преобразованное с учетом выходных
   datetime _t2 = CCheck::CorrectHolidays(_t1, false);
и если дата это праздник, то сдвигаем на сутки назад и т.д.
Код:
/*!
   \break   Праздники
   \param   const datetime a_time - корректируемое время
   \param   const bool a_flag - флаг возврата даты: true следующий после праздников день, false предыдущий к праздникам день
   \remark  Дата возвращается как начало суток, т.е. с 00:00:00 даты
*/
static datetime CCheck::CorrectHolidays(const datetime a_time,const bool a_flag) {
...
//---
   return a_time;
}
по депо я вообще тебя не понял - включи формулу в расчет проверки объемов при каждом открытии серии:
Код:
/*!
   \brief   Проверка соответствия объемов
   \param   const double a_summ_vol - сумма объемов для серии
   \return  true в случае удачи, иначе false
*/
bool CCalcMarketValue::CheckVolume(const double a_summ_vol) {
...
//---
   return true;
}
 
Последнее редактирование:

Константин

Администратор
по клирингу зачем что то искать и выдумывать, у меня в классе CCheck есть несколько статметодов, при набивке кластеров они переключают в течении дня контракт на новый если в этот день закрытие контракта, зачем устраивать какие то счетчики:
Я просто смотрю шире, твой пример, 16 число,
твой робот входит,
происходит клиринг,
инструмент меняется,
Робот начинает торговать на новом контракте, а старая открытая позиция уходит в основной актив, что бы забрать оттуда деньги, нужно заходить в квик, закрывать позицию по основному инструменту, затем идти в личный кабинет и с фондовой секции переводить бабло в срочную. - не кажется что это заморочно.
Имея счетчик, - сколько осталось дней до экспирации мы можем.
- В настройках выставить за сколько дней до экспирации переходить на новый инструмент
почему это важно, дело в том что на разных инструментах народ перескакивает по разному, к примеру нефть торгуют до талого т.к. она каждый месяц меняется, взять тот же РТС, 14 числа уже стакан полупустой, на сбере за 3 дня уже все на новый перепрыгивают... какую плотность там можно поймать если ее там уже нет.
- В логику вносим, если нет открытых поз, переключаемся на новый контракт, если есть, ждем как закроется и переключаемся, если до времени экспирации не закрылись, то закрываемся принудительно за какое то время и переходим на новый контракт.
- Так то намного функциональней.
 

coder-ex

Пользователь
Я просто смотрю шире, твой пример, 16 число,
твой робот входит,
происходит клиринг,
инструмент меняется,
Робот начинает торговать на новом контракте, а старая открытая позиция уходит в основной актив, что бы забрать оттуда деньги, нужно заходить в квик, закрывать позицию по основному инструменту, затем идти в личный кабинет и с фондовой секции переводить бабло в срочную. - не кажется что это заморочно.
Имея счетчик, - сколько осталось дней до экспирации мы можем.
- В настройках выставить за сколько дней до экспирации переходить на новый инструмент
почему это важно, дело в том что на разных инструментах народ перескакивает по разному, к примеру нефть торгуют до талого т.к. она каждый месяц меняется, взять тот же РТС, 14 числа уже стакан полупустой, на сбере за 3 дня уже все на новый перепрыгивают... какую плотность там можно поймать если ее там уже нет.
- В логику вносим, если нет открытых поз, переключаемся на новый контракт, если есть, ждем как закроется и переключаемся, если до времени экспирации не закрылись, то закрываемся принудительно за какое то время и переходим на новый контракт.
- Так то намного функциональней.
1. может ты и прав, но я исхожу прежде всего из этого
почему это важно, дело в том что на разных инструментах народ перескакивает по разному,
т.е. каждый для себя сам и следит, когда ему перейти
2. мой пример не из торгового робота )) а из класса для сборки кластеров, поэтому как то странно ты мне начал примеры с загибом пальцев приводить )) в роботе безо всяких счетчиков можно выставить срок предупреждения до начала экспирации
Код:
// a_range - число в днях до экспирации
int _range = DAY_SEC * a_ranfe;
_contract[_cnt].ticker = CCheck::CurrFutures(a_name, _contract[_cnt - 1].t_expir - _range);

if(_contract[_cnt].ticker != m_symbol) {
   // тут какое выражение или флаг
   ...
}
в программировании нет конечно истины в алгоритмах, но твое шире уже давно реализовано, сам ведь говоришь зачем изобретать то, что уже есть ))
 

Константин

Администратор
в программировании нет конечно истины в алгоритмах, но твое шире уже давно реализовано, сам ведь говоришь зачем изобретать то, что уже есть ))
Я же не говорю что это нужно изобретать, я предлагаю это просто использовать.
Я вот такой функцией пользуюсь
PHP:
//+------------------------------------------------------------------+
//         ОПРЕДЕЛЯЕМ СКОЛЬКО ОСТАЛОСЬ ДНЕЙ ДО ЭКСПИРАЦИИ
//+------------------------------------------------------------------+
#define  YEAR  365
int GetExpiration()
{
  MqlDateTime ExpData, CurData;
   
  datetime exp_time = datetime(SymbolInfoInteger(_Symbol,SYMBOL_EXPIRATION_TIME));
     
  TimeToStruct(exp_time,ExpData);
  TimeTradeServer(CurData);
     
  if (ExpData.year != CurData.year)
  {
    return(YEAR * ( ExpData.year - CurData.year ) - CurData.day_of_year + ExpData.day_of_year);
  }
  else
  {
    return(ExpData.day_of_year - CurData.day_of_year);
  }
}
Интересно если расширить функционал и вместо возвращения колличества дней, добавить еще и время, час-минута-сек, которое будет отсчитываться в обратную сторону. -- чисто для красоты в панельку... будет ли это как то влиять на нагрузку поместив вызов в функцию таймера
 

coder-ex

Пользователь
Я же не говорю что это нужно изобретать, я предлагаю это просто использовать.
Я вот такой функцией пользуюсь
PHP:
//+------------------------------------------------------------------+
//         ОПРЕДЕЛЯЕМ СКОЛЬКО ОСТАЛОСЬ ДНЕЙ ДО ЭКСПИРАЦИИ
//+------------------------------------------------------------------+
#define  YEAR  365
int GetExpiration()
{
  MqlDateTime ExpData, CurData;

  datetime exp_time = datetime(SymbolInfoInteger(_Symbol,SYMBOL_EXPIRATION_TIME));

  TimeToStruct(exp_time,ExpData);
  TimeTradeServer(CurData);

  if (ExpData.year != CurData.year)
  {
    return(YEAR * ( ExpData.year - CurData.year ) - CurData.day_of_year + ExpData.day_of_year);
  }
  else
  {
    return(ExpData.day_of_year - CurData.day_of_year);
  }
}
Интересно если расширить функционал и вместо возвращения колличества дней, добавить еще и время, час-минута-сек, которое будет отсчитываться в обратную сторону. -- чисто для красоты в панельку... будет ли это как то влиять на нагрузку поместив вызов в функцию таймера
Нет, нагрузки от этого не будет если у тебя CCanvas, хотя как у тебя реализовано я не знаю, сделай замер до и после, если не знаешь, могу код скинуть как замерять.
По твоей функции GetExpiration() - там нет должных проверок, с их вводом все осложнится, бери статические методы, можешь как функции их использовать:
PHP:
/*!
   \brief   Текущий фьючерсный контракт
   \param   const string a_name - шаблон имени фьючерса
   \param   const datetime a_date - дата определяемого тикера
   \return  тикер текущего фьючерса
*/
static string CCheck::CurrFutures(const string a_name,const datetime a_date/*=0*/) {
   string _ticker     = NULL;
   MqlDateTime _time  = {0};
   string _short_name = a_name;
   datetime _curr_t   = 0;

   if(a_date > 0) {
      _curr_t = a_date;
      TimeToStruct(_curr_t, _time);
   } else {
      _curr_t = TimeCurrent(_time);
   }

   int _year = _time.year;
   int _mon  = _time.mon;

   for(int i = 0; i < 12; ++i) {
      if(_mon > 12) {
         _mon=1;
         _year++;
      }

      _ticker = StringFormat("%s-%d.%d", _short_name, _mon, _year%100);

      if(SymbolSelect(_ticker, true))
         if(SymbolInfoInteger(_ticker, SYMBOL_EXPIRATION_TIME) > _curr_t)
            break;

      _mon++;
      _ticker = NULL;
   }
//---
   return _ticker;
}
/*!
   \brief   Следующий фьючерсный контракт
   \param   const string a_name - шаблон имени фьючерса
   \param   const datetime a_date - дата определяемого тикера
   \return  тикер текущего фьючерса
*/
static string CCheck::NextFutures(string a_name,const datetime a_date/*=0*/) {
   string _ticker     = NULL;
   MqlDateTime _time  = {0};
   string _short_name = a_name;
   datetime _curr_t   = 0;
   datetime _curr_t2  = 0;

   if(a_date > 0) {
      _curr_t = a_date;
      TimeToStruct(_curr_t, _time);
   } else {
      _curr_t = TimeCurrent(_time);
   }

   int _year = _time.year;
   int _mon  = _time.mon;

   for(int i = 0; i < 12; ++i) {
      if(_mon > 12) {
         _mon = 1;
         _year++;
      }

      _ticker = StringFormat("%s-%d.%d", _short_name, _mon, _year%100);

      if(SymbolSelect(_ticker, true)) {
         int _expirat = (int)SymbolInfoInteger(_ticker, SYMBOL_EXPIRATION_TIME);
         Print("expirate: ", (datetime)_expirat);

         if(_curr_t2 == 0)
           if(_expirat > _curr_t) {
            _curr_t2 = _expirat;
            _mon++;
            continue;
         }

         if(_curr_t2 != 0)
            if(_expirat > _curr_t2)
               break;
      }

      _mon++;
      _ticker = NULL;
   }
//---
   return _ticker;
  }
/*!
   \brief   Предыдущий фьючерсный контракт
   \param   const string a_name - шаблон имени фьючерса
   \param   const datetime a_date - дата определяемого тикера
   \return  тикер текущего фьючерса
*/
static string CCheck::prevFutures(string a_name,const datetime a_date/*=0*/) {
   string _ticker     = NULL;
   MqlDateTime _time  = {0};
   string _short_name = a_name;
   datetime _curr_t   = 0;

   if(a_date > 0) {
      _curr_t = a_date;
      TimeToStruct(_curr_t, _time);
   } else {
      _curr_t = TimeCurrent(_time);
   }

   int _year = _time.year;
   int _mon  = _time.mon;

   for(int i = 0; i < 12; ++i) {
      if(_mon < 1) {
         _mon = 12;
         _year--;
      }

      _ticker = StringFormat("%s-%d.%d", _short_name, _mon, _year%100);

      if(SymbolSelect(_ticker, true))
         if(SymbolInfoInteger(_ticker, SYMBOL_EXPIRATION_TIME) < _curr_t)
            break;

      _mon--;
      _ticker = NULL;
   }
//---
   return _ticker;
}
/*!
   \break   Праздники
   \param   const datetime a_time - корректируемое время
   \param   const bool a_flag - флаг возврата даты: true следующий после праздников день, false предыдущий к праздникам день
   \remark  Дата возвращается как начало суток, т.е. с 00:00:00 даты
*/
static datetime CCheck::CorrectHolidays(const datetime a_time,const bool a_flag) {
   int _day = 86400;
   datetime _rest = 0;
   datetime _holidays[] = { D'2017.11.06 00:00', D'2017.12.29 19:00', D'2017.12.30 00:00',
                            D'2017.12.31 00:00', D'2018.01.01 00:00', D'2018.01.02 00:00',
                            D'2018.01.06 00:00', D'2018.01.07 00:00', D'2018.01.08 00:00',
                            D'2018.02.23 00:00', D'2018.03.08 00:00', D'2018.03.10 00:00',
                            D'2018.03.11 00:00', D'2018.04.29 00:00', D'2018.05.01 00:00',
                            D'2018.05.05 00:00', D'2018.05.06 00:00', D'2018.05.09 00:00',
                            D'2018.06.10 00:00', D'2018.06.12 00:00', D'2018.11.05 00:00' };

   for(int i = 0, _size = ArraySize(_holidays); i < _size; ++i) {
      if(_holidays%_day > 0)
         _rest = _holidays%_day;
      else
         _rest = _day;

      if(a_time >= _holidays && a_time < _holidays + _rest)
         if(a_flag) return CorrectHolidays(_holidays + _rest, a_flag);
         else return CorrectHolidays(_holidays - _rest, a_flag);
   }
//---
   return a_time;
}
и не изобретай лисапеды )) я идею по определению фьюча тоже не изобретал, а лишь переработал под класс и универсальное использование, ну а метод определения праздников чисто мой, но работает на ура во многих экспертах ))

ps. printf убери из методов, это для тестирования вводил либо флаг вывода их введи

метод праздников с календарем по MOEX на 2017-2018 г.г.
шаблон имени фьючерса это имя без шелухи т.е. Si SBRF GAZR BR и т.д. как отделять думаю сам знаешь, делается все при инициализации классов, что бы не засорять лишней отработкой алгоритм роботов
 
Последнее редактирование:

Константин

Администратор
я идею по определению фьюча тоже не изобретал, а лишь переработал под класс и универсальное использование, ну а метод определения праздников чисто мой, но работает на ура во многих экспертах ))
Тоже сегодня нашел эти методы в простом исполнении на метаквотах, вот сижу пока разбираюсь... с автозаменой графика не сталкивался ни разу еще, вот ищу информацию как это делается, эти же функции куда то нужно подставить, что бы когда настало время инструмент сменился.
 

coder-ex

Пользователь
Тоже сегодня нашел эти методы в простом исполнении на метаквотах, вот сижу пока разбираюсь... с автозаменой графика не сталкивался ни разу еще, вот ищу информацию как это делается, эти же функции куда то нужно подставить, что бы когда настало время инструмент сменился.
выбираешь тикер и потом этот тикер активируешь на чарте )) через семейство функций работы с чартами, например так
PHP:
ChartSetSymbolPeriod(chart_id, symbol, PERIOD_CURRENT);
а лучше используй класс CChart из стандартной библиотеки

ps. обращайся в Skype, у меня пока тесты робота, есть время что либо объяснить
 
Последнее редактирование:

Константин

Администратор
ps. обращайся в Skype, у меня пока тесты робота, есть время что либо объяснить
Я скайпом уже год не пользуюсь, да и уже он не актуален все уже давно в Дискорд ушли т.к. в одном канаел можно хоть 1000 разных комнат создать и для каждой комнаты давать индивидуальное приглашение + он систему вообще не грузит, а по функционалу превышает возможности скайпа т.к. в нем могут общаться одновременно хоть 100 человек, а у скайпа ограничение в 30, едиственный + скайпа это показ рабочего стола , но это уже не кому так же не нужно т.к. показать ты можешь всего 12 пользователям,проще через тайм вивер.
Сейчас все компании первым делом заводят дискорд, к примеру вот разработчики леманов
куча разных комнат по тематике + комнаты для разных языков, так же тех поддержка, разные темы анонсов, все по разным комнатушкам.
Я и с товарищами общаюсь так же на их канале, у них там есть комната для программирования, флуда, голосового общения и т.д. и т.п
2018-04-04_23h03_18.png
Заходи мой ID Константин#1150
я в нем практически круглосуточно сижу, все скайпы теллеграмы это уже прошлый век
 

coder-ex

Пользователь
Я скайпом уже год не пользуюсь, да и уже он не актуален все уже давно в Дискорд ушли т.к. в одном канаел можно хоть 1000 разных комнат создать и для каждой комнаты давать индивидуальное приглашение + он систему вообще не грузит, а по функционалу превышает возможности скайпа т.к. в нем могут общаться одновременно хоть 100 человек, а у скайпа ограничение в 30, едиственный + скайпа это показ рабочего стола , но это уже не кому так же не нужно т.к. показать ты можешь всего 12 пользователям,проще через тайм вивер.
Сейчас все компании первым делом заводят дискорд, к примеру вот разработчики леманов
куча разных комнат по тематике + комнаты для разных языков, так же тех поддержка, разные темы анонсов, все по разным комнатушкам.
Я и с товарищами общаюсь так же на их канале, у них там есть комната для программирования, флуда, голосового общения и т.д. и т.п
Посмотреть вложение 2560
Заходи мой ID Константин#1150
я в нем практически круглосуточно сижу, все скайпы теллеграмы это уже прошлый век
я тебе Skype предложил т.к. ты в нем сидел, я то раньше тебя с него ушел )) чуть позже посмотрю что за зверь но судя по твоему описанию это то же самое что и Телеграм, но в Телеграм есть хотя бы голос )) если это так, то ставить не буду, мне Телеграм хватает
 

Константин

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

coder-ex

Пользователь
Тут тоже есть и голос и видео и ребята говорят и показ своего рабочего стола тоже уже появился.
Смысл проги, ты можешь общаться с друзьями, а можешь создать свой сервер бесплатно, сделать там разные комнаты по тематике для общеня, сделать голосовые комнаты и пригласить на этот сервер своих друзей, по ссылке на которую ставишь время действия, можешь дать права модератора или различные права другим людям для того что бы они могли выписывать баны временные или постоянные, править сообщения или еще чего, там возможности не ограниченные и нстроить можешь его под себя как хочешь.
а нахрен мне все это нужно? мне как разработчику интересен шаринг экрана и голос, тематические каналы прогеров, телеграм и скайп это дают, посмотри сколько на канале питона челов, у меня 8147, и такое же большое число народа по С++
если в твоем чатике есть такое то посмотрю, если нет, то пока без меня
 

Константин

Администратор
а нахрен мне все это нужно?
Ну вдруг моча в голову ударит и ты решишь создать свое сообщество программистов для реализации искуственного интелекта который в последствии захватит весь мир )))

Подскажи такую вещь, тут пообщался с прогерами, они говорят что метаквоты свои библиотеки довели до ума и теперь можно в роботах использовать их методы, к примеру класс CTrade
Интересует момент, если я инициализирую в роботе асинхронный метод торговли (хочется посмотреть как это будет работать)
m_trade.SetAsyncMode(true);
Это получается все торговые операции которые будут выполняться через данный торговый класс, - будут работать уже через асинхронный метод ?
или нужно при отправке запроса на удаление той же лимитки m_trade.OrderDelete
проводить какие то дополнительные манипуляции
По коду посмотрел в самой функции ОрдерСенд есть вызов того или иного метода
PHP:
//+------------------------------------------------------------------+
//| Send order                                                       |
//+------------------------------------------------------------------+
bool CTrade::OrderSend(const MqlTradeRequest &request,MqlTradeResult &result)
  {
   bool res;
   string action="";
   string fmt   ="";
//--- action
   if(m_async_mode)
      res=::OrderSendAsync(request,result);
   else
      res=::OrderSend(request,result);
//--- check
   if(res)
     {
      if(m_log_level>LOG_LEVEL_ERRORS)
         PrintFormat(__FUNCTION__+": %s [%s]",FormatRequest(action,request),FormatRequestResult(fmt,request,result));
     }
   else
     {
      if(m_log_level>LOG_LEVEL_NO)
         PrintFormat(__FUNCTION__+": %s [%s]",FormatRequest(action,request),FormatRequestResult(fmt,request,result));
     }
//--- return the result
   return(res);
  }
А если мне к примеру не надо что бы робот работал полностью через этот режим, к примеру я хочу что бы через этот метод только лимитные ордера удалялись, а все остальное работало по стандарту... можно ли в этом случае вызывать этот метод непосредственно перед командой на отработку удаления ордера, а выше потом где нибудь в тике ее обнулить
 

coder-ex

Пользователь
Ну вдруг моча в голову ударит и ты решишь создать свое сообщество программистов для реализации искуственного интелекта который в последствии захватит весь мир )))

Подскажи такую вещь, тут пообщался с прогерами, они говорят что метаквоты свои библиотеки довели до ума и теперь можно в роботах использовать их методы, к примеру класс CTrade
Интересует момент, если я инициализирую в роботе асинхронный метод торговли (хочется посмотреть как это будет работать)
m_trade.SetAsyncMode(true);
Это получается все торговые операции которые будут выполняться через данный торговый класс, - будут работать уже через асинхронный метод ?
или нужно при отправке запроса на удаление той же лимитки m_trade.OrderDelete
проводить какие то дополнительные манипуляции
По коду посмотрел в самой функции ОрдерСенд есть вызов того или иного метода
PHP:
//+------------------------------------------------------------------+
//| Send order                                                       |
//+------------------------------------------------------------------+
bool CTrade::OrderSend(const MqlTradeRequest &request,MqlTradeResult &result)
  {
   bool res;
   string action="";
   string fmt   ="";
//--- action
   if(m_async_mode)
      res=::OrderSendAsync(request,result);
   else
      res=::OrderSend(request,result);
//--- check
   if(res)
     {
      if(m_log_level>LOG_LEVEL_ERRORS)
         PrintFormat(__FUNCTION__+": %s [%s]",FormatRequest(action,request),FormatRequestResult(fmt,request,result));
     }
   else
     {
      if(m_log_level>LOG_LEVEL_NO)
         PrintFormat(__FUNCTION__+": %s [%s]",FormatRequest(action,request),FormatRequestResult(fmt,request,result));
     }
//--- return the result
   return(res);
  }
А если мне к примеру не надо что бы робот работал полностью через этот режим, к примеру я хочу что бы через этот метод только лимитные ордера удалялись, а все остальное работало по стандарту... можно ли в этом случае вызывать этот метод непосредственно перед командой на отработку удаления ордера, а выше потом где нибудь в тике ее обнулить
я уже давно не использую этот оверхед )) у меня в торговом классе реализован весь минимум включая тралы, его и использую
такой вариант больше устраивает, к тому же у меня легко все масштабируется одним объектом при мультисистемах
 
Сверху