Блог им. fxsaber

Борьба со свопами - 2.

    • 09 сентября 2023, 00:32
    • |
    • fxsaber
  • Еще

Борьба со свопами - 2.


Форекс-скальперы на свопах несут существенные издержки. Ниже на их примере представлен простой подход, позволяющий наглядно проанализировать любую историю торговли.

 

Фильтр торговой истории.

В качестве фильтра использую скрипт CustomReport (MetaTrader 5), который создает нужный срез торговой истории и визуализирует его в виде HTML.

Борьба со свопами - 2.

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

 

Анализ отказа от свопов.

В полученном срезе мы попробуем отказаться от перехода через ролловер, чтобы не платить своп. Для этого будем принудительно закрывать позиции в заданное время. Поскольку в MetaTrader 5 доступна реальная тиковая история, то довольно точно сможем определить цену закрытия.

 

Весь исходник скрипта.

#property script_show_inputs

input string inFileName = "Report.htm.virt";
input int inTradeClose = -600; // How many seconds before midnight should orders be closed?

#include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/ru/code/22577

#define REPORT_BROWSER            // Создание отчета с запуском браузера - требует разрешения DLL.
#include <Report.mqh> // https://www.mql5.com/ru/code/18801

#define DAY (24 * 3600)

MqlTick GetTick( const datetime Time )
{ 
  MqlTick Tick[1];
  
  CopyTicks(OrderSymbol(), Tick, COPY_TICKS_INFO, Time * 1000, 1);
  
  return(Tick[0]);
}

void OnStart()
{
  if (inTradeClose < 0)
  {
    const VIRTUAL_POINTER VirtualPointerIn = VIRTUAL::Create(inFileName);
    
    if (!VirtualPointerIn.IsNull())
    {
      const VIRTUAL_POINTER VirtualPointerOut = VIRTUAL::Create(0.0);
      
      _VSP(VirtualPointerIn)
      
      const int Total = OrdersHistoryTotal();
    
      for (int i = 0; i < Total; i++)
        if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
        {
          ORDER_BASE Order = VIRTUAL::GetOrder();
    
          const datetime CloseTime = (OrderOpenTime() / DAY + 1) * DAY + inTradeClose;
          
          if ((OrderOpenTime() < CloseTime) && OrderProfit())
          {
            if ((OrderCloseTime() > CloseTime) && (StringFind(OrderComment(), "CloseBy_") || OrderSwap()))
            {
              Comment((string)i + "/" + (string)Total);
              
              const MqlTick Tick = GetTick(CloseTime);
              const double PriceClose = OrderType() ? Tick.ask : Tick.bid;
    
              Order.Set(OrderTicket(),
                        (ENUM_ORDER_TYPE)OrderType(),
                        OrderLots(),
                        OrderSymbol(),
                        OrderComment(),
                        OrderOpenPrice(),
                        OrderOpenTimeMsc(),
                        OrderStopLoss(),
                        OrderTakeProfit(),
                        PriceClose,
                        Tick.time_msc,
                        OrderMagicNumber(),
                        OrderProfit() * (PriceClose - OrderOpenPrice()) / (OrderClosePrice() - OrderOpenPrice()),
                        OrderCommission(),
                        0,
                        OrderOpenReason(),
                        DEAL_REASON_CLIENT,
                        OrderOpenPriceRequest(),
                        PriceClose);                    
            }
            
            _VP(VirtualPointerOut, VIRTUAL::AddOrder(Order));        
          }
        }        
  
      _VP(VirtualPointerOut, VIRTUAL::SetID("Without Swaps - " + __FILE__));
      _VP(VirtualPointerOut, REPORT::ToFile());
    }
  }  
}

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

Борьба со свопами - 2.

На выходе будет подробный HTML-statement соответствующим образом обновленной торговой истории.

★1
7 комментариев
Юморист однако...
Это что за скальперы такие чУдные, которые переносят позы через ролловер ???
avatar
AMBASSADOR FX, у таких скальперов чаще всего оказывается, что выгоднее заплатить своп и торговать в ролловер, чем отказаться от торговли на этом интервале.

Но если хочется убедиться, так это или нет, можно воспользоваться методикой из этого поста.
avatar
fxsaber, Дурилка, ты перепутал скальперов с пересиживателями ...
Ты со своими беспонтовыми скриптами уже надоел...

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

Т.е. медианная длительность жизни позиции несколько минут.
avatar
fxsaber,  Скальпер держит позу секунды, максимум минуты, но точно не часы, короткий тейк, перевод в б/у через несколько пунктов, короткий стоп… Херовый из тебя скальпер …
Ты свои картинки первоклашкам показывай…
avatar
AMBASSADOR FX, Забавный Вы человек, безгоду неделя тут, а уже людей оскорбляете. Это Вы свое чсв показывайте в другом месте.
avatar
Danilych, Ты главный дурилка ТУТ… Ты свою тупость уже показал…
Ты видимо и есть тот самый скальпер, который позы сутками держит
avatar

теги блога fxsaber

....все тэги



UPDONW
Новый дизайн