Скачать MetaTrader 5

Как поселать сигналы с одного робота другому? (Вопрос Чайника)

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Pavel Silber
703
Pavel Silber  
Расскажите пожалуйста, как посилать сигналы (в код) с одного робота другому? (Вопрос Чайника)
Dimka-novitsek
2421
Dimka-novitsek  
Помнится, глобальные переменные видны во всем терминале, т.е. и во-всех роботах сразу. Посмотрите справку, глобальные переменные.
Robot_al
87
Robot_al  

Например, так:

extern int fSignal=1;

if (fSignal==1) {..........здесь код вашего робота.............;}

------------------------------------------------------------------------------------------

Можете глобальную переменную терминала взять в качестве условия.

GlobalVariableSet("fSignal", 1);

if (GlobalVariableGet("fSignal")==1) {..........здесь код вашего робота.............;}

Pavel Silber
703
Pavel Silber  
Dimka-novitsek:
Помнится, глобальные переменные видны во всем терминале, т.е. и во-всех роботах сразу. Посмотрите справку, глобальные переменные.

Получается если я создал в Роботе1 (в коде) переменую допустим "Signal" и ту же самую переменую Роботе2, они будут синронизироватся между собой?
Pavel Silber
703
Pavel Silber  
Robot_al:

Например, так:

extern int fSignal=1;

if (fSignal==1) {..........здесь код вашего робота.............;}

------------------------------------------------------------------------------------------

Можете глобальную переменную терминала взять в качестве условия.

GlobalVariableSet("fSignal", 1);

if (GlobalVariableGet("fSignal")==1) {..........здесь код вашего робота.............;}


А если первый робот1 находит сигнал посылает роботу2 что бы тот открывал ордера,?
Robot_al
87
Robot_al  
Переменная-условие создаётся только в Роботе1, а потом в зависимости какое у неё значение она запустит Робота2.
Pavel Silber
703
Pavel Silber  
Robot_al:
Переменная-условие создаётся только в Роботе1, а потом в зависимости какое у неё значение она запустит Робота2.


Я хотел бы посылать от нескольких Скриптов или Роботов (Они работают как индикаторы) в один Общий Робот который открывает ордера.

Мне нужно создать Глобальную переменную в Индикаторных Роботах или Скриптах?  

Robot_al
87
Robot_al  

Глобальную переменную создаёт тот скрипт, который хочет запустить общего робота.

Ну, например...имеем Script_1, Script_2 и Robot_general.

Допустим, Script_1 хочет запустить Robot_general, пишем в Script_1:

GlobalVariableSet("fScript_1", 1);


Тогда в коде Robot_general добавим:

if (GlobalVariableGet("fScript_1")==1) {..........здесь пишем то, что должен сделать Robot_general.............;}

----------------------------------------------------------------------------------------------------------------------------

Аналогично, если Script_2 хочет запустить Robot_general, пишем в Script_2:

GlobalVariableSet("fScript_2", 2);


Тогда в коде Robot_general добавим:

if (GlobalVariableGet("fScript_2")==2) {..........здесь пишем то, что должен сделать Robot_general.............;}

Mikhail Kozhemyako
1270
Mikhail Kozhemyako  
Robot_al:

Глобальную переменную создаёт тот скрипт, который хочет запустить общего робота.

Ну, например...имеем Script_1, Script_2 и Robot_general.

Допустим, Script_1 хочет запустить Robot_general, пишем в Script_1:

GlobalVariableSet("fScript_1", 1);


Тогда в коде Robot_general добавим:

if (GlobalVariableGet("fScript_1")==1) {..........здесь пишем то, что должен сделать Robot_general.............;}

----------------------------------------------------------------------------------------------------------------------------

Аналогично, если Script_2 хочет запустить Robot_general, пишем в Script_2:

GlobalVariableSet("fScript_2", 2);


Тогда в коде Robot_general добавим:

if (GlobalVariableGet("fScript_2")==2) {..........здесь пишем то, что должен сделать Robot_general.............;}  

В принципе все правильно. Но не запустить Robot general, а разрешить ему выполнять какие-то действия. И учтите - на одном окне может быть поставлен только один робот. И наверное так 

//SCRIPT1
   {
    int m=0x1
    int n=GlobalVariableGet("fScript");
    m=(0x3 & n) | m;
    GlobalVariableSet("fScript",m);
   }
 //SCRIPT2
   {
    int m=0x2
    int n=GlobalVariableGet("fScript");
    m=(0x3 & n) | m;
    GlobalVariableSet("fScript",m);
   } 
  {//Это уже в Robot general
   int m=GlobalVariableGet("fScript"); //преобразуем к целому
   if (m & 0x3 >0)  {..........здесь пишем то, что должен сделать Robot_general.............;} //Выделяем два младших бита, если хотя бы какой-нибудь установлен скриптами, разрешаем работу Robot general
   m=0;
   GlobalVariableSet("fScript",m);//Сброрс всех флагов
   return(0);
  }
Pavel Silber
703
Pavel Silber  

datetime GlobalVariableSet( string name, double value)
При успешном выполнении функция возвращает время последнего доступа, иначе 0.  

(Интересно, почему она связана с временным форматом datetime?)

 

Спасибо! 

 


Mikhail Kozhemyako
1270
Mikhail Kozhemyako  
alehandro:

datetime GlobalVariableSet( string name, double value)
При успешном выполнении функция возвращает время последнего доступа, иначе 0.  

(Интересно, почему она связана с временным форматом datetime?)

 

Спасибо! 

 


Наверное просто для удобства, чтобы легко можно определить записалось значение глобальной переменной или что-то не так. Также обратите внимание double GlobalVariableGet(    string name) возвращает 0 в случае ошибки, т.е. получается что  значение 0.0 в глобальную переменную записать можно, но возникнет неопределённость, если не использовать bool GlobalVariableCheck(    string name).
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий