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 3 of 4 FirstFirst 1234 LastLast
Results 31 to 45 of 60

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

  1. #31
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,350
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,380
    Thanked 1,289 Times in 1,163 Posts

    Default Заметка30 - Тикет первого частично закрытого ордера

    PHP Code:
    int cou;

    ///////////////////////////////////////////
    void OnStart()
    {
    ticket_search_start_f();

    }

    ///////////////////////////////////////////
    void ticket_search_start_f()
    {
    int tick_start;
    int tick_curr;
    int str_start;


     for (
    int i=OrdersTotal()-1i>=0i--)
     {
       if(!
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
       
       
    str_start=StringFind(OrderComment(),"from #");
       if(
    str_start!=-1
       {
       
    tick_curr=OrderTicket();
       
    tick_start=ticke_search_f(int(StringSubstr(OrderComment(),str_start+6)));
       
    Alert("Ticket:"+string(tick_curr)," Start ticket:"+string(tick_start)," Parts:",cou);
       }  
     }
    }

    ////////////////////////////////////////////////////////////////////////
    int ticke_search_f(int ticke)
    {
    //no order
    if(!OrderSelect(ticke,SELECT_BY_TICKET)) return(-1);

    //parts
    int tick=ticke;
    int tick_fin=ticke;
    cou=1;
    while(
    tick!=-1)
    {
    tick=comme_search_f(tick); 
    if(
    tick!=-1
    {
    tick_fin=tick;
    cou++;
    }
    }

    //return ticket of first closed part
    return(tick_fin);
    }  


    ////////////////////////////////////////////////////////
    int comme_search_f(int tick_s)
    {
    int tick=-1;


     for (
    int i=OrdersHistoryTotal()-1i>=0i--)
     {
       if(!
    OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
       
       if(
    StringFind(OrderComment(),string(tick_s))!=-&& StringFind(OrderComment(),"from")==-1
       {
       
    tick=OrderTicket();
       break;
       }
             
     }

    return(
    tick);

    Last edited by eevviill; 05-28-2018 at 06:57 AM.
    MQL4 programmer

    Volli Correla lines

  2. #32
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,350
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,380
    Thanked 1,289 Times in 1,163 Posts

    Default Заметка31 - Код(действие) после закрытия ордера

    Часто бывают ситуации что проверять условия нам нужно только после закрытия ордера.

    PHP Code:
    //global
    extern int MagicNumber=4;
    int prev_hist_orders=EMPTY_VALUE;

    //on tick
    int hist_ords=CountClosedPositions_f();
    if(
    hist_ords!=prev_hist_orders)
    {
    if(
    hist_ords>prev_hist_ordersAlert("OrderClosed!");//or closing orders
    prev_hist_orders=CountClosedPositions_f();
    }

    //funcs
    int CountClosedPositions_f()
    {
    int cou=0;

     for (
    int i=OrdersHistoryTotal()-1i>=0i--)
     {
       if(!
    OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) continue;
       if(
    OrderMagicNumber()!=MagicNumber || OrderSymbol()!=Symbol()) continue;
       
    cou++;
     }

    return(
    cou);

    Last edited by eevviill; 07-12-2018 at 06:03 PM.
    MQL4 programmer

    Volli Correla lines

  3. #33
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,350
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,380
    Thanked 1,289 Times in 1,163 Posts

    Default Заметка32 - Условный оператор ?:

    Очень полезная штука если у нас может быть только 2 варианта. Мы ставим условие, после чего ? потом идут варианты если условие истинна да:нет
    Например при открытии ордера в функцию открытия нужно передать цену открытия. Но цена для BUY и SELL ордеров разные. Без этого условного оператора нам бы пришлось создавать перменную, присваивать ей значение, проверять в какую сторону сигнал.
    С этим оператором всё проще.


    PHP Code:
    void open_f(int sig)
    {
    OrderSend(...,sig>0?Ask:Bid,...);

    MQL4 programmer

    Volli Correla lines

  4. #34
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,350
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,380
    Thanked 1,289 Times in 1,163 Posts

    Default Заметка33 - Обнуление буферов индикатора при подгрузке истории

    Когда на графике происходит подгрузка истории(обычно после включения терминала), то есть необходимость обнулить буфера индикатора и пересчитать всё заново.
    Например есть индикатор рисующий 2 стрелки.

    PHP Code:
      int bars=Bars;
      
    int ind_counted=IndicatorCounted();

      if(
    bars-ind_counted>1
      {
      
    ArrayInitialize(up_arr,EMPTY_VALUE);
      
    ArrayInitialize(down_arr,EMPTY_VALUE);
      
    ind_counted=0;
      }
      

     for(
    int i=bars-(ind_counted-2);i>=0;i--)
     {
     if(
    i>Bars-20i=Bars-20;

     if(
    i==0)
     {
     
    up_arr[i]=EMPTY_VALUE;
     
    down_arr[i]=EMPTY_VALUE;
     }

    ......
     } 
    Last edited by eevviill; 07-10-2018 at 07:20 AM.
    MQL4 programmer

    Volli Correla lines

  5. #35
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,350
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,380
    Thanked 1,289 Times in 1,163 Posts

    Default Заметка34 - Угол трендовой линии

    Узнать угол нарисованной трендовой линии по углу впринцыпе не сложно.
    А вот если нужно узнать угол не трендового отрезка по углу, то здесь сложнее.
    В примере будет угол фибоначчи. По тем же параметрам создадим трендовою линию с углом и возьмём с неё данные.

    PHP Code:
    ObjectCreate(0,"fibo"OBJ_FIBO0,Time[2], Close[2], Time[5], Close[5]);
    ObjectCreate(0,"fibo"+"TLA",OBJ_TRENDBYANGLE,0,Time[2], Close[2], Time[5], Close[5]);
    double angle=NormalizeDouble(ObjectGetDouble(0,"fibo"+"TLA",OBJPROP_ANGLE),0); if(Close[5]>Close[2]) angle=360-angle
    MQL4 programmer

    Volli Correla lines

  6. #36
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,350
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,380
    Thanked 1,289 Times in 1,163 Posts

    Default Заметка35 - Кумулятивная сумма определённого елемента буфера

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

    Например есть число 100 которое будет умножино 3 раза на 2
    100*2*2*2=800
    НО! Функция будет сумировать суму всех шагов.
    100+200+600+1800=2700


    PHP Code:
    double summ=mart_step_chek_f(3,2.0,100.0);



    /////////////////////////////////////////////////////////////////////
    double mart_step_chek_f(int step,double martini_multip,double start)

    double all[];ArrayResize(all,step+1);ArrayInitialize(all,0);all[0]=start;

    for(
    int i=1;i<step+1;i++)
    {
    all[i]=summ_f(i,all)*martini_multip;
    }

    return(
    all[step]);
    }

    //////////////////////////////////////////////////////////////
    double summ_f(int now,double &all[])
    {
    double summ=0;

    for(
    int i=0;i<now;i++)
    {
    summ+=all[i];
    }

    return(
    summ);

    Last edited by eevviill; 07-07-2019 at 08:48 AM.
    MQL4 programmer

    Volli Correla lines

  7. #37
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,350
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,380
    Thanked 1,289 Times in 1,163 Posts

    Default Заметка36 - Включение/отключение кнопки Автоторговля

    PHP Code:
    #include <WinUser32.mqh>


    ///////////////////////////////////////////
    void OnStart()

    if(
    IsExpertEnabled()) Dis_Able_autoTrading(); //OFF
    else 
    if(!
    IsExpertEnabled()) Dis_Able_autoTrading(); //ON
    }


    //////////////////////////////////////////////
    void Dis_Able_autoTrading()
    {
       
    keybd_event(17,0,0,0);
       
    keybd_event(69,0,0,0);
       
    keybd_event(69,0,2,0);
       
    keybd_event(17,0,2,0);

    Last edited by eevviill; 07-15-2018 at 11:20 AM.
    MQL4 programmer

    Volli Correla lines

  8. #38
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,350
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,380
    Thanked 1,289 Times in 1,163 Posts

    Default Заметка37 - Сглаживание

    Если нужно в индикаторе сгладить линию.
    Нужно создавать ещё один дублирующий буфер.

    PHP Code:
    #property indicator_buffers 2
    #property strict

    extern bool use_smoothing false;
    extern bool smoothing_tma false;
    extern int smoothing_period 60;

    double buf_smooth[];
    double buf_norm[];
    /////////////////
    int OnInit() 
    {
     
    SetIndexBuffer(0buf_smooth);
     
    SetIndexStyle(0DRAW_LINESTYLE_SOLID1); 
       
    SetIndexBuffer(1buf_norm);
       
    SetIndexStyle(1DRAW_NONE);
    return(
    INIT_SUCCEEDED);
    }

    ////////////////////////////////////////////////////////////////////////
    int OnCalculate(const int rates_total,const int prev_calculated,const datetime &time[],const double &open[],const double &high[],
                    const 
    double &low[],const double &close[],const long &tick_volume[],const long &volume[],const int &spread[])
      {
      
    //norm
      
    for(int i=Bars-IndicatorCounted();i>=0;i--)
      {
      
    buf_norm[i]=iRSI(Symbol(),PERIOD_CURRENT,14,PRICE_CLOSE,i);
      
    buf_smooth[i]=buf_norm[i];
      }
      
    //smooth
        
    if(use_smoothing)
        {
        
    double summ1;  
          for(
    int i=Bars-IndicatorCounted();i>=0;i--)
         {
           if(
    i>Bars-20-smoothing_periodi=Bars-20-smoothing_period;
          if(
    buf_norm[i+smoothing_period]==EMPTY_VALUE) continue;
          
    summ1=0;
            for(
    y=i;y<i+smoothing_period;y++)
            {
             
    summ1+=smoothing_tma?buf_smooth[y]:buf_norm[y];
            }
           
    buf_smooth[i]=summ1/smoothing_period;
          }
         }

      } 
    Last edited by eevviill; 09-13-2018 at 07:57 AM.
    MQL4 programmer

    Volli Correla lines

  9. #39
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,350
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,380
    Thanked 1,289 Times in 1,163 Posts

    Default Заметка38 - глобальные переменные при инициализации

    Есть ситуации при которых программа инициализируется не только при прикреплении её к графику. Например смена настроек. После этого всё что в OnInit() будет снова проинициализировано.
    А что с глобальными настройками? Они остаются без изменений. Это надо учитывать. Так, если нужно запомнить время старта программы, то нужно значение записывать в глобальную переменную.
    PHP Code:
    datetime start_time=TimeCurrent(); 
    Потому как если записать так и сменить настройки, то значение переменной перезапишется при смене настроек.
    PHP Code:
    datetime start_time;
    void OnInit()
    {
    start_time=TimeCurrent();

    Ситуация имеет и обратные последствия.
    Если нужно чтобы переменная обновлялась при инициализации, то нужно присваивать ей значение в OnInit()
    Last edited by eevviill; 08-31-2018 at 09:32 AM.
    MQL4 programmer

    Volli Correla lines

  10. #40
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,350
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,380
    Thanked 1,289 Times in 1,163 Posts

    Default Заметка39 - список настроек ex4

    Есть случаи когда нужен список входных параметров программы, например написание советника по индикатору, но индикатор в формате ex4 и имеет много настроек. Можно в советник вручную писать список, а можно проделать такое.
    Прикрепляем нужный индикатор к графику, заходим в свойства и нажимаем Сохранить. После этого открываем файл с настройками с помощью Блокнота.
    Мы увидим список всех параметров с значениями. Нужно скопировать его, добавить тип данных и в конце каждой строки ;
    Если переменная типа string, то кавычки вокруг текста.
    PHP Code:
    ma_set=///////////////////Main settings///////////////////
    TF=10080
    chek_bar
    =0
    periods_chek
    =
    PHP Code:
    string ma_set="///////////////////Main settings///////////////////";
    int TF=10080;
    int chek_bar=0;
    int periods_chek=8
    Last edited by eevviill; 08-31-2018 at 09:42 AM.
    MQL4 programmer

    Volli Correla lines

  11. #41
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,350
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,380
    Thanked 1,289 Times in 1,163 Posts

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

    Есть случаи когда нужно поменять название внешней переменной(отображается в настройках). Можно заменить все названия переменной в коде. Но если её использовано в коде скажем 200 раз?
    Здесь прийдёт в помощь такая конструкция. Например хочем имя внешней переменной сменить на param_set

    PHP Code:
    #property strict
    extern int proret 4//param_set 
    Last edited by eevviill; 09-25-2018 at 10:53 AM.
    MQL4 programmer

    Volli Correla lines

  12. #42
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,350
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,380
    Thanked 1,289 Times in 1,163 Posts

    Default Заметка 41 - расчёт веса($) пункта

    Изменение цены валютной пары на один пункт(5) 0.01 лотом=1цент.
    Это не всегда так, точнее только тогда когда 2-ая часть валютной пары=валюта депозита. Например EURUSD и счёт в USD. Во всех остальных случаях это будет не 1 цент. Можно узнать вес одного пункта с помощью функции MarketInfo(Symbol(),MODE_TICKVALUE)
    Но если нам нужно например расчитать размер StopLoss(340) с учётом веса пункта, то нужно знать также вес пункта валютной пары,вторая часть которой совпадает с валютой счёта.
    Например валюта счёта USD.
    PHP Code:
    double val=MarketInfo("EURUSD",MODE_TICKVALUE);
    double mult=val+(val-MarketInfo(Symbol(),MODE_TICKVALUE));

    Alert(Symbol()," SL_"+string(340)+"=",DoubleToString(340*mult,0)); 
    или?
    PHP Code:
    Alert(Symbol()," SL_"+string(340)+"=",DoubleToString(340/MarketInfo(Symbol(),MODE_TICKVALUE),0)); 
    или?
    PHP Code:
    Alert(Symbol()," SL_"+string(340)+"=",DoubleToString(340*Bid/(StringFind(Symbol(),"JPY")==-1?1:100),0)); 
    Last edited by eevviill; 09-27-2018 at 07:44 PM.
    MQL4 programmer

    Volli Correla lines

  13. #43
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,350
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,380
    Thanked 1,289 Times in 1,163 Posts

    Default Заметка 42 - функция для ENUM_APPLIED_PRICE

    Есть случаи когда нужно использовать не только цену закрытия свечи.
    А цену открытия,хай,лоу,среднее значение свечи.

    PHP Code:
    extern ENUM_APPLIED_PRICE price_up_chek PRICE_HIGH;
    extern ENUM_APPLIED_PRICE price_down_chek PRICE_LOW;

    //////////////////////////////////////////////////////
    void OnStart()
      {
      
    int i=1;
    double price_up=price_f(Symbol(),PERIOD_CURRENT,i,price_up_chek);
    double price_down=price_f(Symbol(),PERIOD_CURRENT,i,price_down_chek);

      }

    //FUNC
    //////////////////////////////////////////////////////////////////////
    double price_f(string symb,int TF,int bar,ENUM_APPLIED_PRICE chek)
    {
    double price2=0.0;

    if(
    chek==PRICE_CLOSEprice2=iClose(symb,TF,bar);
    else
    if(
    chek==PRICE_OPENprice2=iOpen(symb,TF,bar);
    else
    if(
    chek==PRICE_HIGHprice2=iHigh(symb,TF,bar);
    else
    if(
    chek==PRICE_LOWprice2=iLow(symb,TF,bar);
    else
    if(
    chek==PRICE_MEDIANprice2=(iHigh(symb,TF,bar)+iLow(symb,TF,bar))/2;
    else
    if(
    chek==PRICE_TYPICALprice2=(iHigh(symb,TF,bar)+iLow(symb,TF,bar)+iClose(symb,TF,bar))/3;
    else
    if(
    chek==PRICE_WEIGHTEDprice2=(iHigh(symb,TF,bar)+iLow(symb,TF,bar)+iClose(symb,TF,bar)+iClose(symb,TF,bar))/4;

    return(
    price2);

    Last edited by eevviill; 12-17-2018 at 09:32 AM.
    MQL4 programmer

    Volli Correla lines

  14. #44
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,350
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,380
    Thanked 1,289 Times in 1,163 Posts

    Default Заметка 43 - Расширенный список ТаймФреймов

    В общем можно пользоватся штатным
    ENUM_TIMEFRAMES
    но есть случаи когда МТФ(MultiTameFrame) индикатор вызывает для расчётов сам себя с изменённым параметром ТФ который имеет тип string
    В этом случаи можно использовать такой ENUM

    PHP Code:
    enum TimeFrame_e
    {
    PERIOD_CURRENT_=0,//PERIOD_CURRENT
    PERIOD_M1_=1,//PERIOD_M1
    PERIOD_M5_=5,//PERIOD_M5
    PERIOD_M15_=15,//PERIOD_M15
    PERIOD_M30_=30,//PERIOD_M30
    PERIOD_H1_=60,//PERIOD_H1
    PERIOD_H4_=240,//PERIOD_H4
    PERIOD_D1_=1440,//PERIOD_D1
    PERIOD_W1_=10080,//PERIOD_W1
    PERIOD_MN1_=43200,//PERIOD_MN1
    _r,//
    _c,//
    }; 
    MQL4 programmer

    Volli Correla lines

  15. #45
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,350
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,380
    Thanked 1,289 Times in 1,163 Posts

    Default Заметка 44 - отображение цены на линии Фибоначчи возле уровня

    PHP Code:
    ObjectSetString(0,ObjName,OBJPROP_LEVELTEXT,1,"0.23"+" (%$)"); 
    Номер графика,идентификатор текста уровня,номер уровня,текст
    %$ это сочетание символов указывает на отображение цены уровня фибо.
    MQL4 programmer

    Volli Correla lines

Page 3 of 4 FirstFirst 1234 LastLast

Bookmarks

Bookmarks

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-2019 © 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