вопросы о советнике который должен имитировать ручную торговлю в конкурсах - страница 4

 

Кто подскажет? Есть вот такая функция - показывает какая клавиша нажата 

void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
  { 
   if(id==CHARTEVENT_KEYDOWN)
     {
      short sym=TranslateKey((int)lparam);
      //--- если введённый символ успешно преобразован в Юникод
      if(sym>0)
         Print(sym,"'",ShortToString(sym),"'");
      else
         Print("Error in TranslateKey for key=",lparam);
     }
  }
IE      0       11:01:32.354    OnChartEvent_Sample (BTCUSD,W1) 1088'р'
GQ      0       11:01:36.680    OnChartEvent_Sample (BTCUSD,W1) 1087'п'
JI      0       11:01:43.541    OnChartEvent_Sample (BTCUSD,W1) 1074'в'
EO      0       11:01:45.796    OnChartEvent_Sample (BTCUSD,W1) 1088'р'
GS      0       11:01:51.895    OnChartEvent_Sample (BTCUSD,W1) Error in TranslateKey for key=16
QN      0       11:02:04.342    OnChartEvent_Sample (BTCUSD,W1) Error in TranslateKey for key=16
JJ      0       11:02:12.817    OnChartEvent_Sample (BTCUSD,W1) 102'f'
HR      0       11:02:14.107    OnChartEvent_Sample (BTCUSD,W1) 102'f'
ED      0       11:02:16.559    OnChartEvent_Sample (BTCUSD,W1) 120'x'
KL      0       11:02:18.395    OnChartEvent_Sample (BTCUSD,W1) 103'g'

Возможно ли - подать с кода на клавишу сигнал? (то есть всё в обратном порядке ) как бы нажал на клавишу.

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Если эту задачку решить - то можно отличного бота забацать - который будет отлично имитировать ручную торговлю

 
SanAlex #:

Кто подскажет? Есть вот такая функция - показывает какая клавиша нажата 

Возможно ли - подать с кода на клавишу сигнал? (то есть всё в обратном порядке ) как бы нажал на клавишу.

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Если эту задачку решить - то можно отличного бота забацать - который будет отлично имитировать ручную торговлю

Смонтировал только таким способом - нажатие клавиш. Другого способа не смог придумать.

Индикатор подаёт сигнал на функцию через DLL и открывает VBS файл в котором команда клавиш.

//+------------------------------------------------------------------+
//|                                                SendKeys Time.mq5 |
//|                        Copyright 2021, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window
#property indicator_plots   0
#property indicator_buffers 0
//---- импорт функции из внешней DLL
#import "shell32.dll"
int ShellExecuteW(int hwnd,string lpOperation,string lpFile,string lpParameters,string lpDirectory,int nShowCmd);
#import
//---
input datetime InpHoursTo  = D'1970.01.01 23:00'; // Stop (Only time)
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(TimeClose(InpHoursTo))
     {
      ShellExecuteW(NULL,NULL,"D:\\SendKeys\\SendKeys UP.vbs",NULL,NULL,1);
      Print("close_time :",InpHoursTo);
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
bool TimeClose(datetime HoursTo)
  {
//---
   MqlDateTime currTime;
   TimeToStruct(TimeLocal(),currTime);
   long hour0=currTime.hour*60*60+currTime.min*60+currTime.sec;
   if(hour0<HoursTo)
      return(false);
   if(hour0>HoursTo+1*0)
      return(false);
   return(true);
  }
//+------------------------------------------------------------------+

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Это команда левая Ctrl+Up стрелочка верх .vbs

set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.SendKeys "^{UP}"
 

Осталось разобраться с этой программой -которая и будет выполнять все действия ручной торговли. На ютюбе есть как за-регать её, одно плохо Русского языка в программе нет.

Снимок экрана 2022-01-10 003907 

 
SanAlex #:

Осталось разобраться с этой программой -которая и будет выполнять все действия ручной торговли. На ютюбе есть как за-регать её, одно плохо Русского языка в программе нет.

 

Испытание прошло успешно - позиции открыла запись действия мышкой по клавише. 

Снимок экрана 2022-01-10 035631 

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

А так же и закрыла

Снимок экрана 2022-01-10 040609

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Оказывается что можно организовать, вообще мульти торговлю.

Снимок экрана 2022-01-10 063133

 
SanAlex #:

Осталось разобраться с этой программой -которая и будет выполнять все действия ручной торговли. На ютюбе есть как за-регать её, одно плохо Русского языка в программе нет.

 

В имитации ручной торговле есть много нюансов если реализовывать чисто на winapi + mql. В вашем случае же чтобы эта программа успешно работала окно metatrader должно быт всегда активным чтобы отлавливать нажатие клавиш .Если сделать metatrader всегда активным то сам пользователь не сможет работать на компьютере .Если даже окно metatrader не нужно ставить в активное состояние то эта программа будет мешать своими действиями пользователю.Не уверен что эта программа вариант ручной торговли. Если реализовывать как я это делаю то есть чисто на winapi+mql то отпадает надобность делать окно metatrader активным и советник уже не будет мешать пользователю работать на компьютере.Советник будет делать свою работу уже внутри metatrader а пользователь будет делать свою работу на компьютере.Советник и пользователь не будет мешать друг-другу.

 
ilqar200 #:

В имитации ручной торговле есть много нюансов если реализовывать чисто на winapi + mql. В вашем случае же чтобы эта программа успешно работала окно metatrader должно быт всегда активным чтобы отлавливать нажатие клавиш .Если сделать metatrader всегда активным то сам пользователь не сможет работать на компьютере .Если даже окно metatrader не нужно ставить в активное состояние то эта программа будет мешать своими действиями пользователю.Не уверен что эта программа вариант ручной торговли. Если реализовывать как я это делаю то есть чисто на winapi+mql то отпадает надобность делать окно metatrader активным и советник уже не будет мешать пользователю работать на компьютере.Советник будет делать свою работу уже внутри metatrader а пользователь будет делать свою работу на компьютере.Советник и пользователь не будет мешать друг-другу.

Да ! пользоваться компом не получится. Просто мне стало интересно, получится у меня или нет. -Получилось! вряд-ли, я буду этим пользоваться.

Снимок экрана 2022-01-10 113910

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Закрыла - открыло противоположно

Снимок экрана 2022-01-10 115019 

 
ilqar200 #:

Продолжаю дописывать этот советник. Возник трудный момент для меня.Опишу ситуации:

1. Отсутствует связь с интернетом.Запускаю терминал С прикрепленным советником .Не срабатывает события oninit() и соответственно таймер не активируеться .

2. Отсутствует связь с интернетом . Запускаю терминал БЕЗ прикрепленного  советника. После запуска терминала загружаю советник.Срабатывает события oninit() и соответственно таймер активируеться.

 Итак вопросы: 

1. Почему в 1-ой ситуации не сработало события oninit() с дальнейшей активации таймера а во 2-ой ситуации сработало ? 

2.Как сделать так чтобы при запуске терминала С прикрепленном советником при отсутствии связи с интернетом всегда сработало события oninit() с дальнейшей активации таймера ? 

Мои вопросы остались безответными. Уважаемые форумчане может кто-нибудь ответит на мои вопросы .Заранее благодарен.

 
ilqar200 #:

Мои вопросы остались безответными. Уважаемые форумчане может кто-нибудь ответит на мои вопросы .Заранее благодарен.

Нашел ответ моего 2-го вопроса. Чтобы всегда сработал функция oninit  нужно запускать терминал с параметрами от конфигурационного файла .Например дат имя конфигурационному файлу config.ini В самом файле пишем следующее:  

Symbol=BTCUSD

Period=H1 

Expert=sovetnik 

После этого добавляем параметр запуска терминала в ярлык . Должно быть так : "Путь до терминала\terminal.exe "Путь до config.ini\config.ini"

Symbol=BTCUSD -  инструмент к которому мы хотим прикрепить советник  Period=H1  -  период инструмента  Expert=sovetnik - имя советника. С таким способ терминал всегда запускается С прикрепленном советником  и всегда выполняется события oninit  даже если связи нету с интернетом.

На счет моего 1-го вопроса.Вроде бы 1-ый и 2-ой ситуации равны. В обоих случаях в логе пишется expert loaded successfully. Но почему в 1-ой ситуации не срабатывает oninit  а во 2-ом срабатывает ? Интересно.

 
ilqar200 #:

Нашел ответ моего 2-го вопроса. Чтобы всегда сработал функция oninit  нужно запускать терминал с параметрами от конфигурационного файла .Например дат имя конфигурационному файлу config.ini В самом файле пишем следующее:  

Symbol=BTCUSD

Period=H1 

Expert=sovetnik 

После этого добавляем параметр запуска терминала в ярлык . Должно быть так : "Путь до терминала\terminal.exe "Путь до config.ini\config.ini"

Symbol=BTCUSD -  инструмент к которому мы хотим прикрепить советник  Period=H1  -  период инструмента  Expert=sovetnik - имя советника. С таким способ терминал всегда запускается С прикрепленном советником  и всегда выполняется события oninit  даже если связи нету с интернетом.

На счет моего 1-го вопроса.Вроде бы 1-ый и 2-ой ситуации равны. В обоих случаях в логе пишется expert loaded successfully. Но почему в 1-ой ситуации не срабатывает oninit  а во 2-ом срабатывает ? Интересно.

как хоть выглядит твоё изобретение ? -сфоткай  покажи.

Снимок экрана 2022-01-11 220639 когда робот твой открывает - наведи мышкой. что показывает? установлен экспертом или вручную?

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Я сегодня экспериментировал на трёх парах = Имитация ручной торговли.

Снимок экрана 2022-01-11 221422  красной стрелкой навёл - что работа велась вручную.

Снимок экрана 2022-01-11 221446

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Испытал на 1минутных графиках - а сейчас установил 15 минутные - но не как, сигнал не появится .

Снимок экрана 2022-01-11 222933

 
SanAlex #:

как хоть выглядит твоё изобретение ? -сфоткай  покажи.

 когда робот твой открывает - наведи мышкой. что показывает? установлен экспертом или вручную?

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Я сегодня экспериментировал на трёх парах = Имитация ручной торговли.

  красной стрелкой навёл - что работа велась вручную.

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Испытал на 1минутных графиках - а сейчас установил 15 минутные - но не как, сигнал не появится .


Записал короткое видео.Смотри.

https://drive.google.com/file/d/1RKHh9ADqf1G9022xI9p-qmpNPTu1RZa8/view?usp=sharing

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