class CPriceActionStrategy
Класс стратегии Price Action для анализа свечных паттернов и генерации торговых сигналов.
Сообщите нам, если считаете, что материал размещён без разрешения.
Обращение по товару «cpriceactionstrategy.mqh» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
Библиотека CPriceActionStrategy представляет собой включаемый модуль для MetaTrader 4, реализующий торговую стратегию на основе анализа свечных паттернов (pinbar). Она исследует предыдущую свечу на заданном символе и определяет наличие паттерна пинбара — свечи с длинным фитилём относительно тела.
При обнаружении пинбара библиотека проверяет, находится ли его верхняя или нижняя точка на уровнях поддержки или сопротивления на дневном и/или недельном таймфреймах. Дополнительно доступна фильтрация входа по уровню 50% ретрейсмента пинбара.
Внутренне библиотека создаёт объекты анализа поддержки и сопротивления для таймфреймов D1 и W1, поддерживает массив индикаторов (Pinbar, S&R и опционально 50% ретрейсмент) и возвращает объект сигнала с информацией о направлении и стоп-лоссе через метод Refresh.
| Настройка | Описание |
|---|---|
| __trendfilter | Текстовый параметр, используемый как заголовок раздела для группировки настроек пинбара в интерфейсе настроек. |
| Use50PercentRetracementEntry | Переключатель, определяющий, требуется ли дополнительная проверка текущей цены на уровне 50% ретрейсмента пинбара для подтверждения торгового сигнала. |
| SupportResistanceLines | Задаёт таймфрейм для проверки уровней поддержки и сопротивления при подтверждении сигнала пинбара. Доступны варианты: ежедневный, еженедельный или оба таймфрейма одновременно. |
Классов: 1 · методов: 4 · конструкторов: 1 · деструкторов: 1 · отдельных функций: 0
class CPriceActionStrategy
Класс стратегии Price Action для анализа свечных паттернов и генерации торговых сигналов.
CPriceActionStrategy(string symbol)
Конструктор класса, инициализирующий объекты анализа поддержки/сопротивления и массив индикаторов по заданному торговому символу.
~CPriceActionStrategy()
Деструктор класса, освобождающий память объектов сигналов, поддержки/сопротивления и индикаторов.
CSignal* Refresh()
Метод Refresh — пересчитывает индикаторы на предыдущей свече и формирует торговый сигнал (покупка или продажа) с уровнем стоп-лосса.
int GetIndicatorCount()
Метод GetIndicatorCount — возвращает количество индикаторов, используемых в стратегии.
CIndicator* GetIndicator(int indicator)
Метод GetIndicator — возвращает указатель на индикатор по его числовому индексу.
double GetStopLossForOpenOrder()
Метод GetStopLossForOpenOrder — возвращает уровень стоп-лосса для открытого ордера (в текущей реализации возвращает 0).
#property strict
enum SRTypes
{
Daily,
Weekly,
DailyAndWeekly
};
extern string __trendfilter = " ------- Pinbar settings ------------";
extern bool Use50PercentRetracementEntry = true;
extern SRTypes SupportResistanceLines = Weekly;
#include <CStrategy.mqh>
#include <CSupportResistance.mqh>
class CPriceActionStrategy : public IStrategy
{
private:
CSupportResistance* _supportResistanceD1;
CSupportResistance* _supportResistanceW1;
int _indicatorCount;
CIndicator* _indicators[];
CSignal* _signal;
string _symbol;
public:
CPriceActionStrategy(string symbol)
{
_symbol = symbol;
_signal = new CSignal();
_supportResistanceD1 = new CSupportResistance(_symbol, PERIOD_D1);
_supportResistanceW1 = new CSupportResistance(_symbol, PERIOD_W1);
ArrayResize(_indicators, 10);
_indicatorCount = 0;
_indicators[_indicatorCount++] = new CIndicator("Pinbar");
_indicators[_indicatorCount++] = new CIndicator("S&R");
if (Use50PercentRetracementEntry)
{
_indicators[_indicatorCount++] = new CIndicator("50%rt");
}
}
~CPriceActionStrategy()
{
delete _signal;
delete _supportResistanceD1;
delete _supportResistanceW1;
for (int i=0; i < _indicatorCount;++i)
{
delete _indicators[i];
}
ArrayFree(_indicators);
}
CSignal* Refresh()
{
double priceOpen = iOpen (_symbol, 0, 1);
double priceClose = iClose(_symbol, 0, 1);
double priceHi = iHigh (_symbol, 0, 1);
double priceLow = iLow (_symbol, 0, 1);
double pinbarRange = priceHi - priceLow ;
double priceRetracement = priceLow + (pinbarRange * 0.5);
double bodyLo = MathMin(priceOpen, priceClose);
double bodyHi = MathMax(priceOpen, priceClose);
double wickLoRange = MathAbs(bodyLo - priceLow);
double wickHiRange = MathAbs(priceHi - bodyHi);
double bodyRange = MathAbs(bodyHi - bodyLo);
double priceNow = MarketInfo(_symbol, MODE_BID);
double points = MarketInfo(_symbol, MODE_POINT);
double digits = MarketInfo(_symbol, MODE_DIGITS);
double mult = 1;
if (digits ==3 || digits==5) mult = 10;
_signal.Reset();
for (int i=0; i < _indicatorCount;++i)
{
_indicators[i].IsValid = false;
}
if (priceClose < priceOpen)
{
bool isPinBar = false;
if (wickHiRange >= 2 * bodyRange)
{
if (wickHiRange >= 2 * wickLoRange)
{
isPinBar = true;
}
}
if (isPinBar)
{
double pips = MathAbs(priceHi - bodyHi);
pips /= mult;
pips /= points;
_indicators[0].IsValid = iПоказано первые 50% кода (символов: 3644)
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.