Петля Мёбиуса - страница 320

 
zen #:
Я хз кому что нравиТСя, но вот кривулина из недавних постов.EURUSD+8 EURGBP-5 EURJPY-3, Наши действия? 

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

 
zen #:

Завел акк давненько, но на форуме я относительно недавно и, быть может, прокатываю за новичка. Так вот, я одного не догоняю - раз модер так трепещет над этой темой, тогда какого х... он наполняет ветку тупым флудом? Лично Ваши мессаги ничего кроме "суппер" и "в следующем году будем тестить и оптить" ничего полезного не несут. Мне вообще похер кто, когда и чего собрался тестить и оптить. По делу-то есть чего? Теперь далее - вот у меня две зеркальных эквити за почти 5 лет без учёта спреда и я даже обозначу кривые : b  EURAUD0.2 AUDUSD0.16/ s EURUSD0.1 EURAUD0.1. И чисто ради примера обозначьте (вопрос к ТС) что из этого можно сотворить? 

А Когда к примеру видишь флетовый график, тоже такие вопросы в мыслях появляются ?
 
Arch #:
А Когда к примеру видишь флетовый график, тоже такие вопросы в мыслях появляются ?

каккие?

 
Arch #:
А Когда к примеру видишь флетовый график, тоже такие вопросы в мыслях появляются ?

Пример флетового графика

 
zen #:

Пример флетового графика

Понятно.Забей..
 
Arch #:
Понятно.Забей..

Что понятно? Сам спред инструментов не даст извлечь +. Даже если разбалансированную эквити засунуть в конверт.

 
Arch #:
А Когда к примеру видишь флетовый график, тоже такие вопросы в мыслях появляются ?

чат GPT абсолютно в курсе:

как из нескольких валютных пар получить флетовую комбинацию?

Отличный вопрос! Создание флетовой (нейтральной к движению рынка) комбинации из нескольких валютных пар — это основа портфельного менеджмента и статистического арбитража. Вот подробное руководство, как это сделать.

1. Теоретическая основа: что такое флетовая комбинация?

Флетовая комбинация — это набор инструментов, позиции по которым открыты таким образом, что общая Exposure (чувствительность) к движению основных валют (USD, EUR, JPY и т.д.) стремится к нулю.

2. Основные методы создания флетовой комбинации

Метод 1: Треугольный арбитраж (Triangular Arbitrage)

Самый простой способ — использовать валютный треугольник:

//+------------------------------------------------------------------+ //| Пример треугольной флетовой комбинации | //+------------------------------------------------------------------+ void CreateTriangularFlat() { // EURUSD + GBPUSD + EURGBP // Логика: (EUR/USD) * (GBP/EUR) * (USD/GBP) = 1 // Если возникает дисбаланс - арбитражная возможность double lot_eurusd = 0.1; double lot_gbpusd = 0.1; double lot_eurgbp = 0.1; // BUY EURUSD + SELL GBPUSD + SELL EURGBP OrderSend("EURUSD", OP_BUY, lot_eurusd, Ask, 3, 0, 0, "Triangular", 0, 0, clrGreen); OrderSend("GBPUSD", OP_SELL, lot_gbpusd, Bid, 3, 0, 0, "Triangular", 0, 0, clrRed); OrderSend("EURGBP", OP_SELL, lot_eurgbp, Bid, 3, 0, 0, "Triangular", 0, 0, clrRed); }


Метод 2: Матричный метод (на основе валютных весов)

Более продвинутый способ — расчет через валютные веса:

//+------------------------------------------------------------------+ //| Класс для создания флетовых комбинаций | //+------------------------------------------------------------------+ class CurrencyNeutralPortfolio { private: struct CurrencyExposure { double usd; double eur; double gbp; double jpy; double chf; double aud; double cad; double nzd; }; public: //--- Матрица валютных весов для основных пар static void GetCurrencyWeights(string symbol, CurrencyExposure &weights) { ArrayInitialize(weights, 0); if(symbol == "EURUSD") { weights.eur = 1; weights.usd = -1; } else if(symbol == "GBPUSD") { weights.gbp = 1; weights.usd = -1; } else if(symbol == "USDJPY") { weights.usd = 1; weights.jpy = -1; } else if(symbol == "USDCHF") { weights.usd = 1; weights.chf = -1; } else if(symbol == "AUDUSD") { weights.aud = 1; weights.usd = -1; } else if(symbol == "USDCAD") { weights.usd = 1; weights.cad = -1; } else if(symbol == "NZDUSD") { weights.nzd = 1; weights.usd = -1; } else if(symbol == "EURGBP") { weights.eur = 1; weights.gbp = -1; } else if(symbol == "EURJPY") { weights.eur = 1; weights.jpy = -1; } else if(symbol == "GBPJPY") { weights.gbp = 1; weights.jpy = -1; } } //--- Расчет текущей экспозиции портфеля static void CalculateExposure(CurrencyExposure &total_exposure) { ArrayInitialize(total_exposure, 0); for(int i = 0; i < OrdersTotal(); i++) { if(OrderSelect(i, SELECT_BY_POS) && OrderType() <= OP_SELL) { CurrencyExposure order_exposure; string symbol = OrderSymbol(); double volume = OrderLots() * (OrderType() == OP_BUY ? 1 : -1); GetCurrencyWeights(symbol, order_exposure); // Добавляем взвешенную экспозицию total_exposure.usd += order_exposure.usd * volume; total_exposure.eur += order_exposure.eur * volume; total_exposure.gbp += order_exposure.gbp * volume; total_exposure.jpy += order_exposure.jpy * volume; total_exposure.chf += order_exposure.chf * volume; total_exposure.aud += order_exposure.aud * volume; total_exposure.cad += order_exposure.cad * volume; total_exposure.nzd += order_exposure.nzd * volume; } } } };


Метод 3: Статистический арбитраж (коинтеграция)

Самый сложный, но наиболее эффективный метод:

//+------------------------------------------------------------------+ //| Статистический арбитраж на основе коинтеграции | //+------------------------------------------------------------------+ void StatisticalArbitrageStrategy() { string symbols[] = {"EURUSD", "GBPUSD", "AUDUSD"}; int lookback_period = 100; double z_score_threshold = 2.0; //--- Получаем исторические данные double prices[][3]; GetHistoricalPrices(symbols, lookback_period, prices); //--- Проверяем коинтеграцию (упрощенная версия) double spread = CalculateSpread(prices); double z_score = CalculateZScore(spread, lookback_period); //--- Торговая логика if(z_score > z_score_threshold) { // Spread слишком широк - продаем спред OpenMeanReversionTrade(symbols, -1); } else if(z_score < -z_score_threshold) { // Spread слишком узок - покупаем спред OpenMeanReversionTrade(symbols, 1); } } //+------------------------------------------------------------------+ //| Открытие позиций mean reversion | //+------------------------------------------------------------------+ void OpenMeanReversionTrade(string &symbols[], int direction) { // Эвристические веса (должны рассчитываться на основе регрессии) double weights[] = {0.5, -0.3, -0.2}; // Пример для EURUSD, GBPUSD, AUDUSD for(int i = 0; i < ArraySize(symbols); i++) { double lot_size = 0.1 * MathAbs(weights[i]); int order_type = (weights[i] * direction > 0) ? OP_BUY : OP_SELL; OrderSend(symbols[i], order_type, lot_size, (order_type == OP_BUY) ? Ask : Bid, 3, 0, 0, "StatArb", 0, 0, clrBlue); } }


3. Практическая реализация на MQL4

Вот полный код советника для создания флетовых комбинаций:

//+------------------------------------------------------------------+
//|                                          FlatPortfolioEA.mq4 |
//|                        Copyright 2023, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2023"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict

#include <Arrays\ArrayObj.mqh>
#include <Math\Stat\Math.mqh>

input string   SymbolList = "EURUSD,GBPUSD,USDJPY"; // Список инструментов
input double   TotalVolume = 0.3;                   // Общий объем
input int      LookbackPeriod = 100;                // Период анализа
input double   ZScoreThreshold = 2.0;               // Порог Z-Score

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
   //--- Проверяем доступность символов
   string symbols[];
   int count = StringSplit(SymbolList, ',', symbols);
   
   if(count < 2)
   {
      Alert("Нужно как минимум 2 символа!");
      return(INIT_FAILED);
   }
   
   for(int i = 0; i < count; i++)
   {
      if(!MarketInfo(symbols[i], MODE_TRADEALLOWED))
      {
         Alert("Символ ", symbols[i], " не доступен для торговли!");
         return(INIT_FAILED);
      }
   }
   
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   static datetime last_check = 0;
   
   //--- Проверяем раз в час
   if(TimeCurrent() - last_check < 3600)
      return;
   
   last_check = TimeCurrent();
   
   //--- Закрываем все позиции перед пересчетом
   CloseAllPositions();
   
   //--- Создаем флетовую комбинацию
   CreateFlatPortfolio();
}

//+------------------------------------------------------------------+
//| Создание флетового портфеля                                      |
//+------------------------------------------------------------------+
void CreateFlatPortfolio()
{
   string symbols[];
   int count = StringSplit(SymbolList, ',', symbols);
   
   //--- Получаем исторические данные
   double data[][];
   ArrayResize(data, LookbackPeriod);
   
   for(int i = 0; i < LookbackPeriod; i++)
   {
      for(int j = 0; j < count; j++)
      {
         data[i][j] = iClose(symbols[j], PERIOD_H1, i);
      }
   }
   
   //--- Рассчитываем веса через регрессию (упрощенно)
   double weights[];
   CalculateOptimalWeights(data, weights);
   
   //--- Открываем позиции
   for(int i = 0; i < count; i++)
   {
      double volume = TotalVolume * MathAbs(weights[i]);
      int order_type = (weights[i] > 0) ? OP_BUY : OP_SELL;
      
      OrderSend(symbols[i], order_type, volume, 
               (order_type == OP_BUY) ? Ask : Bid, 
               3, 0, 0, "FlatPortfolio", 0, 0, clrGreen);
   }
}

//+------------------------------------------------------------------+
//| Расчет оптимальных весов (упрощенная версия)                    |
//+------------------------------------------------------------------+
void CalculateOptimalWeights(double &data[][], double &weights[])
{
   int num_symbols = ArrayRange(data, 1);
   ArrayResize(weights, num_symbols);
   
   //--- Простая эвристика: делаем первый символ базовым
   weights[0] = 1.0;
   
   //--- Остальные символы хеджируем против базового
   for(int i = 1; i < num_symbols; i++)
   {
      double correlation = CalculateCorrelation(data, 0, i);
      weights[i] = -correlation * 0.8; // Коэффициент хеджирования
   }
   
   //--- Нормализуем веса
   double sum = 0;
   for(int i = 0; i < num_symbols; i++)
      sum += MathAbs(weights[i]);
   
   for(int i = 0; i < num_symbols; i++)
      weights[i] /= sum;
}

//+------------------------------------------------------------------+
//| Расчет корреляции между двумя series                            |
//+------------------------------------------------------------------+
double CalculateCorrelation(double &data[][], int idx1, int idx2)
{
   double sum1 = 0, sum2 = 0, sum12 = 0;
   double sum1_sq = 0, sum2_sq = 0;
   int n = ArrayRange(data, 0);
   
   for(int i = 0; i < n; i++)
   {
      sum1 += data[i][idx1];
      sum2 += data[i][idx2];
      sum12 += data[i][idx1] * data[i][idx2];
      sum1_sq += MathPow(data[i][idx1], 2);
      sum2_sq += MathPow(data[i][idx2], 2);
   }
   
   double numerator = n * sum12 - sum1 * sum2;
   double denominator = MathSqrt((n * sum1_sq - MathPow(sum1, 2)) * (n * sum2_sq - MathPow(sum2, 2)));
   
   return numerator / denominator;
}

4. Готовые флетовые комбинации

Вот несколько проверенных комбинаций:

Комбинация 1: Major Currency Basket

mq4
Copy
Download

// EURUSD + USDJPY + GBPUSD + AUDUSD + USDCAD + USDCHF // с весами: +0.2, -0.2, +0.2, +0.2, -0.2, -0.2

Комбинация 2: Carry Trade Neutral

mq4
Copy
Download

// BUY AUDJPY + SELL CHFJPY + SELL AUDUSD + BUY CHFUSD

Комбинация 3: USD Neutral

mq4
Copy
Download

// BUY EURUSD + SELL USDCHF + BUY GBPUSD + SELL USDJPY // Общая экспозиция к USD ≈ 0

5. Ключевые принципы

  1. Диверсификация - используйте разные валютные группы

  2. Корреляционный анализ - регулярно пересчитывайте веса

  3. Риск-менеджмент - ограничивайте общую экспозицию

  4. Мониторинг - следите за изменением корреляций

  5. Резервирование - оставляйте запас ликвидности

6. Важные предупреждения

⚠️ Внимание: Создание truly флетовой комбинации требует:

  • Постоянного мониторинга корреляций

  • Учета процентных ставок

  • Учета ликвидности инструментов

  • Сложных математических расчетов

Рекомендую начинать с простых треугольных комбинаций и постепенно переходить к более сложным стратегиям!

 
Renat Akhtyamov #:

чат GPT абсолютно в курсе:

как из нескольких валютных пар получить флетовую комбинацию?

Отличный вопрос! Создание флетовой (нейтральной к движению рынка) комбинации из нескольких валютных пар — это основа портфельного менеджмента и статистического арбитража. Вот подробное руководство, как это сделать.

1. Теоретическая основа: что такое флетовая комбинация?

Флетовая комбинация — это набор инструментов, позиции по которым открыты таким образом, что общая Exposure (чувствительность) к движению основных валют (USD, EUR, JPY и т.д.) стремится к нулю.

2. Основные методы создания флетовой комбинации

Метод 1: Треугольный арбитраж (Triangular Arbitrage)

Самый простой способ — использовать валютный треугольник:

//+--------------------------------это в теории ----------------------------------+ //| Пример треугольной флетовой комбинации | //+------------------------------------------------------------------+ void CreateTriangularFlat() { // EURUSD + GBPUSD + EURGBP // Логика: (EUR/USD) * (GBP/EUR) * (USD/GBP) = 1 // Если возникает дисбаланс - арбитражная возможность double lot_eurusd = 0.1; double lot_gbpusd = 0.1; double lot_eurgbp = 0.1; // BUY EURUSD + SELL GBPUSD + SELL EURGBP OrderSend("EURUSD", OP_BUY, lot_eurusd, Ask, 3, 0, 0, "Triangular", 0, 0, clrGreen); OrderSend("GBPUSD", OP_SELL, lot_gbpusd, Bid, 3, 0, 0, "Triangular", 0, 0, clrRed); OrderSend("EURGBP", OP_SELL, lot_eurgbp, Bid, 3, 0, 0, "Triangular", 0, 0, clrRed); }


Метод 2: Матричный метод (на основе валютных весов)

Более продвинутый способ — расчет через валютные веса:


Метод 3: Статистический арбитраж (коинтеграция)

Самый сложный, но наиболее эффективный метод:

//+------------------------------------------------------------------+ //| Статистический арбитраж на основе коинтеграции | //+------------------------------------------------------------------+ void StatisticalArbitrageStrategy() { string symbols[] = {"EURUSD", "GBPUSD", "AUDUSD"}; int lookback_period = 100; double z_score_threshold = 2.0; //--- Получаем исторические данные double prices[][3]; GetHistoricalPrices(symbols, lookback_period, prices); //--- Проверяем коинтеграцию (упрощенная версия) double spread = CalculateSpread(prices); double z_score = CalculateZScore(spread, lookback_period); //--- Торговая логика if(z_score > z_score_threshold) { // Spread слишком широк - продаем спред OpenMeanReversionTrade(symbols, -1); } else if(z_score < -z_score_threshold) { // Spread слишком узок - покупаем спред OpenMeanReversionTrade(symbols, 1); } } //+------------------------------------------------------------------+ //| Открытие позиций mean reversion | //+------------------------------------------------------------------+ void OpenMeanReversionTrade(string &symbols[], int direction) { // Эвристические веса (должны рассчитываться на основе регрессии) double weights[] = {0.5, -0.3, -0.2}; // Пример для EURUSD, GBPUSD, AUDUSD for(int i = 0; i < ArraySize(symbols); i++) { double lot_size = 0.1 * MathAbs(weights[i]); int order_type = (weights[i] * direction > 0) ? OP_BUY : OP_SELL; OrderSend(symbols[i], order_type, lot_size, (order_type == OP_BUY) ? Ask : Bid, 3, 0, 0, "StatArb", 0, 0, clrBlue); } }


3. Практическая реализация на MQL4

Вот полный код советника для создания флетовых комбинаций:


4. Готовые флетовые комбинации

Вот несколько проверенных комбинаций:

Комбинация 1: Major Currency Basket

mq4
Copy
Download

// EURUSD + USDJPY + GBPUSD + AUDUSD + USDCAD + USDCHF // с весами: +0.2, -0.2, +0.2, +0.2, -0.2, -0.2

Комбинация 2: Carry Trade Neutral

mq4
Copy
Download

Комбинация 3: USD Neutral

mq4
Copy
Download

// BUY EURUSD + SELL USDCHF + BUY GBPUSD + SELL USDJPY // Общая экспозиция к USD ≈ 0

5. Ключевые принципы

  1. Диверсификация - используйте разные валютные группы

  2. Корреляционный анализ - регулярно пересчитывайте веса

  3. Риск-менеджмент - ограничивайте общую экспозицию

  4. Мониторинг - следите за изменением корреляций

  5. Резервирование - оставляйте запас ликвидности

6. Важные предупреждения

⚠️ Внимание: Создание truly флетовой комбинации требует:

  • Постоянного мониторинга корреляций

  • Учета процентных ставок

  • Учета ликвидности инструментов

  • Сложных математических расчетов

Рекомендую начинать с простых треугольных комбинаций и постепенно переходить к более сложным стратегиям!

это в теории  . а теория без практики . 

 
zen #:

Завел акк давненько, но на форуме я относительно недавно и, быть может, прокатываю за новичка. Так вот, я одного не догоняю - раз модер так трепещет над этой темой, тогда какого х... он наполняет ветку тупым флудом? Лично Ваши мессаги ничего кроме "суппер" и "в следующем году будем тестить и оптить" ничего полезного не несут. Мне вообще похер кто, когда и чего собрался тестить и оптить. По делу-то есть чего? Теперь далее - вот у меня две зеркальных эквити за почти 5 лет без учёта спреда и я даже обозначу кривые : b  EURAUD0.2 AUDUSD0.16/ s EURUSD0.1 EURAUD0.1. И чисто ради примера обозначьте (вопрос к ТС) что из этого можно сотворить? 

вы поймите одно что обсуждение и написание ОК по ок варианту это - ПРОЦЕСС. Хоть и конечный. У кого то быстрее у кого то медленнее. Не нравится контент - идите мимо и сами тут не мучайтесь и других не мучайте.

Вы как еще тут один форумчанин - персонаж, сообщал  - выползайте в ветку и создавайте ее когда будет что то дельное профитное, проверенное и с годовым отчетом МТ5.... ИМХО - нет - это вы гребите мимо. Тут форум - тут люди создают, обсуждают, проверяют, тестируют и СУППЕР И В ЭТОМ ГОДУ И В СЛЕДУЮЩЕМ!

 и мне глубоко по фигу лично для вас: "ничего полезного не несут" или несут. Они - для меня полезное несут. 

ПС если мало что поняли - перечитайте ветку от начала с моими ссылками и выберите для тестов и сообщения тут несколько вариантов - когда будете предоставлять тут положительную обратную связь - может быть и продолжим в конструктивном ключе общение. пока - не о чем. вы ничем не наполнили тему. Выбирайте для закрепления за вами для отчета варианты троек.

выбирайте тройку + несколько своих вариантов предложите и также на контроль торгов возьмите для ведения отчетов и еженедельного тут представления их с описанием и контролем работы потом будем что то обсуждать - выставлять веса и прочее, как вогнать во флет и т.д....: 

https://www.mql5.com/ru/forum/475752/page118#comment_55927874

тут со "спамом" тоже ознакомьтесь 

https://www.mql5.com/ru/forum/475752/page106#comment_55858568

Петля Мёбиуса. - Попробуйте написать ок робота с вариантами трактовок и входа и выхода.
Петля Мёбиуса. - Попробуйте написать ок робота с вариантами трактовок и входа и выхода.
  • 2025.02.08
  • www.mql5.com
Тут в легендарной появление Леонида Торговля спредами в МТ 4 и до конца ветки и сначала и ссылки все и читайте и торгуйте и делитесь комментами - будем торговать вместе. по торговому подходу с ветви торговля спредами в МТ 4
 
Renat Akhtyamov #:

чат GPT абсолютно в курсе:

как из нескольких валютных пар получить флетовую комбинацию?


забыл )  Используем статистические тесты (Аугментированный Дики-Фуллер) на остатках регрессии, чтобы найти действительно связанные пары. Это золотой грааль для флетовых стратегий.

с Реной можно через чат общаться ) То, что работало вчера, может не работать завтра. Корреляции рвутся в кризисы. Нужно постоянно пересчитывать веса или иметь глубокое понимание, почему выбранная комбинация должна быть устойчивой.

На тиках советник будет отправлять десятки ордеров в секунду. Ваш брокер и терминал должны это выдерживать.

Каждый ордер в комбинации резервирует маржу. Общая маржа может быть большой, даже если сам стратегический риск небольшой.