Индикатор самого большого бара

 
Есть ли такой индикатор самого большого бара например чвс,то есть в какой час обычно самое большое движение рынка ? Напишите кто умеет,если не сложно.Например за месяц проверить самый длинные бары во сколько бывают.
 
Range Forecast H1
Range Forecast H1
  • 2024.10.25
  • www.mql5.com
Индикатор отображает фактический диапазон часовой свечи в процентах и расчётный диапазон на основе усреднённой статистики.
 

 Спасибо.Забыл написать мт5 нужно.  Мт 4 нет у меня.  Но всё равно СПС

 
Fortstrend #:

 Спасибо.Забыл написать мт5 нужно.  Мт 4 нет у меня.  Но всё равно СПС

Еще забыли написать что Вы называете "самым большим" баром?
 
Dmitriy Skub #:
Еще забыли написать что Вы называете "самым большим" баром?

Ну, если автору нужно самое большое движение, то это происходит между ценами Хай/Лоу - на тенях ведь тоже движение. Ему достаточно простого скрипта. Пару лет назад я такой делал, но он вычисляет среднестатистическое расстояние между хай и лоу на Д1. Вот код (переделать под любой таймфрейм и максимальный не сложно), по крайней мере он может служить точкой отсчёта:

//+------------------------------------------------------------------+
//|                                                 All_Info_1.0.mq5 |
//|                                          Copyright © 2023, Drknn |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2023, Drknn"
#property version   "1.00"
#include <Trade\AccountInfo.mqh>
#property script_show_inputs
//--- пользовательские переменные
input int ChisloDney=247;// How many Days for calculate
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart (){
        CAccountInfo account;// объявили переменную account типа класс CAccountInfo
        string    SMB=Symbol();
        bool LNG=TerminalInfoString(TERMINAL_LANGUAGE)=="Russian";
  string DayWeek="";
  int DenNedeli=(int)SymbolInfoInteger(SMB,SYMBOL_SWAP_ROLLOVER3DAYS);
        switch(DenNedeli){
                case 0: DayWeek=Text(LNG,"Воскресенье","Sunday"); break;
                case 1: DayWeek=Text(LNG,"Понедельник","Monday"); break;
                case 2: DayWeek=Text(LNG,"Вторник","Tuesday"); break;
                case 3: DayWeek=Text(LNG,"Среда","Wednesday"); break;
                case 4: DayWeek=Text(LNG,"Четверг","Thursday"); break;
                case 5: DayWeek=Text(LNG,"Пятница","Friday"); break;
                case 6: DayWeek=Text(LNG,"Суббота","Saturday"); break;
        }
        string    Priznak;// Признак плавающего спреда
        if(SymbolInfoInteger(SMB,SYMBOL_SPREAD_FLOAT)){
                Priznak=Text(LNG,"  (Плавающий)","  (Float)");
        }
        else{
                Priznak=Priznak=Text(LNG,"  (Фиксированный)","  (Fixed)");
        }
        string NameScript; StringConcatenate(NameScript,"============ All_Info_1.0 (",SMB,") ============");
        // ----------------- Выдаём алерты ---------------
        Alert(NameScript);
        Alert(Text(LNG,"Валюта ходит по ","The currency moves around "),Srednestatistich(ChisloDney),Text(LNG," пт. в день"," pt. per day"));
        int PoSkolkoPunktov=(int)(SymbolInfoDouble(SMB,SYMBOL_TRADE_TICK_SIZE) / Point());
        Alert(Text(LNG,"Минимальный тик = ","Minimum tick = "),PoSkolkoPunktov,Text(LNG," пт."," pt."));
        Alert(Text(LNG,"День недели для тройного свопа = ","Day of the week for triple swap = "),DayWeek);
        Alert("Point = ",Point(),"    Digits = ",Digits(),"    Ask = ",NormalizeDouble(SymbolInfoDouble(SMB,SYMBOL_ASK),Digits()),"    Bid = ",NormalizeDouble(SymbolInfoDouble(SMB,SYMBOL_BID),Digits()));
        Alert(Text(LNG,"Спред сейчас = ","Spraed now = "),SymbolInfoInteger(SMB,SYMBOL_SPREAD),Priznak);
        Alert("Min Level = ",SymbolInfoInteger(SMB,SYMBOL_TRADE_STOPS_LEVEL),Text(LNG," пт."," pt"));
        Alert("Min Lot = ",SymbolInfoDouble(SMB,SYMBOL_VOLUME_MIN));
  Alert("Max Lot = ",SymbolInfoDouble(SMB,SYMBOL_VOLUME_MAX));
        Alert("Lot Step = ",SymbolInfoDouble(SMB,SYMBOL_VOLUME_STEP));
        Alert(Text(LNG,"Лимит объёма однонарпавленных ордеров = ","Volume limit for unidirectional orders = "),SymbolInfoDouble(SMB,SYMBOL_VOLUME_LIMIT),Text(LNG," лотов"," lots"));
        //Alert("TradeStart =",TimeToString(SymbolInfoInteger(SMB,SYMBOL_START_TIME),TIME_MINUTES));
        //Alert("TradeEnd =",TimeToString(SymbolInfoInteger(SMB,SYMBOL_EXPIRATION_TIME),TIME_MINUTES));
        Alert("Swap for Buy ($) = ",SymbolInfoDouble(SMB,SYMBOL_SWAP_LONG));
        Alert("Swap For Sell ($) = ",SymbolInfoDouble(SMB,SYMBOL_SWAP_LONG));
  Alert(Text(LNG,"Свободной маржи на 1 лот нужно ($) = ","Free margin for open 1 lot must be ($) = "),SymbolInfoDouble(SMB,SYMBOL_MARGIN_INITIAL));
        Alert(Text(LNG,"Дистанция заморозки отложенных ордеров = ","Freeze distance for pending orders = "),SymbolInfoInteger(SMB,SYMBOL_TRADE_FREEZE_LEVEL),Text(LNG," пт."," pt"));
        Alert("----------------- ",Text(LNG,"Торговая информация","Trade information")," -----------------");
        // ----------- Номер счёта ------------------
        Alert(Text(LNG,"Номер счёта = ","Account number = "),account.Login());
        //--- допустимое количество ордеров задано или нет
  Alert(Text(LNG,"Max. действующих отложенных ордеров = ","Max. active pending orders = "),account.LimitOrders());
        // ------------- Выводим рычаг ---------
        Alert("Leverage = 1:",AccountInfoInteger(ACCOUNT_LEVERAGE));
        //--- выведем тип счета
        ENUM_ACCOUNT_TRADE_MODE account_type=account.TradeMode();
        if(account_type==ACCOUNT_TRADE_MODE_REAL){
    Alert(Text(LNG,"Тип счёта - реальный","Account type - real"));
        }
        if(account_type==ACCOUNT_TRADE_MODE_DEMO){
    Alert(Text(LNG,"Тип счёта - демо","Account type - demo"));
        }
        //--- выясним, можно ли вообще торговать на данном счете
  if(account.TradeAllowed())
    Alert(Text(LNG,"На данном счете сервер торговлю разрешает","The server allows trading on this account"));
  else
    Alert(Text(LNG,"Сервер запретил здесь торговать: возможно, Вы зашли по инвест-паролю","The server has prohibited trading here: you may have logged in using your investment password"));
        // ----------- Можно ли торговать советниками и скриптами -----------------
  if(account.TradeExpert())
    Alert("Торговля советниками и скриптами разрешена");
  else
    Alert("Торговля советниками и скриптами запрещена");
        //--- выведем имя компании и сервера
  Alert(account.Company(),":  server  ",account.Server());
        //--- напоследок выведем баланс и текущую прибыль на счете
  Alert("Balance = ",NormalizeDouble(account.Balance(),2),"  Profit = ",account.Profit(),"   Equity = ",account.Equity());
        
}
//+------------------------------------------------------------------+
//|          Пользовательские подпрограммы                           |
//+------------------------------------------------------------------+


// ================ Srednestatistich(int PeriodSMB) ================================================
// функция возвращает число пунктов, которое делает валюта в среднем в день
//-------------
// входные параметры:
// int PeriodSMB - число дней, на которых вычисляется, сколько валюта проходит пунктов в день
int Srednestatistich(int PeriodSMB){
        int PunktovSegodnya=0,Srednee=0;
        for(int i=1; i<=PeriodSMB; i++){
                PunktovSegodnya=(int)((iHigh(Symbol(),PERIOD_D1,i) - iLow(Symbol(),PERIOD_D1,i)) / Point());
                if(i==1){
                        Srednee=PunktovSegodnya;
                }
                else{
                        Srednee=Srednee+PunktovSegodnya;
                }
        }
        Srednee=Srednee/PeriodSMB;
        NormalizeDouble(Srednee,0);
        return(Srednee);
}
// =================== Text ========================================================================
// Функция возвращает текст на выбраном языке терминала.
// Если терминал русскоязычный, то возвращается строка на русском. В противном случае на английском.
// -------------------------------------------------------------------------------------------------
string Text(bool Lang,string Russ,string Engl){
   if(Lang){
                return(Russ);
        }
  else return(Engl);
}

P.S.

Перед применением скрипта нужно перейти на Д1 чтоб подгрузилась история последних свеч.

 
Fortstrend:
в какой час обычно самое большое движение рынка ?
А зачем для этого самый большой бар? Для этого как раз не лучше ли вычислять средний размер? И всё уже украдено до нас, называется индикатор ATR и имеется в терминалах из коробки.
 
Jack_the_singer #:
А зачем для этого самый большой бар? Для этого как раз не лучше ли вычислять средний размер? И всё уже украдено до нас, называется индикатор ATR и имеется в терминалах из коробки.

ATR опаздывает на 1/2 периода. Там усреднение внутри. 

"Самый большой бар", то есть максимальное движение приходится на период 15.00 - 17.00. Можно сказать что пик дневной активности 15:30

результат можно получить статистикой баров или тиковых объёмов или торговых результатов робота. Характерная картина будет одна и та-же. 

 

внутридень EURUSD, плотность распределения:

синий - момент первого экстремум дня,  красным - второго экстремума.

По оси X - секунды от начала дня. Если кто подскажет как в CGraphics вывести именно время - поделюсь этим бредовым кодом :-)

можно вообще heat-map на графике нарисовать "вероятность экстремума", данные есть, но не художник

 

полезняшечка получилась :-)

вот золото - по распределению видно что трендовое (оба экстремума в своих четвертях, первый утром второй вечером, то есть как пошло так и идёт), но есть импульсный момент на перекрёстке европа-америка


 
Maxim Kuznetsov #:

полезняшечка получилась :-)

но есть импульсный момент на перекрёстке европа-америка

А вдруг это нелинейно? Где факты?