1. Типы перечислений (enumJnsSignal, enumOrderType)
- enumJnsSignal Это перечисление определяет тип сигнала, используемого в советнике. Есть два варианта сигнала:
- `eTypeCrossMA`: Использует сигнал Cross 2 MA(пересечение двух скользящих средних).
- `eTypeTrend`: Следит за трендом, используя скользящие средние и стохастик.
- enumOrderType Это перечисление определяет тип ордера:
- `eBuy`: Ордер на покупку .
- `eSell`: Ордер на продажу .
- `eNone`: Ордер не выполнен.
2. Входные параметры
- inMagicNumber Уникальный магический номер, используемый для различения ордеров данного советника.
- inLotSize Начальный размер лота для каждого ордера.
- inMultiply Коэффициент умножения, используемый в стратегии определения размера лота.
- inJarakLayer Расстояние в пунктах между торговыми позициями в стратегии сетки/слоя.
- inMAPeriodFast & inMAPeriodSlow Периоды для быстрой и медленной скользящих средних.
- inSTOKPeriod, inSTODPeriod, inSTOSlowing Параметры для Стохастического осциллятора.
- inTakeProfit & inStopLoss Параметры для тейк-профита и стоп-лосса.
3. Struct dataTrades
- Эта структура используется для хранения данных, связанных с открытыми торговыми позициями, таких как общее количество позиций (`ttlPos`), средняя цена позиций (`hargaTA`, `hargaTB`) и общий объем (`ttlLot`).
4. Функция OnInit()
- Эта функция выполняет инициализацию советника, включая проверку входных параметров (например, убеждается, что период быстрой MA меньше периода медленной MA) и создание хэндлов для индикаторов MA и Stochastic.
5. Функция OnTick()
- Основная функция, выполняемая при каждом движении цены (тик).
- Она вызывает функцию для проверки нового сигнала с помощью GetSignal(), и если сигнал найден, то для заключения сделок используется функция manageTrading().
- Также вызывается функция setTPSL() для обеспечения постоянного обновления тейк-профита и стоп-лосса.
6. Функция isNewCandle()
- Эта функция определяет, сформировалась ли новая свеча. Это важно, поскольку советник проверяет наличие сигналов только на новых свечах.
7. Функция GetSignal()
- Эта функция определяет, существует ли действительный торговый сигнал, основанный на выбранной стратегии:
- Для eTypeCrossMA сигнал определяется по пересечению быстрой и медленной скользящих средних.
- Для eTypeTrend сигнал использует подтверждение от MA и Stochastic.
8. Функция manageTrading()
- Эта функция управляет исполнением сделок.
- При обнаружении валидного сигнала советник открывает позицию с размером лота, определенным с помощью функции getLotSize().
- Также применяется стратегия сетки/слоя для открытия дополнительных позиций в зависимости от расстояния между ценами (`inJarakLayer`).
9. Функция updateDataTrades()
- Эта функция обновляет данные, относящиеся к текущим торговым позициям, например, рассчитывает среднюю цену и общий объем открытых позиций.
10. функция openTrade()
- Эта функция открывает новую торговую позицию на основе сгенерированного сигнала и рассчитанного размера лота. Для исполнения ордера используется функция OrderSend().
11. функция setTPSL()
- Эта функция устанавливает или обновляет тейк-профит и стоп-лосс для каждой открытой позиции.
12. функция modifTPSL()
- Эта функция изменяет значения Take Profit и Stop Loss для существующих позиций, если они отличаются от ранее установленных.
13. функция validateLot()
- Эта функция проверяет, что используемый размер лота находится в пределах допустимого минимального и максимального диапазона, а также соответствует минимальному шагу лота (`gLotStep`).
14. Функция getLotSize()
- Эта функция рассчитывает размер лота, который будет использоваться, исходя из начального размера лота и количества уже открытых позиций, с учетом коэффициента умножения (`inMultiply`).
Данный код предназначен для улавливания рыночных тенденций и автоматического управления торговыми позициями с использованием технических сигналов от скользящих средних и стохастика.