FXOpen Broker

10+ years’
experience in FX

VISIT WEBSITE

Trading Accounts

ECN, STP,
Micro, Crypto

START TRADING

Free Demo

Practice Forex trading
risk free

OPEN DEMO ACCOUNT

PAMM Technology

Become a Master
or a Follower

JOIN PAMM SERVICE
Page 2 of 2 FirstFirst 12
Results 16 to 26 of 26

Thread: MQL4 уроки от eevviill (2)

  1. #16
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    4,223
    Thanks
    1,508
    Thanked 1,568 Times in 1,436 Posts

    Default Урок 15 - выбор наибольшего лота среди открытых ордеров

    PHP Code:
    int magic 0;

    double lot;
    double max_lot 0;



    void OnStart()
      {
      
    for(
    int i=OrdersTotal()-1i>=0i--)
     {
     
    OrderSelect(i,SELECT_BY_POS);
     {
     if(
    OrderMagicNumber()==magic)
     {
     
    lot=OrderLots();
     
     
    1)if(lot>max_lotmax_lot=lot;
     }
     }
     }  

     
    Alert(max_lot);

      } 
    ПОЯСНЕНИЕ.
    1)Здесь мы указали что при каждом переборе ордеров, если лот выбраного ордера больше чем максимальный лот, то максмиальному лоту присваиваем значения лота выбраного ордера.
    MQL4 programmer

    Volli Correla lines

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

    Prezident (07-23-2019)

  3. #17
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    4,223
    Thanks
    1,508
    Thanked 1,568 Times in 1,436 Posts

    Default Урок 16 - расчёт лота от депозита

    PHP Code:
    extern double Lot 0.3;
    extern bool use_per_of_depo true;
    extern double per_of_depo 2.3;
     
     
    void OnStart()
    {
    1)if(use_per_of_depoLot=Lot_of_percent_of_deposit(per_of_depo);
    ...

    }
     
     
    double Lot_of_percent_of_deposit(double Risk)
    {
     
    2)double Free_margin AccountFreeMargin();
     
    3)double One_Lot_cost MarketInfo(Symbol(),MODE_MARGINREQUIRED);
     
    4)double Step_lot MarketInfo(Symbol(),MODE_LOTSTEP);
     
    5)double Lot_per MathFloor(Free_margin*Risk/100/One_Lot_cost/Step_lot)*Step_lot;
     
    6)return(Lot_per);

    пояснение
    1)Если мы используем лот от депозита, то переменной Lot будет присвоенно значение функции по вычеслению размера лота по проценту от депозита.
    2)Расчёт свободных средств на депозите.
    3)Расчёт стоимости одного лота.
    4)Шаг лота.
    5)Проводим расчёт величины лота по проценту от депозита.
    6)Возвращаем расчитанное значение.
    MQL4 programmer

    Volli Correla lines

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

    Prezident (07-23-2019)

  5. #18
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    4,223
    Thanks
    1,508
    Thanked 1,568 Times in 1,436 Posts

    Default урок 17 - подсчёт ордеров

    PHP Code:
    int buy,sell,sell_stop,buy_stop;
    ...

    void CountOpenPositions()
    {
    buy=0;
    sell=0;
    buy_stop=0;
    sell_stop=0;


    1)for (int i=OrdersTotal()-1i>=0i--)
     {
       
    2)OrderSelect(i,SELECT_BY_POS);
       {
       
    3)if(OrderMagicNumber()==magic)
       {        
       
    4)if(OrderType()==OP_BUY)      buy++;
       if(
    OrderType()==OP_SELL)     sell++; 
       if(
    OrderType()==OP_BUYSTOP)      buy_stop++;
       if(
    OrderType()==OP_SELLSTOP)     sell_stop++; 
       }              
       }
     }

    }
    5
    Пояснение
    1)Перебор ордеров.
    2)Выбор ордеров по позиции в терминале.
    3)Проверка ордера на соответствие с междиком.
    4)Если выбраный ордер бай, то к переменной buy добавляем 1.
    5)После прописки CountOpenPositions(); (в функции старт), переменные buy,sell,sell_stop,buy_stop будут хранить количество ордеров.
    MQL4 programmer

    Volli Correla lines

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

    Prezident (07-23-2019)

  7. #19
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    4,223
    Thanks
    1,508
    Thanked 1,568 Times in 1,436 Posts

    Default Урок 18 - подсчёт прибыли в пунктах

    PHP Code:
    1)int Profit_f()
    {
    2)double prof;
    3)for(int i=OrdersTotal()-1i>=0i--)
     {
     
    OrderSelect(i,SELECT_BY_POS);
     {
     if(
    OrderMagicNumber()==MagicNumber)
     {
    4)if (OrderType()==OP_BUY)  prof+=(Bid OrderOpenPrice())/Point;   
    5)if (OrderType()==OP_SELLprof+=(OrderOpenPrice()-Ask) /Point;
     }
     }
     }
     
     return(
    prof);

    Пояснение.
    1)Пишем пользовательскую функцию типа int(целые числа), так как пункты дробными быть не могут.
    2)Объявляем переменную в которую будем записывать количество пунктов.
    3)Перебераем все ордера и выбираем по нужному нам меджику.
    4)Если ордер бай то записываем в нашу переменную (цену-цену открытия ордера)/размер 1-го пункта
    5)Если ордер сел то записываем в нашу переменную (цену открытия ордера-цену)/размер 1-го пункта
    MQL4 programmer

    Volli Correla lines

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

    Prezident (07-23-2019)

  9. #20
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    4,223
    Thanks
    1,508
    Thanked 1,568 Times in 1,436 Posts

    Default Урок 19 - робота по времени

    PHP Code:
    extern string V_R "Время работы";
    extern int Start 6;
    extern int Stop 22;
    ...
     
    void OnStart()
    {
    1)if(Hour()<Start || Hour()>=Stop) return;
    ...


    Пояснение.
    1)Здесь мы указали что, если текущий час меньше определённого нами или больше определённого нами, то мы завершаем работу програмы.
    MQL4 programmer

    Volli Correla lines

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

    Prezident (07-23-2019)

  11. #21
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    4,223
    Thanks
    1,508
    Thanked 1,568 Times in 1,436 Posts

    Default Урок 20 - количество попыток открыть(модифицировать,зак рыть) ордер

    PHP Code:
    Open_MaxAttempts=4;
    ...
    void OnStart()
    {
    ...
    1)int ticket_op=0;
     
    2)for (int j_op 0ticket_op && j_op Open_MaxAttemptsj_op++)
     {
     
    3)while(IsTradeContextBusy()) Sleep(2000);
                                 
     if(
    условие на вход)
    4)ticket_op=OrderSend(Symbol(),OP_BUY,Lot,Ask,slippage,NormalizeDouble(SLbuy,Digits),NormalizeDouble(TPbuy,Digits),comment,magic,0,Green);
     }


    Пояснение.
    1)Объявляем переменную в которую при открытии ордера будет записан тикет.
    2)Будем пробовать открыть ордер(2-ое в цыкле) либо пока ордер не откроется(ticket_op=1), либо пока не истечёт количество попыток открыть ордер(j_op = Open_MaxAttempts);
    3)Советник дальше не будет работать, пока не освободится торговый поток.
    4)ticket_op
    Если ордер откроется, то в эту переменную запишем тикет ордера.
    MQL4 programmer

    Volli Correla lines

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

    Prezident (07-23-2019)

  13. #22
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    4,223
    Thanks
    1,508
    Thanked 1,568 Times in 1,436 Posts

    Default Урок 21 - индикатор(буферный)

    PHP Code:
    #property copyright "eevviill"
     #property version   "1.0"
     #property strict
     #property indicator_chart_window

     #property indicator_buffers 2
     #property indicator_color1 clrLightBlue
     #property indicator_color2 clrRed
     #property indicator_width1 1
     #property indicator_width2 1


     
    input string emp0 "///////////Main settings///////////////";
     
    input int Bars_To_Count 400;
     
     
    input string emp1 "///////////Arrows settings///////////////";
     
    input int arrow_indent 22;
     
    input int up_arrow_code 233;
     
    input int down_arrow_code 234;


     
    double up_arr[];
     
    double down_arr[];
     
    int prev_bars;



    /////////////////////////////////////////////////////////////////
     
    int OnInit()
      {
     
    SetIndexBuffer(0,up_arr);
     
    SetIndexStyle(0,DRAW_ARROW);
     
    SetIndexArrow(0,up_arrow_code);
     
    SetIndexLabel(0,"UP arrow");

     
    SetIndexBuffer(1,down_arr);
     
    SetIndexStyle(1,DRAW_ARROW);
     
    SetIndexArrow(1,down_arrow_code);
     
    SetIndexLabel(1,"DOWN arrow");



       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[])
      {
      
    int bars=Bars;
      
    int ind_counted=IndicatorCounted();

      
       
    //main
     
    for(int i=MathMin(bars-(ind_counted-2),Bars_To_Count);i>=0;i--)
     {
     if(
    i>Bars-20i=Bars-20;

     if(
    i==0)
     {
     
    up_arr[i]=EMPTY_VALUE;
     
    down_arr[i]=EMPTY_VALUE;
     }
     
     if(
    Close[i]>Close[i+1]) up_arr[i]=Low[i]-arrow_indent*Point//up arrow
     
    if(Close[i]<Close[i+1]) down_arr[i]=High[i]+arrow_indent*Point//down arrow
     
    }


       return(
    rates_total);
      } 

    Главные атрибуты буферного индикатора.
    #property indicator_buffers 2 - устанавливает количество буферов
    #property indicator_color1 clrLightBlue - устанавливает цвет буфера(стрелок). Можно так же устанавливать с помощью SetIndexStyle
    double up_arr[]; - сам буфер
    SetIndexBuffer(0,up_arr); - назначает номер буфера
    SetIndexStyle(0,DRAW_ARROW); - указываем что будет отображатся в буфере(стрелка,линия...).
    if(Close[i]>Close[i+1]) up_arr[i]=Low[i]-arrow_indent*Point; - заполнение буфера значением. Стрелка будет отображатся по этой цене.
    Last edited by eevviill; 07-23-2019 at 10:14 AM.
    MQL4 programmer

    Volli Correla lines

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

    Prezident (07-23-2019)

  15. #23
    Administration cool user Prezident's Avatar
    Join Date
    Feb 2011
    Posts
    6,225
    Thanks
    3,805
    Thanked 6,646 Times in 2,895 Posts

    Default

    https://forum.fxopen.ru.com/threads/...D1%82-eevviill

    А это не потерянная тема?

  16. #24
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    4,223
    Thanks
    1,508
    Thanked 1,568 Times in 1,436 Posts

    Default

    Quote Originally Posted by Prezident View Post
    https://forum.fxopen.ru.com/threads/...D1%82-eevviill

    А это не потерянная тема?
    Она не потерянная.
    Это уроки, а там заметки(интересные моменты).
    MQL4 programmer

    Volli Correla lines

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

    Prezident (07-23-2019)

  18. #25
    Market Maker kukul3's Avatar
    Join Date
    Feb 2012
    Posts
    1,453
    Thanks
    148
    Thanked 174 Times in 117 Posts

    Default

    PHP Code:
    // ошибка
       
    for(int c 0bool i 010i++, c++)
       {

       } 
    Нельзя объявить переменные разных типов в операторе for.
    Как решать эту проблему, чтобы по завершению цикла переменные удалялись?

    С помощью составного оператора {}
    PHP Code:
       {
       
    int c 0;
       
    bool i 0;
          for(; 
    10i++, c++)
          {

          }
       } 

  19. The Following 2 Users Say Thank You to kukul3 For This Useful Post:

    eevviill (06-08-2020), Prezident (09-14-2020)

  20. #26
    Market Maker kukul3's Avatar
    Join Date
    Feb 2012
    Posts
    1,453
    Thanks
    148
    Thanked 174 Times in 117 Posts

    Default проход многомерного массива по строкам быстрее в 3 раза, чем по столбцам

    Проход многомерного массива по строкам быстрее в 3 раза, чем по столбцам
    PHP Code:
       for(int i 01000; ++i)
             for(
    int ii 0ii 900; ++ii)
                
    [iii] = 9;
             
       for(
    int ii 0ii 900; ++ii// так в 3 раза быстрее
          
    for(int i 01000; ++i)
             
    [iii] = 9
    Это связано с работой памяти компьютера.

  21. The Following 2 Users Say Thank You to kukul3 For This Useful Post:

    eevviill (09-14-2020), Prezident (09-14-2020)

Page 2 of 2 FirstFirst 12

Tags for this Thread

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