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

eevviill2

Местный знаток
Добрый день, подскажите как прописать такое для стрелочного индикатора, добавить параметр, что б можно было задавать растояние между сигналами, к примеру 10 баров это значит что если в течении 10 баров от предыдущего сигнала будет еще сигнал то его пропускать и стрелка отображатся в этом промежутке не будет , вынести отдельной строчкой в параметрах и что б количество баров можно было менять

Сразу после установки стрелки мотай 9 баров.
Код:
for(int i=0;i<Bars-20;i++)

{

if(...)

{

arr=...

i+=9;

}

}
 

eevviill2

Местный знаток
Подскажите как элементарную вещь сделать, сейчас такой код

Код:
int isOrderInProfit()
{
      int OrderInProfit=0;
      {
         OrderSelect(OrdersTotal()-1,SELECT_BY_POS,MODE_TRADES);
         if (OrderProfit()>ProfitForOpenAnother)
         {OrderInProfit=1;}
      }
   return OrderInProfit;
}

Нужно найти последнюю

открытую позицию в ЛОНГ
и проверить является ли последняя открытая позиция профитной на данный момент

открытую позицию в ШОРТ
и проверить является ли последняя открытая позиция профитной на данный момент

Если небыло отложек, то просто мотай ордера назад с двумя флгами типа бай проверен и селл проверен.
 

eevviill2

Местный знаток
Добрый день. Буду рад помощи:
имеется такая конструкция: if(StringFind(PositionGetString(POSITION_COMMENT),"from") == -1)
Конструкция проверяет наличие комментария у ордера. Вопрос, как записать комментарий в ордер, чтобы он не прошел это условие. Язык mql5

Думаю тебе нужен такой код.
if(HistoryDealGetInteger(ticke,DEAL_ENTRY)==DEAL_ENTRY_IN)

Код:
input int Magic = 334;
...
  //hist
  int ticke;
  HistorySelect(0,TimeCurrent());
 
for(int i=HistoryDealsTotal()-1;i>=0;i--)
{
ticke=int(HistoryDealGetTicket(i));
if(!ticke) continue;
if(HistoryDealGetInteger(ticke,DEAL_MAGIC)!=Magic) continue;
if(HistoryDealGetString(ticke,DEAL_SYMBOL)!=_Symbol) continue;
if(HistoryDealGetInteger(ticke,DEAL_ENTRY)==DEAL_ENTRY_IN) continue; //opos closed order data

Alert(HistoryDealGetInteger(ticke,DEAL_TIME));
}
 

Vladdim

Активный участник
Господа помогите начинающему самоучке. Мне нужно получить расстояние от High до Low предыдущей свечи в пунктах.
NormalizeDouble ( High[1 ]- Low[1] * Point, Digits);
Выдает не то.
Спасибо.
 

Defort

Новичок форума
Только учусь.
Определяю мин и макс цену за 10 баров:

double minprice=999999, mp,
maxprice=-999999;
for(int i=0; 1<10; i++) // Поиск минимальной цены за 10 баров
{
mp = iLow(Symbol(), PERIOD_CURRENT, i);
if(mp < minprice)
minprice = mp;
}
for(int i=0; 1<10; i++) // Поиск максимальной цены за 10 баров
{
mp = iHigh(Symbol(), PERIOD_CURRENT, i);
if(mp > maxprice)
maxprice = mp;
}
Comment("MinPrice: " + DoubleToStr(minprice, 5) +"\n"+
"MaxPrice: " + DoubleToStr(maxprice, 5));


Терминал подвисает и не выводится инфо с ценами на экран. Что я делаю не так?
 

Defort

Новичок форума
Только учусь.
Определяю мин и макс цену за 10 баров:

double minprice=999999, mp,
maxprice=-999999;
for(int i=0; 1<10; i++) // Поиск минимальной цены за 10 баров
{
mp = iLow(Symbol(), PERIOD_CURRENT, i);
if(mp < minprice)
minprice = mp;
}
for(int i=0; 1<10; i++) // Поиск максимальной цены за 10 баров
{
mp = iHigh(Symbol(), PERIOD_CURRENT, i);
if(mp > maxprice)
maxprice = mp;
}
Comment("MinPrice: " + DoubleToStr(minprice, 5) +"\n"+
"MaxPrice: " + DoubleToStr(maxprice, 5));


Терминал подвисает и не выводится инфо с ценами на экран. Что я делаю не так?
Уже сам разобрался, вместо "i" единичку втулил
 

Ugar

Гуру форума
Только учусь.
Определяю мин и макс цену за 10 баров:

double minprice=999999, mp,
maxprice=-999999;
for(int i=0; 1<10; i++) // Поиск минимальной цены за 10 баров
{
mp = iLow(Symbol(), PERIOD_CURRENT, i);
if(mp < minprice)
minprice = mp;
}
for(int i=0; 1<10; i++) // Поиск максимальной цены за 10 баров
{
mp = iHigh(Symbol(), PERIOD_CURRENT, i);
if(mp > maxprice)
maxprice = mp;
}
Comment("MinPrice: " + DoubleToStr(minprice, 5) +"\n"+
"MaxPrice: " + DoubleToStr(maxprice, 5));


Терминал подвисает и не выводится инфо с ценами на экран. Что я делаю не так?
minprice=iLow(NULL,0,iLowest(NULL,0,MODE_LOW,10,0));
maxprice=iHigh(NULL,0,iHighest(NULL,0,MODE_HIGH,10,0));
 

AlexeyVik

Программист mql4 mql5
Уже сам разобрался, вместо "i" единичку втулил
Это самое худшее решение. Кроме того что показал Андрей есть ещё минимум два варианта.
  • Если это индикатор, то использовать массивы high[] или low[] и использовать функцию ArrayMaximum или ArrayMinimum
  • Пдготовить массивы посредством CopyHigh или CopyLow и так-же ArrayMaximum или ArrayMinimum
В принципе по скорости, обработка таких вариантов не отличается.
 
  • Like
Реакции: Ugar

Ugar

Гуру форума
Это самое худшее решение. Кроме того что показал Андрей есть ещё минимум два варианта.
  • Если это индикатор, то использовать массивы high[] или low[] и использовать функцию ArrayMaximum или ArrayMinimum
  • Пдготовить массивы посредством CopyHigh или CopyLow и так-же ArrayMaximum или ArrayMinimum
В принципе по скорости, обработка таких вариантов не отличается.
А ты случайно не сравнивал ArrayMaximum с iHighest по скорости?
 

AlexeyVik

Программист mql4 mql5
А ты случайно не сравнивал ArrayMaximum с iHighest по скорости?
Андрей, я не вижу смысла в таких замерах. В реальной торговле это такие незначительные расхождения могут быть, что говорить о них вообще не серьёзно. Это можно замерять исключительно для «растопыривания пальцев», типа это выполняется дольше этого аж на целых 100 микросекунд. Я замерял, проводил многократные тесты...(пальцы в растопырку...)
Я подозреваю что iHighest основан именно на ArrayMaximum. Так-что не знаю.
 

Ugar

Гуру форума
Андрей, я не вижу смысла в таких замерах. В реальной торговле это такие незначительные расхождения могут быть, что говорить о них вообще не серьёзно. Это можно замерять исключительно для «растопыривания пальцев», типа это выполняется дольше этого аж на целых 100 микросекунд. Я замерял, проводил многократные тесты...(пальцы в растопырку...)
Я подозреваю что iHighest основан именно на ArrayMaximum. Так-что не знаю.
Дело не в распальцовке. Какая функция быстрее не имеет значения, если они в коде выполняются пару раз. А если многократно то разница может оказаться существенной. В торговле да, разницы никакой, а вот в тестере, чем быстрее тем лучше. Я чаще имею дело с ТМ4, а там тестер умеет юзать только одно ядро процессора, даже на оптимизации. Приходится задумываться об источниках тормозов.
 

ArtSalt

Интересующийся
Всем приветы, я уже замучился с советником, как в нем установить время начало и окончания торгов все уже перепробовал.
Здесь тоже смортел но не нашел, или не там смотрю. ПОМОГИТЕ ПЛИЗЗЗЗЗЗЗ !!!!!
 

Slava78

Элитный участник
Всем приветы, я уже замучился с советником, как в нем установить время начало и окончания торгов все уже перепробовал.
Здесь тоже смортел но не нашел, или не там смотрю. ПОМОГИТЕ ПЛИЗЗЗЗЗЗЗ !!!!!
Кинь mq4, быстрей помогут. И обратись в доработку
 

AlexeNP

Гуру форума
Всем приветы, я уже замучился с советником, как в нем установить время начало и окончания торгов все уже перепробовал.
Здесь тоже смортел но не нашел, или не там смотрю. ПОМОГИТЕ ПЛИЗЗЗЗЗЗЗ !!!!!
так зависит от задач, которые перед тобой стоят)
Код:
input string Start_time = "00:00";//Время начала
input string End_time   = "23:59";//Время конца

//--------------------------------------------+
//---
   if(Start_time==End_time)
      // Время не задано - разрешаем торговлю
//---
   datetime time_cur=TimeCurrent();
   datetime time_start=StringToTime(TimeToString(time_cur,TIME_DATE)+" "+Start_time);
   datetime time_end=StringToTime(TimeToString(time_cur,TIME_DATE)+" "+End_time);
//---
   if(time_start < time_end && time_start <= time_cur && time_cur <= time_end)
      // Разрешаем торговлю
   if(time_start > time_end && (time_cur >= time_start || time_cur <= time_end))
      // Разрешаем торговлю
//---
 

ArtSalt

Интересующийся
так зависит от задач, которые перед тобой стоят)
Код:
input string Start_time = "00:00";//Время начала
input string End_time   = "23:59";//Время конца

//--------------------------------------------+
//---
   if(Start_time==End_time)
      // Время не задано - разрешаем торговлю
//---
   datetime time_cur=TimeCurrent();
   datetime time_start=StringToTime(TimeToString(time_cur,TIME_DATE)+" "+Start_time);
   datetime time_end=StringToTime(TimeToString(time_cur,TIME_DATE)+" "+End_time);
//---
   if(time_start < time_end && time_start <= time_cur && time_cur <= time_end)
      // Разрешаем торговлю
   if(time_start > time_end && (time_cur >= time_start || time_cur <= time_end))
      // Разрешаем торговлю
//---
 

ArtSalt

Интересующийся
ХЗ Гляну, Вроде так и не так, отпишусь, я в инете ковырнул примерно что хотел, теперь бы разобраться, не могу понять, только эти все условия перед стартом вставлять проги или где то там
 
Верх