Форум трейдеров » Торговые роботы, советники, индикаторы » MQL4: полезные функции
+ Подписаться
Страница 1 из 2 12 ПоследняяПоследняя
  1. 23
    Комментарии
    1
    Темы
    28
    Репутация Pro
     
    Новичок

    1 Медалей

    MQL4: полезные функции

    Настраиваемые фракталы :)

    Индикатор на основе настраиваемых фракталов.
    mql код
    //+------------------------------------------------------------------+
    //| iFR.mq4 |
    //| Copyright 2012, artamir |
    //| forexmd.ucoz.org |
    //| elt.ucoz.org |
    //| eltth.ucoz.org |
    //| artamir@yandex.ru |
    //+------------------------------------------------------------------+
    #property copyright "Copyright 2012, artamir"
    #property link "forexmd.ucoz.org"

    #property indicator_chart_window
    #property indicator_buffers 2
    #property indicator_color1 LightGreen
    #property indicator_color2 Red

    #include <iFractal.mqh>

    //--- input parameters
    extern int Left=2;
    extern int Right=2;
    //--- buffers
    double U[];
    double D[];
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function |
    //+------------------------------------------------------------------+
    int init()
    {
    //---- indicators
    SetIndexStyle(0,DRAW_ARROW);
    SetIndexArrow(0,217);
    SetIndexBuffer(0,U);
    SetIndexEmptyValue(0,0.0);
    SetIndexStyle(1,DRAW_ARROW);
    SetIndexArrow(1,218);
    SetIndexBuffer(1,D);
    SetIndexEmptyValue(1,0.0);
    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| Custom indicator deinitialization function |
    //+------------------------------------------------------------------+
    int deinit()
    {
    //----

    //----
    return(0);
    }
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function |
    //+------------------------------------------------------------------+
    int start()
    {
    iFR.Set(Left, Right);

    int ic=IndicatorCounted();
    //----
    int lim = Bars - ic + Right;

    for(int i = lim; i >= 0; i--){
    if(iFR.IsUp(i)){
    U[i] = iHigh(NULL, 0, i)+5*Point;
    }

    if(iFR.IsDw(i)){
    D[i] = iLow(NULL, 0, i)-5*Point;
    }
    }
    //----
    return(0);
    }
    //+------------------------------------------------------------------+

    Содержимое архива нужно распаковать след. образом:
    1. Содержимое папки include нужно распаковать в папку include папки терминала.
    2. Содержимое папки indicators нужно распаковать в папку indicators папки терминала.
    3. Если терминал был запущен, то его нужно перезапустить.
    Вложения Вложения
    • Тип файла: rar iFR.rar (1.6 Кб, Просмотров: 35)
    Недоступно! Pro 0
    Поделиться
    Просмотров: 10,797
  2. 23
    Комментарии
    1
    Темы
    28
    Репутация Pro
     
    Новичок

    1 Медалей
    Функции для работы с индикатором Parabolic SAR.

    MQL-Код:
    iSAR.Set()
    Устанавливает глобальные настройки параболика

    MQL-Код:
    iSAR.getPrice(int shift = 0)
    Возвращает цену индикатора на текущем инструменте и текущем таймфрейме на баре с индексом shift

    MQL-Код:
    double iSAR.Step = 0.02; // GLOBAL
    double iSAR.Maximum = 0.2; //GLOBAL

    void iSAR.Set(double step=0.02, double max=0.2){
    /*
    >Ver : 0.0.1
    >Date : 2012.11.21
    >Hist :
    @0.0.1@2012.11.21@artamir []
    >Author : Morochin <artamir> Artiom
    >Desc :
    */

    iSAR.Step = step;
    iSAR.Maximum = max;
    }

    double iSAR.getPrice(int shift = 0){
    /*
    >Ver : 0.0.1
    >Date : 2012.11.21
    >Hist :
    @0.0.1@2012.11.21@artamir []
    >Author : Morochin <artamir> Artiom
    >Desc : return price of sar
    */

    double sar = iSAR(NULL, 0, iSAR.Step, iSAR.Maximum, shift);

    return(sar);
    }
  3. 23
    Комментарии
    1
    Темы
    28
    Репутация Pro
     
    Новичок

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

    MQL-Код:
    // необходимые переменные
    extern int SL = 50;
    int i,j;
    double sl, spread, highestBid, lowestAsk, buySL, sellSL;
    datetime oot, time, lastbartime=0;

    // то, что необходимо включить в функцию init()
    int init(){
    spread=Point*MarketInfo(Symbol(),MODE_SPREAD);
    spread=NormalizeDouble(spread,Digits);
    sl=NormalizeDouble(SL*Point,Digits);
    return(0);}

    // собствено функция трейлинг стопа
    void TrailingSL(){
    if(lastbartime<iTime(Symbol(),1,0)){
    lastbartime=iTime(Symbol(),1,0);
    for(i=0;i<OrdersTotal();i++){
    if(OrderSelect(i,SELECT_BY_POS)){

    //*********************
    if(OrderType()==OP_BUY){
    highestBid=0;
    j=0;
    time=iTime(Symbol(),1,j);
    oot=OrderOpenTime();
    while(time>=oot){
    highestBid=MathMax(highestBid,iHigh(Symbol(),1,j)) ;
    j++;
    time=iTime(Symbol(),1,j);}
    if(highestBid<OrderOpenPrice()){
    highestBid=OrderOpenPrice();}
    Comment("Highest Bid = ",highestBid);
    buySL=NormalizeDouble(highestBid-sl,Digits);
    if(OrderStopLoss()<buySL){
    OrderModify(OrderTicket(),OrderOpenPrice(),buySL,O rderTakeProfit(),0);}
    continue;}
    //**********************
    if(OrderType()==OP_SELL){
    lowestAsk=1000000;
    j=0;
    time=iTime(Symbol(),1,j);
    oot=OrderOpenTime();
    while(time>=oot){
    lowestAsk=MathMin(lowestAsk,iLow(Symbol(),1,j)+spr ead);
    j++;
    time=iTime(Symbol(),1,j);}
    if(lowestAsk>OrderOpenPrice()){
    lowestAsk=OrderOpenPrice();}
    Comment("Lowest Ask = ",lowestAsk);
    sellSL=NormalizeDouble(lowestAsk+sl,Digits);
    if(OrderStopLoss()>sellSL){
    OrderModify(OrderTicket(),OrderOpenPrice(),sellSL, OrderTakeProfit(),0);} } }} } }
  4. 23
    Комментарии
    1
    Темы
    28
    Репутация Pro
     
    Новичок

    1 Медалей
    Эта функция возвращает флаг закрытия последней позиции по стопу. Флаг поднят - True - сработал StopLoss. Флаг опущен - False - позиция была закрыта по другой причине. Более точный отбор учитываемых позиций задаётся внешними параметрами:
    sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. NULL означает текущий инструмент.
    op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
    mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.

    //| Версия : 19.05.2008 |
    //| Описание : Возвращает флаг закрытия последней позиции по стопу. |
    //+----------------------------------------------------------------------------+
    //| Параметры: |
    //| sy - наименование инструмента ("" - любой символ, |
    //| NULL - текущий символ) |
    //| op - операция (-1 - любая позиция) |
    //| mn - MagicNumber (-1 - любой магик) |
    //+----------------------------------------------------------------------------+
    bool isCloseLastPosByStop(string sy="", int op=-1, int mn=-1) {
    datetime t;
    double ocp, osl;
    int dg, i, j=-1, k=OrdersHistoryTotal();

    if (sy=="0") sy=Symbol();
    for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
    if (OrderSymbol()==sy || sy=="") {
    if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
    if (op<0 || OrderType()==op) {
    if (mn<0 || OrderMagicNumber()==mn) {
    if (t<OrderCloseTime()) {
    t=OrderCloseTime();
    j=i;
    }
    }
    }
    }
    }
    }
    }
    if (OrderSelect(j, SELECT_BY_POS, MODE_HISTORY)) {
    dg=MarketInfo(sy, MODE_DIGITS);
    if (dg==0) if (StringFind(OrderSymbol(), "JPY")<0) dg=4; else dg=2;
    ocp=NormalizeDouble(OrderClosePrice(), dg);
    osl=NormalizeDouble(OrderStopLoss(), dg);
    if (ocp==osl) return(True);
    }
    return(False);
    }
  5. 23
    Комментарии
    1
    Темы
    28
    Репутация Pro
     
    Новичок

    1 Медалей
    Функция PriceOpenLastPos()
    Эта функция возвращает цену открытия последней открытой позиций. Отбор учитываемых позиций задаётся внешними параметрами:
    sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. Значение NULL означает текущий инструмент.
    op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
    mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.
    //+----------------------------------------------------------------------------+
    //|
    //| Версия : 19.02.2008 |
    //| Описание : Возвращает цену открытия последней открытой позиций. |
    //+----------------------------------------------------------------------------+
    //| Параметры: |
    //| sy - наименование инструмента ("" - любой символ, |
    //| NULL - текущий символ) |
    //| op - операция (-1 - любая позиция) |
    //| mn - MagicNumber (-1 - любой магик) |
    //+----------------------------------------------------------------------------+
    double PriceOpenLastPos(string sy="", int op=-1, int mn=-1) {
    datetime t;
    double r=0;
    int i, k=OrdersTotal();

    if (sy=="0") sy=Symbol();
    for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
    if (OrderSymbol()==sy || sy=="") {
    if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
    if (op<0 || OrderType()==op) {
    if (mn<0 || OrderMagicNumber()==mn) {
    if (t<OrderOpenTime()) {
    t=OrderOpenTime();
    r=OrderOpenPrice();
    }
    }
    }
    }
    }
    }
    }
    return(r);
    }
  6. 23
    Комментарии
    1
    Темы
    28
    Репутация Pro
     
    Новичок

    1 Медалей
    Эта функция возвращает цену открытия последней закрытой позиций. Отбор учитываемых позиций задаётся внешними параметрами:
    sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. Значение NULL означает текущий инструмент.
    op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
    mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.

    //+----------------------------------------------------------------------------+
    //| Параметры: |
    //| sy - наименование инструмента ("" - любой символ, |
    //| NULL - текущий символ) |
    //| op - операция (-1 - любая позиция) |
    //| mn - MagicNumber (-1 - любой магик) |
    //+----------------------------------------------------------------------------+
    double PriceOpenLastClosePos(string sy="", int op=-1, int mn=-1) {
    datetime t;
    double r=0;
    int i, k=OrdersHistoryTotal();

    if (sy=="0") sy=Symbol();
    for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
    if (OrderSymbol()==sy || sy=="") {
    if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
    if (op<0 || OrderType()==op) {
    if (mn<0 || OrderMagicNumber()==mn) {
    if (t<OrderCloseTime()) {
    t=OrderCloseTime();
    r=OrderOpenPrice();
    }
    }
    }
    }
    }
    }
    }
    return(r);
    }
  7. 23
    Комментарии
    1
    Темы
    28
    Репутация Pro
     
    Новичок

    1 Медалей
    Эта функция возвращает цену открытия последней закрытой позиций. Отбор учитываемых позиций задаётся внешними параметрами:
    sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. Значение NULL означает текущий инструмент.
    op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
    mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.

    //+----------------------------------------------------------------------------+
    //| Параметры: |
    //| sy - наименование инструмента ("" - любой символ, |
    //| NULL - текущий символ) |
    //| op - операция (-1 - любая позиция) |
    //| mn - MagicNumber (-1 - любой магик) |
    //+----------------------------------------------------------------------------+
    double PriceOpenLastClosePos(string sy="", int op=-1, int mn=-1) {
    datetime t;
    double r=0;
    int i, k=OrdersHistoryTotal();

    if (sy=="0") sy=Symbol();
    for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
    if (OrderSymbol()==sy || sy=="") {
    if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
    if (op<0 || OrderType()==op) {
    if (mn<0 || OrderMagicNumber()==mn) {
    if (t<OrderCloseTime()) {
    t=OrderCloseTime();
    r=OrderOpenPrice();
    }
    }
    }
    }
    }
    }
    }
    return(r);
    }
  8. 23
    Комментарии
    1
    Темы
    28
    Репутация Pro
     
    Новичок

    1 Медалей


    Эта функция возвращает цену открытия ближайшей позиций. В качестве критерия "близости" позиции выступает минимум расстояния в пунктах между ценой открытия позиции и текущей рыночной ценой. Отбор учитываемых позиций задаётся внешними параметрами:
    sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. Значение NULL означает текущий инструмент.
    op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
    mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.

    //+----------------------------------------------------------------------------+
    //| Параметры: |
    //| sy - наименование инструмента ("" - любой символ, |
    //| NULL - текущий символ) |
    //| op - операция (-1 - любая позиция) |
    //| mn - MagicNumber (-1 - любой магик) |
    //+----------------------------------------------------------------------------+
    double PriceOpenNearPos(string sy="", int op=-1, int mn=-1) {
    double mi, oop=0, p;
    int i, k=OrdersTotal(), pp=0;

    if (sy=="0") sy=Symbol();
    for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
    if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
    if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
    if (mn<0 || OrderMagicNumber()==mn) {
    if (OrderType()==OP_BUY) mi=MarketInfo(OrderSymbol(), MODE_ASK);
    if (OrderType()==OP_SELL) mi=MarketInfo(OrderSymbol(), MODE_BID);
    p=MarketInfo(OrderSymbol(), MODE_POINT);
    if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
    if (pp==0 || pp>MathAbs(OrderOpenPrice()-mi)/p) {
    pp=MathAbs(OrderOpenPrice()-mi)/p;
    oop=OrderOpenPrice();
    }
    }
    }
    }
    }
    }
    return(oop);
    }
  9. 23
    Комментарии
    1
    Темы
    28
    Репутация Pro
     
    Новичок

    1 Медалей
    Эта функция возвращает тикет ближайшей к рынку позиции. В качестве критерия "близости" позиции выступает минимум расстояния в пунктах между ценой открытия позиции и текущей рыночной ценой. Отбор учитываемых позиций задаётся внешними параметрами:
    sy - Наименование рыночного инструмента. Если задать этот параметр, то функция учтёт позиции только заданного инструмента. Значение по умолчанию - "" означает любой рыночный инструмент. Значение NULL означает текущий инструмент.
    op - Торговая операция, тип позиции. Допустимые значения: OP_BUY, OP_SELL или -1. Значение по умолчанию -1 означает любую позицию.
    mn - Идентификатор позиции, MagicNumber. Значение по умолчанию -1 означает любой идентификатор.

    //| Версия : 05.06.2008 |
    //| Описание : Возвращает тикет ближайшей к рынку позиции по цене открытия. |
    //+----------------------------------------------------------------------------+
    //| Параметры: |
    //| sy - наименование инструмента ("" - любой символ, |
    //| NULL - текущий символ) |
    //| op - операция (-1 - любая позиция) |
    //| mn - MagicNumber (-1 - любой магик) |
    //+----------------------------------------------------------------------------+
    int TicketNearPos(string sy="", int op=-1, int mn=-1) {
    double mi, p;
    int i, k=OrdersTotal(), pp=0, ti=0;

    if (sy=="0") sy=Symbol();
    for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
    if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
    if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
    if (mn<0 || OrderMagicNumber()==mn) {
    if (OrderType()==OP_BUY) mi=MarketInfo(OrderSymbol(), MODE_ASK);
    if (OrderType()==OP_SELL) mi=MarketInfo(OrderSymbol(), MODE_BID);
    p=MarketInfo(OrderSymbol(), MODE_POINT);
    if (p==0) if (StringFind(sy, "JPY")<0) p=0.0001; else p=0.01;
    if (pp==0 || pp>MathAbs(OrderOpenPrice()-mi)/p) {
    pp=MathAbs(OrderOpenPrice()-mi)/p;
    ti=OrderTicket();
    }
    }
    }
    }
    }
    }
    return(ti);
    }
  10. 1,009
    Комментарии
    8
    Темы
    769
    Репутация Pro
    Аватар для PAZITIV  
    В начале пути

    3 Медалей
    Что то мне сдаётся, что это копипаст функций Дениса Кима.

    _http://forum.mql4.com/ru/38949
    Смысл с таких постов. Для этого есть гугл. Или всё на форум перенесём?!

Вверх
РегистрацияX

чтобы писать, читать, комментировать