- Элитные показатели :)
- Торговые стратегии на основе цифровых фильтров
- Каким видом анализа рынков вы пользуетесь?
- 2024.10.25
- www.mql5.com
Спасибо.Забыл написать мт5 нужно. Мт 4 нет у меня. Но всё равно СПС
Еще забыли написать что Вы называете "самым большим" баром?
Ну, если автору нужно самое большое движение, то это происходит между ценами Хай/Лоу - на тенях ведь тоже движение. Ему достаточно простого скрипта. Пару лет назад я такой делал, но он вычисляет среднестатистическое расстояние между хай и лоу на Д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 чтоб подгрузилась история последних свеч.
в какой час обычно самое большое движение рынка ?
А зачем для этого самый большой бар? Для этого как раз не лучше ли вычислять средний размер? И всё уже украдено до нас, называется индикатор ATR и имеется в терминалах из коробки.
ATR опаздывает на 1/2 периода. Там усреднение внутри.
"Самый большой бар", то есть максимальное движение приходится на период 15.00 - 17.00. Можно сказать что пик дневной активности 15:30
результат можно получить статистикой баров или тиковых объёмов или торговых результатов робота. Характерная картина будет одна и та-же.

внутридень EURUSD, плотность распределения:
синий - момент первого экстремум дня, красным - второго экстремума.
По оси X - секунды от начала дня. Если кто подскажет как в CGraphics вывести именно время - поделюсь этим бредовым кодом :-)
можно вообще heat-map на графике нарисовать "вероятность экстремума", данные есть, но не художник
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
