FXOpen Broker

10+ years’
experience in FX

VISIT WEBSITE

Trading Accounts

ECN, STP,
Micro, Crypto

START TRADING

Try Free Demo

Practice Forex trading
risk free

OPEN DEMO ACCOUNT

PAMM Technology

Become a Master
or a Follower

JOIN PAMM SERVICE
Page 1 of 3 123 LastLast
Results 1 to 15 of 32

Thread: MQL4 заметки от eevviill

  1. #1
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    1,813
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,034
    Thanked 777 Times in 676 Posts

    Default MQL4 заметки от eevviill

    Здесь буду выкладывать код который(как мне кажется) будет применятся в не стандартных ситуациях или просто интересных моментах.




    Заметка1 - сдвиг данных в массиве
    Заметка2 - перебор всех символов в обзоре рынка
    Заметка 3 - преобразование типа переменной
    Заметка 4 - открытие ордера(бинарные опционы)
    Заметка 5 - поиск цен уровней Фибоначчи
    Заметка 6 - нажатие кнопки
    Заметка 7 - обрезание символов в цене инструмента
    Заметка 8 - разделение строки на элементы
    Заметка 9 - работа кода на первом тике нового бара
    Заметка 10 - MultiTimeFrame
    Заметка 11 - запуск советника на ренко(офлайн) графике
    Заметка 12 - не вызов не нужного индикатора
    Заметка13 - округление лота
    Заметка14 - торговля(подсчёт) по указанным парам
    Заметка15 - расчёт данных графического объекта "Канал стандартного отклонения"
    Заметка16 - удаление в индикаторе ZigZag однонаправленных пиков
    Заметка17 - время торговли советника
    Заметка18 - умножение лота
    Заметка19 - формула CCI наложенного на OBV
    Заметка20 - расчёт пиков(фракталов)
    Заметка21 - стопы по свечам
    Заметка22 - поиск бара
    Заметка23 - умножение пункта (перевод на 4х знак...)
    Заметка24 - библиотека шрифтов
    Заметка25 - Пересчёт баров в индикаторе
    Заметка26 - Итерация кода в точности до секунды
    Заметка27 - Обновление графика програмно
    Заметка28 - Размер графика в пикселях
    Заметка29 - Тикет открытого частично закрившегося ордера
    Заметка30 - Тикет первого частично закрытого ордера
    Заметка31 - Код(действие) после закрытия ордера
    Last edited by eevviill; 06-18-2018 at 10:13 AM.
    MQL4 programmer

  2. The Following User Says Thank You to eevviill For This Useful Post:

    Sanyok11 (09-04-2017)

  3. #2
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    1,813
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,034
    Thanked 777 Times in 676 Posts

    Default Заметка1 - сдвиг данных в массиве

    В этом коде мы копируем массив сам в себя но со сдвигом.


    Сдвинуть данные на 1 елемент назад. (6-ой станет 5-ым и т.д.)
    PHP Code:
    ArrayCopy(buf,buf,0,1); 
    Сдвинуть на 1 вперёд.
    PHP Code:
    ArrayCopy(buf,buf,1,0); 
    Last edited by eevviill; 09-04-2017 at 10:46 AM.
    MQL4 programmer

  4. #3
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    1,813
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,034
    Thanked 777 Times in 676 Posts

    Default Заметка2 - перебор всех символов в обзоре рынка

    В этом коде мы узнаем какие символы у нас в Обзоре рынка и запишим их в буфер.

    PHP Code:
    int symbols_tot;
    string symbols[]; 

    //////////////////////////////////////////////////////////////
    int OnInit()
    {
    symbols_tot=SymbolsTotal(true);
    ArrayResize(symbols,symbols_tot);

    for(
    int i=0;i<symbols_tot;i++)
    {
      
    symbols[i]=SymbolName(i,true);
    }

    return(
    INIT_SUCCEEDED);
    }

    ///////////////////////////////////////////////////////////////
    void OnTick()
    {
    for(
    int i=0;i<symbols_tot;i++)
    {
    Alert("Symbol:"+symbols[i]);
    }


    Last edited by eevviill; 09-09-2017 at 05:49 PM.
    MQL4 programmer

  5. #4
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    1,813
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,034
    Thanked 777 Times in 676 Posts

    Default Заметка 3 - преобразование типа переменной

    Если вам надо например преобразовать тип переменной с datetime в string, то можно это сделать так
    PHP Code:
    datetime time_cur=TimeCurrent();
    Alert(TimeToString(time_cur)); 
    А можно так
    PHP Code:
    datetime time_cur=TimeCurrent();
    Alert(string(time_cur)); 
    MQL4 programmer

  6. #5
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    1,813
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,034
    Thanked 777 Times in 676 Posts

    Default Заметка 4 - открытие ордера(бинарные опционы)

    Разница только в коментарие к ордеру. Нужно записывать так
    PHP Code:
    extern int expiration_minits 5;
    ...
    OrderSend(Symbol(),OP_BUY,Lot,Ask,0,0,0,"BO exp:"+string(expiration_minits*60),Magic,0,clrNONE); 
    MQL4 programmer

  7. #6
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    1,813
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,034
    Thanked 777 Times in 676 Posts

    Default Заметка 5 - поиск цен уровней Фибоначчи

    Сами цены уровней узнать нельзя. Только расчитать.

    PHP Code:
    string name_fibo="Fibo";


      
    int levels=int(ObjectGetInteger(0,name_fibo,OBJPROP_LEVELS));
      
    double fib_prices[]; ArrayResize(fib_prices,levels);
      
    double price_lev0=ObjectGetDouble(0,name_fibo,OBJPROP_PRICE,1);
      
    double price_lev100=ObjectGetDouble(0,name_fibo,OBJPROP_PRICE,0);
      
    bool wayUP=false; if(price_lev0<price_lev100wayUP=true;
      
    double perc100_points=MathAbs(price_lev0-price_lev100);


       
    double level=0;
       for(
    int i=0;i<levels;i++)
         {
          
    level=ObjectGetDouble(0,name_fibo,OBJPROP_LEVELVALUE,i);
          if(
    wayUPfib_prices[i]=price_lev0+perc100_points*level;
          else
          
    fib_prices[i]=price_lev0-perc100_points*level;     
         } 
    MQL4 programmer

  8. #7
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    1,813
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,034
    Thanked 777 Times in 676 Posts

    Default Заметка 6 - нажатие кнопки

    OnChartEvent() в тестере не работает. Но одно универсальное решение для нажатия кнопки в тестере и живой торговли есть.

    PHP Code:
     if(ObjectGetInteger(0,"BUY_button",OBJPROP_STATE))

    {

    ObjectSetInteger(0,"BUY_button",OBJPROP_STATE,false);

    ... 


    MQL4 programmer

  9. #8
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    1,813
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,034
    Thanked 777 Times in 676 Posts

    Default Заметка 7 - обрезание символов в цене инструмента

    Подходит только к цене. Если что то другое, то надо вместо Digits писать число которое ровно количеству символов дроби.

    PHP Code:
    extern ushort Characters_delete 1;

    ///////////////////////////////////////////
    string data=DoubleToString(Bid,Digits); 
    string resoult=StringSubstr(data,0,StringLen(data)-Characters_delete); 
    MQL4 programmer

  10. #9
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    1,813
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,034
    Thanked 777 Times in 676 Posts

    Default Заметка 8 - разделение строки на элементы

    Например нам нужно разделить строку с лотами и поместить их в буфер.

    PHP Code:
    extern string Lots="0.01,0.03,0.06";

    ...
    string str_spl[];
    int size=StringSplit(Lots,StringGetCharacter(",",0),str_spl);
    ArrayResize(lots_buf,size);

    for(
    int i=0;i<size;i++)
    {
    lots_buf[i]=double(str_spl[i]);

    MQL4 programmer

  11. #10
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    1,813
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,034
    Thanked 777 Times in 676 Posts

    Default Заметка 9 - работа кода на первом тике нового бара

    Первый вариант.
    Весь код дальше этого будет выполнятся на первом тике нового бара.
    PHP Code:
    int prev_bars=Bars;
    ...
    if(
    prev_bars==Bars) return;
    prev_bars=Bars

    Второй вариант.
    Код в квадратных скобках будет выполнятся на первом тике нового бара.
    PHP Code:
    int prev_bars=Bars;
    ...
    if(
    prev_bars!=Bars)
    {
    prev_bars=Bars;

    MQL4 programmer

  12. The Following User Says Thank You to eevviill For This Useful Post:

    Prezident (10-18-2017)

  13. #11
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    1,813
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,034
    Thanked 777 Times in 676 Posts

    Default Заметка 10 - MultiTimeFrame

    Для индикаторов.

    PHP Code:
    extern ENUM_TIMEFRAMES TF PERIOD_CURRENT;
    double rsi_buf[];
    ...
    for(
    int i=0;i<Bars-(IndicatorCounted()-1-TF/Period());i++)
    {
    if(
    i>Bars-20) break;
    rsi_buf[i]=iRSI(Symbol(),TF,14,iBarShift(Symbol(),TF,Time[i]));

    Last edited by eevviill; 04-07-2018 at 09:44 AM.
    MQL4 programmer

  14. The Following User Says Thank You to eevviill For This Useful Post:

    Prezident (10-18-2017)

  15. #12
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    1,813
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,034
    Thanked 777 Times in 676 Posts

    Default Заметка 11 - запуск советника на ренко(офлайн) графике

    Ренко это офлайн график.
    Новый тик не произведёт к тому что код советника начнёт выполнятся.
    Нужно использовать такую конструкцию.
    PHP Code:
    double prev_bid;
    //////////////////////////////////////////////////////////////
     
    int OnInit()
     {  
     
    //offline chart
     
    if(ChartGetInteger(0,CHART_IS_OFFLINE))
     {
     
    prev_bid=Close[0];

     while(!
    IsStopped())
     {
     
    RefreshRates();
      if(
    prev_bid!=Close[0]) {prev_bid=Close[0];OnTick();}
     
    Sleep(100);
     }
     }
    //end offline chart



     
    return(INIT_SUCCEEDED);

    Last edited by eevviill; 02-10-2018 at 12:07 PM.
    MQL4 programmer

  16. #13
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    1,813
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,034
    Thanked 777 Times in 676 Posts

    Default Заметка12 - не вызов не нужного индикатора

    Есть случаи когда индикатор вызывается даже когда он не нужен. При этом получается что используются ресурсы компъютера впустую. Как этого избежать?

    Вот пример функции, которая возвращает сигнал на покупку,продажу или бездействие(1,-1,0). Сигналом является направление свечи на прошлом баре. +фильтр сточастик.

    PHP Code:
    extern bool use_stoch_filter=false

    PHP Code:
    int Sig_f()
    {
    double Stoch=iStochastic(Symbol(),0,Kperiod,Dperiod,slowing,method,price_field,0,1);

    //buy
    if(Close[1]>Open[1] && (!use_stoch_filter || Stoch<stoch_overSold)) return(1);
    //sell
    if(Close[1]<Open[1] && (!use_stoch_filter || Stoch>stoch_overBought)) return(-1);

    return(
    0);

    Как видим сточастик вызывается в любом случае. Нужен он или нет.


    А вот пример с правильным использованием сточастика.
    PHP Code:
    int Sig_f()
    {
    double Stoch=EMPTY_VALUE;
    if(
    use_stoch_filterStoch=iStochastic(Symbol(),0,Kperiod,Dperiod,slowing,method,price_field,0,1);

    //buy
    if(Close[1]>Open[1] && (!use_stoch_filter || Stoch<stoch_overSold)) return(1);
    //sell
    if(Close[1]<Open[1] && (!use_stoch_filter || Stoch>stoch_overBought)) return(-1);


    return(
    0);


    P.S.
    В данном случае можно записать условие на бай например так
    PHP Code:
    if(Close[1]>Open[1] && (Stoch==EMPTY_VALUE || Stoch<stoch_overSold)) return(1); 
    Last edited by eevviill; 03-17-2018 at 09:20 PM.
    MQL4 programmer

  17. #14
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    1,813
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,034
    Thanked 777 Times in 676 Posts

    Default Заметка13 - округление лота

    Есть ситуации когда нужно округлить лот.
    Например в мартингейле в случаи умножения лота.
    Для этого нам нужно узнать до какого разряда десятичного дроба нужно округлять.

    PHP Code:
    extern double Lot 0.1;
    extern double Lot_multip 1.61;
    int nor_lot=0;
    ...
    double lot_step=MarketInfo(Symbol(),MODE_LOTSTEP);
    int multip=1;
    for(
    int i=0;i<EMPTY_VALUE;i++)
    {
    if(
    lot_step*multip>=1) {nor_lot=i;break;} 
    multip*=10;
    }
    ...
    double Lot_new=NormalizeDouble(Lot*Lot_multip,nor_lot
    Last edited by eevviill; 03-20-2018 at 11:56 AM.
    MQL4 programmer

  18. #15
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    1,813
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,034
    Thanked 777 Times in 676 Posts

    Default Заметка14 - торговля(подсчёт) по указанным парам

    PHP Code:
    extern string pairs_="EURGBP,EURAUD,EURNZD,EURUSD,EURCAD";
    extern string symbols_prefix "";
    extern string symbols_postfix "";
    string pairs[];

    ...
     
    int OnInit()
     {  
    string str_spl[];
    int size2=StringSplit(pairs_,StringGetCharacter(",",0),str_spl);
    ArrayResize(pairs,size2);
    for(
    int i=0;i<size2;i++)
    {
    pairs[i]=symbols_prefix+str_spl[i]+symbols_postfix;
    }

     return(
    INIT_SUCCEEDED);
     }

    ...
     
    void OnTick()
     {
      for(
    int i=ArraySize(pairs)-1;i>=0;i--)
      {
      
    Alert(pairs[i]);
      }
     } 
    Last edited by eevviill; 03-26-2018 at 07:44 AM.
    MQL4 programmer

Page 1 of 3 123 LastLast

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Disclaimer
2005-2017 © FXOpen All rights reserved. Various trademarks held by their respective owners.

Risk Warning:: Trading on the Forex market involves substantial risks, including complete possible loss of funds and other losses and is not suitable for all members. Clients should make an independent judgment as to whether trading is appropriate for them in the light of their financial condition, investment experience, risk tolerance and other factors.

FXOpen Markets Limited, a company duly registered in Nevis under the company No. C 42235. FXOpen is a member of The Financial Commission.

FXOpen AU Pty Ltd., a company authorised and regulated by the Australian Securities & Investments Commission (ASIC). AFSL 412871ABN 61 143 678 719.

FXOpen Ltd. a company registered in England and Wales under company number 07273392 and is authorised and regulated by the Financial Conduct Authority (previously, the Financial Services Authority) under FCA firm reference number 579202.

FXOpen does not provide services for United States residents.

Join us