smc test.mq5
Похожие материалы по тегам
Сообщите нам, если считаете, что материал размещён без разрешения.
Сообщить о материале
Обращение по товару «smc test.mq5» отправится на рассмотрение. Укажите контакт для ответа и опишите причину.
О программе
Данный продукт представляет собой торгового советника для платформы MetaTrader 5, который анализирует ценовые данные с помощью индикатора TMA (центрированные полосы), скользящей средней, индикатора ADX и собственной реализации индекса потока денег (MFI). Советник формирует сигналы на покупку и продажу, основываясь на положении цены относительно полос TMA и направлении скользящей средней, с дополнительным подтверждением через значения ADX и MFI. В качестве защиты используются пользовательские стоп-лосс и тейк-профит, а также механизм трейлинг-стопа для перемещения стоп-лосса при благоприятном движении цены. Торговые операции выполняются через класс CTrade стандартной библиотеки MetaTrader 5.
Настройки программы
| Настройка | Описание |
|---|---|
| LotSize | Размер лота — Размер лота для торговых операций |
| TrailingStop | Трейлинг-стоп — Числовой параметр, определяющий значение трейлинг-стопа |
| HalfLength | Половинная длина — Целочисленный параметр, используемый в логике расчётов советника |
| Period for Moving Average (MaPeriod) | Период скользящей средней — Период скользящей средней |
| Period for ADX (ADXPeriod) | Период ADX — Период расчёта индикатора ADX |
| Period for MFI (MFIPeriod) | Период MFI — Период расчёта индекса потока денег (MFI) |
| Threshold for ADX (ADXThreshold) | Порог ADX — Пороговое значение ADX для подтверждения тренда |
| Threshold for high MFI (MFIThresholdHigh) | Верхний порог MFI — Верхний порог MFI для подтверждения перекупленности |
| Threshold for low MFI (MFIThresholdLow) | Нижний порог MFI — Нижний порог MFI для подтверждения перепроданности |
| User defined Stop Loss (points) (UserStopLoss) | Стоп-лосс пользователя — Пользовательский стоп-лосс в пунктах |
| User defined Take Profit (points) (UserTakeProfit) | Тейк-профит пользователя — Пользовательский тейк-профит в пунктах |
| Distance to move SL (TrailingDistance) | Расстояние трейлинг-стопа — Расстояние для перемещения стоп-лосса |
| Distance before starting to move SL (ProfitLockDistance) | Расстояние фиксации прибыли — Расстояние в пользу цены, после которого начинается перемещение стоп-лосса |
| Initial stop loss distance (350 points) (InitialStopLoss) | Начальный стоп-лосс — Начальное расстояние стоп-лосса в пунктах |
| Distance from current price to move SL when locking in profit (MoveSLDistance) | Расстояние перемещения стоп-лосса — Расстояние от текущей цены для перемещения стоп-лосса при фиксации прибыли |
Поиск по коду файла
#include <Trade\Trade.mqh>
CTrade trade;
double middleBand[];
double upperBand[];
double lowerBand[];
double maTrend[];
double adxBuffer[];
double mfiBuffer[];
input double LotSize = 0.2;
input double TrailingStop = 30;
input int HalfLength = 12;
input int MaPeriod = 50; // Period for Moving Average
input int ADXPeriod = 14; // Period for ADX
input int MFIPeriod = 14; // Period for MFI
input double ADXThreshold = 25; // Threshold for ADX
input double MFIThresholdHigh = 80; // Threshold for high MFI
input double MFIThresholdLow = 20; // Threshold for low MFI
input double UserStopLoss = 50; // User defined Stop Loss (points)
input double UserTakeProfit = 100; // User defined Take Profit (points)
input double TrailingDistance = 500; // Distance to move SL
input double ProfitLockDistance = 500; // Distance before starting to move SL
input double InitialStopLoss = 350; // Initial stop loss distance (350 points)
input double MoveSLDistance = 350; // Distance from current price to move SL when locking in profit
int handleTMA;
int handleMA;
int handleADX;
datetime lastBuyTime = 0; // Store the last buy signal time
datetime lastSellTime = 0; // Store the last sell signal time
int minTimeBetweenTrades = 15; // Minimum time between trades in minutes
double CalculateMFI(int period)
{
double positiveFlow = 0;
double negativeFlow = 0;
for (int i = 1; i <= period; i++)
{
double typicalPrice = (iHigh(Symbol(), Period(), i) + iLow(Symbol(), Period(), i) + iClose(Symbol(), Period(), i)) / 3;
double prevTypicalPrice = (iHigh(Symbol(), Period(), i + 1) + iLow(Symbol(), Period(), i + 1) + iClose(Symbol(), Period(), i + 1)) / 3;
double moneyFlow = typicalPrice * iVolume(Symbol(), Period(), i);
if (typicalPrice > prevTypicalPrice)
positiveFlow += moneyFlow;
else if (typicalPrice < prevTypicalPrice)
negativeFlow += moneyFlow;
}
double moneyRatio = (negativeFlow == 0) ? 0 : positiveFlow / negativeFlow;
double mfi = 100 - (100 / (1 + moneyRatio));
return mfi;
}
int OnInit()
{
// код доступен только после оплаты
}
void OnDeinit(const int reason)
{
if(handleTMA != INVALID_HANDLE)
IndicatorRelease(handleTMA);
if(handleMA != INVALID_HANDLE)
IndicatorRelease(handleMA);
if(handleADX != INVALID_HANDLE)
IndicatorRelease(handleADX);
}
void OnTick()
{
// код доступен только после оплаты
}
if(handleTMA == INVALID_HANDLE || handleMA == INVALID_HANDLE || handleADX == INVALID_HANDLE)
return;
int copiedMiddle = CopyBuffer(handleTMA, 0, 0, 1, middleBand); // Middle band buffer
int copiedUpper = CopyBuffer(handleTMA, 1, 0, 1, upperBand); // Upper band buffer
int copiedLower = CopyBuffer(handleTMA, 2, 0, 1, lowerBand); // Lower band buffer
int copiedMA = CopyBuffer(handleMA, Показано первые 50% кода (символов: 5201)
Открыть по тарифу
Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.
Разовая покупка файла
На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.
Зачем нужен email? После подтверждения оплаты файл сохранится в кабинете на этот email. Если аккаунта ещё нет, мы создадим его и пришлём ссылку для задания пароля. Если аккаунт уже есть, покупка добавится в него. Укажите адрес, к которому у вас есть доступ.
Чтобы оформить заказ, введите email и перейдите к оплате.