This is an arbitrage strategy that utilizes dual moving average formations to make arbitrage trades. It combines the 123 reversal pattern and Finite Volume Elements (FVE) sub-strategies and makes arbitrage trades when they both give buy or sell signals simultaneously.
This sub-strategy is from the book “How I Tripled My Money in the Futures Market” by Ulf Jensen. It gives signals under these conditions:
FVE is a pure volume indicator. It judges if money is flowing in or out based on price movement range and trading volume.
It gives signals when the latest two bars of FVE indicator rise or fall together.
This strategy combines two types of indicators to determine market trend and money flow, which can effectively avoid false signals. Also, both sub-strategies have some reversal characteristics, so arbitrage trades can make profits.
In addition, the dual moving average formation represents consistency between short-term and medium-term trends, thus having greater stability.
This strategy relies on moving average formations, which can easily generate false signals and lead to losses when the market fluctuates. Reversal failure is also a common risk.
Risks can be reduced by properly tweaking parameters to make the strategy more robust, or by setting stop loss to control risks.
More types of moving averages can be tested to find the optimal match. Other assist indicators like strength index and volatility index can also be introduced to avoid false signals.
In addition, research can be done on how to dynamically adjust parameters based on market conditions to improve adaptability. Machine learning and neural networks can also be explored for parameter self-adaptivity.
This dual moving average arbitrage strategy integrates two reversal-type indicators for judgement, which can mitigate risks to some extent. But reliance on moving average formations means further optimization is needed to make the strategy more robust. Overall, it provides a basic framework for short-term arbitrage trading and is worth further research.
/*backtest start: 2023-10-24 00:00:00 end: 2023-11-23 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 //////////////////////////////////////////////////////////// // Copyright by HPotter v1.0 25/08/2020 // This is combo strategies for get a cumulative signal. // // First strategy // This System was created from the Book "How I Tripled My Money In The // Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies. // The strategy buys at market, if close price is higher than the previous close // during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. // The strategy sells at market, if close price is lower than the previous close price // during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50. // // Second strategy // The FVE is a pure volume indicator. Unlike most of the other indicators // (except OBV), price change doesn?t come into the equation for the FVE (price // is not multiplied by volume), but is only used to determine whether money is // flowing in or out of the stock. This is contrary to the current trend in the // design of modern money flow indicators. The author decided against a price-volume // indicator for the following reasons: // - A pure volume indicator has more power to contradict. // - The number of buyers or sellers (which is assessed by volume) will be the same, // regardless of the price fluctuation. // - Price-volume indicators tend to spike excessively at breakouts or breakdowns. // // WARNING: // - For purpose educate only // - This script to change bars colors. //////////////////////////////////////////////////////////// Reversal123(Length, KSmoothing, DLength, Level) => vFast = sma(stoch(close, high, low, Length), KSmoothing) vSlow = sma(vFast, DLength) pos = 0.0 pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1, iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) pos FVE(Period,Factor) => pos = 0 nRes = 0.0 xhl2 = hl2 xhlc3 = hlc3 xClose = close xVolume = volume xSMAV = sma(xVolume, Period) nMF = xClose - xhl2 + xhlc3 - xhlc3[1] nVlm = iff(nMF > Factor * xClose / 100, xVolume, iff(nMF < -Factor * xClose / 100, -xVolume, 0)) nRes := nz(nRes[1],0) + ((nVlm / xSMAV) / Period) * 100 pos := iff(nRes > nRes[1] and nRes > nRes[2], 1, iff(nRes < nRes[1] and nRes < nRes[2], -1, nz(pos[1], 0))) pos strategy(title="Combo Backtest 123 Reversal & Finite Volume Elements (FVE)", shorttitle="Combo", overlay = true) Length = input(15, minval=1) KSmoothing = input(1, minval=1) DLength = input(3, minval=1) Level = input(50, minval=1) //------------------------- Period = input(18, minval=1) Factor = input(0.6, minval=0.1) reverse = input(false, title="Trade reverse") posReversal123 = Reversal123(Length, KSmoothing, DLength, Level) posFVE = FVE(Period,Factor) pos = iff(posReversal123 == 1 and posFVE == 1 , 1, iff(posReversal123 == -1 and posFVE == -1, -1, 0)) possig = iff(reverse and pos == 1, -1, iff(reverse and pos == -1 , 1, pos)) if (possig == 1) strategy.entry("Long", strategy.long) if (possig == -1) strategy.entry("Short", strategy.short) if (possig == 0) strategy.close_all() barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )