Запуск скрипта через советник - страница 2

 
Shaun:

Правда, я новичок на сайте и в кодинге. Никогда раньше не кодировал.
начни здесь
 
qjol:
начните здесь

Спасибо за эту информацию.

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

 
Shaun:

Спасибо за эту информацию.

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

Покажите свой скрипт, покажите свой советник, может быть, кто-то сжалится над вами и объединит их...
 
Shaun:

Спасибо за эту информацию.

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

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

Спасибо, ребята!

Следуя вашим советам, я написал что-то вроде этого внутри моего советника:

if(MyCondition)
{
  PlaySound("my_alert.wav");
    if(MessageBox("Do you really want to run the script?", 0, MB_YESNO|MB_ICONQUESTION)!=IDNO)
     { 
      MyScript();
      DisableAllEA();
      Sleep(3000);    
     }
  }

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

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

Когда я нажимаю кнопку [YES], сценарий выполняется - закрывает все позиции - и отключает кнопку [Experts] в MT4.

Конечно, вам не нужно отключать экспертов, если у вас нет на то причин.

Если в следующем цикле ваш советник не найдет условие, он не будет запускать скрипт.

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

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

P.S.

Для того чтобы это работало, вам нужно включить следующее в начало вашего советника:

#include <WinUser32.mqh>
 

Я только что придумал другое решение!!!

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

Таким образом, вы можете эмулировать событие клавиатуры.

Так будет лучше:

if(MyCondition)
{
      EnableScript();
      DisableAllEA();
      Sleep(3000);
}

Вы можете включить ваш alert.wav в отдельный скрипт, а также в окно сообщения.

И вы можете решить, включать Эксперты или нет, после того, как вы отреагируете на ситуацию.

Таким образом, вы не рискуете перегрузить систему.

Конечно, это требует дополнительной проработки ключевых событий.

Функция для клавиатурного события Ctrl+E:

void DisableAllEA() {
   keybd_event(17, 0, 0, 0); // CTRL down
   keybd_event(69, 0, 0, 0); // E down
   keybd_event(69, 0, 2, 0); // E up
   keybd_event(17, 0, 2, 0); // CTRL up
}

Немного погуглив, вы сможете найти цифровые коды для каждой клавиши.

Или вы можете воспользоваться этой ссылкой: https: //www.mql5.com/en/code.

Конечно, keybd_event не является частью mql4, поэтому вам нужно:

#include <WinUser32.mqh>
 

И, кстати!

Кто-нибудь когда-нибудь пробовал внедрить советника на график в качестве индикатора?

Это должно работать так же хорошо!

И вы можете иметь любое количество индикаторов, работающих на графике!

Я пробовал внедрять скрипты как индикаторы, и это работает просто отлично!

 
Dadas:

И, кстати!

Кто-нибудь когда-нибудь пробовал внедрить советника на график в качестве индикатора?

Это должно работать так же хорошо!


Вы не можете заключать сделки из индикатора, только из скриптов и советников.
 
RaptorUK:

Вы не можете совершать сделки от индикатора, только от скриптов и советников.


Итак, советник может работать как скрипт? В цикле?

Только вот при бесконечном цикле компьютер в конце концов сломается.

Есть ли способ запускать скрипт в цикле, контролируемом каким-то тикером, например, каждые 50 мс или что-то в этом роде?

Не по тикам MT4?

 
RaptorUK:

Вы не можете заключать сделки от индикатора, только от скриптов и советников.


И еще одна мысль:

Итак, вы можете использовать функцию события клавиатуры для размещения заказов по Сценарию.

1. Напишите сценарий для автоматического размещения заказов.

2. Назначьте ему клавишу HOTKEY.

3. В советнике, запущенном как индикатор, определите событие клавиатуры.

Затем вы можете сделать то же самое для закрытия ордеров.

Вот и все! Советник работает как индикатор и выполняет свою работу!

Единственным недостатком этого способа является то, что вы не можете отключить индикатор с помощью события клавиатуры - только вручную удалить его с графика.

Причина обращения: