Ваши вопросы по языку MQL4

vladradon

Программист
Привет!Уважаемые знатоки подскажите пожалуйса как сделать так,чтобы в советнике открывался ордер на третьем(там на картинке надеюсь доступно и понятно),а не на первом(белом).или с третьего и все последующие не суть,главно не с первого.помогите !
Судя по скрину, индикатор с двумя выходными индексными массивами, которые содержат либо EMPTY_VALUE, либо цену и меняются в процессе движения цены. Если есть возможность считывать показания этих буферов, то нужно (учитывая, что они одновременно не могут сигнализировать и сменяют друг друга) в советнике задать 2 флаговые переменные, которые будут принимать значения (любые целочисленные) для бай и селл и если переменная находится в бае и приходит еще сигнал на бай (судя по графику, просто вместо пустого значения должен придти сигнал больше предыдущего (меньше для селла), переменная увеличивается на 1 и если переменная наберет нужное количество сигналов, то даем команду на открытие ордера (если так задумано). А если переменная одного направления не набрала нужного количества сигналов (пришел противоположный сигнал), то ее обнуляем и открываем счет переменной другого направления. На самом деле все умещается в 5-10 строк максимум кода.
 
Последнее редактирование:

Golandec

Прохожий
Добрый день!eevviill2 спасибо!Только со второго начинает открывать,на третий ни чего не выходит у меня;пробую добавляю меняю for(int i=2;i<Bars;i++) ни че не выходит;можете поправить или что там надо еще,чтоб на третьей заходить?
PHP:
void OpenOrd()
  {
  double up=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,1); 
  double up2=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,2); 
     
  double down=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,2,1); 
  double down2=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,2,2); 
     
     bool up_ok=false; 

     if(up>up2)
  { 
     for(int i=2;i<Bars;i++) 
  { 
  down=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,2,i); 
     if(down!=EMPTY_VALUE) break; 
  up=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,i); 
  up2=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,i+1); 
     if(up>up2) {up_ok=true;break;}  {PutOrder(0,Ask);}
  } 
  }      
  }
 

eevviill2

Местный знаток
Добрый день!eevviill2 спасибо!Только со второго начинает открывать,на третий ни чего не выходит у меня;пробую добавляю меняю for(int i=2;i<Bars;i++) ни че не выходит;можете поправить или что там надо еще,чтоб на третьей заходить?
PHP:
void OpenOrd()
  {
  double up=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,1); 
  double up2=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,2); 
     
  double down=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,2,1); 
  double down2=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,2,2); 
     
     bool up_ok=false; 

     if(up>up2)
  { 
     for(int i=2;i<Bars;i++) 
  { 
  down=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,2,i); 
     if(down!=EMPTY_VALUE) break; 
  up=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,i); 
  up2=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,i+1); 
     if(up>up2) {up_ok=true;break;}  {PutOrder(0,Ask);}
  } 
  }      
  }
Вообщето практичней делать функцию типа инт для сигнала и записывать значение в переменную. Потом им лечге оперировать или реверсировать или использовать как сигнал для закрытия.
PHP:
void OpenOrd() 
  { 
  double up=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,1);  
  double up2=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,2);  
      
  double down=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,2,1);  
  double down2=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,2,2); 
      
     int up_cou=0;  

     if(up>up2) 
  {  
up_cou++;
     for(int i=2;i<Bars;i++)  
  {  
  down=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,2,i);  
     if(down!=EMPTY_VALUE) break;  
  up=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,i);  
  up2=iCustom(Symbol(),0,"WWW\\TT",Price,Order,FilterPeriod,PreSmooth,PreSmoothMode,PctFilter,ColorMode,ColorBarBack,1,i+1);  
     if(up>up2) up_cou++; 
  }  
  }   
   if(up_cou==3) PutOrder(0,Ask); 
  }
 
Последнее редактирование:

Артмен

Новичок форума
Добрый вечер, уважаемые программисты! Помогите пожалуйста поправить предупреждение - possible loss of data due to type conversion; (Не понимаю в каком месте нужно делать перевод типов); Заранее огромное спасибо за ответ!
PHP:
string StringUpperCase(string str)
  {
   string   s=str;
   int      lenght=StringLen(str)-1;
   int      _char;

   while(lenght>=0)
     {
      _char=StringGetChar(s,lenght);
      if((_char>96 && _char<123) || (_char>223 && _char<256))
      {
       
      s=StringSetChar(s,lenght,_char-32);
      }
      else
      if(_char>-33 && _char<0)
         s=StringSetChar(s,lenght,_char+224);
      lenght--;
     }
   return(s);
  }
 
Последнее редактирование:

Артмен

Новичок форума
Я вообщето попросил что бы мне помогли с переводом типов а не с изменением шрифта. И я даже в справке посмотрел!
PHP:
bool StringToUpper( 
  string&  string_var      // строка для обработки 
   );
Параметры

string_var

[in][out] Строка.

Возвращаемое значение

В случае успешного выполнения возвращает true, иначе false. Для получения кода ошибки нужно вызвать функцию GetLastError().
Пожалуйста не надо меня дурить!
 

vladradon

Программист
Я вообщето попросил что бы мне помогли с переводом типов а не с изменением шрифта. И я даже в справке посмотрел!
Самый простой способ - (тип, в который переводим)(значение или формула с переменными) в итоге если такой прямой перевод между переменными возможен, то получаем то, что хотели. К примеру int Time=(int)TimeCurrent(); запишет в переменную Time значение datetime, возвращаемое функцией TimeCurrent(), в целочисленном виде. Если прямого перевода быть не может (нельзя переменную string перевести в int), то нужно это делать в несколько ходов, опять же применительно к конкретному случаю:
PHP:
string x="1234";
int xx=(int)StrToDouble(x,0);
и т.п.
Переводимый аргумент не всегда обязательно заключать в скобки - в основном это требуется, если сразу переводим какой-то расчет типа int x=(int)(x1/x2*x3-x4).
 
Последнее редактирование:

Артмен

Новичок форума
Самый простой способ - (тип, в который переводим)(значение или формула с переменными) в итоге если такой прямой перевод между переменными возможен, то получаем то, что хотели. К примеру int Time=(int)TimeCurrent(); запишет в переменную Time значение datetime, возвращаемое функцией TimeCurrent(), в целочисленном виде. Если прямого перевода быть не может (нельзя переменную string перевести в int), то нужно это делать в несколько ходов, опять же применительно к конкретному случаю:
PHP:
string x="1234";
int xx=(int)DoubleToStr(x,0);
и т.п.
Переводимый аргумент не всегда обязательно заключать в скобки - в основном это требуется, если сразу переводим какой-то расчет типа int x=(int)(x1/x2*x3-x4).

СПАСИБО ГРОМАДНЕЕШЕ!!!!
 

vladradon

Программист
Вообщето практичней делать функцию типа инт для сигнала и записывать значение в переменную.
Это ты из моего поста стянул?;)
Написал вчера многоуровневый трал с частичным закрытием ордера - то, о чем мы с тобой базарили по поводу виртуального трала и каким способом запоминать значения. Код вышел по объему сравним с совом среднего уровня.:D
Вопрос на засыпку: как после частичного закрытия ордера продолжить его трал, если изначальный ордер полностью закрывается терминалом и открывается новый ордер с уменьшенным лотом, но другим тикетом и все установки нужно сразу переписать на новый тикет, который нельзя получить какой-то командой на момент открытия, т.к. его (измененный ордер) открывает терминал на автомате.
 
Последнее редактирование:

Артмен

Новичок форума
Здравствуйте товарищи программисты! Помогите пожалуйста с логикой - мне нужно сделать флажки на алерт ; Подскажите как это сделать У меня индюк на пересечении МА; Заранее благодарен!!!
if(Time[0] != LastAlert)
{
LastAlert = Time[0];
if(use_alert==true)
{

if(snake_buffer[0]>t3_buffer[r])
{
Alert("Покупай! Пара - ",Symbol(),", Таймфрэйм - ",Period());
}
//=======================================================
if(snake_buffer[0]<t3_buffer[r])
{
Alert("Продавай! Пара - ",Symbol(),", Таймфрэйм - ",Period());
}
//================================================
}
}
 

eevviill2

Местный знаток
Я вообщето попросил что бы мне помогли с переводом типов а не с изменением шрифта. И я даже в справке посмотрел!
PHP:
bool StringToUpper( 
  string&  string_var      // строка для обработки 
   );
Параметры

string_var

[in][out] Строка.

Возвращаемое значение

В случае успешного выполнения возвращает true, иначе false. Для получения кода ошибки нужно вызвать функцию GetLastError().
Пожалуйста не надо меня дурить!
Дык. Вся твоя функция(которая делает из меленькой буквы большую) вмещяется в одной строке которую я написал:D
 

eevviill2

Местный знаток
Это ты из моего поста стянул?;)
Написал вчера многоуровневый трал с частичным закрытием ордера - то, о чем мы с тобой базарили по поводу виртуального трала и каким способом запоминать значения. Код вышел по объему сравним с совом среднего уровня.:D
Вопрос на засыпку: как после частичного закрытия ордера продолжить его трал, если изначальный ордер полностью закрывается терминалом и открывается новый ордер с уменьшенным лотом, но другим тикетом и все установки нужно сразу переписать на новый тикет, который нельзя получить какой-то командой на момент открытия, т.к. его (измененный ордер) открывает терминал на автомате.
Мой первый щаблон советника был ещё 6 лет назад.
По коментарию. Там пишется номер тикета от которого был откушен кусок.
 

vladradon

Программист
По коментарию. Там пишется номер тикета от которого был откушен кусок.
А зачем он нужен, если этого ордера уже нет и не будет в рынке - его уже курировать не нужно. - Нужен ордер, который с уменьшенным лотом занял его место с автоматически сгенерированным тикетом самим брокером.;):nda:
Я обошел этот момент.:)
 
Последнее редактирование:

vlad_123

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

Хинт - новый ордер будет по той же паре и с теми же временем и ценой открытия ;)
 
Верх