223231: Программирование тут совершенно не при чем. Для начала нужно разработать олгоритм, то есть формализоавать вашу логику. Обьясните другому человеку(без рисунков) и себе, по каким критериям строится эта линия. Программирование это всего лиш перенос логики в комп, сначало нужно придумать по каким критериям строится линия.Например: как ты определяеш что на улице зима? по косвенным признакам, лежит снег, люди в пуховике и шапках, если шапок нет, то тепло, но не все люди в пуховиках, а какой то процент. И с твоей задачей тоже самое.
Линия резистенса строится по самым верхним(максимальным) значениям данного конкретного коридора. Но я же не пропишу, что мне нужны самые верхние значения? ) (т.к. в данном случае они не являются верхними с точки зрения математики(цены в данный момент по отношению к прошлому моменту в коридоре).) Собственно поэтому и спрашиваю, какие есть техники(именно с точки зрения программирования) для вычисления подобных вещей?
Mike_Kharkov: Линия резистенса строится по самым верхним(максимальным) значениям данного конкретного коридора. Но я же не пропишу, что мне нужны самые верхние значения? ) (т.к. в данном случае они не являются верхними с точки зрения математики(цены в данный момент по отношению к прошлому моменту в коридоре).) Собственно поэтому и спрашиваю, какие есть техники(именно с точки зрения программирования) для вычисления подобных вещей?
Вы до конца дочитали ту ветку, откуда взяли этот скрин? Что для себя поняли?
Mike_Kharkov: Всем привет. Сам не являюсь программистом(в этом смысле я аматор) и сейчас меня заинтересовал вопрос написания кода для определения саппортов , резистенсов. Вопрос: Есть ли на сегодняшний день какие то готовые решения в этом смысле, которые бы идеально(безошибочно) распознавали где, что и по чем? (определение ценовых коридоров и т.д.) Если таких решений нет - то хотелось бы понять можно ли написать самому что то подобное? (если да - то как? Какие идеи(в плане программирования) можно использовать для решения данной задачи?)
P.S. Буду благодарен за советы..
Если на исторических данных, то ZigZag. Проводим линии поддержки-сопротивлений в виде ломанных линий для экстремумов ZigZag-а, т.е. одну ломанную для максимумов, вторую для минимумов и получаем идеальную картинку.
Если не на исторических данных, то по поговорке: знал бы прикуп, жил бы в Сочи.
Mike_Kharkov: Tapochun: Ветку дочитал - ниче не понял. ) (скрин взял от туда же.) Щас справку изучаю..
Да я понял, не лучший скрин, как Вы понимаете, мы с автором там друг-друга тоже не поняли. Используйте фракталы для определения значимых вершин или зиг-заг, как советовали выше. Т.к. фракталов будет очень много (если Вы все же возьметесь реализовывать через фракталы) то для первой точки можете использовать "фрактал от фракталов", т.е. если фрактал выше предыдущего и последующего - тогда это первая точка линии. Вторую точку можно брать по каждому новому фракталу. Линий будет достаточно много, т.о. линии нужно будет фильтровать. Т.е. нужно продумать по каким критериям будут фильтроваться/удаляться линии. Можете присвоить им определенный вес. Если линия пробита - уменьшение веса, если цена от линии оттолкнулась - увеличение веса. Это набросок варианта, когда будут строиться все возможные значимые линии.
Если же Вам нужно, чтобы строились линии только по максимумам/минимумам (скажем за день) - тут по-проще. Определяете максимум/минимум дня (посредством того же фрактала) - первая точка. Ждете образования (для линии по максимумам) последующего максимума( с фракталом ) - строите трендовую линию. По минимумам - точно также. Если обновился максимум/минимум дня/линия пробита - удаляете линию. И опять заново.
Mike_Kharkov: Линия резистенса строится по самым верхним(максимальным) значениям данного конкретного коридора. Но я же не пропишу, что мне нужны самые верхние значения? ) (т.к. в данном случае они не являются верхними с точки зрения математики(цены в данный момент по отношению к прошлому моменту в коридоре).) Собственно поэтому и спрашиваю, какие есть техники(именно с точки зрения программирования) для вычисления подобных вещей?
На самом деле проблема не проста, так просто ее не решить, надо много думать. Одним из вариантов будет Такой: Находим локальные экстремумы (чтобы экстремум выделялся на сколько-то процентов из общего графика), минимум для построения нужно 2 таких экстремума. Брать точные числовые значения нельзя, значит нужно задать диапазон отклонения от по которому будет рисоваться линия, Например максимум на 1,5678 +/-10%. если появляется третья точка, то диапазон отклонения увеличивается и идет проверка, можно ли соединить 3 точки с заданным диапазоном отклонения прямой линией, если можно, соединяем, если нет, значит был пробой линии поддержки/сопротивления. Алгоритм примерно так должен выглядеть. Это очень условно, я как пример написал ,в какую сторону мыслить.
Mike_Kharkov: Линия резистенса строится по самым верхним(максимальным) значениям данного конкретного коридора. Но я же не пропишу, что мне нужны самые верхние значения? ) (т.к. в данном случае они не являются верхними с точки зрения математики(цены в данный момент по отношению к прошлому моменту в коридоре).) Собственно поэтому и спрашиваю, какие есть техники(именно с точки зрения программирования) для вычисления подобных вещей?
Это так - пока вы просто интуитивно рассуждаете. Когда дойдет до реального написания алгоритма - увидите, что не так все просто. Строится сперва "скелет тренда" (что-то вроде зигзага), по нему определяются точки, через которые идут трендлинии, и далее - они могут отображаться.
У меня есть индикатор трендлиний, но здесь не переносят, когда кто-то что-то продает.
Mike_Kharkov: ...
Например я даже в плане идеи не могу себе представить, что можно
придумать, что бы реализовать отсутствие недочетов(оптикания) линии
резистенса
по следующему скрину:
Тоесть каким образом программа должна понимать(как это закодить. Хотя
пока что я даже азов не знаю в этом плане.), что все те 3 точки являются
самыми верхними по отношению к данному коридору и т.п.?
...
Шаблоны рвите.
Линия сопротивления/поддержки на самом деле уровень, следовательно, обладает шириной.
upd для канала я бы назвал это шириной сопровождения, как то осмысленней.
Линия тренда на самом деле вектор, показывающий направление. В зависимости от угла меняется скорость.
Для вашего частного случая например так: если цена после выхода за линию за х баров не обновила предыдущие максимумы и в течении у баров не пошла выше z%, тогда ... (пирамидим дальше, потому что скорость движения маленькая и толпа всё равно будет покупать).
ps не принимать к действию буквально. Вариантов море. Можно подстраховаться свечными паттернами. Или классическими фигурами ТА. Или новолунием. На свой вкус.
А может кто нибудь привести пример(самый примитивный, что бы не было
ничего лишнего в коде) как нарисовать зиг заг допустим по ценам открытия
и закрытия(или хай лоу. Это не важно.) ?
Пока что вообще не могу понять как отрисовывать хоть что нибудь. )
Единственное, что пока вышло это получить данные необходимых цен:
//+------------------------------------------------------------------+//| My_First_Indicator.mq5.mq5 |//| Mike_Kharkov |//| https://www.fl.ru/users/Yamaradg/ |//+------------------------------------------------------------------+#property copyright"Mike_Kharkov"#property link"https://www.fl.ru/users/Yamaradg/"#property version"1.00"#property indicator_chart_windowint start_count = 0;
int total_count = 10;
double open_array[]; // цены открытияdouble close_array[]; // цены открытия/* Попытка хоть что то создать в плане рисования рисования */double ZigZagHighs[]; // верхние переломы зигзагаdouble ZigZagLows[]; // нижние переломы зигзага/* Попытка хоть что то создать для рисования end *///+------------------------------------------------------------------+//| Custom indicator initialization function |//+------------------------------------------------------------------+intOnInit()
{
//--- indicator buffers mappingint copy_open = CopyOpen(_Symbol, PERIOD_CURRENT, start_count, total_count, open_array);
int copy_close = CopyClose(_Symbol, PERIOD_CURRENT, start_count, total_count, close_array);
int total = 10;
for(int i=9;i>=0;i--)
{
Print("Цена открытия номер ", i, " равен: " ,open_array[i]);
Print("Цена закрытия номер ", i, " равен: " ,close_array[i]);
}
/* Попытка хоть что то создать в плане рисования */SetIndexBuffer(1, ZigZagHighs, INDICATOR_DATA);
SetIndexBuffer(2, ZigZagLows, INDICATOR_DATA);
boolPlotIndexSetInteger(
intDRAW_ZIGZAG, // индекс графического стиляintSTYLE_SOLID, // идентификатор свойстваint// ----------- ЗДЕСЬ ВООБЩЕ НЕ ПОЙМУ ЧТО ПРОПИСЫВАТЬ НЕОБХОДИМО ?? ----------------- //
);
/* Попытка хоть что то создать для рисования end *///---return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+//| Custom indicator iteration function |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
constint prev_calculated,
constdatetime &time[],
constdouble &open[],
constdouble &high[],
constdouble &low[],
constdouble &close[],
constlong &tick_volume[],
constlong &volume[],
constint &spread[])
{
//---//--- return value of prev_calculated for next callreturn(rates_total);
}
//+------------------------------------------------------------------+//+------------------------------------------------------------------+//+------------------------------------------------------------------+
P.S. По справке понять вообще ничего нельзя - горы лишнего кода, невозможно разобраться, что там к чему..
Mike_Kharkov: А может кто нибудь привести пример(самый примитивный, что бы не было
ничего лишнего в коде) как нарисовать зиг заг допустим по ценам открытия
и закрытия(или хай лоу. Это не важно.) ?
Пока что вообще не могу понять как отрисовывать хоть что нибудь. )
Единственное, что пока вышло это получить данные необходимых цен: P.S. По справке понять вообще ничего нельзя - горы лишнего кода, невозможно разобраться, что там к чему..
Можете объяснить принцип построения такого индикатора?
Программирование тут совершенно не при чем. Для начала нужно разработать олгоритм, то есть формализоавать вашу логику. Обьясните другому человеку(без рисунков) и себе, по каким критериям строится эта линия. Программирование это всего лиш перенос логики в комп, сначало нужно придумать по каким критериям строится линия.Например: как ты определяеш что на улице зима? по косвенным признакам, лежит снег, люди в пуховике и шапках, если шапок нет, то тепло, но не все люди в пуховиках, а какой то процент. И с твоей задачей тоже самое.
Но я же не пропишу, что мне нужны самые верхние значения? )
(т.к. в данном случае они не являются верхними с точки зрения математики(цены в данный момент по отношению к прошлому моменту в коридоре).)
Собственно поэтому и спрашиваю, какие есть техники(именно с точки зрения программирования) для вычисления подобных вещей?
Линия резистенса строится по самым верхним(максимальным) значениям данного конкретного коридора.
Но я же не пропишу, что мне нужны самые верхние значения? )
(т.к. в данном случае они не являются верхними с точки зрения математики(цены в данный момент по отношению к прошлому моменту в коридоре).)
Собственно поэтому и спрашиваю, какие есть техники(именно с точки зрения программирования) для вычисления подобных вещей?
Всем привет.
Сам не являюсь программистом(в этом смысле я аматор) и сейчас меня заинтересовал вопрос написания кода для определения саппортов , резистенсов.
Вопрос:
Есть ли на сегодняшний день какие то готовые решения в этом смысле, которые бы идеально(безошибочно) распознавали где, что и по чем?
(определение ценовых коридоров и т.д.)
Если таких решений нет - то хотелось бы понять можно ли написать самому что то подобное?
(если да - то как? Какие идеи(в плане программирования) можно использовать для решения данной задачи?)
P.S. Буду благодарен за советы..
Если на исторических данных, то ZigZag. Проводим линии поддержки-сопротивлений в виде ломанных линий для экстремумов ZigZag-а, т.е. одну ломанную для максимумов, вторую для минимумов и получаем идеальную картинку.
Если не на исторических данных, то по поговорке: знал бы прикуп, жил бы в Сочи.
(скрин взял от туда же.)
Щас справку изучаю..
Tapochun:
Ветку дочитал - ниче не понял. )
(скрин взял от туда же.)
Щас справку изучаю..
Да я понял, не лучший скрин, как Вы понимаете, мы с автором там друг-друга тоже не поняли. Используйте фракталы для определения значимых вершин или зиг-заг, как советовали выше. Т.к. фракталов будет очень много (если Вы все же возьметесь реализовывать через фракталы) то для первой точки можете использовать "фрактал от фракталов", т.е. если фрактал выше предыдущего и последующего - тогда это первая точка линии. Вторую точку можно брать по каждому новому фракталу. Линий будет достаточно много, т.о. линии нужно будет фильтровать. Т.е. нужно продумать по каким критериям будут фильтроваться/удаляться линии. Можете присвоить им определенный вес. Если линия пробита - уменьшение веса, если цена от линии оттолкнулась - увеличение веса. Это набросок варианта, когда будут строиться все возможные значимые линии.
Если же Вам нужно, чтобы строились линии только по максимумам/минимумам (скажем за день) - тут по-проще. Определяете максимум/минимум дня (посредством того же фрактала) - первая точка. Ждете образования (для линии по максимумам) последующего максимума( с фракталом ) - строите трендовую линию. По минимумам - точно также. Если обновился максимум/минимум дня/линия пробита - удаляете линию. И опять заново.
Линия резистенса строится по самым верхним(максимальным) значениям данного конкретного коридора.
Но я же не пропишу, что мне нужны самые верхние значения? )
(т.к. в данном случае они не являются верхними с точки зрения математики(цены в данный момент по отношению к прошлому моменту в коридоре).)
Собственно поэтому и спрашиваю, какие есть техники(именно с точки зрения программирования) для вычисления подобных вещей?
Линия резистенса строится по самым верхним(максимальным) значениям данного конкретного коридора.
Но я же не пропишу, что мне нужны самые верхние значения? )
(т.к. в данном случае они не являются верхними с точки зрения математики(цены в данный момент по отношению к прошлому моменту в коридоре).)
Собственно поэтому и спрашиваю, какие есть техники(именно с точки зрения программирования) для вычисления подобных вещей?
Это так - пока вы просто интуитивно рассуждаете. Когда дойдет до реального написания алгоритма - увидите, что не так все просто. Строится сперва "скелет тренда" (что-то вроде зигзага), по нему определяются точки, через которые идут трендлинии, и далее - они могут отображаться.
У меня есть индикатор трендлиний, но здесь не переносят, когда кто-то что-то продает.
...
Например я даже в плане идеи не могу себе представить, что можно придумать, что бы реализовать отсутствие недочетов(оптикания) линии резистенса
по следующему скрину:
Тоесть каким образом программа должна понимать(как это закодить. Хотя пока что я даже азов не знаю в этом плане.), что все те 3 точки являются самыми верхними по отношению к данному коридору и т.п.?
...
Шаблоны рвите.
Линия сопротивления/поддержки на самом деле уровень, следовательно, обладает шириной.
upd для канала я бы назвал это шириной сопровождения, как то осмысленней.
Линия тренда на самом деле вектор, показывающий направление. В зависимости от угла меняется скорость.
Для вашего частного случая например так: если цена после выхода за линию за х баров не обновила предыдущие максимумы и в течении у баров не пошла выше z%, тогда ... (пирамидим дальше, потому что скорость движения маленькая и толпа всё равно будет покупать).
ps не принимать к действию буквально. Вариантов море. Можно подстраховаться свечными паттернами. Или классическими фигурами ТА. Или новолунием. На свой вкус.
Пока что вообще не могу понять как отрисовывать хоть что нибудь. )
Единственное, что пока вышло это получить данные необходимых цен:
P.S. По справке понять вообще ничего нельзя - горы лишнего кода, невозможно разобраться, что там к чему..
А может кто нибудь привести пример(самый примитивный, что бы не было ничего лишнего в коде) как нарисовать зиг заг допустим по ценам открытия и закрытия(или хай лоу. Это не важно.) ?
Пока что вообще не могу понять как отрисовывать хоть что нибудь. )
Единственное, что пока вышло это получить данные необходимых цен:
P.S. По справке понять вообще ничего нельзя - горы лишнего кода, невозможно разобраться, что там к чему..
Можете объяснить принцип построения такого индикатора?