Я пока просто ищу максимумы/минимумы. Но возникает вопрос. Один максимум и минммум я могу найти легко, а как найти несколько,с разными уровнями? Пока, чтобы торговать, сделю выставление линий вручную, но хочется автоматизации. Или все же пойти по пути анализа OHLC, как в предыдущем посте. Я в раздумьях..
struct SPivotPoints { double m_HighPivot; double m_LowPivot; datetime m_HighPivotDatetime; datetime m_LowPivotDatetime; int m_idxHigh; int m_idxLow; } m_pivotPoints; void FindPivotPoints(int copied, MqlRates &rates[]) { if(copied > 0) { for(int n = 0; n < copied; n++) { if(m_pivotPoints.m_HighPivot < rates[n].high) { m_pivotPoints.m_HighPivot = rates[n].high; m_pivotPoints.m_HighPivotDatetime = rates[n].time; m_pivotPoints.m_idxHigh = n; } if(m_pivotPoints.m_LowPivot > rates[n].low) { m_pivotPoints.m_LowPivot = rates[n].low; m_pivotPoints.m_LowPivotDatetime = rates[n].time; m_pivotPoints.m_idxLow = n; } } } }
Я пока просто ищу максимумы/минимумы. Но возникает вопрос. Один максимум и минммум я могу найти легко, а как найти несколько,с разными уровнями? Пока, чтобы торговать, сделю выставление линий вручную, но хочется автоматизации. Или все же пойти по пути анализа OHLC, как в предыдущем посте. Я в раздумьях..
Я ищу уровни от круглых цен. Например 100 и 500. Отскок от уровня считаю с допуском +-сколько то пунктов.
Я ищу уровни от круглых цен. Например 100 и 500. Отскок от уровня считаю с допуском +-сколько то пунктов.
Да, тоже давно такое замечал, у круглых цен притормаживается цена. Даже давно скрипты сделал для разметки
- www.mql5.com
Я пока просто ищу максимумы/минимумы. Но возникает вопрос. Один максимум и минммум я могу найти легко, а как найти несколько,с разными уровнями?
по моему все равно как алгоритм ЗигЗага будете делать, вот недавно для экспериментов делал ЗЗ просто по пробою запомненного хай/лоу - никаких внутренних баров, мин.кол-ва баров и т.п.
//+------------------------------------------------------------------+ //| ZigZagZZ.mq5 | //| IgorM | //| https://www.mql5.com/ru/users/igorm | //+------------------------------------------------------------------+ #property copyright "IgorM" #property link "https://www.mql5.com/ru/users/igorm" #property version "1.00" #property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 // plot ZigZagZZ #property indicator_label1 "ZigZagZZ" #property indicator_type1 DRAW_SECTION #property indicator_color1 clrDarkBlue #property indicator_style1 STYLE_SOLID #property indicator_width1 3 // input parameters input int Deviation=100; // indicator buffers double ZZBuffer[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { // indicator buffers mapping SetIndexBuffer(0,ZZBuffer,INDICATOR_DATA); IndicatorSetInteger(INDICATOR_DIGITS,_Digits); PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0.0); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { static bool UP; static double max,min; static int LastExt=0; static const double dev=NormalizeDouble(Deviation*_Point,_Digits); int limit=prev_calculated-1; if(prev_calculated==0) { ArrayInitialize(ZZBuffer,0.0); limit=2; LastExt=0; if(low[0]<high[1]) { min=low[0]; max=high[1]; UP=true; } else { max=high[0]; min = low[1]; UP=false; } } for(int i=limit; i<rates_total; i++) { ZZBuffer[i]=0.0; if(UP) { if(low[i]-min<=0.0) { min=low[i]; ZZBuffer[LastExt]=0.0; LastExt=i; ZZBuffer[i]=min; } else { if(high[i]-min-dev>0.0) { max=high[i]; LastExt=i; ZZBuffer[i]=max; UP=false; } } } else { if(high[i]-max>=0.0) { max=high[i]; ZZBuffer[LastExt]=0.0; LastExt=i; ZZBuffer[i]=max; } else { if(low[i]-max+dev<0.0) { min=low[i]; LastExt=i; ZZBuffer[i]=min; UP=true; } } } } return(rates_total); } //+------------------------------------------------------------------+
код очень простой получился, задачи вроде как у Вас - поиск экстремумов, но для Вашего случая, кажется пересчет значений в другую сторону нужно будет организовать (от бара№1 в историю)
по моему все равно как алгоритм ЗигЗага будете делать, вот недавно для экспериментов делал ЗЗ просто по пробою запомненного хай/лоу - никаких внутренних баров, мин.кол-ва баров и т.п.
код очень простой получился, задачи вроде как у Вас - поиск экстремумов, но для Вашего случая, кажется пересчет значений в другую сторону нужно будет организовать (от бара№1 в историю)
Спасибо, скомпилировал, запустил, интересно, надо подумать.
Спасибо, скомпилировал, запустил, интересно, надо подумать.
если логика кода не читаемая, попробуйте так переписать условия:
if(low[i]-min<=0.0)
if(low[i]<=min)
вроде очень похоже на то что Вы ищете,
я в КБ выкладывал пример как ЗЗ в виде обычного массива использовать, думаю как раз к Вашей задаче в довесок пригодилось бы ;)
В рамках проекта нужно освоить данную тему. Чисто по своему опыту решил искать минимумы и максимумы цены в заданном диапазоне. Примерно,какна картинке
Потом порылся в кодобазе, выяснилось, что все считают примерно так (взято отсюда). То есть идет обработка OHLC. Вот и думаю, какой подход более правильный. По моим торговым наблюдениям все же цена отскакивает от максимумов/минимумов.
Делал когда то уже давно скрипт рисующий уровни. Он рисовал уровни по выбору в местах скопления(максимумы спектральной плотности)):
1. High, Low; 2. Open, Close; 3. верхних или нижних фракталов.4. По масимумам количества пересечений ценой уровня.
Какие уровни лучше не выяснил, так как автоматизацию торговли по уровням не делал. Музыченко считает, что лучше уровни по скоплениям Open, Close. Может это и правильно, так как часто цена до экстремумов не доходит и разворачивается раньше, ближе к уровням Open, Close.
Господа, кидайте картинки, легче обсуждать
Просто неохота вникать как виртуально будет вглядеть работа того или иного индюка.
если логика кода не читаемая, попробуйте так переписать условия:
вроде очень похоже на то что Вы ищете,
я в КБ выкладывал пример как ЗЗ в виде обычного массива использовать, думаю как раз к Вашей задаче в довесок пригодилось бы ;)
Немного с запозданием отвечаю, спасибо, идея пригодилась, как один из вариантов )
Так как надо торговать, сделал временный ручной вариант, четыре линии сам двигаю руками исходя из своего опыта. Пока решаю более важную задачу. Например, торгуем тихо-спокойно во флетовом канале. Вдруг цена его прорывает и понеслась вверх или вниз. Соответственно, в канале остались зависшие позиции. Закрывать их жалко, так как в 80% случаев все эти пробои ложные и цена вернется. Для страховки открываю встречную позицию с увеличенным лотом.
Я торгую в ДЦ, где хеджированная маржа нулевая, так что суммарная маржа наоборот уменьшится. Но надо знать, где скальперу все же закрыть или висяки или страхующую позицию. Для этого и нужны эти уровни, это один из ориентиров, а второй скорость изменения цены и ускорение. Надоело все время сидеть и правым глазом, как хамелеон, коситься на торговый монитор, хочу автомат ))
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
В рамках проекта нужно освоить данную тему. Чисто по своему опыту решил искать минимумы и максимумы цены в заданном диапазоне. Примерно,какна картинке
Потом порылся в кодобазе, выяснилось, что все считают примерно так (взято отсюда). То есть идет обработка OHLC. Вот и думаю, какой подход более правильный. По моим торговым наблюдениям все же цена отскакивает от максимумов/минимумов.