Комментарии пользователя Op_Man
Задача трех тел,
и не отвлекай людей от работы.
Работаете до сих пор?
Nissan продал свое имущество НАМИ за один евро
это деза. своё имущество всё они вывезли (не только оборудование, но и технологии). только здание (коробка) оставили и запчасти некоторые, которые вывозить дороже чем списать.
нет, это чтобы trademark никто не использовал в РФ. Другие крупные бренды поступают аналогично. Это ничего не значит в контексте возвращения.ну что заграница возвращается
Байкал, шикарный, кстати, подход)
Нет торговли — нет убытков, нет убытков -> нет проблем!
Вот он, билет в счастливую жизнь
Когда читаю вопросы к вам от подписчиков и похожие обсуждения, а также комментарии к посту m707(https://smart-lab.ru/blog/1253409.php) и подобным историям, всё чаще ловлю себя на мысли, что перспективы каких‑то осмысленных совместных инвестпроектов, автоследований и прочей «рыночной кооперации» с людьми со стороны выглядят весьма сомнительно.
VLTorgovie, заметили, что чем хуже дела у «инвесторов», тем больше на бирже везде обман мерещится?
так много доходностей построчно расписали… раньше вроде тоже понятно было.
Макс профит на металлах получился?
По ГО загружаете на 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% в месяц и алготрейдинг как инструмент — это две большие разницы.
То, о чём здесь идёт речь, похоже не на торговых роботов, а на типичную форекс‑пирамиду с «волшебным алгоритмом» и сетевым маркетингом.
Идея о том, что «любимчики» получат максимальный приток денег — совершенно логичная. НО! Максимальный приток денег не означает максимальный рост акций.Ожидания большинства спекулянтов, что при низкой ставке деньги просто хлынут на рынок акций, рискуют остаться ожиданиями. Да, «любимчики» получат какой-то приток ликвидности, но это не гарантирует им максимального роста котировок: во‑первых, доверие к самому рынку подорвано, во‑вторых, для частного инвестора риск по акциям по‑прежнему выглядит неприемлемо высоким на фоне понятных депозитов/ОФЗ, в‑третьих, прозрачность корпоративного управления и механизмов «как тут зарабатывать» по‑прежнему оставляет вопросы. Плюс значительная часть потенциального притока осядет не в акциях, а в квази‑депозитных инструментах, структурках, ИИС с облигациями, ПИФах и т.п., то есть в продуктах, где брокеру и банку есть что продать, а рознице кажется, что она «инвестирует в рынок»…
Пацаны, поздравьте меня с профитом!С профитом вас!