Logo

Вход

Войти с помощью соц. сетей
X
 
  • Фильтр
  • Время
  • Показать
Очистить всё
новые сообщения
  • #1 Свернуть

    Кто дружит с математикой? :)

    Форумчане, выручайте! Что-то я совсем школьную программу забыл! Подскажите, пожалуйста, как привести показания индикатора в рамки заданного диапазона? Пример такой, есть индикатор который в подвале строит линию по разнице предыдущего значения МАшки и текущего! На разных инструментах значение МАшек разное, например по золоту 1300, а по евре 1,1 и при расчёте на золоте показания расчётной линии варьируются между десятками, а по евре и до единицы не дотягивают!
    Хотелось бы что б эти самые показания на разных инструментах колебались в пределах от -1 до +1, как вариант!
    MQL код:
    //+------------------------------------------------------------------+
    //| Elder Impulse System (force mod).mq4 |
    //| Glovluk Viktor (good-food) |
    //| https://www.mql5.com/ru/users/good-food |
    //+------------------------------------------------------------------+
    #property copyright "Glovluk Viktor (good-food)"
    #property link "https://www.mql5.com/ru/users/good-food"
    #property version "1.00"
    #property strict
    #property indicator_separate_window
    #property indicator_buffers 5
    /*#property indicator_color1 clrBlue
    #property indicator_color2 clrRed
    #property indicator_color3 clrYellow
    #property indicator_width1 2
    #property indicator_width2 2
    #property indicator_width3 2
    #property indicator_minimum 0.0
    #property indicator_maximum 1.0
    #property indicator_height 20
    #property indicator_style1 STYLE_SOLID
    #property indicator_style2 STYLE_SOLID
    #property indicator_style3 STYLE_SOLID*/
    //---
    ENUM_TIMEFRAMES Timeframe = PERIOD_CURRENT;
    //---
    double Buff_Up[], Buff_Down[], Buff_Netral[], Buff_MA[], Buff_MACD[];
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function |
    //+------------------------------------------------------------------+
    int OnInit()
    {
    //--- indicator buffers mapping
    SetIndexBuffer(0, Buff_Up);
    SetIndexEmptyValue(0, EMPTY_VALUE);
    SetIndexLabel(0, "Up impuls");
    SetIndexStyle(0, DRAW_HISTOGRAM, STYLE_SOLID, 2, clrBlue);
    //---
    SetIndexBuffer(1, Buff_Down);
    SetIndexEmptyValue(1, EMPTY_VALUE);
    SetIndexLabel(1, "Down impuls");
    SetIndexStyle(1, DRAW_HISTOGRAM, STYLE_SOLID, 2, clrRed);
    //---
    SetIndexBuffer(2, Buff_Netral);
    SetIndexEmptyValue(2, EMPTY_VALUE);
    SetIndexLabel(2, "Netral impuls");
    SetIndexStyle(2, DRAW_ARROW, STYLE_SOLID, 2, clrGreen);
    //---
    SetIndexBuffer(3, Buff_MA);
    SetIndexEmptyValue(3, 0.0);
    SetIndexLabel(3, "MA impuls");
    SetIndexStyle(3, DRAW_LINE, STYLE_SOLID, 1, clrGreen);
    //---
    SetIndexBuffer(4, Buff_MACD);
    SetIndexEmptyValue(4, 0.0);
    SetIndexLabel(4, "MACD impuls");
    SetIndexStyle(4, DRAW_LINE, STYLE_SOLID, 1, clrTomato);
    //---
    return(INIT_SUCCEEDED);
    }
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function |
    //+------------------------------------------------------------------+
    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 index = MainLoopIndex(rates_total, prev_calculated, Timeframe);
    for (int x = (prev_calculated == 0)? rates_total-10: rates_total - prev_calculated; x >= 0; x--){
    //---
    if (IndiMA(x) > IndiMA(x+1) && IndiMACD(x) > IndiMACD(x+1)){
    Buff_Up[x] = 2;
    Buff_Netral[x] = EMPTY_VALUE;
    Buff_Down[x] = EMPTY_VALUE;}
    else if (IndiMA(x) < IndiMA(x+1) && IndiMACD(x) < IndiMACD(x+1)){
    Buff_Up[x] = EMPTY_VALUE;
    Buff_Netral[x] = EMPTY_VALUE;
    Buff_Down[x] = -2;}
    else{
    Buff_Up[x] = EMPTY_VALUE;
    Buff_Netral[x] = 0.0;
    Buff_Down[x] = EMPTY_VALUE;}
    //---
    Buff_MA[x] = 0.0 + (IndiMA(x) - IndiMA(x+1));
    Buff_MACD[x] = 0.0 + (IndiMACD(x) - IndiMACD(x+1));}
    //--- return value of prev_calculated for next call
    return(rates_total);
    }
    //+------------------------------------------------------------------+
    //+------------------------------------------------------------------+
    //| МАшка |
    //+------------------------------------------------------------------+
    double IndiMA (const int index)
    {
    return NormalizeDouble(iMA(_Symbol, Timeframe, 13, 0, MODE_EMA, PRICE_CLOSE, index), _Digits);
    }
    //+------------------------------------------------------------------+
    //| MACD |
    //+------------------------------------------------------------------+
    double IndiMACD (const int index)
    {
    return NormalizeDouble(iMACD(_Symbol, Timeframe, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, index), _Digits);
    }
    Последний раз редактировалось Viktor1987; 14.04.2019, 10:21. Причина: накосячил в коде
    "Правила рынка" (с)
  • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
  • #2 Свернуть

    Сообщение от Viktor1987 Посмотреть сообщение
    Форумчане, выручайте!
    Как вариант вот. А вообще поиск рулит...
     

    Комментарий

    • #3 Свернуть

      Сообщение от ir0407 Посмотреть сообщение
      А вообще поиск рулит...
      вот не хороший ты человек! Не дал на чужом горбу в рай въехать!
       
      "Правила рынка" (с)

      Комментарий

      • <a href="https://www.instaforex.org/ru/?x=ruforum">InstaForex</a>
      • #4 Свернуть

        Сообщение от Viktor1987 Посмотреть сообщение
        вот не хороший ты человек! Не дал на чужом горбу в рай въехать!
        То ли еще будет...
         

        Комментарий

        Сейчас онлайн

        working...
        X