Мы здесь: Глава 3: Тренд — главная торговая идея столетия. 3.4: Почему крипта?
Ответ: потому что больше прибыли. И не просто больше, а в РАЗЫ больше.
Но это не весь ответ. Если смотреть под разным углом, есть разные варианты. Поговорим о них в этой главе.
Почему прибыльность тренда на крипте в разы больше, чем на других рынках?
Регулирование на рынках.
Приличный человек с экономическим образованием скажет:
«Чем более зарегулирован рынок, тем меньше прибыли».
Это связано, в первую очередь, с понижением кредитного плеча, которым можно совершать сделки. На развитых рынках это делается через механизм разделения трейдеров на категории. В Российской Федерации это разделение идёт на квалифицированных инвесторов и не квалифицированных. При этом не квалифицированные инвесторы не могут применять в своей торговле пониженное гарантийное обеспечение и торговать фьючерсами, а это абсолютное большинство тех, кто торгует на фондовой бирже.
А чем меньше трейдеров с плечами, тем ниже волатильность. А чем ниже волатильность – тем меньше прибыли у трендовых торговых систем.
Эту таблицу я впервые приводил в своем выступлении на конференции Смартлаба весной 2016-го и повторил на конференции 2018-го, акцентировав внимание на том, что хочу оформить письменно ниже
Что в таблице? В таблице доли участков RI (фьючерс на индекс РТС — прим. мое) из 10 приращений, как по отдельным периодам, так и в целом, которые я отнес к «трендам». Что я считал «трендом»? «Трендом» я считал участки, на которых среднее приращений цен (или приращений логарифмов цен, что эквивалентно) отлично от нуля и если оно больше нуля, то относим отрезок к «трендам вверх», а если меньше нуля – к «трендам вниз».
Какой использовался критерий? Обычный модифицированный критерий Стьюдента на отличие приращений логарифма(!) цены от приращений гауссовского процесса со средним нуль и дисперсией «почти равной» для 9 испытаний из 10 (нулевая гипотеза). Так как мы имеем критерий на различие сложной гипотезы против простой, то распределение статистики критерия точно известно нам только при простой гипотезе. И потому при априори выбранных границах критерия мы можем знать только вероятности попадания последовательности из 10 значений в наши «классы» при верности нулевой гипотезы.
1. Кто-нибудь пользуется веб-хуками на TradingView, для исполнения своих алгоритмов?
2. Если да, то к каким брокерам/криптобиржам писали свое подключение?
#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())); } } } }
Settings =
{
Name = «DHLM»,
line =
{
{
Name = «High»,
Color = RGB(0,200,64),
Type = TYPET_BAR,
Width = 1
},
{
Name = «Low»,
Color = RGB(200,0,64),
Type = TYPET_BAR,
Width = 1
},
{
Name = «Median»,
Color = RGB(0,64,200),
Type = TYPET_BAR,
Width = 1
}
}
}
local hlm = {}
local math_max = math.max
local math_min = math.minfunction Init()
return #Settings.line
end
function OnCalculate(index)
local dt = T(index)if O(index) then
if dt.day ~= hlm.day or
dt.month ~= hlm.month or
dt.year ~= hlm.year then
hlm.year = dt.year
hlm.day = dt.day
hlm.month = dt.month
hlm.high = H(index)
hlm.low = L(index)
else
hlm.high = math_max(hlm.high,H(index))
hlm.low = math_min(hlm.low,L(index))
hlm.median = (hlm.high + hlm.low)/2
end
end
return hlm.high,hlm.low,hlm.median
end