# Ищу трейдера для совместной разработки торговых ботов.

Раздел: Разные услуги, вакансии, предложения
Автор темы: AndreyTr
Создана: 2023-10-16 23:12
Ответов: 116 | Просмотров: 9471
Страница 5 из 6
Источник: https://forexsystemru.com/threads/91958/page-5

---

## Viktor-M — 2025-06-08 23:36

> Цитата (AndreyTr):
> Не устраивай детский сад.

Хорошо , можно тогда узнать твой прайс на услуги ? 

Введение и описание стратегии
Техническое задание на советник SMA + RSI для MT4
Платформа: MetaTrader 4
Цель: Автоматизация торговли по стратегии на основе касания цены SMA и RSI.
Описание стратегии:
Вход BUY: цена коснулась SMA сверху вниз, RSI < 30
Вход SELL: цена коснулась SMA снизу вверх, RSI > 70
Выход BUY: RSI > 70
Выход SELL: RSI < 30
Одна позиция одновременно, торговля на закрытии бара, без стопов и тейков.
Параметры и логика работы
Входные параметры:
smaPeriod (по умолчанию 14)
rsiPeriod (14)
rsiLowLevel (30)
rsiHighLevel (70)
lotSize (0.1)
magic (123456)
slippage (3)
Логика:
Проверка нового бара
Расчёт SMA и RSI
Открытие и закрытие позиций по описанным правилам
Логирование операций
 Особые условия и тестирование
Особые условия:
Поддержка открытых позиций после перезапуска терминала
Защита от повторных сделок на одном баре
Обработка ошибок с выводом сообщений
Тестирование и документация:
Предоставить исходники и ex4
Провести базовое тестирование и предоставить отчёт
Краткая инструкция по установке и настройке

## AndreyTr — 2025-06-08 23:55

У меня нет прайс листа, я все делаю бесплатно, но у меня есть условие: стратегия должна быть плюсовой при ручной торговле хотя бы несколько месяцев - полгода... я не хочу тратить время на бесполезное нерабочее г... 
Я сразу написал еще на первой странице - я программист, а не трейдер, у меня нет желания заработать на программировании, мне этого и так на работе хватает с головой. 
Конечно у меня нет идей и не может их быть, я этим не занимаюсь, не ищу стратегии, не тестирую их и тому подобное.. Ваша стратегия - мой код .. Не нравится, я никого не заставляю..

## AndreyTr — 2025-06-08 23:58

Опять же я написал что сейчас загружен и времени на новые проекты нет, но я бы рассмотрел действительно хороший рабочий проект поэтому и спросил есть ли реальная история торговли по стратегии, ну нет ее, че тут сопли пускать. Вон есть топик напишу бесплатно или что-то так.. если кто захочет, пожалуйста, но зачем тут сидеть и что-то пытаться мне доказывать?)

## Billy Kid — 2025-06-09 00:01

> Цитата (Viktor-M):
> Хорошо , можно тогда узнать твой прайс на услуги ?
>
>
> Введение и описание стратегии
> Техническое задание на советник SMA + RSI для MT4
> Платформа: MetaTrader 4
> Цель: Автоматизация торговли по стратегии на основе касания цены SMA и RSI.
> Описание стратегии:
> Вход BUY: цена коснулась SMA сверху вниз, RSI < 30
> Вход SELL: цена коснулась SMA снизу вверх, RSI > 70
> Выход BUY: RSI > 70
> Выход SELL: RSI < 30
> Одна позиция одновременно, торговля на закрытии бара, без стопов и тейков.
> Параметры и логика работы
> Входные параметры:
> smaPeriod (по умолчанию 14)
> rsiPeriod (14)
> rsiLowLevel (30)
> rsiHighLevel (70)
> lotSize (0.1)
> magic (123456)
> slippage (3)
> Логика:
> Проверка нового бара
> Расчёт SMA и RSI
> Открытие и закрытие позиций по описанным правилам
> Логирование операций
>  Особые условия и тестирование
> Особые условия:
> Поддержка открытых позиций после перезапуска терминала
> Защита от повторных сделок на одном баре
> Обработка ошибок с выводом сообщений
> Тестирование и документация:
> Предоставить исходники и ex4
> Провести базовое тестирование и предоставить отчёт
> Краткая инструкция по установке и настройке

Если вы хотите период 14 rsi, то на пятиминутке машку период 96 поставьте. Уровни rsi 38 и 62. Если у вас какие то другие инвестиционные горизонты, то и периоды следует другие поставить. Сама система конечно же сложней, чем вышеизложенная схема, просто сигналы могут длиться по несколько секунд. На закрытии бара касание-отскок и если не успел, то день без сделки. Поэтому и нужен простецкий бот, который тупо зацепит сделку, а дальше уже по ходу дела в ручном режиме тейки или еще чего там.
То есть, смысл бота просто чтобы сделка открылась во время

## AndreyTr — 2025-06-09 00:01

> Цитата (Viktor-M):
> Хорошо , можно тогда узнать твой прайс на услуги ?
>
>
> Введение и описание стратегии
> Техническое задание на советник SMA + RSI для MT4
> Платформа: MetaTrader 4
> Цель: Автоматизация торговли по стратегии на основе касания цены SMA и RSI.
> Описание стратегии:
> Вход BUY: цена коснулась SMA сверху вниз, RSI < 30
> Вход SELL: цена коснулась SMA снизу вверх, RSI > 70
> Выход BUY: RSI > 70
> Выход SELL: RSI < 30
> Одна позиция одновременно, торговля на закрытии бара, без стопов и тейков.
> Параметры и логика работы
> Входные параметры:
> smaPeriod (по умолчанию 14)
> rsiPeriod (14)
> rsiLowLevel (30)
> rsiHighLevel (70)
> lotSize (0.1)
> magic (123456)
> slippage (3)
> Логика:
> Проверка нового бара
> Расчёт SMA и RSI
> Открытие и закрытие позиций по описанным правилам
> Логирование операций
>  Особые условия и тестирование
> Особые условия:
> Поддержка открытых позиций после перезапуска терминала
> Защита от повторных сделок на одном баре
> Обработка ошибок с выводом сообщений
> Тестирование и документация:
> Предоставить исходники и ex4
> Провести базовое тестирование и предоставить отчёт
> Краткая инструкция по установке и настройке

поторгуй руками, покажи плюс, и я тебе бесплатно это напишу.. в итоге у нас будет по роботу который будет зарабатывать

## Viktor-M — 2025-06-09 00:09

> Цитата (AndreyTr):
> поторгуй руками, покажи плюс, и я тебе бесплатно это напишу.. в итоге у нас будет по роботу который будет зарабатывать

Да мне не нужна эта стратегия . Ты уже нить разговора потерял кто ее просил . Если мне будет нужно то поищу проверенных исполнителей с отзывами по теме советников за живые деньги доработать после ИИ или написать заново не важно. Я смотрю что еще  щеки тут любят надувать в соседней  "бесплатной" ветке ) Ну ну , посмотрим еще через полгодика как вы запоете все.)

## Viktor-M — 2025-06-09 00:11

> Цитата (Billy Kid):
> Если вы хотите

Я пока это не хочу . Просто вспомнил где я это видел раньше . Но пусть будет тут , может когда и сгодится.

## Billy Kid — 2025-06-09 00:14

> Цитата (Viktor-M):
> Я пока это не хочу . Просто вспомнил где я это видел раньше . Но пусть будет тут , может когда и сгодится.

Хозяин - барин. В любом случае спасибо за код, Надеюсь, кто нибудь из кодеров сделает рабочий вариант

## AndreyTr — 2025-06-09 00:17

> Цитата (Viktor-M):
> Да мне не нужна эта стратегия . Ты уже нить разговора потерял кто ее просил . Если мне будет нужно то поищу проверенных исполнителей с отзывами по теме советников за живые деньги доработать после ИИ или написать заново не важно. Я смотрю что еще  щеки тут любят надувать в соседней  "бесплатной" ветке ) Ну ну , посмотрим еще через полгодика как вы запоете все.)

Вот именно, все верно пишешь, если тебе нужно будет то ты найдешь программера за бабки.. так ок, я ж не против, я не говорю что типа ты че, давай я тебе все сделаю.. нет) Обсуждать то тут нечего.
Я создал тему, нашел человек кому это было интересно, мы с ним пилим норм проекты, потом я поделился результатами это и было моей целью)

> Цитата (Billy Kid):
> .

Ты вообще не понимаешь ни че.. Почитай выше где я писал про риски.. каждый берет и принимает какие-то риски в работе. Трейдер что его могут кинуть, программер что может попасться какой-то который нифига сам не шарит... Я понимаю что такое может быть и принимаю эти риски.

## Viktor-M — 2025-06-09 04:04

> Цитата (Billy Kid):
> Хозяин - барин. В любом случае спасибо за код, Надеюсь, кто нибудь из кодеров сделает рабочий вариант

Вот код от Антропика .

//+------------------------------------------------------------------+
//|                                              EA_SMA_RSI_Strategy.mq4 |
//|                        Copyright 2024, MetaQuotes Software Corp. |
//|                                             MQL4: automated forex trading, strategy tester and custom indicators with MetaTrader |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Software Corp."
#property link      "MQL4: automated forex trading, strategy tester and custom indicators with MetaTrader"
#property version   "1.10"
#property strict

//--- Входные параметры
input int    SMAPeriod = 14;           // Период Simple Moving Average
input int    RSIPeriod = 14;           // Период RSI
input double RSIBuyLevel = 30.0;       // Уровень RSI для входа в покупку
input double RSISellLevel = 70.0;      // Уровень RSI для входа в продажу
input double RSIExitBuyLevel = 70.0;   // Уровень RSI для выхода из покупки
input double RSIExitSellLevel = 30.0;  // Уровень RSI для выхода из продажи
input double LotSize = 0.1;            // Размер лота
input int    MagicNumber = 12345;      // Магический номер
input int    Slippage = 3;             // Проскальзывание в пунктах

//--- Дополнительные параметры
input bool   UseMarginCheck = true;    // Проверять уровень свободной маржи
input double MinMarginPercent = 50.0;  // Минимальный процент свободной маржи
input bool   UseTimeFilter = false;    // Использовать фильтр по времени
input int    StartHour = 8;            // Час начала торговли (0-23)
input int    EndHour = 18;             // Час окончания торговли (0-23)
input bool   SendAlerts = false;       // Отправлять алерты

//--- Глобальные переменные
datetime lastBarTime = 0;              // Время последнего обработанного бара
bool positionOpen = false;             // Флаг открытой позиции
int positionType = -1;                 // Тип позиции: 0 - BUY, 1 - SELL, -1 - нет позиции
string globalVarName = "";             // Имя глобальной переменной для сохранения времени бара

//+------------------------------------------------------------------+
//| Функция инициализации эксперта                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   Print("=== EA SMA RSI Strategy v1.10 инициализирован ===");
   Print("Параметры торговли:");
   Print("- SMA период: ", SMAPeriod);
   Print("- RSI период: ", RSIPeriod);
   Print("- RSI уровни: Buy<", RSIBuyLevel, ", Sell>", RSISellLevel);
   Print("- RSI выход: Buy>", RSIExitBuyLevel, ", Sell<", RSIExitSellLevel);
   Print("- Размер лота: ", LotSize);
   Print("- Магический номер: ", MagicNumber);
 
   // Проверка входных параметров
   if(!ValidateInputs())
      return(INIT_PARAMETERS_INCORRECT);
 
   // Создание имени глобальной переменной
   globalVarName = "EA_" + IntegerToString(MagicNumber) + "_" + Symbol() + "_LastBar";
 
   // Восстановление времени последнего обработанного бара
   if(GlobalVariableCheck(globalVarName))
   {
      lastBarTime = (datetime)GlobalVariableGet(globalVarName);
      Print("Восстановлено время последнего бара: ", TimeToStr(lastBarTime));
   }
 
   // Проверка наличия открытых позиций при запуске
   CheckExistingPositions();
 
   // Информация о дополнительных настройках
   if(UseMarginCheck)
      Print("Проверка маржи включена: минимум ", MinMarginPercent, "%");
 
   if(UseTimeFilter)
      Print("Фильтр времени включен: ", StartHour, ":00 - ", EndHour, ":00");
 
   if(SendAlerts)
      Print("Алерты включены");
 
   Print("=== Инициализация завершена ===");
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Функция деинициализации эксперта                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   // Сохранение времени последнего обработанного бара
   if(lastBarTime > 0)
   {
      GlobalVariableSet(globalVarName, (double)lastBarTime);
      Print("Время последнего бара сохранено: ", TimeToStr(lastBarTime));
   }
 
   Print("EA SMA RSI Strategy деинициализирован. Причина: ", GetDeinitReasonText(reason));
}

//+------------------------------------------------------------------+
//| Основная функция эксперта                                        |
//+------------------------------------------------------------------+
void OnTick()
{
   // Проверяем, что сформировался новый бар
   if(Time == lastBarTime)
      return;
 
   // Проверка фильтра по времени
   if(UseTimeFilter && !IsTradeTimeAllowed())
   {
      return;
   }
 
   // Проверяем наличие достаточного количества баров для расчета индикаторов
   if(Bars < MathMax(SMAPeriod, RSIPeriod) + 2)
   {
      LogMessage("Недостаточно баров для расчета индикаторов", true);
      return;
   }
 
   // Обновляем время последнего обработанного бара
   lastBarTime = Time;
   GlobalVariableSet(globalVarName, (double)lastBarTime);
 
   // Обновляем статус позиции
   UpdatePositionStatus();
 
   // Получаем значения индикаторов
   double sma_current = iMA(NULL, 0, SMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
   double sma_previous = iMA(NULL, 0, SMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 2);
   double rsi_current = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, 1);
 
   // Проверяем корректность значений индикаторов
   if(sma_current <= 0 || sma_previous <= 0 || rsi_current <= 0)
   {
      LogMessage("Ошибка получения значений индикаторов", true);
      return;
   }
 
   // Цены закрытия
   double close_current = Close;    // Закрытие текущего завершенного бара
   double close_previous = Close;   // Закрытие предыдущего бара
 
   // Логика торговли
   if(!positionOpen)
   {
      // Проверка условий для входа в покупку
      if(CheckBuyCondition(close_previous, close_current, sma_previous, sma_current, rsi_current))
      {
         if(CheckMarginRequirement(OP_BUY))
         {
            OpenBuyPosition();
         }
         else
         {
            LogMessage("Недостаточно свободной маржи для открытия позиции BUY", true);
         }
      }
      // Проверка условий для входа в продажу
      else if(CheckSellCondition(close_previous, close_current, sma_previous, sma_current, rsi_current))
      {
         if(CheckMarginRequirement(OP_SELL))
         {
            OpenSellPosition();
         }
         else
         {
            LogMessage("Недостаточно свободной маржи для открытия позиции SELL", true);
         }
      }
   }
   else
   {
      // Проверка условий для выхода из позиции
      if(positionType == OP_BUY && rsi_current > RSIExitBuyLevel)
      {
         LogMessage("Сигнал выхода из BUY: RSI=" + DoubleToStr(rsi_current, 2) + " > " + DoubleToStr(RSIExitBuyLevel, 2), false);
         ClosePosition();
      }
      else if(positionType == OP_SELL && rsi_current < RSIExitSellLevel)
      {
         LogMessage("Сигнал выхода из SELL: RSI=" + DoubleToStr(rsi_current, 2) + " < " + DoubleToStr(RSIExitSellLevel, 2), false);
         ClosePosition();
      }
   }
}

//+------------------------------------------------------------------+
//| Валидация входных параметров                                     |
//+------------------------------------------------------------------+
bool ValidateInputs()
{
   bool isValid = true;
 
   if(SMAPeriod <= 0)
   {
      Print("ОШИБКА: Период SMA должен быть больше 0");
      isValid = false;
   }
 
   if(RSIPeriod <= 0)
   {
      Print("ОШИБКА: Период RSI должен быть больше 0");
      isValid = false;
   }
 
   if(LotSize <= 0)
   {
      Print("ОШИБКА: Размер лота должен быть больше 0");
      isValid = false;
   }
 
   if(RSIBuyLevel >= RSISellLevel)
   {
      Print("ОШИБКА: Уровень RSI для покупки должен быть меньше уровня для продажи");
      isValid = false;
   }
 
   if(UseTimeFilter && StartHour < 0 || StartHour > 23 || EndHour < 0 || EndHour > 23)
   {
      Print("ОШИБКА: Торговые часы должны быть в диапазоне 0-23");
      isValid = false;
   }
 
   if(UseMarginCheck && MinMarginPercent < 0)
   {
      Print("ОШИБКА: Минимальный процент маржи не может быть отрицательным");
      isValid = false;
   }
 
   return isValid;
}

//+------------------------------------------------------------------+
//| Проверка торгового времени                                       |
//+------------------------------------------------------------------+
bool IsTradeTimeAllowed()
{
   if(!UseTimeFilter)
      return true;
 
   int currentHour = Hour();
 
   if(StartHour <= EndHour)
   {
      // Обычный диапазон (например, 8-18)
      return (currentHour >= StartHour && currentHour < EndHour);
   }
   else
   {
      // Ночной диапазон (например, 22-6)
      return (currentHour >= StartHour || currentHour < EndHour);
   }
}

//+------------------------------------------------------------------+
//| Проверка уровня маржи                                            |
//+------------------------------------------------------------------+
bool CheckMarginRequirement(int orderType)
{
   if(!UseMarginCheck)
      return true;
 
   double freeMargin = AccountFreeMargin();
   double equity = AccountEquity();
 
   if(equity <= 0)
      return false;
 
   double freeMarginPercent = (freeMargin / equity) * 100.0;

## Viktor-M — 2025-06-09 04:06

Вторая часть...

   LogMessage("Свободная маржа: " + DoubleToStr(freeMarginPercent, 2) + "%", false);
  
   return (freeMarginPercent >= MinMarginPercent);
}

//+------------------------------------------------------------------+
//| Проверка условий для входа в покупку                             |
//+------------------------------------------------------------------+
bool CheckBuyCondition(double close_prev, double close_curr, double sma_prev, double sma_curr, double rsi)
{
   // Цена закрытия предыдущего бара была выше SMA
   bool condition1 = close_prev > sma_prev;
  
   // Текущая цена коснулась или опустилась ниже SMA
   bool condition2 = close_curr <= sma_curr;
  
   // RSI ниже уровня для покупки
   bool condition3 = rsi < RSIBuyLevel;
  
   if(condition1 && condition2 && condition3)
   {
      string message = "Сигнал BUY: Close=" + DoubleToStr(close_prev, Digits) + " > SMA=" + DoubleToStr(sma_prev, Digits) +
                      ", Close=" + DoubleToStr(close_curr, Digits) + " <= SMA=" + DoubleToStr(sma_curr, Digits) +
                      ", RSI=" + DoubleToStr(rsi, 2);
      LogMessage(message, false);
      return true;
   }
  
   return false;
}

//+------------------------------------------------------------------+
//| Проверка условий для входа в продажу                             |
//+------------------------------------------------------------------+
bool CheckSellCondition(double close_prev, double close_curr, double sma_prev, double sma_curr, double rsi)
{
   // Цена закрытия предыдущего бара была ниже SMA
   bool condition1 = close_prev < sma_prev;
  
   // Текущая цена коснулась или поднялась выше SMA
   bool condition2 = close_curr >= sma_curr;
  
   // RSI выше уровня для продажи
   bool condition3 = rsi > RSISellLevel;
  
   if(condition1 && condition2 && condition3)
   {
      string message = "Сигнал SELL: Close=" + DoubleToStr(close_prev, Digits) + " < SMA=" + DoubleToStr(sma_prev, Digits) +
                      ", Close=" + DoubleToStr(close_curr, Digits) + " >= SMA=" + DoubleToStr(sma_curr, Digits) +
                      ", RSI=" + DoubleToStr(rsi, 2);
      LogMessage(message, false);
      return true;
   }
  
   return false;
}

//+------------------------------------------------------------------+
//| Открытие позиции на покупку                                      |
//+------------------------------------------------------------------+
void OpenBuyPosition()
{
   double price = Ask;
   int ticket = OrderSend(Symbol(), OP_BUY, LotSize, price, Slippage, 0, 0,
                         "SMA RSI Buy", MagicNumber, 0, clrGreen);
  
   if(ticket > 0)
   {
      string message = "BUY позиция открыта успешно. Тикет: " + IntegerToString(ticket) + ", Цена: " + DoubleToStr(price, Digits);
      LogMessage(message, false);
     
      if(SendAlerts)
         Alert("EA: ", Symbol(), " - ", message);
     
      positionOpen = true;
      positionType = OP_BUY;
   }
   else
   {
      int error = GetLastError();
      string errorMsg = "Ошибка открытия BUY позиции. Код: " + IntegerToString(error) + " - " + GetErrorDescription(error);
      LogMessage(errorMsg, true);
     
      if(SendAlerts)
         Alert("EA ERROR: ", Symbol(), " - ", errorMsg);
   }
}

//+------------------------------------------------------------------+
//| Открытие позиции на продажу                                      |
//+------------------------------------------------------------------+
void OpenSellPosition()
{
   double price = Bid;
   int ticket = OrderSend(Symbol(), OP_SELL, LotSize, price, Slippage, 0, 0,
                         "SMA RSI Sell", MagicNumber, 0, clrRed);
  
   if(ticket > 0)
   {
      string message = "SELL позиция открыта успешно. Тикет: " + IntegerToString(ticket) + ", Цена: " + DoubleToStr(price, Digits);
      LogMessage(message, false);
     
      if(SendAlerts)
         Alert("EA: ", Symbol(), " - ", message);
     
      positionOpen = true;
      positionType = OP_SELL;
   }
   else
   {
      int error = GetLastError();
      string errorMsg = "Ошибка открытия SELL позиции. Код: " + IntegerToString(error) + " - " + GetErrorDescription(error);
      LogMessage(errorMsg, true);
     
      if(SendAlerts)
         Alert("EA ERROR: ", Symbol(), " - ", errorMsg);
   }
}

## Viktor-M — 2025-06-09 04:07

Третья часть ..

//+------------------------------------------------------------------+
//| Закрытие позиции                                                 |
//+------------------------------------------------------------------+
void ClosePosition()
{
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
            bool result = false;
            double closePrice = 0;
            string orderTypeStr = "";
           
            if(OrderType() == OP_BUY)
            {
               closePrice = Bid;
               orderTypeStr = "BUY";
               result = OrderClose(OrderTicket(), OrderLots(), closePrice, Slippage, clrBlue);
            }
            else if(OrderType() == OP_SELL)
            {
               closePrice = Ask;
               orderTypeStr = "SELL";
               result = OrderClose(OrderTicket(), OrderLots(), closePrice, Slippage, clrOrange);
            }
           
            if(result)
            {
               double profit = OrderProfit() + OrderSwap() + OrderCommission();
               string message = orderTypeStr + " позиция закрыта. Тикет: " + IntegerToString(OrderTicket()) +
                               ", Цена: " + DoubleToStr(closePrice, Digits) + ", Прибыль: " + DoubleToStr(profit, 2);
               LogMessage(message, false);
              
               if(SendAlerts)
                  Alert("EA: ", Symbol(), " - ", message);
              
               positionOpen = false;
               positionType = -1;
            }
            else
            {
               int error = GetLastError();
               string errorMsg = "Ошибка закрытия позиции. Тикет: " + IntegerToString(OrderTicket()) +
                               ", Код: " + IntegerToString(error) + " - " + GetErrorDescription(error);
               LogMessage(errorMsg, true);
              
               if(SendAlerts)
                  Alert("EA ERROR: ", Symbol(), " - ", errorMsg);
            }
            break;
         }
      }
   }
}

//+------------------------------------------------------------------+
//| Обновление статуса позиции                                       |
//+------------------------------------------------------------------+
void UpdatePositionStatus()
{
   positionOpen = false;
   positionType = -1;
  
   for(int i = 0; i < OrdersTotal(); i++)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
            positionOpen = true;
            positionType = OrderType();
            break;
         }
      }
   }
}

//+------------------------------------------------------------------+
//| Проверка существующих позиций при запуске                        |
//+------------------------------------------------------------------+
void CheckExistingPositions()
{
   UpdatePositionStatus();
  
   if(positionOpen)
   {
      string posTypeStr = (positionType == OP_BUY) ? "BUY" : "SELL";
      LogMessage("Обнаружена открытая позиция: " + posTypeStr, false);
   }
   else
   {
      LogMessage("Открытых позиций не обнаружено", false);
   }
}

//+------------------------------------------------------------------+
//| Функция логирования сообщений                                    |
//+------------------------------------------------------------------+
void LogMessage(string message, bool isError)
{
   string timestamp = TimeToStr(TimeCurrent(), TIME_DATE | TIME_SECONDS);
   string logLevel = isError ? "" : "";
   string fullMessage = timestamp + " " + logLevel + " " + message;
  
   Print(fullMessage);
}

//+------------------------------------------------------------------+
//| Получение описания ошибки                                        |
//+------------------------------------------------------------------+
string GetErrorDescription(int errorCode)
{
   switch(errorCode)
   {
      case 0:   return "Нет ошибки";
      case 1:   return "Нет ошибки, но результат неизвестен";
      case 2:   return "Общая ошибка";
      case 3:   return "Неправильные параметры";
      case 4:   return "Торговый сервер занят";
      case 5:   return "Старая версия терминала";
      case 6:   return "Нет связи с торговым сервером";
      case 7:   return "Недостаточно прав";
      case 8:   return "Слишком частые запросы";
      case 9:   return "Недопустимая операция нарушающая функционирование сервера";
      case 64:  return "Счет заблокирован";
      case 65:  return "Неправильный номер счета";
      case 128: return "Истек срок ожидания совершения сделки";
      case 129: return "Неправильная цена";
      case 130: return "Неправильные стопы";
      case 131: return "Неправильный объем";
      case 132: return "Рынок закрыт";
      case 133: return "Торговля запрещена";
      case 134: return "Недостаточно денег";
      case 135: return "Цена изменилась";
      case 136: return "Нет цен";
      case 137: return "Брокер занят";
      case 138: return "Новые цены";
      case 139: return "Ордер заблокирован";
      case 140: return "Разрешена только покупка";
      case 141: return "Слишком много запросов";
      case 145: return "Модификация запрещена. Ордер слишком близко к рынку";
      case 146: return "Подсистема торговли занята";
      case 147: return "Использование даты истечения ордера запрещено брокером";
      case 148: return "Количество открытых и отложенных ордеров достигло лимита";
      default:  return "Неизвестная ошибка";
   }
}

//+------------------------------------------------------------------+
//| Получение описания причины деинициализации                       |
//+------------------------------------------------------------------+
string GetDeinitReasonText(int reason)
{
   switch(reason)
   {
      case REASON_PROGRAM:     return "Программа завершена самостоятельно";
      case REASON_REMOVE:      return "Программа удалена с графика";
      case REASON_RECOMPILE:   return "Программа перекомпилирована";
      case REASON_CHARTCHANGE: return "Изменился период графика";
      case REASON_CHARTCLOSE:  return "График закрыт";
      case REASON_PARAMETERS:  return "Изменились входные параметры";
      case REASON_ACCOUNT:     return "Изменился счет";
      case REASON_TEMPLATE:    return "Применен новый шаблон";
      case REASON_INITFAILED:  return "Ошибка инициализации";
      case REASON_CLOSE:       return "Терминал закрыт";
      default:                 return "Неизвестная причина";
   }
}

## AndreyTr — 2025-06-09 09:07

Viktor-M
Очень большая просьба, если кидаешь код, убирай его под спойлер

## Viktor-M — 2025-06-09 09:16

> Цитата (AndreyTr):
> Viktor-M
> Очень большая просьба, если кидаешь код, убирай его под сп

Да я как то не сообразил сразу . Скажи лучше , Клод толково код написал или еще кого просить ?

## Viktor-M — 2025-06-09 09:29

А то вдруг он на перфокартах только работать будет.)

## AndreyTr — 2025-06-09 09:46

Так он даже на перфокартах не будет работать))

АИ пока не способен взять и написать большой готовый к работе правильный код. Ты сам начинаешь писать и потом закидываешь ему то что не понимаешь или закидываешь то что хочешь исправить.. по другому это не работает)

Если начать с самого начала то
void OnTick()
{
// Проверяем, что сформировался новый бар
if(Time == lastBarTime)
return;

Time такого уже нет может было в мт4, он оттуда и тянет
у меня допустим проверка нового бара выглядит вот так

```
int CheckNewBar::CheckBar(ENUM_TIMEFRAMES period)
{
   currentBarOpenTimeF = iTime(_Symbol, period, 0);
   if(currentBarOpenTimeF == 0)
   {
      Print("Ошибка iTime, код ошибки: ", GetLastError());
      ResetLastError();
      return -1;
   }
   if(currentBarOpenTimeF == previousBarOpenTime)
      return 0;
   previousBarOpenTime = currentBarOpenTimeF;
   return 1;
}
```

// Цены закрытия
double close_current = Close; // Закрытие текущего завершенного бара
Close такого тоже нет. 
бары ты получаешь через 
CopyRates(_Symbol, period, 0, 3, rates_period)

И т.д.. у тебя как и в первом варианте все встроенные функции он написал неверные, которых либо уже нет, либо они с ошибками..

Просто нажми в едиторе Ф1 и почитай справку, там все офигенно расписано, через 2-3 месяца будешь шпарить этих роботов на ура.

Без понимания азов программирования аи бесполезен, самостоятельно он не сделает ничего что будет нормально работать

## Viktor-M — 2025-06-09 09:49

> Цитата (AndreyTr):
> такого уже нет может было в мт4, он оттуда и тянет

Так ему и сказано было для мт4 писать.

## AndreyTr — 2025-06-09 09:54

input double RSIBuyLevel = 30.0; // Уровень RSI для входа в покупку 
это для мт5, для мт4 это будет
extern double RSIBuyLevel = 30.0; // Уровень RSI для входа в покупку, 
Вроде, я на мт4 не писал потому что это уже все устаревшее

## Viktor-M — 2025-06-09 10:01

> Цитата (AndreyTr):
> input double RSIBuyLevel = 30.0; // Уровень RSI для входа в покупку
> это для мт5, для мт4 это будет
> extern double RSIBuyLevel = 30.0; // Уровень RSI для входа в покупку,
> Вроде, я на мт4 не писал потому что это уже все устаревшее

Но я то на МТ4 торгую , мне зачем заморачиваться. МТ5 то есть но я его не пробовал из за заморочек с брокером осенью.

## AndreyTr — 2025-06-09 10:04

так я про код, у тебя часть кода мт5го, а часть кода мт4го) первое что я увидел это input с мт5, поэтому и подумал что мт5... если мт4 тогда это не ко мне, я по мт4 не шарю

---

Следующая страница: https://forexsystemru.com/threads/91958/page-6
