Изучаем язык программирования MQL4

Tankk

*********
PS. AlexeNP набрось свой индикатор на график, а спустя некоторое время - обнови и посмотри: изменится картинка или нет...
легонько постукивая кувалдой подрихтуем, и будет комент
он глючит не из-за iTime() & iBarShift().
здесь или счётчик баров не правильный [для int OnCalculate()] и надо буферы всегда обнулять перед расчётом....
а скорее всего: и то, и другое вместе взятые :unsure:

никакой глубины, просто выбранные таймфреймы могут оказаться младше текущего
тогда индюк вообще будет рисовать крякозябры, т.к. масштаб времени на младшем ТФ меньше, чем на старшем.

Если бы сам код индикатора был сделан верно, то на графике, скажем, рабочий ТФ М5, а старший указан М15, то на М5 было бы по 3 стрелки подряд.
так что ж ты не сделал верно?? o_O стрелки/сигналы делал камрад gravity, а ты руководил...
всё сделано правильно: и счётчик баров, и блок MTF.... там-то всего 3 буфера [на отрисовку].
когда потестируешь с моё этих индюков: может и поймёшь: почему это сделано именно так, а не иначе ;)

здесь... связку MTF + Стрелки + Сигналы можно обыграть 2 способами = прикрепляю....
подрихтовал по-быстрому, так что ещё могут остаться ошибки = надо проверять на живом графике.
а третий, и главный способ = для chart-индюков = надо делать буферные! Стрелки!! ;)
т.к. любые графические объекты увеличивают нагрузку на МТ4 в несколько раз [зависит от глубины истории отрисовки графики].

и кстати, Саш... а по какой формуле ты вычислил значение 1849 баров ?? o_O
т.к. в счётчике баров, выходит цифра 4056 [при обрезке истории].... а при полной истории = на секунду = все свечи графика, а потом всего 2 последние свечи.
поэтому, при полной истории он должен легче работать, чем при обрезанной :unsure:

P.S. советую всем посмотреть и разобрать на запчасти = https://forexsystemsru.com/threads/indikatory-sobranie-sochinenij-tankk.86203/post-1635909
это шаблонный, эталонный индюк ;) пособие для начинающих: как писать МАшки и осцилляторы :ROFLMAO::ROFLMAO:


Я там что-то всё таки намудрил) Вчера перестал запускать терминал.
Описал тут.
Переменную k объявил локально, почти как было, но вероятность, что опять там ошибся остаётся.
И поправил пару предупреждений. (приписал (int))
Проверьте пожалуйста, у кого есть время.
Оригинал тут
в целом = всё правильно :unsure: но этот #property strict просто на хрен не нужен в МТ4 :ROFLMAO::ROFLMAO:
 

Вложения

  • HMA'BB Adaptive MTF [MERFY+(arr)] (1)_08-02-2021.png
    HMA'BB Adaptive MTF [MERFY+(arr)] (1)_08-02-2021.png
    72,1 КБ · Просмотры: 88
  • HMA'BB Adaptive MTF [MERFY+(arr)] (2)_08-02-2021.png
    HMA'BB Adaptive MTF [MERFY+(arr)] (2)_08-02-2021.png
    72,2 КБ · Просмотры: 80
  • HMA'BB Adaptive MTF [MERFY+(arr)] (1).mq4
    HMA'BB Adaptive MTF [MERFY+(arr)] (1).mq4
    35,4 КБ · Просмотры: 23
  • HMA'BB Adaptive MTF [MERFY+(arr)] (2).mq4
    HMA'BB Adaptive MTF [MERFY+(arr)] (2).mq4
    38 КБ · Просмотры: 23
  • Limit [mobidik].png
    Limit [mobidik].png
    133,4 КБ · Просмотры: 74
  • BTCUSD, M5_08-02-2021_222735.png
    BTCUSD, M5_08-02-2021_222735.png
    167,7 КБ · Просмотры: 78
  • BTCUSD, M30_08-02-2021_223342.png
    BTCUSD, M30_08-02-2021_223342.png
    87,2 КБ · Просмотры: 81
  • HMA'BB Adaptive MTF [MERFY+(arr)] (2).mq4
    HMA'BB Adaptive MTF [MERFY+(arr)] (2).mq4
    39,1 КБ · Просмотры: 21
  • HMA'BB Adaptive MTF [MERFY]_11-02-2021.png
    HMA'BB Adaptive MTF [MERFY]_11-02-2021.png
    83,7 КБ · Просмотры: 76
  • MTF_11-02-2021_HMA'BB Adaptive MTF [MERFY].png
    MTF_11-02-2021_HMA'BB Adaptive MTF [MERFY].png
    53 КБ · Просмотры: 78
  • HMA'BB Adaptive MTF [MERFY].mq4
    HMA'BB Adaptive MTF [MERFY].mq4
    38,1 КБ · Просмотры: 23
  • HMA'BB Adaptive MTF [MERFY].ex4
    HMA'BB Adaptive MTF [MERFY].ex4
    53,3 КБ · Просмотры: 18
Последнее редактирование модератором:

Tankk

*********
легонько постукивая кувалдой подрихтуем, и будет комент
он глючит не из-за iTime() & iBarShift().
здесь или счётчик баров не правильный [для int OnCalculate()] и надо буферы всегда обнулять перед расчётом....
а скорее всего: и то, и другое вместе взятые :unsure:
грёбанный int OnCalculate() = от него больше проблем, чем пользы :unsure:
счётчик баров = основа индюка.... если счётчик кривой, то и индюк быстро ласты склеит :ROFLMAO::ROFLMAO:
 

Вложения

  • MTF MA_08-02-2021.png
    MTF MA_08-02-2021.png
    62,7 КБ · Просмотры: 67
  • MTF MA.mq4
    MTF MA.mq4
    10,5 КБ · Просмотры: 19
  • MTF MA.ex4
    MTF MA.ex4
    24,5 КБ · Просмотры: 12

AlexeNP

Гуру форума
Вывел часы работы в настройки.
А как правильно комиссию и своп в пункты не знаю.
(Вроде как надо на Point умножать и на размер лота. Но как правильно всё это сделать хз).
Не стал в общем.
Там в комментарии в строке 92, написал названия функций, которые возвращают размер комиссии и свопа в валюте депозита.
чтобы комиссию и своп в пункты переделать нужно сначала узнать стоимость пункта в валюте депозита

[CODE title="стоимость пункта в валюте депозита"]double point_value=SymbolInfoDouble(NULL,SYMBOL_TRADE_TICK_VALUE)*SymbolInfoDouble(NULL,SYMBOL_POINT)/SymbolInfoDouble(NULL,SYMBOL_TRADE_TICK_SIZE);[/CODE]

потом переводим комиссию и своп в пункты (с учетом лота)
result_point = (OrderSwap-OrderCommision)/(OrderLots*point_value)
как-то так
 

gravity

Местный знаток
чтобы комиссию и своп в пункты переделать нужно сначала узнать стоимость пункта в валюте депозита
Спасибо. Вроде это всё должно считаться в строке 165,166 в мной прикреплённом варианте.
Если можешь, сделай сам. Я не пойму, там на поинт делить надо или умножать.(Первая картинка в предыдущем сообщении)

Там изначально вообще вот так

Screenshot_7.jpg
 

Дмитрий SDA

Местный знаток
Спасибо. Вроде это всё должно считаться в строке 165,166 в мной прикреплённом варианте.
Если можешь, сделай сам. Я не пойму, там на поинт делить надо или умножать.(Первая картинка в предыдущем сообщении)

Там изначально вообще вот так

Посмотреть вложение 426917
здесь он считает дистанцию...
у него профит в настройках указывается в пипсах.

теперь в этой функции к дистанции нужно прибавить, что написал AlexeNP.
 

AlexeNP

Гуру форума
Спасибо. Вроде это всё должно считаться в строке 165,166 в мной прикреплённом варианте.
Если можешь, сделай сам. Я не пойму, там на поинт делить надо или умножать.(Первая картинка в предыдущем сообщении)

Там изначально вообще вот так

Посмотреть вложение 426917
ок, давай поширше поглядим на эту проблему... нам иногда нужно посчитать прибыль в пунктах, что мы делаем в этом случае:
(Profit - Comission + Swap)/(Lot*Point_Value) - прибыль в пунктах
наоборот, может нам нужно посчитать сколько прибыли/убытков мы получим при заданном тейк-профите/стоп-лоссе
profit = (TakeProfit - PriceOpen)*Lot*Point_Value
loss = (StopLoss - PriceOpen)*Lot*Point_Value
с учетом знака, конечно)
 

sashbek

Активный участник
Всем Привет!
Только изучаю mql, поэтому не обессудьте..

Советник открывает кучу бай и кучу селл ордеров на одном баре. Требуется вставить ограничение на максимум 1 бай и 1 селл на одной свече. Пробовал код Кима - не работает..

Спасибо!
 

BorisSedov

Активный участник
Можете использовать этот код:

C++:
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
if(!IsTesting())
   {
   if(AccountNumber()==0 || AccountBalance()==0 || !IsExpertEnabled() || !IsTradeAllowed() || !IsTradeAllowed(Symbol(),TimeCurrent())) return;
   }

int m_buy=-1,m_sell=-1,
    h_buy=-1,h_sell=-1;

for(int i=0; i<OrdersTotal(); ++i)
   {
   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
      if(OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol()) continue;
     
      if(OrderType()==OP_BUY) m_buy=iBarShift(NULL,0,OrderOpenTime());
      else if(OrderType()==OP_SELL) m_sell=iBarShift(NULL,0,OrderOpenTime());
      }
   }

for(int i=OrdersHistoryTotal()-1; i>=0; --i)
   {
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
      if(OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol()) continue;
     
      if(OrderType()==OP_BUY)
         {
         h_buy=iBarShift(NULL,0,OrderOpenTime());
         break;
         }
      }
   }

for(int i=OrdersHistoryTotal()-1; i>=0; --i)
   {
   if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
      if(OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol()) continue;
     
      if(OrderType()==OP_SELL)
         {
         h_sell=iBarShift(NULL,0,OrderOpenTime());
         break;
         }
      }
   }


if(m_buy!=0 && h_buy!=0)
   {
   // Можно открывать Бай.
   }

if(m_sell!=0 && h_sell!=0)
   {
   // Можно открывать Селл.
   }

}
 
Последнее редактирование:

fxbo

Активный участник
Доброе время суток, кто подскажет по русски как победить эти ошибки

1618013445256.png

заранее бллагодарю.....
 

vladradon

Программист
как победить эти ошибки
Привет. В 273-й строке указано, что нет баланса скобок - двойным щелчком мыши по ошибке переходишь на эту строку и ищешь где нужно скобку вставить - они должны быть парными - открывающая+закрывающая и их может быть несколько одни внутри других, но всегда четное количество. После этого компилируешь и скорее всего первая ошибка пропадет (непредвиденное завершение программы), которая возникает из-за дисбаланса скобок внутри кода. 3-я ошибка говорит об отсутствии функции CreateButtons - нужно сначала первые 2 ошибки устранить и потом искать эту функцию и если ее нет, то создавать или вообще убирать к ней обращение в коде.
 
  • Like
Реакции: fxbo

fxbo

Активный участник
Привет. В 273-й строке указано, что нет баланса скобок - двойным щелчком мыши по ошибке переходишь на эту строку и ищешь где нужно скобку вставить - они должны быть парными - открывающая+закрывающая и их может быть несколько одни внутри других, но всегда четное количество. После этого компилируешь и скорее всего первая ошибка пропадет (непредвиденное завершение программы), которая возникает из-за дисбаланса скобок внутри кода.
Благодарю за ответ..
перерыл рядом все в доль и поперек, вроде как все скобки парные и вроде как все на месте....
проблему не нашел.... (((
 

vladradon

Программист
проблему не нашел
Если выделить одну скобку, то автоматом выделится ее вторая, которая может находится в десятках строк выше/ниже по коду. Смотреть нужно все виды скобок. Там другого быть не может - сама ошибка дает подсказку что искать. Скиньте мне в личку - там делов на минуту.
 
  • Like
Реакции: fxbo

Grole

Прохожий
Доброго времени суток. Очень нужно решение одной задачи - Как прикрепить клавишу для выделения и снятия выделения графического объекта Прямоугольная метка, чтобы можно было её переместить мышкой на любой участок графика. Пример с индикатора Вилка Нео. К сожалению сам ещё не могу сообразить, поэтому прошу помощи у вас.
 

Вложения

  • 01.jpg
    01.jpg
    7,5 КБ · Просмотры: 19
  • 02.jpg
    02.jpg
    2,7 КБ · Просмотры: 19
Последнее редактирование:

Grole

Прохожий
Доброго времени суток. Очень нужно решение одной задачи - Как прикрепить клавишу для выделения и снятия выделения графического объекта Прямоугольная метка, чтобы можно было её переместить мышкой на любой участок графика. Пример с индикатора Вилка Нео. К сожалению сам ещё не могу сообразить, поэтому прошу помощи у вас.
уже не нужно
 
Верх