Вопрос с индикацией гистограммы
Страница 1 из 812 12 ПоследняяПоследняя
Results 1 to 10 of 15

Thread: Вопрос с индикацией гистограммы

  1. #1
    Здравствуй,
    Может ли кто-нибудь помочь мне, разместив абсолютный минимальный код, необходимый для построения значения в виде гистограммы? (Значение, с которым я работаю, это разность пипов между Pair1 и Pair2, например.)

    Я общался с ним, краду биты отсюда и там, но из битов, которые я скопировал из других индикаторов, я не могу понять, как указать 0 байт для гистограмм, из которых исходит, или номер баров назад для расчета. Я также хотел бы иметь фиксированный диапазон /- для гистограммы.

    Огромное спасибо.
    Джон

  2. #2
    Привет, Джон, надеюсь, это поможет вам приблизиться на один шаг. Вместо чего-либо более полезного, он просто отображает положение закрытия на каждой свече в процентах от высоты свечи. Диапазон поднабора индикатора устанавливается по: #property indior_minimum -10 #property indior_maximum 110 Уровни (пунктирные линии, необязательные), построенные по: #property indior_level1 100 #property indior_level2 0 Количество баров гистограммы задается циклом: for (int i = 0; ilt; Bars; i ) {0 = самый правый (последний) бар на диаграмме Bars = предопределенная переменная, указывающая количество баров на диаграмме David Inserted Code/ -------------- -------------------------------------------------- - /| Гистограмма sample.mq4 |/ ----------------------------------------------- ------------------- #property indior_separate_window #property indior_minimum -10 #property indior_maximum 110 #property indior_level1 100 #property indior_level2 0 #property indior_buffers 1 double HistBuffer # 91; # 93 ;;/ ----------------------------------------------- ------------------- int init () {// ---------------------- -------------------------------------------- SetIndexBuffer (0, HistBuffer ); SetIndexStyle (0, DRAW_HISTOGRAM, STYLE_SOLID, 3, красный); IndiorDigits (0); Возвращение (0); }/ ---------------------------------------------- -------------------- int deinit () {// --------------------- --------------------------------------------- возврат (0) ; }/ ---------------------------------------------- -------------------- int start () {// --------------------- --------------------------------------------- для (int i = 0; ilt; Bars; i ) {if (High # 91; i # 93; -Low # 91; i # 93; gt; 0) HistBuffer # 91; i # 93; = 100 * (Close # 91; i # 93; -Low # 91; i # 93(High # 91; i # 93; -Low # 91; i # 93; } return (0); }

  3. #3
    Привет, Дэвид, спасибо! Это, безусловно, поможет мне на моем пути. Все лучшее, Джон

  4. #4
    Хорошо, вроде как что-то работает. Однако есть некоторые проблемы. Во-первых, позвольте мне объяснить, что я пытаюсь сделать. Я хочу сравнить дифференциал пипса между Pair1 и Pair2 (в данном случае EURUSD и GBPUSD). Я использую цену открытия дня как нулевую точку. Итак, мы берем открытую цену 1.6120 и вычитаем текущую цену 1.6100, и мы видим, что цена на данный момент снизилась на 20 пунктов. Сделайте то же самое для другой пары и придумайте движение на 40 пунктов (например). Так что скажем, что у нас GBPUSD = (- 20) и EURUSD = (- 40). Мы видим, что обе пары движутся вниз от открытого, и что EUR впереди вниз, на 20 пунктов. То, что я пытаюсь сделать, это сделать небольшую гистограмму, которая показывает мне эту разницу. Код ниже (который был вырезан и вставлен мной с помощью индикатора Swingman, и часть сверху) делает в значительной степени то, что я хочу. На данный момент он отображает только цену на гистограмме (для одной пары), и это приводит меня к выпуску номер1. Проблема №1). В данный момент индикатор гасит тик. Это здорово, но если вы загружаете его на новый график, вам приходится ждать часыминутыдни, чтобы заполнить данные. Есть ли способ назвать последний тик (я думаю, это то же самое, что и закрытие?) И заполнить все бары, отличные от текущего бара? Есть ли лучший вызов, чем MarketInfo Mode_Bid, чтобы рассчитать это? Issue # 2) Это, очевидно, более продвинутый, но можно ли пометить промах в верхнейнижней части гистограммы, чтобы указать высокийнизкий, например, на стереоэквалайзер, так как гистограммы могут достигать максимумаминимума и затем получаются перед закрытием? Проблема № 3) Сейчас я вручную вводим дату начала. Каким будет код, чтобы индикатор автоматически начинался с открытия последней 00:00 1M свечи? Моя идея может быть немой, но я все равно хотел бы сыграть ее до конца. Я надеюсь использовать этот индикатор, чтобы визуализировать диапазон разности пипов между коррелированными парами. Мое мышление заключается в том, что если вы можете ежедневно ощущать диапазон корреляции, то вы можете вступить в торговлю, когда будете в самой широкой части, и вернитесь к центру. Если у кого-то есть идеи по любому из вышеперечисленных пунктов, у меня все уши. В конечном итоге это то, что я хочу написать себе как процесс обучения, но ваша помощь, чтобы направить меня в правильном направлении, была бы оценена. Спасибо Джон Введенный код/ ------------------------------------------- ----------------------- /| Гистограмма sample.mq4 |/ ----------------------------------------------- ------------------- #property indior_separate_window #property indior_minimum -100 #property indior_maximum 150 #property indior_level1 100 #property indior_level2 -150 #property indior_buffers 1 double HistBuffer # 91; # 93 ;; внешняя строка Pair1 = GBPUSD; внешняя строка Pair2 = EURUSD; extern int StartDate = D'2009.7.8 00:00 '; extern string StartingTimeCorr = 2009.07.08 00:00; extern int TFperiod = 60;extern int moreBars = 0; double ExtMapBuffer1 # 91; # 93 ;; double ExtMapBuffer2 # 91; # 93 ;; double dPoint; int iWindow; int firstBar; int _BarsCount, _LastBar; int init () {SetIndexBuffer (0, HistBuffer); SetIndexStyle (0, DRAW_HISTOGRAM, STYLE_SOLID, 3, красный); IndiorDigits (4); Возвращение (0); }/ ---------------------------------------------- -------------------- int deinit () {return (0); }/ ---------------------------------------------- -------------------- int start () {double Price_1 = MarketInfo (Pair1, MODE_ASK); double Open_Pair1 = iOpen (Pair1, PERIOD_M1, iBarShift (NULL, PERIOD_M1, {StartDate}, True)); firstBar = iBarShift (NULL, TFperiod, StrToTime (StartingTimeCorr), true); if (firstBar lt; 0) {Alert (StartingTimeCorr кажется неправильным); return (0); } RefreshRates (); ArrayInitialize (ExtMapBuffer1, 0.0); ArrayInitialize (ExtMapBuffer2, 0.0); _BarsCount = WindowBarsPerChart () moreBars 1; int_FirstBar = firstBar; int _LastBar = _FirstBar - _BarsCount moreBars 1; if (_LastBar lt; 0) {_LastBar = 0; _BarsCount = _FirstBar moreBars 1; } int i = 0;/ILT; Бары; i ) {//if (High # 91; i # 93; -Low # 91; i # 93; gt; 0) HistBuffer # 91; i # 93; = (((Price_1) - (Open_Pair1)) * 10000); } return (0); }

  5. #5
    ОК. Получил это более или менее работающий. Как ни странно, Я получаю разные результаты, когда он находится на разных графиках, хотя обе диаграммы должны вызывать одну и ту же информацию. Есть идеи? Введенный код/ --------------------------------------------- --------------------- /| JM_Pip Differential v1.006.mq4 |/ ----------------------------------------------- ------------------- #property indior_separate_window #property indior_minimum -200 #property indior_maximum 200 #property indior_level1 100 #property indior_level2 -100 #property indior_level3 -50 #property indior_level4 50 #property indior_level5 0 #property indior_buffers 1/---- входные параметры внешнего цвета FontColor = красный; extern int FontSize = 18; extern string FontType = Arial Black; внешняя строка Pair1 = GBPUSD; внешняя строка Pair2 = EURUSD; extern int StartDate = D'2009.7.8 00:00 '; extern string StartingTimeCorr = 2009.07.08 00:00; extern int TFperiod = 60; extern int moreBars = 0; extern double Range = 200;/---- переменные int iWindow; int firstBar; int _BarsCount, _LastBar; double HistBuffer # 91; # 93 ;; double ExtMapBuffer1 # 91; # 93 ;; double ExtMapBuffer2 # 91; # 93 ;; double dPoint;/ ----------------------------------------------- ------------------- /| Пользовательская функция инициализации индикатора |/ ----------------------------------------------- ------------------- int init () {SetIndexBuffer (0, HistBuffer); SetIndexStyle (0, DRAW_HISTOGRAM, STYLE_SOLID, 3, красный); IndiorDigits (0); Возвращение (0); }/ ---------------------------------------------- -------------------- /| Пользовательская функция деинициализации индикатора |/ ----------------------------------------------- ------------------- int deinit () {ObjectDelete (Pip_Diff_Label); ObjectDelete (Buy_Sell_Label); Возвращение (0); }/ ---------------------------------------------- -------------------- int start () {double Price_1 = MarketInfo (Pair1, MODE_ASK); double Price_2 = MarketInfo (Pair2, MODE_ASK); double Open_Pair1 = iOpen (Pair1, PERIOD_M1, iBarShift (NULL, PERIOD_M1, {StartDate}, True)); double Open_Pair2 = iOpen (Pair2, PERIOD_M1, iBarShift (NULL, PERIOD_M1, {StartDate}, True)); double Variance1 = ((Price_1-Open_Pair1) * 10000); double Variance2 = ((Price_2-Open_Pair2) * 10000); double Differential = Variance1-Variance2; int Output1 = Variance1; int Output2 = Variance2; firstBar = iBarShift (NULL, TFperiod, StrToTime (StartingTimeCorr), true); if (firstBar lt; 0) {Alert (StartingTimeCorr кажется неправильным); return (0); } RefreshRates (); ArrayInitialize (ExtMapBuffer1, 0.0); ArrayInitialize (ExtMapBuffer2, 0.0); _BarsCount = WindowBarsPerChart () moreBars 1; int_FirstBar = firstBar; int _LastBar = _FirstBar - _BarsCount moreBars 1; if (_LastBar lt; 0) {_LastBar = 0;_BarsCount = _FirstBar moreBars 1; } int i = 0;/ILT; Бары; i )/Добавить жирный номер в строку окна гистограммы Pip_Diff = DoubleToStr (Differential, 0); ObjectCreate (Pip_Diff_Label, OBJ_LABEL, 1, 0, 0); ObjectSetText (Pip_Diff_Label, Pip_Diff, FontSize, FontType, FontColor); ObjectSet (Pip_Diff_Label, OBJPROP_CORNER, 1); ObjectSet (Pip_Diff_Label, OBJPROP_XDISTANCE, 1); ObjectSet (Pip_Diff_Label, OBJPROP_YDISTANCE, 1); {HistBuffer # 91; i # 93; = Дифференциал; IndiorShortName (Differential Pair2 = ( Output2 ) Pair1 = ( Output1 )); } return (0); }

  6. #6

    Quote Originally Posted by ;
    Как ни странно, Я получаю разные результаты, когда он находится на разных графиках, хотя обе диаграммы должны вызывать одну и ту же информацию. Есть идеи?
    iBarShift (NULL, .....) вернет номер свечи пары, к которой привязан график. Возможно, iBarShift (Pair1, .....) и т. Д. Будет работать лучше? Извините, у меня нет времени детально проработать ваш код, поэтому я просто догадываюсь.

  7. #7
    Спасибо, попробует.

  8. #8
    Может кто-нибудь, пожалуйста, дайте мне краткое представление о том, как вы загружаете данные в массив? Я прошел через MT4, но для меня это слишком загадочно. В основном у меня есть 20 значений, которые я хочу усреднить. Я использую какую-то другую математику для создания этих значений, поэтому я не могу просто использовать [цена закрытия, период 20], например. Поэтому для каждого бара я создаю число. Я хочу усреднить последние 20 баров этого числа и сделать для этого какую-то другую математику. Я предполагаю, что массив - это способ сделать это, но я потерял то, с чего начать. Любые указатели будут очень благодарны. Спасибо, Джон

  9. #9
    double myarray [20]; myarray [0] = значение1;/первое значение myarray [1] = значение2;/второе значение. , , myarray [19] = значение20;/20th value averageval = 0; for (int i = 0; ilt; 20; i ) {averageval = averageval myarray [i]; } averageval = averageval20;

  10. #10
    Привет, Эван, Большое спасибо за это. Не могли бы вы помочь с кратким объяснением того, что i делает для меня и что он делает в приведенном выше коде? Я понимаю, что он добавляет 1 к себе и так далее, но я немного расплывчатый. Спасибо, Джон

Действующие разрешения

  • Вы не можете создавать новые темы
  • Вы не можете размещать ответы
  • Вы не можете использовать вложения
  • Вы не можете редактировать ваши записи
  •  
  • BB-код - Вкл.
  • Смайлики - Вкл.
  • Код [IMG] - Вкл.
  • Код [VIDEO] - Вкл.
  • HTML-код - Выкл.
Веб-сайт использует cookies
Веб-сайт использует cookies, в настоящее время некоторые из них уже установлены. Вы можете ознакомиться с более подробной информацией об использовании нами cookies здесь. Чтобы принять условия использования cookies, пожалуйста, нажмите на кнопку справа. Если вы продолжаете пользоваться веб-сайтом, вы по умолчанию принимаете условия использования cookies.