Торгует "ИИ". - страница 7

 

Тут я не ожидал получить ответ.....

Напишите код на стратегии mql5 с использованием уровней поддержки, сопротивления, отката, отскока, стоп-лосс, тейк-профит, соотношение R:R

---

Вот код стратегии на MQL5, которая торгует на отскоках/откатах от уровней поддержки/сопротивления с учетом стоп-лосса, тейк-профита и соотношения R:R:


//+------------------------------------------------------------------+
//|                                                      SRBounce.mq5 |
//|                        Copyright 2023, MetaQuotes Software Corp. |
//|                                             https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net/"
#property version   "1.00"

//+------------------------------------------------------------------+
//| Input parameters                                                 |
//+------------------------------------------------------------------+
input double   LotSize = 0.1;          // Размер лота
input int      StopLossPips = 50;      // Стоп-лосс в пунктах
input int      TakeProfitPips = 100;   // Тейк-профит в пунктах
input double   MinRRRatio = 1.5;       // Минимальное соотношение R:R
input int      SRCandlesLookback = 50; // Число свечей для поиска уровней
input double   SRZonePct = 0.5;        // Ширина зоны в % от ATR
input int      ATRPeriod = 14;         // Период ATR

//+------------------------------------------------------------------+
//| Глобальные переменные                                            |
//+------------------------------------------------------------------+
double supportZones[], resistanceZones[];
int handleATR;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   handleATR = iATR(_Symbol, _Period, ATRPeriod);
   ArraySetAsSeries(supportZones, true);
   ArraySetAsSeries(resistanceZones, true);
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   IndicatorRelease(handleATR);
}

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   // Проверяем наличие открытых позиций
   if(PositionSelect(_Symbol)) return;
   
   // Обновляем уровни поддержки/сопротивления
   UpdateSupportResistance();
   
   // Получаем текущую цену
   double ask = SymbolInfoDouble(_Symbol, SYMBOL_ASK);
   double bid = SymbolInfoDouble(_Symbol, SYMBOL_BID);
   
   // Получаем ATR для определения зон
   double atr[];
   CopyBuffer(handleATR, 0, 0, 3, atr);
   double currentATR = atr[0];
   double zoneSize = currentATR * SRZonePct / 100;
   
   // Проверяем отскок от поддержки для покупки
   CheckBuySignal(bid, zoneSize);
   
   // Проверяем отскок от сопротивления для продажи
   CheckSellSignal(ask, zoneSize);
}

//+------------------------------------------------------------------+
//| Обновление уровней поддержки/сопротивления                       |
//+------------------------------------------------------------------+
void UpdateSupportResistance()
{
   ArrayResize(supportZones, SRCandlesLookback);
   ArrayResize(resistanceZones, SRCandlesLookback);
   ArrayInitialize(supportZones, 0);
   ArrayInitialize(resistanceZones, 0);
   
   // Ищем локальные минимумы (поддержка) и максимумы (сопротивление)
   for(int i = 3; i < SRCandlesLookback; i++)
   {
      if(IsSwingLow(i))
         supportZones[i] = iLow(_Symbol, _Period, i);
      
      if(IsSwingHigh(i))
         resistanceZones[i] = iHigh(_Symbol, _Period, i);
   }
}

//+------------------------------------------------------------------+
//| Проверка на локальный минимум                                    |
//+------------------------------------------------------------------+
bool IsSwingLow(int index)
{
   return(iLow(_Symbol, _Period, index) < iLow(_Symbol, _Period, index-1) &&
          iLow(_Symbol, _Period, index) < iLow(_Symbol, _Period, index+1));
}

//+------------------------------------------------------------------+
//| Проверка на локальный максимум                                   |
//+------------------------------------------------------------------+
bool IsSwingHigh(int index)
{
   return(iHigh(_Symbol, _Period, index) > iHigh(_Symbol, _Period, index-1) &&
          iHigh(_Symbol, _Period, index) > iHigh(_Symbol, _Period, index+1));
}

//+------------------------------------------------------------------+
//| Проверка сигнала на покупку                                      |
//+------------------------------------------------------------------+
void CheckBuySignal(double price, double zoneSize)
{
   for(int i = 0; i < ArraySize(supportZones); i++)
   {
      if(supportZones[i] == 0) continue;
      
      // Проверяем, находится ли цена в зоне поддержки
      if(price >= supportZones[i] && price <= (supportZones[i] + zoneSize))
      {
         // Проверяем, был ли отскок (закрытие выше открытия)
         if(iClose(_Symbol, _Period, 1) > iOpen(_Symbol, _Period, 1))
         {
            double sl = supportZones[i] - StopLossPips * _Point;
            double tp = price + (TakeProfitPips * _Point);
            
            // Проверяем соотношение R:R
            double rr = (tp - price) / (price - sl);
            if(rr >= MinRRRatio)
            {
               OpenOrder(ORDER_TYPE_BUY, sl, tp);
               return;
            }
         }
      }
   }
}

//+------------------------------------------------------------------+
//| Проверка сигнала на продажу                                      |
//+------------------------------------------------------------------+
void CheckSellSignal(double price, double zoneSize)
{
   for(int i = 0; i < ArraySize(resistanceZones); i++)
   {
      if(resistanceZones[i] == 0) continue;
      
      // Проверяем, находится ли цена в зоне сопротивления
      if(price <= resistanceZones[i] && price >= (resistanceZones[i] - zoneSize))
      {
         // Проверяем, был ли отскок (закрытие ниже открытия)
         if(iClose(_Symbol, _Period, 1) < iOpen(_Symbol, _Period, 1))
         {
            double sl = resistanceZones[i] + StopLossPips * _Point;
            double tp = price - (TakeProfitPips * _Point);
            
            // Проверяем соотношение R:R
            double rr = (price - tp) / (sl - price);
            if(rr >= MinRRRatio)
            {
               OpenOrder(ORDER_TYPE_SELL, sl, tp);
               return;
            }
         }
      }
   }
}

//+------------------------------------------------------------------+
//| Открытие ордера                                                  |
//+------------------------------------------------------------------+
void OpenOrder(ENUM_ORDER_TYPE orderType, double sl, double tp)
{
   MqlTradeRequest request = {};
   MqlTradeResult result = {};
   
   request.action = TRADE_ACTION_DEAL;
   request.symbol = _Symbol;
   request.volume = LotSize;
   request.type = orderType;
   request.price = (orderType == ORDER_TYPE_BUY) ? SymbolInfoDouble(_Symbol, SYMBOL_ASK) : SymbolInfoDouble(_Symbol, SYMBOL_BID);
   request.sl = sl;
   request.tp = tp;
   request.deviation = 10;
   request.type_filling = ORDER_FILLING_FOK;
   
   OrderSend(request, result);
   
   if(result.retcode != TRADE_RETCODE_DONE)
      Print("Ошибка открытия ордера: ", GetLastError());
}

Ключевые особенности стратегии:

  1. Определение уровней поддержки/сопротивления:

    • Ищет локальные минимумы (поддержка) и максимумы (сопротивление) на заданном количестве свечей ( SRCandlesLookback ).

  2. Торговые сигналы:

    • Покупка (Buy): При отскоке вверх от зоны поддержки (закрытие свечи выше открытия).

    • Продажа (Sell): При отскоке вниз от зоны сопротивления (закрытие свечи ниже открытия).

  3. Управление рисками:

    • Фиксированные  StopLossPips  и  TakeProfitPips .

    • Проверка минимального соотношения R:R ( MinRRRatio ).

    • Ширина зоны поддержки/сопротивления динамически рассчитывается через ATR ( SRZonePct ).

  4. Фильтрация сделок:

    • Открывает только одну позицию за раз (не торгует, если уже есть открытая позиция).

    • Проверяет, чтобы потенциальная прибыль соответствовала заданному R:R.

Как использовать:

  1. Прикрепите советник к графику EURUSD H1.

  2. Настройте параметры во вкладке "Inputs":

    • LotSize ,  StopLossPips ,  TakeProfitPips  — под ваш риск-менеджмент.

    • MinRRRatio  — минимальное соотношение прибыли к риску (рекомендуется 1.5+).

  3. Стратегия будет автоматически искать уровни и открывать сделки при отскоках.

Оптимизация:

  • Тестируйте на истории с разными параметрами  SRCandlesLookback  и  SRZonePct .

  • Добавьте дополнительные фильтры (например, RSI или трендовые индикаторы).

 

Сделайте этот код в формате файла mq5

(тут он эту же прогу по новее скинул)

;)

---

Инструкция по установке:

  1. Скопируйте 

  2. Скомпилируйте (F7)

  3. Прикрепите к графику в MetaTrader 5

Особенности стратегии:

  1. Гибкие параметры:

    • Настраиваемые уровни стоп-лосса и тейк-профита

    • Минимальное соотношение риск/прибыль

    • Ширина зон поддержки/сопротивления на основе ATR

  2. Контроль рисков:

    • Проверка R:R перед открытием сделки

    • Торговля только на новых барах

    • Одна позиция одновременно

  3. Логика торговли:

    • Покупка при отскоке от поддержки

    • Продажа при отскоке от сопротивления

    • Подтверждение разворота (цена закрытия свечи)

Для оптимизации параметров используйте тестер стратегий в MetaTrader 5.

 
Roman Shiredchenko #:

Рена запроси у него актуальную Формул Е твою и мне в личку кинь плз....

у него даже в мыслях такого не будет

видно же чем пользуется

это даже не рядом

 
Roman Shiredchenko #:


И ему трактовку и псевдокод можешь скормить формулы Е.

счас )))

нельзя допустить чтобы ИИ поимел человека

много будет знать - скоро состарится ;)
 
Roman Shiredchenko #:

ты ему ее скорми - как есть у тебя

с этим не ко мне

 
Код надо смотреть внимательно. Бывает, что с ошибками. А так да - иногда могет.
 
Renat Akhtyamov #:

Сделайте этот код в формате файла mq5

(тут он эту же прогу по новее скинул)

Ну, надо же!!! ИИ всего две ошибки во втором коде сделал. Прогресс!!! )

С уважением, Владимир.

 
MrBrooklin #:

Ну, надо же!!! ИИ всего две ошибки во втором коде сделал. Прогресс!!! )

С уважением, Владимир.

надо просто сообщить ему о ошибке и он поправит.

 
Evgeny Belyaev #:

надо просто сообщить ему о ошибке и он поправит.

Сам поправил. )

Просто удивительный прогресс у ИИ. Предоставил стратегию, причём рабочую. Сливную, но рабочую!!!

С уважением, Владимир.

 

напишите код успешного торгового робота на mql5 c фильтром тренда по ADX с внедренными алгоритмами машинного обучения с интеграцией MQL DLL (Python-C API) и замените эмулятор ML на вызов реальной модели, добавьте обработку ошибок

---

Продвинутый торговый робот на MQL5 с ADX, ML и Python интеграцией

Python DLL код (python_ml_integration.py)

Ключевые особенности реализации:

  1. Полная интеграция MQL5-Python через DLL:

    • Загрузка обученных TensorFlow/Keras моделей

    • Реализация безопасного обмена данными

    • Поддержка различных архитектур моделей

  2. Профессиональная обработка ошибок:

    • Детальное логирование всех операций

    • Проверка согласованности данных

    • Защита от неправильных состояний

  3. Оптимизированная торговая логика:

  4. Расширенный мониторинг:

    • Визуализация вероятностей ML в терминале

    • Настройка оповещений о важных событиях

    • Подробное протоколирование в журнал

Файлы: