Блог им. fxsaber
Форекс-скальперы на свопах несут существенные издержки. Ниже на их примере представлен простой подход, позволяющий наглядно проанализировать любую историю торговли.
В качестве фильтра использую скрипт CustomReport (MetaTrader 5), который создает нужный срез торговой истории и визуализирует его в виде HTML.
Один из параметров его позволяет сохранить срез истории в формате библиотеки виртуального окружения, что открывает большие возможности по дальнейшей работе с этими данными.
В полученном срезе мы попробуем отказаться от перехода через ролловер, чтобы не платить своп. Для этого будем принудительно закрывать позиции в заданное время. Поскольку в 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()); } } }
Выделенные три строки (визуальный движок ресурса не показывает) — принудительное закрытие позиций до ролловера с пересчетом прибыли. В общем, скомпилированный файл приложен, каждый может попробовать свою историю со свопами и распространить данный подход анализа торговли на другие темы.
На выходе будет подробный HTML-statement соответствующим образом обновленной торговой истории.
Это что за скальперы такие чУдные, которые переносят позы через ролловер ???
Но если хочется убедиться, так это или нет, можно воспользоваться методикой из этого поста.
Ты со своими беспонтовыми скриптами уже надоел...
Скальпинг, пипсовка — сленговое название одной из стратегий внутридневных спекулятивных операций, особенностью которой является закрытие сделки при достижении небольшой прибыли в несколько пунктов
Т.е. медианная длительность жизни позиции несколько минут.
Ты свои картинки первоклашкам показывай…
Ты видимо и есть тот самый скальпер, который позы сутками держит