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 4 of 4 FirstFirst 1234
Results 46 to 56 of 56

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

  1. #46
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,278
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,375
    Thanked 1,269 Times in 1,143 Posts

    Default Заметка 45 - трендовые линии по 2-ум последним фракталам

    Рисовать можна не только по цене на основном графике.
    В примере будет использован буфер в который предварительно записаны данные индикатора RSI.


    PHP Code:
      extern string emp4 "///////////Frac lines settings/////////////";
      
    extern bool draw_Frac_lines true;
      
    extern color Frac_color_up clrLime;
      
    extern color Frac_color_down clrMagenta;
      
    extern ENUM_LINE_STYLE Frac_style STYLE_SOLID;
      
    extern int Frac_width 1;
      
    extern bool Frac_ray true;
      
    extern int Frac_bef_bars 2;
      
    extern int Frac_aft_bars 2;

    ...
     
    //frac lines
      
    if(draw_Frac_lines)
      {
      
    datetime time1,time2;
      
    double price1,price2;
      
      
    frac_data_f(time1,time2,price1,price2,1);
      
    draw_Frac_f(time2,time1,price2,price1,1);
      
    frac_data_f(time1,time2,price1,price2,-1);
      
    draw_Frac_f(time2,time1,price2,price1,-1);
      }
      
      
      
        
      ...    
    //////////////////////////////////////////////////////////
    void draw_Frac_f(datetime tim1,datetime tim2,double prac1,double prac2,int way)
    {
    string name=identif+"Frli"+string(way);

    color colo=way==1?Frac_color_up:Frac_color_down


    if(
    ObjectFind(name)==-1
    {
       
    ObjectCreate(0,nameOBJ_TREND,WindowFind(ind_name),tim1,prac1,tim2,prac2);
       
    ObjectSetInteger(0,nameOBJPROP_COLORcolo);
       
    ObjectSetInteger(0,nameOBJPROP_STYLEFrac_style);
       
    ObjectSetInteger(0,nameOBJPROP_WIDTHFrac_width);
       
    ObjectSetInteger(0,name,OBJPROP_RAY,Frac_ray);
       
    ObjectSetInteger(0,name,OBJPROP_BACK,false); 
       
    ObjectSetInteger(0,name,OBJPROP_SELECTABLE,false); 
       
    ObjectSetInteger(0,name,OBJPROP_SELECTED,false); 
       
    ObjectSetInteger(0,name,OBJPROP_HIDDEN,true); 
       
    ObjectSetInteger(0,name,OBJPROP_ZORDER,false);
    }
    else
    {
    ObjectSetInteger(0,nameOBJPROP_TIME1,tim1);
    ObjectSetDouble(0,nameOBJPROP_PRICE1,prac1);
    ObjectSetInteger(0,nameOBJPROP_TIME2,tim2);
    ObjectSetDouble(0,nameOBJPROP_PRICE2,prac2);
    }

    }

    ////////////////////////////////////////////////////////////
    void frac_data_f(datetime &time1,datetime &time2,double &price1,double &price2,int way)
    {
    int cou=0;

    double dat=way==1?0:EMPTY_VALUE;

    for(
    int i=1+Frac_aft_bars;i<Bars-20;i++)
    {
    dat=way==1?0:EMPTY_VALUE;
    for(
    int x=i-Frac_aft_bars;x<=i+Frac_bef_bars;x++)
    {
    if(
    x==i) continue;
    if((
    way==&& RSIBuffer[x]>dat) || (way==-&& RSIBuffer[x]<dat)) dat=RSIBuffer[x];
    }
    if((
    way==&& RSIBuffer[i]>dat) || (way==-&& RSIBuffer[i]<dat)) 
    {
    cou++;
    if(
    cou==1) {time1=Time[i];price1=RSIBuffer[i];}
    if(
    cou==2) {time2=Time[i];price2=RSIBuffer[i];}
    if(
    cou>=2) break;
    }
    }

       

    Last edited by eevviill; 11-27-2018 at 09:15 AM.
    MQL4 programmer

    Volli Correla lines

  2. #47
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,278
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,375
    Thanked 1,269 Times in 1,143 Posts

    Default Заметка 46 - минимальное ограничение лота

    В советнике можно открывать ордер с фиксированным лотом, а можно в % от депозита или частью от депозита. Но! После уменьшения депозита лот будет уменьшатся. Данный код будет делать так чтобы новый лот был не меньше предыдущего.

    PHP Code:
    extern bool Lot_only_bigger true;
     
    double prev_lot;
    ...
    double Lotss=Lot_perc_f();
    if(
    Lot_only_bigger
    {
    if(
    Lotss<prev_lot)Lotss=prev_lot
    else 
    prev_lot=Lotss;

    Last edited by eevviill; 01-01-2019 at 12:39 PM.
    MQL4 programmer

    Volli Correla lines

  3. #48
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,278
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,375
    Thanked 1,269 Times in 1,143 Posts

    Default Заметка 47 - сортировка массива (с индексами)

    Иногда нужно отсортировать массив-буфер с данными. НО! После сортировки мы не будем знать какое значение принадлежит какому индексу.
    Например у нас есть 4 цены валютных пар. И нужно узнать какая пара имеет наибольшую цену. Функция сортировки сортирует только по первому измерению массива. Туда мы запишем цены, а во второе измерение индексы.

    PHP Code:
    double buf[4][4]; 

    buf[0][0]=MarketInfo("EURUSD",MODE_BID);
    buf[1][0]=MarketInfo("AUDUSD",MODE_BID);
    buf[2][0]=MarketInfo("GBPUSD",MODE_BID);
    buf[3][0]=MarketInfo("NZDUSD",MODE_BID);
    buf[0][1]=0;
    buf[1][1]=1;
    buf[2][1]=2;
    buf[3][1]=3;
    ArraySort(buf);

    Alert("PriceMax:",buf[3][0]," IndexMax",buf[3][1]); 

    или более практично
    PHP Code:
    double buf[4][4];  
    string names[4]={"EURUSD","AUDUSD","GBPUSD","NZDUSD"};

    buf[0][0]=MarketInfo(names[0],MODE_BID); 
    buf[1][0]=MarketInfo(names[1],MODE_BID); 
    buf[2][0]=MarketInfo(names[2],MODE_BID); 
    buf[3][0]=MarketInfo(names[3],MODE_BID); 
    buf[0][1]=0;
    buf[1][1]=1;
    buf[2][1]=2;
    buf[3][1]=3
    ArraySort(buf); 

    Alert("PriceMax:",buf[3][0]," IndexMax:",names[int(buf[3][1])]); 
    Last edited by eevviill; 02-01-2019 at 09:56 AM.
    MQL4 programmer

    Volli Correla lines

  4. #49
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,278
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,375
    Thanked 1,269 Times in 1,143 Posts

    Default Заметка 48 - Сумма цифр цены котировки

    Функция суммирует(справа налево) цифры в цене котировки или дате. Можно выбрать количество цифр.

    PHP Code:
    extern int Digits_plus 7;
    ...
    Alert(summ_f(Bid));
    ...
    /////////////////////////////////////////////////////////////////////
    int summ_f(double price)
    {
    StringReplace(price,".","0");
                           
    string cha;
    int cou=0;
    int pric=0

    for(
    int i=StringLen(price)-1;i>=0;i--)
    {
    cha=StringSubstr(price,i,1);
    {
    pric+=int(StringToInteger(cha));cou++;}
    if(
    cou>=Digits_plus) break;
    }


    return(
    pric);

    Last edited by eevviill; 05-17-2019 at 01:34 PM.
    MQL4 programmer

    Volli Correla lines

  5. #50
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,278
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,375
    Thanked 1,269 Times in 1,143 Posts

    Default Заметка 49 - Стопы по последнему ордеру

    PHP Code:
     extern int Magic 52;
     
    extern bool use_auto_tp true;
     
    extern bool use_auto_tp_normal true;
     
    extern bool use_auto_sl false;
     
    extern bool use_auto_sl_normal false;
    ...
    int ticket_op=OrderSend(...);
     if(
    ticket_op>-1)
     {
     if(
    use_auto_tptp_prev_f();
     if(
    use_auto_slsl_prev_f();
     }
    ...
    ////////////////////////////////////////////////////////////////////
    void tp_prev_f()
    {
     
    int type;
     
    double prev_tp_B=-1;
     
    bool first_B=false;
     
    double prev_tp_S=-1;
     
    bool first_S=false;

       for (
    int i=OrdersTotal()-1i>=0i--)
      {
       if(!
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
       if(
    OrderMagicNumber()!=Magic || OrderSymbol()!=Symbol()) continue;
       
         
    type=OrderType();
       
       if(!
    first_B && type==OP_BUY)
       {
       
    first_B=true;
       
    prev_tp_B=OrderTakeProfit();
       continue;
       }
       if(!
    first_S && type==OP_SELL)
       {
       
    first_S=true;
       
    prev_tp_S=OrderTakeProfit();
       continue;
       }
      
      
      
          if (
    type==OP_BUY
          {
          if ((
    use_auto_tp_normal && OrderTakeProfit()>prev_tp_B) || (!use_auto_tp_normal && (OrderTakeProfit()<prev_tp_B-1*Point || OrderTakeProfit()>prev_tp_B+1*Point))) 
          {
          if(
    OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),prev_tp_B,0,clrNONE)) continue;       
          }
          }
          else
          if (
    type==OP_SELL
          {
          if ((
    use_auto_tp_normal && OrderTakeProfit()<prev_tp_S) || (!use_auto_tp_normal && (OrderTakeProfit()<prev_tp_S-1*Point || OrderTakeProfit()>prev_tp_S+1*Point))) 
          {
          if(
    OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),prev_tp_S,0,clrNONE)) continue;
          }  
          }   

      }



    }

    ////////////////////////////////////////////////////////////////////
    void sl_prev_f()
    {
     
    int type;
     
    double prev_sl_B=-1;
     
    bool first_B=false;
     
    double prev_sl_S=-1;
     
    bool first_S=false;

       for (
    int i=OrdersTotal()-1i>=0i--)
      {
       if(!
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
       if(
    OrderMagicNumber()!=Magic || OrderSymbol()!=Symbol()) continue;
       
         
    type=OrderType();
       
       if(!
    first_B && type==OP_BUY)
       {
       
    first_B=true;
       
    prev_sl_B=OrderStopLoss();
       continue;
       }
       if(!
    first_S && type==OP_SELL)
       {
       
    first_S=true;
       
    prev_sl_S=OrderStopLoss();
       continue;
       }
      
      
      
          if (
    type==OP_BUY
          {
          if ((
    use_auto_sl_normal && OrderStopLoss()<prev_sl_B) || (!use_auto_sl_normal && (OrderStopLoss()<prev_sl_B-1*Point || OrderStopLoss()>prev_sl_B+1*Point))) 
          {
          if(
    OrderModify(OrderTicket(),OrderOpenPrice(),prev_sl_B,OrderTakeProfit(),0,clrNONE)) continue;       
          }
          }
          else
          if (
    type==OP_SELL
          {
          if ((
    use_auto_sl_normal && OrderStopLoss()>prev_sl_S) || (!use_auto_sl_normal && (OrderStopLoss()<prev_sl_S-1*Point || OrderStopLoss()>prev_sl_S+1*Point))) 
          {
          if(
    OrderModify(OrderTicket(),OrderOpenPrice(),prev_sl_S,OrderTakeProfit(),0,clrNONE)) continue;
          }  
          }   

      }




    MQL4 programmer

    Volli Correla lines

  6. #51
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,278
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,375
    Thanked 1,269 Times in 1,143 Posts

    Default Заметка 50 - Лот от пропорции баланса с шагом

    Итак.
    Код будет расчитывать лот в зависимости от указанной части от баланса счёта.

    PHP Code:
    input double Lot_per_Xusd_balance 0.01;
     
    input double Xusd_balance 100.0;
     
    input double Xusd_exponential 2;
    ...
    int lim=MathFloor(balance/Xusd_balance); 
     
    int koef=0;
     for(
    int i=1;i<EMPTY_VALUE && Xusd_exponential>1;i++)
     {
      if(
    MathPow(Xusd_exponential,i)>lim)
      {
      
    koef=i-1;
      break;
      }
     }
      
    double mult=MathPow(Xusd_exponential,koef); if(Xusd_exponential<=1mult=lim;
      
    double Lotss=Lot_per_Xusd_balance*mult;  if(Lotss<Lot_per_Xusd_balanceLotss=Lot_per_Xusd_balance;
      
    Alert(Lotss); 
    MQL4 programmer

    Volli Correla lines

  7. #52
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,278
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,375
    Thanked 1,269 Times in 1,143 Posts

    Default Заметка 51 - Цена безубытка более 1-го ордера

    PHP Code:
    double lots;
    double price;
    ...
    bz_f();
    if(
    price!=0Alert("Price:",NormailizeDouble(price,Digits)," way:",lots>0?"1":"-1");
    ...
    /////////////////////////////////////////////////////////////////////////////////// 
     
    void bz_f()
     {
       
    lots=0;
       
    price=0;
       
    double sum=0;

       for (
    int i=OrdersTotal()-1i>=0i--)
       {
          if (!
    OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) continue;
          if (
    OrderSymbol()!=Symbol()) continue;
          
          if (
    OrderType()==OP_BUY)
          {
             
    lots=lots+OrderLots();
             
    sum+=OrderLots()*OrderOpenPrice();
          }
     
          if (
    OrderType()==OP_SELL)
          {
             
    lots=lots-OrderLots();
             
    sum-=OrderLots()*OrderOpenPrice();
          }
       }
       
       if (
    lots!=0price=sum/lots;
     } 
    Last edited by eevviill; 07-13-2019 at 09:25 AM.
    MQL4 programmer

    Volli Correla lines

  8. #53
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,278
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,375
    Thanked 1,269 Times in 1,143 Posts

    Default Заметка 52 - Перекраска букв

    Эта функция чисто для красоты.
    Буквы будут менять цвет, а когда буква дойдёт до конца слова, то целое слово поменяет цвет.

    code
    Last edited by eevviill; 08-28-2019 at 12:18 PM.
    MQL4 programmer

    Volli Correla lines

  9. #54
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,278
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,375
    Thanked 1,269 Times in 1,143 Posts

    Default Заметка 53 - ТФ в текст

    Функция преобразует таймфрейм в численом виде в формат текста.


    PHP Code:
    Alert(TF_str_f(PERIOD_H1));
    ...
    string TF_str_f(int tf)
    {
    string tf_ret="";
    int tf_=tf; if(tf==0tf_=Period();

    switch(
    tf_)
    {
    case 
    PERIOD_M1:tf_ret="M1";
    break;
    case 
    PERIOD_M5:tf_ret="M5";
    break;
    case 
    PERIOD_M15:tf_ret="M15";
    break;
    case 
    PERIOD_M30:tf_ret="M30";
    break;
    case 
    PERIOD_H1:tf_ret="H1";
    break;
    case 
    PERIOD_H4:tf_ret="H4";
    break;
    case 
    PERIOD_D1:tf_ret="D1";
    break;
    case 
    PERIOD_W1:tf_ret="W1";
    break;
    case 
    PERIOD_MN1:tf_ret="MN1";
    break;

    default:
    tf_ret="?";
    }


    return(
    tf_ret);

    MQL4 programmer

    Volli Correla lines

  10. #55
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,278
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,375
    Thanked 1,269 Times in 1,143 Posts

    Default Заметка 54 - ТФ текстовый в число

    Функция преобразует Таймфрейм в виде текста в числовой вид.


    PHP Code:
    Alert(String_to_TF("H1"));
    ...
    int String_to_TF(string tf)
    {
    int TF=0;

    if(
    tf=="M1"TF=PERIOD_M1;
    if(
    tf=="M5"TF=PERIOD_M5;
    if(
    tf=="M15"TF=PERIOD_M15;
    if(
    tf=="M30"TF=PERIOD_M30;
    if(
    tf=="H1"TF=PERIOD_H1;
    if(
    tf=="H4"TF=PERIOD_H4;
    if(
    tf=="D1"TF=PERIOD_D1;
    if(
    tf=="W1"TF=PERIOD_W1;
    if(
    tf=="MN1"TF=PERIOD_MN1;


    return(
    TF);

    MQL4 programmer

    Volli Correla lines

  11. #56
    Moderator eevviill's Avatar
    Join Date
    Jul 2015
    Location
    Бандерівці
    Posts
    3,278
    FXO Shares
    0
    FXO Bonus
    0.000
    Thanks
    1,375
    Thanked 1,269 Times in 1,143 Posts

    Default Заметка 55 - array out of range

    Чаще всего можно встретить такую ошибку при расчётах данных в индикаторах. Такое случатеся когда программа пробует взять данные с ячейки буфера котрого нету. Например на графике 245 баров, а мы вызвем Close[310]
    Чтобы так не случалось нужн просто ставить ограничитель. (можно и вдругую сторону и направление тоже).

    PHP Code:
    for(int i=0;i<1000;i++)
    {
    if(
    i<0i=0;
    if(
    i>Bars-1) break;
    ...
    }

    for(
    int i=1000;i>=0;i--)
    {
    if(
    i<0) break;
    if(
    i>Bars-1i=Bars-1;
    ...

    MQL4 programmer

    Volli Correla lines

Page 4 of 4 FirstFirst 1234

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