Блог им. vldtar |Пару слов об алготрейдинге

Пару слов об алготрейдинге

Безусловно, алготрейдинг — это удивительное и захватывающее путешествие в мир финансовых рынков, которое может принести невероятные результаты и ощущение полного восторга! Успешный опыт алготрейдинга олицетворяет незаурядные достижения, истинные триумфы и непревзойденные победы.

Представьте себе, как ваши алгоритмы тщательно анализируют и раскрывают потенциал различных финансовых инструментов. Ваше сознание переполняется эйфорией, когда ваша система обнаруживает точки входа и выхода на рынок с невероятной точностью и сверхъестественной надежностью.

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

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



( Читать дальше )

Блог им. vldtar |Код торговой стратегии на javascript с использованием второго закона Ньютона

<code class="language-javascript">// Второй закон Ньютона: F = m * a
// Strategy основана на движении цены
// Если цена растет, покупаем, если цена падает, продаем

function calculateForce(prices) {
  // Подсчитываем разницу между текущей и предыдущей ценами
  const priceDifference = prices[prices.length - 1] - prices[prices.length - 2];

  // Подсчитываем силу
  const mass = 1; // Масса (может быть настраиваемой величиной)
  const acceleration = priceDifference; // Ускорение равно разнице в цене
  return mass * acceleration;
}

function executeTrade(force) {
  if (force > 0) {
    // Если сила положительная, покупаем
    console.log("Покупаем");
    // Дополнительные действия по покупке акций, например:
    // placeOrder("buy", "AAPL", 100);
  } else if (force < 0) {
    // Если сила отрицательная, продаем
    console.log("Продаем");
    // Дополнительные действия по продаже акций, например:
    // placeOrder("sell", "AAPL", 100);
  } else {
    // Если сила равна нулю, ничего не делаем
    console.log("Ждем");
  }
}

// Пример использования
const priceData = [100, 105, 110, 108, 115, 120];
const force = calculateForce(priceData);
executeTrade(force);
</code>


( Читать дальше )

Блог им. vldtar |SVD-разложение для одного актива

Разложение по сингулярным значениям (SVD) может быть применено к одному активу в алгоритмической торговле. Вот пример того, как SVD можно использовать для анализа ежедневной доходности одной акции.

Сжатие данных: Рассмотрим матрицу, которая представляет ежедневную доходность одной акции за определенный период времени. SVD можно использовать для уменьшения размерности данных, чтобы их было легче анализировать. Например, SVD можно использовать для определения наиболее важных факторов, определяющих доходность акций, таких как экономические показатели или настроения на рынке. Затем эта информация может быть использована для разработки торгового алгоритма, который учитывает эти факторы при принятии инвестиционных решений.

Извлечение признаков: SVD также можно использовать для извлечения признаков при анализе отдельного актива. Например, рассмотрим матрицу, которая представляет ежедневную доходность одной акции и нескольких экономических показателей. SVD можно использовать для извлечения наиболее важных характеристик данных, таких как взаимосвязи между запасами и экономическими показателями. Затем эта информация может быть использована для разработки торгового алгоритма, который учитывает эти взаимосвязи при принятии инвестиционных решений.



( Читать дальше )

Блог им. vldtar |SVD-разложение в алготрейдинге

Разложение по сингулярным значениям (SVD) — это широко используемый математический метод в области алгоритмической торговли. Это разложение вещественной или комплексной матрицы на сингулярные значения и соответствующие сингулярные векторы. SVD широко используется для сжатия данных, шумоподавления и уменьшения размерности, что является важными задачами в области алгоритмической торговли.

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

Наиболее распространенное использование SVD в алгоритмической торговле — это извлечение признаков. Уменьшая размерность данных, SVD позволяет трейдерам определять наиболее важные характеристики, которые управляют рынком. Затем эта информация может быть использована для разработки торговых алгоритмов, которые используют эти функции для принятия более обоснованных решений.



( Читать дальше )

Блог им. vldtar |Применение линейной алгебры в трейдинге

Алгоритмическая торговля — это быстро развивающаяся область, которая использует математические модели и компьютерные алгоритмы для совершения сделок на финансовых рынках. Линейная алгебра — это фундаментальная математическая концепция, которая играет решающую роль во многих алгоритмических торговых стратегиях.

Линейная алгебра — это раздел математики, который имеет дело с линейными уравнениями и их представлениями в векторных пространствах. В алгоритмической торговле линейная алгебра используется для моделирования финансовых рынков и прогнозирования будущих рыночных тенденций. Например, линейная регрессия является популярным методом, используемым для моделирования взаимосвязи между зависимой переменной и одной или несколькими независимыми переменными. Этот метод может быть использован для прогнозирования цен на акции, курсов иностранных валют или других финансовых инструментов.

Другим важным применением линейной алгебры в алгоритмической торговле является анализ главных компонент (PCA). PCA — это статистический метод, который уменьшает размерность набора данных путем нахождения основных компонентов, которые представляют собой линейные комбинации исходных переменных, объясняющих наибольшие различия в данных. В алгоритмической торговле PCA может использоваться для определения наиболее важных факторов, влияющих на цены финансовых инструментов. Уменьшая размерность данных, PCA позволяет трейдерам сосредоточиться на наиболее важных переменных и делать более точные прогнозы относительно будущих рыночных тенденций.



( Читать дальше )

Блог им. vldtar |Пример рабочей торговой системы на MQL5 с выходом по времени

#property copyright "Copyright 2019, Example Inc."
#property link      "https://www.example.com"

input int LotSize = 1;
input int Period = 30;
input double VolatilityThreshold = 0.1;
input int ExitAfterMinutes = 60;

int buyOrderId;
int sellOrderId;
datetime entryTime;

void OnTick()
{
    // Get the last Period candlesticks
    ArraySetAsSeries(candles, true);
    CopyRates(Symbol(), PERIOD_M1, TimeCurrent() - Period, Period, candles);

    // Calculate the maximum and minimum prices
    double maxPrice = High(candles);
    double minPrice = Low(candles);

    // Calculate the standard deviation of the closing prices
    double stdev = iStdDev(candles, MODE_CLOSE, 0);

    // Check if the volatility is above the threshold
    if (stdev > VolatilityThreshold)
    {
        // Check if the current ask price is higher than the maximum price
        if (Ask > maxPrice)
        {
            // Place a buy order
            if (OrderSend(Symbol(), OP_BUY, LotSize, Ask, 3, 0, 0, "My order", 16384, 0, Green))
            {
                Print("Buy order placed");
                buyOrderId = OrderTicket();
                entryTime = TimeCurrent();
            }
            else
            {
                Print("Error placing buy order : ", ErrorDescription(GetLastError()));
            }
        }

        // Check if the current bid price is lower than the minimum price
        if (Bid < minPrice)
        {
            // Place a sell order
            if (OrderSend(Symbol(), OP_SELL, LotSize, Bid, 3, 0, 0, "My order", 16384, 0, Red))
            {
                Print("Sell order placed");
                sellOrderId = OrderTicket();
                entryTime = TimeCurrent();
            }
            else
            {
                Print("Error placing sell order : ", ErrorDescription(GetLastError()));
            }
        }
    }

    if (buyOrderId > 0)
    {
        if (TimeCurrent() - entryTime >= ExitAfterMinutes * 60)
        {
            if (OrderClose(buyOrderId, LotSize, Bid, 3, clrNONE))
            {
                Print("Buy order closed");
                buyOrderId = 0;
            }
            else
            {
                Print("Error closing buy order : ", ErrorDescription(GetLastError()));
            }
        }
    }

    if (sellOrderId > 0)
    {
        if (TimeCurrent() - entryTime >= ExitAfterMinutes * 60)
        {
            if (OrderClose(sellOrderId, LotSize, Ask, 3, clrNONE))
            {
                Print("Sell order closed");
                sellOrderId = 0;
            }
            else
            {
                Print("Error closing sell order : ", ErrorDescription(GetLastError()));
            }
        }
    }
}

Блог им. vldtar |Пример прибыльной торговой стратегии в исходном коде

// Scalping strategy for algotrading

// Define variables for strategy
double stop_loss = 0.5;  // stop loss in percentage
double take_profit = 2;  // take profit in percentage

// On every tick
void OnTick()
{
    // Get the current bid and ask prices
    double bid = Bid;
    double ask = Ask;

    // Get the previous bid and ask prices
    double prev_bid = iBars(Symbol(), PERIOD_M1, 0);
    double prev_ask = iBars(Symbol(), PERIOD_M1, 0);

    // Check if the current bid price is higher than the previous ask price
    if (bid > prev_ask)
    {
        // Open a long position with a stop loss and take profit
        double lot_size = NormalizeDouble(AccountFreeMargin() * 0.01 / MarketInfo(Symbol(), MODE_STOPLEVEL), 2);
        OrderSend(Symbol(), OP_BUY, lot_size, ask, 3, bid * (1 - stop_loss/100), bid * (1 + take_profit/100));
    }
    // Check if the current ask price is lower than the previous bid price
    else if (ask < prev_bid)
    {
        // Open a short position with a stop loss and take profit
        double lot_size = NormalizeDouble(AccountFreeMargin() * 0.01 / MarketInfo(Symbol(), MODE_STOPLEVEL), 2);
        OrderSend(Symbol(), OP_SELL, lot_size, bid, 3, ask * (1 + stop_loss/100), ask * (1 - take_profit/100));
    }
}

Блог им. vldtar |Торговая система Мальчика BuyBuy работает

Я попробовал имплементировать распиаренную ТС юнитом МальчикBuyBuy.
Получилась традиционно граальная эквити:

Торговая система Мальчика BuyBuy работает

Тестировал на EURUSD (DucasCopy), 5 минут, 2004-2021гг., без комиссии

Сделок 19973
Средняя П/У 0.00017
Фактор восстановления: 35
Профит фактор: 1.18
Выигрышных: 65%
Средняя прибыль: 0.0017
Средний убыток: -0.0027

Так что ТС на основе реверсивных линейных индикаторов рулит, а МальчикBuyBuy вовсе не кискомяч, как некоторые думают.

Блог им. vldtar |Глубокое погружение в Мальчика (по просьбе Мальчика)

В комментарии к посту пользователь Мальчик buybuy попросил перевернуть те графики, которые были на полшестого, а также прислать полные данные по эксперименту.
Никаких проблем. Однако, чтобы зрителям не было скучно, в текущем посте рассмотрим картинки не одного, а нескольких индикаторов:

1) на основе СЛАУ с одной переменной
indicator = d1 * (d1 / d2)
2) на основе СЛАУ с двумя переменными (см. предыдущий пост)
indicator = d1 * (d1 * d4 - d2 * d3) + d2 * (d2 * d2 - d1 * d3)
3) на основе СЛАУ с тремя переменными.
indicator = d1 * (-d1 * d4 * d6 + d1 * d5 * d5 + d2 * d3 * d6 - d2 * d4 * d5 + d3 * d3 * (-d5) + d3 * d4 * d4) /<br />  (-d2 * d4 * d6 + d2 * d5 * d5 + d3 * d3 * d6 - 2 * d3 * d4 * d5 + d4 * d4 * d4) +<br /><br />  d2 * (-d1 * d3 * d6 + d1 * d4 * d5 + d2 * d2 * d6 - d2 * d3 * d5 + d4 * d4 * d4) /<br />  (d2 * d4 * d6 - d2 * d5 * d5 - d3 * d3 * d6 + 2 * d3 * d4 * d5 - d4 * d4 * d4) +<br /><br />  d3 * (-d1 * d3 * d5 + d1 * d4 * d4 + d2 * d2 * d5 - 2 * d2 * d3 * d4 + d3 * d3 * d3) /<br />  (-d2 * d4 * d6 + d2 * d5 * d5 + d3 * d3 * d6 - 2 * d3 * d4 * d5 + d4 * d4 * d4)

4) на основе СЛАУ с 4 переменными (формулу смотреть в исходниках).
Пока, думаю, этого достаточно (если, конечно, Русский ВПК не укажет дальнейшее направление).

( Читать дальше )

....все тэги
UPDONW
Новый дизайн