+ Ответить в теме
Страница 2 из 8 ПерваяПервая 1 2 3 4 5 6 7 8 ПоследняяПоследняя
Показано с 11 по 20 из 80

Тема: Помощь в программировании.

  1. #11
    ClusterDelta.com Member
    Регистрация
    31.12.2011
    Сообщений
    406
    Сказал(а) спасибо
    173
    Поблагодарили 483 раз(а) в 228 сообщениях
    Цитата Сообщение от member_d Посмотреть сообщение
    Голову сломал. Помогите пожалуйста с кодом. Никак не получается получить индекс произвольного бара. Хотел через индекс обратиться к ценам бара. Может специалисты укажут другой путь. Заранее спасибо.
    Код:

    string myday="D"+"'"+Year()+"."+Month()+"."+(Day()-1)+" "+"21"+":"+"00"+"'";
    int mybar=iBarShift(NULL, 0, myday);
    Comment (mybar);
    return(0);

    Когда третьим параметром, непосредственно, подставляю D'2012.11.01 15:00' например, индекс бара выводится на экран. Если подставляю строку mayday выдает пятизначное число, не имеющее ничего общего с индексом бара.
    непойму зачем ты первую букву D пишешь в ней ошибка. и еще можешь сделать преобразование чисел в троку с помощью функции Doubletostr

    string myday=Year()+"."+Month()+"."+(Day()-1)+" "+"21"+":"+"00"+"'";
    int mybar=iBarShift(NULL, 0, myday);
    Comment (mybar);
    return(0);

  2. #12
    Пользователь
    Регистрация
    20.09.2012
    Сообщений
    14
    Сказал(а) спасибо
    13
    Поблагодарили 7 раз(а) в 6 сообщениях
    Пробовал я и так. Может руки кривые или мозги, сейчас вообще на работе и ничего не соображаю. Дело в том, что если функцию iBarShift задать так: iBarShift(NULL, 0, D'2012.11.27 15:00') то она вернет индекс 15-ти часового бара за 27-е число. Если же поставить просто дату, то возвращается пятизначное число, неизвестно что означающее. А может я чего-то не понимаю.

  3. #13
    ClusterDelta.com Team
    Регистрация
    27.10.2011
    Сообщений
    4,258
    Сказал(а) спасибо
    473
    Поблагодарили 2,158 раз(а) в 1,129 сообщениях
    Цитата Сообщение от member_d Посмотреть сообщение
    Пробовал я и так. Может руки кривые или мозги, сейчас вообще на работе и ничего не соображаю. Дело в том, что если функцию iBarShift задать так: iBarShift(NULL, 0, D'2012.11.27 15:00') то она вернет индекс 15-ти часового бара за 27-е число. Если же поставить просто дату, то возвращается пятизначное число, неизвестно что означающее. А может я чего-то не понимаю.
    а не пробовал через ArrayBSearch ?

    DateTime my_variable=D'2012.11.27 15:00';
    int s = ArrayBsearch(Time,my_variable);

  4. #14
    Пользователь
    Регистрация
    20.09.2012
    Сообщений
    14
    Сказал(а) спасибо
    13
    Поблагодарили 7 раз(а) в 6 сообщениях
    Спасибо, попробуем. Только я не могу задавать явно дату и время. Это была попытка получить дату и время через переменную относительно текущей даты. Почему-то не сработало. Видимо придется через открытие текущего дня определять индекс бара с open дня и потом уже дальше вглубь. Будем дальше пытать остатки мозгов. Я не силен в MQL4 и если кто-то сделает что-то подобное быстрее меня, буду рад. Для чего это? Собственно для того, что бы создать массив определенной размеренности, начиная с какого-то бара и получить из него цены для анализа.

  5. #15
    Пользователь
    Регистрация
    01.05.2012
    Адрес
    Краснодар
    Сообщений
    4
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Кто поможет чайнику!
    Хочу создать простенький индикатор на mql4. Прямой отрезок между двумя заданными точками на графике. Сам не смог разобраться как это сделать, по этому пишу сюда.

  6. #16
    ClusterDelta.com Team
    Регистрация
    27.10.2011
    Сообщений
    4,258
    Сказал(а) спасибо
    473
    Поблагодарили 2,158 раз(а) в 1,129 сообщениях
    ну вроде так:

    ObjectCreate(rec_name,OBJ_TREND,0,время1,цена1,вре мя2,цена2);
    ObjectSet(rec_name,OBJPROP_RAY, false);
    ObjectSet(rec_name,OBJPROP_COLOR,цвет);

  7. #17
    Пользователь
    Регистрация
    01.05.2012
    Адрес
    Краснодар
    Сообщений
    4
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Огромное спасибо. Еще вопрос, это в каком месте написать нужно, после int init() {, после int deinit() {, или после int start() { -?

  8. #18
    ClusterDelta.com Team
    Регистрация
    12.11.2011
    Сообщений
    4,074
    Сказал(а) спасибо
    628
    Поблагодарили 1,776 раз(а) в 1,249 сообщениях
    повторно
    ищу человека который согласиться значительно улучшить индикатор

    combo_bars_daily

    есть исходники

    для мт4 есть индикаторы

    combo_bars_daily_1.7.ex4

    combo_bars_daily_1.7.zip

    но над ними можно еще поработать
    улучшить
    очень сильно

    у нас вообще в инете столько полезных полусырых индюков валяется
    а если такие для нинзи сделать
    должно выйти еще лучше

    напишу подробное ТЗ


    кто будет браться пишите в личку
    Александр

    установка индикаторов видео https://www.youtube.com/channel/UCax...KqtnrtnrHnOccg

    Твиттер

    Telegram

    Facebook

  9. #19
    Участник Аватар для Fox.RM
    Регистрация
    24.04.2013
    Сообщений
    55
    Сказал(а) спасибо
    4
    Поблагодарили 40 раз(а) в 11 сообщениях
    Возможно у кого-нибудь есть индикатор дивергенций CumDelta для МТ4?
    Если нет может, кто подскажет как оптимизировать ЭТОТ:

    //+------------------------------------------------------------------+
    //| ClusterDelta_CumDelta_Div.mq4 |
    //+------------------------------------------------------------------+
    #property copyright ""
    #property link ""
    //----
    #property indicator_separate_window
    #property indicator_buffers 4
    #property indicator_color1 Blue
    #property indicator_color2 Green
    #property indicator_color3 Red
    #property indicator_width1 1
    #property indicator_width2 2
    #property indicator_width3 2

    //---- input parameters
    extern string separator3 = "*** Indicator Settings ***";
    extern bool drawDivergenceLines = true;
    extern bool displayAlert = false;
    //---- buffers
    double Momentum[];
    double bullishDivergence[];
    double bearishDivergence[];
    double MomDiv[];
    //----
    static datetime lastAlertTime;
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function |
    //+------------------------------------------------------------------+
    int init()
    {
    //---- indicators
    SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 0);
    SetIndexStyle(1, DRAW_ARROW, STYLE_SOLID, 0);
    SetIndexStyle(2, DRAW_ARROW, STYLE_SOLID, 0);
    SetIndexStyle(3, DRAW_NONE);
    //----
    SetIndexBuffer(0, Momentum);
    SetIndexBuffer(1, bullishDivergence);
    SetIndexBuffer(2, bearishDivergence);
    SetIndexBuffer(3, MomDiv);
    //----
    SetIndexArrow(1, 233);
    SetIndexArrow(2, 234);
    //----
    IndicatorDigits(Digits + 2);
    IndicatorShortName("ClusterDelta_Div");
    return(0);
    }
    //+------------------------------------------------------------------+
    //| Custom indicator deinitialization function |
    //+------------------------------------------------------------------+
    int deinit()
    {
    for(int i = ObjectsTotal() - 1; i >= 0; i--)
    {
    string label = ObjectName(i);
    if(StringSubstr(label, 0, 14) != "DivergenceLine")
    continue;
    ObjectDelete(label);
    }
    return(0);
    }
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function |
    //+------------------------------------------------------------------+
    int start()
    {
    int countedBars = IndicatorCounted();
    if(countedBars < 0)
    countedBars = 0;
    CalculateIndicator(countedBars);
    return(0);
    }
    //+------------------------------------------------------------------+
    //| |
    //+------------------------------------------------------------------+
    void CalculateIndicator(int countedBars)
    {
    for(int i = 300; i >= 0; i--)
    {
    CalculateMomDiv(i);
    CatchBullishDivergence(i + 2);
    CatchBearishDivergence(i + 2);
    }
    }
    //+------------------------------------------------------------------+
    //| |
    //+------------------------------------------------------------------+
    void CalculateMomDiv(int i)
    {
    Momentum[i] = iCustom(NULL, 0, "ClusterDelta_CumDelta", 0, i);
    MomDiv[i] = Momentum[i];
    }
    //+------------------------------------------------------------------+
    //| |
    //+------------------------------------------------------------------+
    void CatchBullishDivergence(int shift)
    {
    if(IsIndicatorTrough(shift) == false)
    return;
    int currentTrough = shift;
    int lastTrough = GetIndicatorLastTrough(shift);
    if(MomDiv[currentTrough] > MomDiv[lastTrough] && Low[currentTrough] < Low[lastTrough])
    {
    bullishDivergence[currentTrough] = MomDiv[currentTrough];
    if(drawDivergenceLines == true)
    {
    DrawPriceTrendLine(Time[currentTrough], Time[lastTrough], Low[currentTrough],
    Low[lastTrough], Green, STYLE_SOLID);
    DrawIndicatorTrendLine(Time[currentTrough], Time[lastTrough], MomDiv[currentTrough],
    MomDiv[lastTrough], Green, STYLE_SOLID);
    }
    if(displayAlert == true)
    DisplayAlert("Classical bullish divergence on: ", currentTrough);
    }
    if(MomDiv[currentTrough] < MomDiv[lastTrough] && Low[currentTrough] > Low[lastTrough])
    {
    bullishDivergence[currentTrough] = MomDiv[currentTrough];
    if(drawDivergenceLines == true)
    {
    DrawPriceTrendLine(Time[currentTrough], Time[lastTrough], Low[currentTrough],
    Low[lastTrough], Green, STYLE_DOT);
    DrawIndicatorTrendLine(Time[currentTrough], Time[lastTrough], MomDiv[currentTrough],
    MomDiv[lastTrough], Green, STYLE_DOT);
    }
    if(displayAlert == true)
    DisplayAlert("Reverse bullish divergence on: ", currentTrough);
    }
    }
    //+------------------------------------------------------------------+
    //| |
    //+------------------------------------------------------------------+
    void CatchBearishDivergence(int shift)
    {
    if(IsIndicatorPeak(shift) == false)
    return;
    int currentPeak = shift;
    int lastPeak = GetIndicatorLastPeak(shift);

    if(MomDiv[currentPeak] < MomDiv[lastPeak] && High[currentPeak] > High[lastPeak])
    {
    bearishDivergence[currentPeak] = MomDiv[currentPeak];
    if(drawDivergenceLines == true)
    {
    DrawPriceTrendLine(Time[currentPeak], Time[lastPeak], High[currentPeak],
    High[lastPeak], Red, STYLE_SOLID);
    DrawIndicatorTrendLine(Time[currentPeak], Time[lastPeak], MomDiv[currentPeak],
    MomDiv[lastPeak], Red, STYLE_SOLID);
    }
    if(displayAlert == true)
    DisplayAlert("Classical bearish divergence on: ", currentPeak);
    }
    if(MomDiv[currentPeak] > MomDiv[lastPeak] && High[currentPeak] < High[lastPeak])
    {
    bearishDivergence[currentPeak] = MomDiv[currentPeak];
    if(drawDivergenceLines == true)
    {
    DrawPriceTrendLine(Time[currentPeak], Time[lastPeak], High[currentPeak],
    High[lastPeak], Red, STYLE_DOT);
    DrawIndicatorTrendLine(Time[currentPeak], Time[lastPeak], MomDiv[currentPeak],
    MomDiv[lastPeak], Red, STYLE_DOT);
    }
    if(displayAlert == true)
    DisplayAlert("Reverse bearish divergence on: ", currentPeak);
    }
    }
    //+------------------------------------------------------------------+
    //| |
    //+------------------------------------------------------------------+
    bool IsIndicatorPeak(int shift)
    {
    if(MomDiv[shift] >= MomDiv[shift+1] && MomDiv[shift] > MomDiv[shift+2] &&
    MomDiv[shift] > MomDiv[shift-1])
    return(true);
    else
    return(false);
    }
    //+------------------------------------------------------------------+
    //| |
    //+------------------------------------------------------------------+
    bool IsIndicatorTrough(int shift)
    {
    if(MomDiv[shift] <= MomDiv[shift+1] && MomDiv[shift] < MomDiv[shift+2] &&
    MomDiv[shift] < MomDiv[shift-1])
    return(true);
    else
    return(false);
    }
    //+------------------------------------------------------------------+
    //| |
    //+------------------------------------------------------------------+
    int GetIndicatorLastPeak(int shift)
    {
    for(int i = shift + 5; i < Bars; i++)
    {
    if(Momentum[i] >= Momentum[i+1] && Momentum[i] >= Momentum[i+2] &&
    Momentum[i] >= Momentum[i-1] && Momentum[i] >= Momentum[i-2])
    {
    for(int j = i; j < Bars; j++)
    {
    if(MomDiv[j] >= MomDiv[j+1] && MomDiv[j] > MomDiv[j+2] &&
    MomDiv[j] >= MomDiv[j-1] && MomDiv[j] > Momentum[j-2])
    return(j);
    }
    }
    }
    return(-1); }
    //+------------------------------------------------------------------+
    //| |
    //+------------------------------------------------------------------+
    int GetIndicatorLastTrough(int shift)
    {
    for(int i = shift + 5; i < Bars; i++)
    {
    if(Momentum[i] <= Momentum[i+1] && Momentum[i] <= Momentum[i+2] &&
    Momentum[i] <= Momentum[i-1] && Momentum[i] <= Momentum[i-2])
    {
    for (int j = i; j < Bars; j++)
    {
    if(MomDiv[j] <= MomDiv[j+1] && MomDiv[j] < MomDiv[j+2] &&
    MomDiv[j] <= MomDiv[j-1] && MomDiv[j] < MomDiv[j-2])
    return(j);
    }
    }
    }
    return(-1); }
    //+------------------------------------------------------------------+
    //| |
    //+------------------------------------------------------------------+
    void DisplayAlert(string message, int shift)
    {
    if(shift <= 2 && Time[shift] != lastAlertTime)
    {
    lastAlertTime = Time[shift];
    Alert(message, Symbol(), " , ", Period(), " minutes chart");
    }
    }
    //+------------------------------------------------------------------+
    //| |
    //+------------------------------------------------------------------+
    void DrawPriceTrendLine(datetime x1, datetime x2, double y1,
    double y2, color lineColor, double style)
    {
    string label = "DivergenceLine2.1# " + DoubleToStr(x1, 0);
    ObjectDelete(label);
    ObjectCreate(label, OBJ_TREND, 0, x1, y1, x2, y2, 0, 0);
    ObjectSet(label, OBJPROP_RAY, 0);
    ObjectSet(label, OBJPROP_COLOR, lineColor);
    ObjectSet(label, OBJPROP_STYLE, style);
    }
    //+------------------------------------------------------------------+
    //| |
    //+------------------------------------------------------------------+
    void DrawIndicatorTrendLine(datetime x1, datetime x2, double y1,
    double y2, color lineColor, double style)
    {
    int indicatorWindow = WindowFind("ClusterDelta_Div");
    if(indicatorWindow < 0)
    return;
    string label = "DivergenceLine2.1$# " + DoubleToStr(x1, 0);
    ObjectDelete(label);
    ObjectCreate(label, OBJ_TREND, indicatorWindow, x1, y1, x2, y2, 0, 0);
    ObjectSet(label, OBJPROP_RAY, 0);
    ObjectSet(label, OBJPROP_COLOR, lineColor);
    ObjectSet(label, OBJPROP_STYLE, style);
    }
    //+------------------------------------------------------------------+

    Жутко вешает терминал. Индикатор на базе дивергенции Momentuma.
    Заранее спасибо.

  10. #20
    Участник Аватар для Fox.RM
    Регистрация
    24.04.2013
    Сообщений
    55
    Сказал(а) спасибо
    4
    Поблагодарили 40 раз(а) в 11 сообщениях
    ни у кого нет предложений?

+ Ответить в теме
Страница 2 из 8 ПерваяПервая 1 2 3 4 5 6 7 8 ПоследняяПоследняя

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
           

 


(C) 2009-2023 ClusterDelta.com.