Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1244

 
Alexey Viktorov:

string AUDUSD = "AUDUSD";

Хотябы так.

Вот оно!!! Так оно и было у меня)), стер и забыл))

Большое тебе спасибо!!! Мир в твой дом!

 
Valeriy Yastremskiy:

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

string AUDUSD; // Это текстовая переменная, к тому же изначально пустая т.е. равная ""

(Symbol() == AUDUSD) // эта строка к переменной  AUDUSD отношения не имеет.

Но критерии открытия ордеров не должны быть одинаковыми для разных инструментов / окон. Если они будут одинаковыми, то действительно во всех окнах откроется.

Спасибо! 

А я логику делал именно для того, чтобы советник работая в нескольких окнах при появлении, в дальнейшем, сигнала по открытие ордера, понимал, что сигнал из кейса на покупку по такому-то инструменту и остальные не теребонькал

 
Denis Diakonov:

Вот оно!!! Так оно и было у меня)), стер и забыл))

Большое тебе спасибо!!! Мир в твой дом!

Или вот так на уровне глобальных переменных

#define AUDUSD "AUDUSD"
 
Alexey Viktorov:

Или вот так на уровне глобальных переменных

Вообще круто)) теперь робот получает сигнал и разом в нескольких окнах открывает ордера по разным парам))

Спасибо еще раз!!

 
Yerkin Sagandykov:

проблема не в значениях переменной по моему. просто у меня в коде улсовие перерасчета по наступлении нового часа. и получается что по текущему символу новый бар появляется и высчитывается значения бара =1, а по сигнальному символу получается новый бар еще не сформировался что ли и высчитывается значения для бар =2

проблем решилась просто - отслеивал и по сигнальному символу начало нового бара

 if  ( iTime(nameSym, LPeriod, 0 ) == counted_bar || iTime(nameSymSignal, LPeriod, 0 ) == counted_Signalbar) return; 
 
Подскажите пожалуйста.
Возможно ли передавать несколько параметров switch case из тела функции? У меня прописаны в switch case типы открываемых ордеров и из функции определения точки входа в рынок получилось передать только 1 параметр на открытие ордера, одновременно как я уже понял это невозможно, так вот даже последовательно пока не придумал как реализовать
 
Denis Diakonov:
Подскажите пожалуйста.
Возможно ли передавать несколько параметров switch case из тела функции? У меня прописаны в switch case типы открываемых ордеров и из функции определения точки входа в рынок получилось передать только 1 параметр на открытие ордера, одновременно как я уже понял это невозможно, так вот даже последовательно пока не придумал как реализовать

Покажите кодом, что именно вас интересует 

 
Denis Diakonov:
Подскажите пожалуйста.
Возможно ли передавать несколько параметров switch case из тела функции? У меня прописаны в switch case типы открываемых ордеров и из функции определения точки входа в рынок получилось передать только 1 параметр на открытие ордера, одновременно как я уже понял это невозможно, так вот даже последовательно пока не придумал как реализовать

Имеете в виду диапазон значений?

 
Vitaly Muzichenko:

Покажите кодом, что именно вас интересует 

int OpenOrder()                                             
{
   switch(AUDUSD_Analizing)
   {
      case 0 : Alert("Нет условий для открытия ордера. Выход"); break;    
      case 1 : // кейс для открытия Buy по AUD/USD
               if(TimeServer() == true)                                     
               {
                  if(Symbol() == AUDUSD)
                  {
                  RefreshRates();
                  Open_Order = OrderSend("AUDUSD",OP_BUY,lot,Ask,0,0,0); 
                  Alert("Тикет открытого ордера ", Open_Order, GetLastError());
      case 2 : // кейс для открытия Sell по AUD/USD
               if(TimeServer() == true)                                     
               {
                  if(Symbol() == AUDUSD)
                  {
                  RefreshRates();
                  Open_Order = OrderSend("AUDUSD",OP_SELL,lot,Bid,0,0,0); 
                  Alert("Тикет открытого ордера ", Open_Order, GetLastError());
//-------------------------------------------------------------------------------------------------------------
// другая функция
//-------------------------------------------------------------------------------------------------------------

int AUDUSD_Analizing()
{    
   if(AUDUSD_Prices_new > AUDUSD_Prices_old)
   {
      s1 = AUDUSD_Prices1;
      s2 = AUDUSD_Prices2;
      s3 = s1 - s2;    
      if(raznica > s5)
      {
         Alert("--- ВРЕМЯ ОТКРЫВАТЬ ОРДЕР НА ПОКУПКУ ---");

и вот тут я могу либо прописать конкретное открытие ордера или несколько их штук(чем и решил заняться так 
как не нашел решения), либо вернуть номер кейса в первую функцию(что сократило бы код). 
Но мне нужно по условиям открывать сразу несколько сделок. К примеру нужно 2 на бай разом открыть, 
а возвращается только одно значение и исполняется один кейс и дальше уже на новый круг все идет, 
а мне нужно сразу несколько кейсов, допустим 5 выполнить, поставить 5 отложек и вот как передать не пойму, 
или как вызвать срабатывание кейсов в последовательности. Если с кейсами можно как-то придумать, то по
факту код влезет в рамку 400-600 строк, а так полагаю все 1000+ выйдет в лучшем случае
(разбитые по 100-200 строк на .mqh, но и из файлов тоже помойка сложится)

 
Alexey Viktorov:

Имеете в виду диапазон значений?

не, к примеру передать вначале case 1, следом case 2 и т.д.

кейсы исполняют открытие ордеров

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