так много доходностей построчно расписали… раньше вроде тоже понятно было.
Макс профит на металлах получился?
По ГО загружаете на 90% как прежде?
Комментарии пользователя Op_Man💰
так много доходностей построчно расписали… раньше вроде тоже понятно было.
Макс профит на металлах получился?
По ГО загружаете на 90% как прежде?
Добрый день. Вы в своих блогах регулярно писали, как вы на банках заработали то и это, кредитные карусели, кешбеки, скидки и т.д....
Видимо, не нужно было.
А почему не договориться и не сделать один общий стандарт Trade API для всех брокеров? Сейчас каждый городит свой огород — кто в лес, кто по дрова...
Зачем?
Лайт-версия идеи:
//+------------------------------------------------------------------+
//| Angle EA «Кусок робота алго» |
//+------------------------------------------------------------------+
#property strict
#property description «Угловой робот: сравнивает φ1 и φ2 из arcsin((x1-x2)/t)»
#include <Trade/Trade.mqh>
CTrade trade;
//--- константы
#define M_PI 3.14159265358979323846
//--- входные параметры
input int InpTimeframeMinutes = 5; // t в минутах (5, 15, 60 и т.д.)
input double InpAngleScale = 10000.0; // масштаб для (x1-x2) перед asin
input double InpLots = 0.1; // фиксированный лот
input bool InpTradeOnNewBar = true; // торговать только на новом баре
input ulong InpDeviation = 10; // проскальзывание в пунктах
input string InpComment = «AngleEA»; // комментарий к ордеру
//--- глобальные переменные
datetime last_bar_time = 0;
ulong last_trade_time = 0;
//+------------------------------------------------------------------+
//| Вспомогательные функции |
//+------------------------------------------------------------------+
// Преобразование минут в ENUM_TIMEFRAMES
ENUM_TIMEFRAMES MinutesToTimeframe(int minutes)
{
switch(minutes)
{
case 1: return PERIOD_M1;
case 5: return PERIOD_M5;
case 15: return PERIOD_M15;
case 30: return PERIOD_M30;
case 60: return PERIOD_H1;
case 120: return PERIOD_H2;
case 180: return PERIOD_H3;
case 240: return PERIOD_H4;
case 360: return PERIOD_H6;
case 480: return PERIOD_H8;
case 720: return PERIOD_H12;
case 1440: return PERIOD_D1;
case 10080: return PERIOD_W1;
case 43200: return PERIOD_MN1;
default: return PERIOD_CURRENT;
}
}
double GetPrice(int shift)
{
// используем цену закрытия
ENUM_TIMEFRAMES tf = MinutesToTimeframe(InpTimeframeMinutes);
double close = iClose(_Symbol, tf, shift);
// если не получилось с указанным ТФ, берем текущий
if(close == 0)
close = iClose(_Symbol, PERIOD_CURRENT, shift);
return close;
}
// нормализованный asin
double AngleFromDiff(double diff)
{
// diff = (x1 — x2)/t * масштаб
double x = diff * InpAngleScale;
// ограничим аргумент [-1,1]
x = NormalizeDouble(x, 8);
if(x > 1.0) x = 1.0;
if(x < -1.0) x = -1.0;
// MQL5: используем asin() вместо MathAsin()
double rad = asin(x); // радианы [-π/2, π/2]
double deg = rad * 180.0 / M_PI; // градусы [-90, 90]
return deg;
}
// получить текущую позицию
bool GetCurrentPosition(long &pos_type, double &pos_volume)
{
if(!PositionSelect(_Symbol))
return false;
pos_type = (long)PositionGetInteger(POSITION_TYPE);
pos_volume = PositionGetDouble(POSITION_VOLUME);
return true;
}
// закрыть позицию
bool ClosePosition()
{
if(!PositionSelect(_Symbol))
return true;
if(GetTickCount() — last_trade_time < 1000)
return false;
ulong ticket = (ulong)PositionGetInteger(POSITION_TICKET);
trade.SetDeviationInPoints(InpDeviation);
trade.SetAsyncMode(false);
bool res = trade.PositionClose(ticket);
if(res)
last_trade_time = GetTickCount();
return res;
}
// проверка возможности торговли
bool IsTradeAllowed()
{
if(!MQLInfoInteger(MQL_TRADE_ALLOWED))
{
Print(«Торговля запрещена в настройках терминала»);
return false;
}
if(!SymbolInfoInteger(_Symbol, SYMBOL_TRADE_MODE))
{
Print(«Торговля по символу запрещена»);
return false;
}
return true;
}
//+------------------------------------------------------------------+
//| OnInit |
//+------------------------------------------------------------------+
int OnInit()
{
last_bar_time = 0;
last_trade_time = 0;
trade.SetDeviationInPoints(InpDeviation);
trade.SetTypeFilling(ORDER_FILLING_IOC);
Print(«AngleEA инициализирован. Масштаб: », InpAngleScale);
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| OnDeinit |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
Comment("");
Print(«AngleEA остановлен. Причина: », reason);
}
//+------------------------------------------------------------------+
//| Основная логика |
//+------------------------------------------------------------------+
void OnTick()
{
if(!IsTradeAllowed())
return;
// торговать только на новом баре
if(InpTradeOnNewBar)
{
ENUM_TIMEFRAMES tf = MinutesToTimeframe(InpTimeframeMinutes);
datetime curr_bar_time = iTime(_Symbol, tf, 0);
if(curr_bar_time <= last_bar_time)
return;
last_bar_time = curr_bar_time;
}
// проверка количества баров
ENUM_TIMEFRAMES tf_check = MinutesToTimeframe(InpTimeframeMinutes);
int bars = iBars(_Symbol, tf_check);
if(bars < 5)
{
Comment(«Недостаточно истории: », bars, " баров");
return;
}
double t = (double)InpTimeframeMinutes;
if(t <= 0.0)
{
Print(«Ошибка: Timeframe <= 0»);
return;
}
// получаем цены
double x1 = GetPrice(1);
double x2 = GetPrice(2);
double x3 = GetPrice(3);
double x4 = GetPrice(4);
if(x1 == 0 || x2 == 0 || x3 == 0 || x4 == 0)
{
Comment(«Ошибка получения цен»);
return;
}
// расчет углов
double diff1 = (x1 — x2) / t;
double diff2 = (x3 — x4) / t;
double phi1 = AngleFromDiff(diff1);
double phi2 = AngleFromDiff(diff2);
// фильтр шума
if(MathAbs(phi1 — phi2) < 0.1)
return;
// получаем позицию
long pos_type = -1;
double pos_volume = 0.0;
bool have_pos = GetCurrentPosition(pos_type, pos_volume);
if(GetTickCount() — last_trade_time < 3000 && have_pos)
return;
string status = StringFormat(«phi1=%.2f phi2=%.2f | x1=%.5f x2=%.5f»,
phi1, phi2, x1, x2);
// логика торговли
if(phi1 > phi2) // покупка
{
if(have_pos && pos_type == POSITION_TYPE_BUY)
{
Comment(status + " | Long");
return;
}
if(have_pos && pos_type == POSITION_TYPE_SELL)
{
if(!ClosePosition())
{
Comment(status + " | Closing SELL...");
return;
}
Sleep(100);
}
trade.SetDeviationInPoints(InpDeviation);
if(trade.Buy(InpLots, _Symbol, 0, 0, 0, InpComment))
{
Print(«Buy executed. phi1=», phi1, " phi2=", phi2);
last_trade_time = GetTickCount();
Comment(status + " | BUY");
}
else
{
Print(«Buy error: », GetLastError());
}
}
else if(phi1 < phi2) // продажа
{
if(have_pos && pos_type == POSITION_TYPE_SELL)
{
Comment(status + " | Short");
return;
}
if(have_pos && pos_type == POSITION_TYPE_BUY)
{
if(!ClosePosition())
{
Comment(status + " | Closing BUY...");
return;
}
Sleep(100);
}
trade.SetDeviationInPoints(InpDeviation);
if(trade.Sell(InpLots, _Symbol, 0, 0, 0, InpComment))
{
Print(«Sell executed. phi1=», phi1, " phi2=", phi2);
last_trade_time = GetTickCount();
Comment(status + " | SELL");
}
else
{
Print(«Sell error: », GetLastError());
}
}
else
{
Comment(status + " | Neutral");
}
}
//+------------------------------------------------------------------+
Как отправная точка для исследований может и ок, но по тестам навскидку работы слишком много...
Кирилл Гудков, чем масштабнее разводка — тем она древнее и ее проще провернуть. По двум причинам: людям кажется, что разводка не может быть такой древней и масштабной. Не могло ведь так много людей повестись на нее — это из кино.
А по сути — мне в диковину, что люди до сих пор попадаются на такое...
🐌 Сочетания слов «автоматизированный торговый робот» и «форекс» должны сразу заставить немного напрячься.
Не соглашусь с вами. Форекс‑кухни с обещаниями по 20% в месяц и алготрейдинг как инструмент — это две большие разницы.
То, о чём здесь идёт речь, похоже не на торговых роботов, а на типичную форекс‑пирамиду с «волшебным алгоритмом» и сетевым маркетингом.
Идея о том, что «любимчики» получат максимальный приток денег — совершенно логичная. НО! Максимальный приток денег не означает максимальный рост акций.Ожидания большинства спекулянтов, что при низкой ставке деньги просто хлынут на рынок акций, рискуют остаться ожиданиями. Да, «любимчики» получат какой-то приток ликвидности, но это не гарантирует им максимального роста котировок: во‑первых, доверие к самому рынку подорвано, во‑вторых, для частного инвестора риск по акциям по‑прежнему выглядит неприемлемо высоким на фоне понятных депозитов/ОФЗ, в‑третьих, прозрачность корпоративного управления и механизмов «как тут зарабатывать» по‑прежнему оставляет вопросы. Плюс значительная часть потенциального притока осядет не в акциях, а в квази‑депозитных инструментах, структурках, ИИС с облигациями, ПИФах и т.п., то есть в продуктах, где брокеру и банку есть что продать, а рознице кажется, что она «инвестирует в рынок»…
Пацаны, поздравьте меня с профитом!С профитом вас!
Eugen Invest Malina, я, кажется, понял причину желчи вашей. Можете не отвечать.
15 минут ушло?👇 Без ВПН не навайбкодилось?

Чувствуется, что тема вас задела. Не вижу смысла спорить, кто из нас быстрее и лучше кодит. Мне это вообще не интересно.
Живите с миром, будьте счастливы.
Eugen Invest Malina, если у вас получается такие вещи за пару часов делать — искренне рад за вас.
Что является предметом обсуждения сейчас? Вы с какой целью эти вопросы задаёте?
Beach Bunny, свечи генерируются не «чистым рандомом», а с контролем волатильности и направленного дрейфа, чтобы имитировать типичное поведение каждого конкретного инструмента из представленных. Цель тренажёра — отработка базовых навыков (механика входов/выходов, риск-менеджмент, психология), а не тестирование конкретной стратегии на истории. Для бэктестов уместны реальные котировки, а для тренировки реакции и дисциплины или просто времяпрепровождения с соревновательной составляющей синтетики достаточно.
Активность приветствуется, тем более предметная: было бы здорово видеть такую же вовлечённость и в ответах на вопросы под вашими постами...
Тут, как обычно, всё упирается в методику: как считать, как часто пересобирать портфель, по каким принципам делать ротацию, что фильтровать по ликвидности и риску и т.д. На одних настройках импульс даёт приличную эквити, на других просто стирает капитал в ноль — у вас в примерах это хорошо видно.
Я тоже копал эту тему на примерах разных (биток, отдельные акции, портфель из нескольких бумаг, разные триггеры вместо прямого тайм‑шагового ребаланса) — вот пост: https://smart-lab.ru/blog/1173693.php
У коллег по алго‑и не только тоже достаточно материалов по моментуму (даже здесь на СЛ) и его «подводным камням», так что, думаю, если собрать и проанализировать все известные подходы, можно будет уже делать не только красивые бэктесты, но и более жизнеспособные реализации.
Короче говоря, пространство вариантов очень большое по теме.
__rtx, про мальчика ничего конкретного не скажу — читал не все подряд заметки его, а автора топика совсем не знаю...:(
у них появятся(если так однажды случится) деньги то им их станет очень жалко(сейчас когда нет они в теории могут тогрговать не то что 10 000 000 но вполне (как им может казаться) и 100 000 000 но если такое произойдёт то всё будет идти во вклады(мало кто из них реально сможет открыть позицию на 10 млн. и не потеть в этом проблема
интересную тему затронули. Мне вот, например, очень тяжело и долго было привыкать и к объемам, и к рискам, и вообще ко всей «спекулятивной движухе». У многих людей толерантность к риску околонулевая, при этом имеется сильная недокапитализированность, которая и заставляет людей брать непомерные риски и делать на рынке вещи, изначально им не подходящие по профилю и типу личности. Эти люди, как вы и пишете, при наличии сумм, которые позволят не ходить на работу больше, в массе своей выберут безриск, как мне думается. То есть им «просто очень нада денег, брат». А сама биржевая активность — один из возможных способов приблизиться… Что думаете?
__rtx, а вдруг человек алгодзен познал и у него всё суперпупер в торговле и хорошие результаты с 2017 года (или может раньше), но описать концепцию мировоззренческую смог только вот так, как получилось?!)
Я на протяжении всего поста надеялся, что хотя бы результаты бэктеста будут за длительный период, краткое описание подхода к торговле (тренды, нейтраль, скальпинг может) или что-то такое. Вами часто упоминаемый мальчик буй буй когда-то писал, что по сути не столь важно, насколько красивая кривая доходности, важно, чтобы вправо и вверх постоянно (ну или как-то похоже) Может тут тоже неплохо, но автор не отвечает, поэтому пост и комменты получаются сугубо философские.
Фёдор Г., кто знает, как это трактует автор топика)
Поэтому и спросил.