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

  • Автор темы Автор темы 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
Провести базовое тестирование и предоставить отчёт
Краткая инструкция по установке и настройке
 
У меня нет прайс листа, я все делаю бесплатно, но у меня есть условие: стратегия должна быть плюсовой при ручной торговле хотя бы несколько месяцев - полгода... я не хочу тратить время на бесполезное нерабочее г...
Я сразу написал еще на первой странице - я программист, а не трейдер, у меня нет желания заработать на программировании, мне этого и так на работе хватает с головой.
Конечно у меня нет идей и не может их быть, я этим не занимаюсь, не ищу стратегии, не тестирую их и тому подобное.. Ваша стратегия - мой код .. Не нравится, я никого не заставляю..
 
Опять же я написал что сейчас загружен и времени на новые проекты нет, но я бы рассмотрел действительно хороший рабочий проект поэтому и спросил есть ли реальная история торговли по стратегии, ну нет ее, че тут сопли пускать. Вон есть топик напишу бесплатно или что-то так.. если кто захочет, пожалуйста, но зачем тут сидеть и что-то пытаться мне доказывать?)
 
Хорошо , можно тогда узнать твой прайс на услуги ?


Введение и описание стратегии
Техническое задание на советник 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. Если у вас какие то другие инвестиционные горизонты, то и периоды следует другие поставить. Сама система конечно же сложней, чем вышеизложенная схема, просто сигналы могут длиться по несколько секунд. На закрытии бара касание-отскок и если не успел, то день без сделки. Поэтому и нужен простецкий бот, который тупо зацепит сделку, а дальше уже по ходу дела в ручном режиме тейки или еще чего там.
То есть, смысл бота просто чтобы сделка открылась во время

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


Введение и описание стратегии
Техническое задание на советник 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
Провести базовое тестирование и предоставить отчёт
Краткая инструкция по установке и настройке
поторгуй руками, покажи плюс, и я тебе бесплатно это напишу.. в итоге у нас будет по роботу который будет зарабатывать
 
поторгуй руками, покажи плюс, и я тебе бесплатно это напишу.. в итоге у нас будет по роботу который будет зарабатывать
Да мне не нужна эта стратегия . Ты уже нить разговора потерял кто ее просил . Если мне будет нужно то поищу проверенных исполнителей с отзывами по теме советников за живые деньги доработать после ИИ или написать заново не важно. Я смотрю что еще щеки тут любят надувать в соседней "бесплатной" ветке ) Ну ну , посмотрим еще через полгодика как вы запоете все.)
 
Я пока это не хочу . Просто вспомнил где я это видел раньше . Но пусть будет тут , может когда и сгодится.
Хозяин - барин. В любом случае спасибо за код, Надеюсь, кто нибудь из кодеров сделает рабочий вариант
 
Да мне не нужна эта стратегия . Ты уже нить разговора потерял кто ее просил . Если мне будет нужно то поищу проверенных исполнителей с отзывами по теме советников за живые деньги доработать после ИИ или написать заново не важно. Я смотрю что еще щеки тут любят надувать в соседней "бесплатной" ветке ) Ну ну , посмотрим еще через полгодика как вы запоете все.)
Вот именно, все верно пишешь, если тебе нужно будет то ты найдешь программера за бабки.. так ок, я ж не против, я не говорю что типа ты че, давай я тебе все сделаю.. нет) Обсуждать то тут нечего.
Я создал тему, нашел человек кому это было интересно, мы с ним пилим норм проекты, потом я поделился результатами это и было моей целью)

Ты вообще не понимаешь ни че.. Почитай выше где я писал про риски.. каждый берет и принимает какие-то риски в работе. Трейдер что его могут кинуть, программер что может попасться какой-то который нифига сам не шарит... Я понимаю что такое может быть и принимаю эти риски.
 
Последнее редактирование модератором:
Хозяин - барин. В любом случае спасибо за код, Надеюсь, кто нибудь из кодеров сделает рабочий вариант
Вот код от Антропика .
//+------------------------------------------------------------------+
//| 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[0] == lastBarTime)
return;

// Проверка фильтра по времени
if(UseTimeFilter && !IsTradeTimeAllowed())
{
return;
}

// Проверяем наличие достаточного количества баров для расчета индикаторов
if(Bars < MathMax(SMAPeriod, RSIPeriod) + 2)
{
LogMessage("Недостаточно баров для расчета индикаторов", true);
return;
}

// Обновляем время последнего обработанного бара
lastBarTime = Time[0];
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[1]; // Закрытие текущего завершенного бара
double close_previous = Close[2]; // Закрытие предыдущего бара

// Логика торговли
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;
 
Последнее редактирование модератором:
Вторая часть...
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[2]=" + DoubleToStr(close_prev, Digits) + " > SMA[2]=" + DoubleToStr(sma_prev, Digits) +
", Close[1]=" + DoubleToStr(close_curr, Digits) + " <= SMA[1]=" + 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[2]=" + DoubleToStr(close_prev, Digits) + " < SMA[2]=" + DoubleToStr(sma_prev, Digits) +
", Close[1]=" + DoubleToStr(close_curr, Digits) + " >= SMA[1]=" + 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);
}
}
 
Последнее редактирование модератором:
Третья часть ..
//+------------------------------------------------------------------+
//| Закрытие позиции |
//+------------------------------------------------------------------+
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 ? "[ERROR]" : "[INFO]";
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 "Неизвестная причина";
}
}
 
Последнее редактирование модератором:
А то вдруг он на перфокартах только работать будет.)
 
Так он даже на перфокартах не будет работать))

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

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

Time[0] такого уже нет может было в мт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[1]; // Закрытие текущего завершенного бара
Close[1] такого тоже нет.
бары ты получаешь через
CopyRates(_Symbol, period, 0, 3, rates_period)

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

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


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