Files
strategies/同级高低策略Same-High-Low-Strategy.md
T

174 lines
5.6 KiB
Markdown
Raw Normal View History

2023-10-31 12:29:56 +08:00
> Name
同级高低策略Same-High-Low-Strategy
> Author
ChaoZhang
> Strategy Description
[trans]
## 策略原理
该策略基于K线出现同级高低点的形态进行交易。当出现一周K线的双底或双顶形态时,作为交易信号的触发条件。
具体交易逻辑是:
1. 判断当前K线或前一K线的最高价等于最高价的前两K线
2. 判断当前K线或前一K线的最低价等于最低价的前两K线
3. 双底形态出现时,当价格低点突破则做多
4. 双顶形态出现时,当价格高点突破则做空
5. 止损点设置为突破点附近,止盈点为ATR指标值乘以系数
该策略试图抓取突破同级高低点后价格的趋势运行机会。通过止损止盈策略控制风险。
## 策略优势
- 同级高低易识别,突破信号明确
- ATR止盈方式可动态跟踪趋势
- 规则简单清晰,可控的风险
## 策略风险
- 同级高低形成较为少见
- 止损点过于接近,存在被止损风险
- 需要关注ATR参数的设定
## 总结
该策略通过捕捉同级高低突破机会进行趋势交易。但需关注止损止盈策略的设定,以及交易频率问题。
||
## Strategy Logic
This strategy trades based on price patterns forming same high/low levels. Consecutive weekly double bottom or double top formations trigger trades.
The logic is:
1. Identify current or prior bar high/low equaling the high/low 2 bars earlier
2. Double bottom pattern triggers long on low breakout
3. Double top pattern triggers short on high breakout
4. Stop loss placed near breakout level, take profit based on ATR multiple
It aims to capitalize on trend resumption after breaking same high/low levels. Stops and profit targets control risk.
## Advantages
- Same high/low easy to identify, clear breakout signals
- ATR-based profit take dynamically trails trends
- Simple rules, defined risk
## Risks
- Same high/low patterns less common
- Stops too close risk being stopped out
- ATR parameter setting needs attention
## Summary
This strategy catches trend trades from same high/low breakouts. But stop/profit tuning and lower frequency requires consideration.
[/trans]
> Strategy Arguments
|Argument|Default|Description|
|----|----|----|
|v_input_int_1|5|ATR length for abnormal candles|
|v_input_int_2|14|(?Strategy Settings)ATR length for take profit|
|v_input_int_3|5|ATR multiplier|
> Source (PineScript)
``` javascript
/*backtest
start: 2023-09-06 00:00:00
end: 2023-09-13 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © cherepanovvsb
//@version=5
strategy("SHL", overlay=true, margin_long=100, margin_short=100,initial_capital=100,default_qty_type = strategy.cash,default_qty_value =40,commission_type = strategy.commission.percent,commission_value =0.04,currency="EUR", process_orders_on_close=true)
atr = input.int(title="ATR length for abnormal candles", defval=5)
plotshape(low == low[1], style=shape.triangleup, location=location.belowbar, color=color.blue, title="1 Setup")
plotshape(high==high[1], style=shape.triangledown, location=location.abovebar, color=color.blue, title="1 Setup")
plotshape(low == low[1] and low[1]==low[2], style=shape.triangleup, location=location.belowbar, color=color.red, title="Triple Setup")
plotshape(low==high[1] or low==high[2] or low==high[3] or low==high[4] or low==high[5] or low==high[6], style=shape.triangleup, location=location.belowbar, color=color.green, title="Mirror Setup")
plotshape(high==low[1] or high==low[2] or high==low[3] or high==low[4] or high==low[5] or high==low[6], style=shape.triangledown, location=location.abovebar, color=color.green, title="Mirror Setup")
barcolor(high-low>2*ta.atr(atr)? color.yellow:na)
ATRlenght = input.int(title="ATR length for take profit", defval=14, group="Strategy Settings")
rewardMultiplier= input.int(title="ATR multiplier", defval=5, group="Strategy Settings")
// Get ATR
atr1 = ta.atr(ATRlenght)
validlow = low[1] == low[2] and not na(atr1)
validhigh = high[1]==high[2] and not na(atr1)
validlong = validlow and strategy.position_size == 0 and low[1]<low
validshort = validhigh and strategy.position_size == 0 and high[1]>high
// Calculate Entrance, SL/TP
longStopPrice = low[1]-syminfo.mintick
longStopDistance = close - longStopPrice
longTargetPrice = close + (longStopDistance * rewardMultiplier)
shortStopPrice = high[1]+syminfo.mintick
shortStopDistance = shortStopPrice - close
shortTargetPrice = close - (shortStopDistance * rewardMultiplier)
var tradeStopPrice = 0.0
var tradeTargetPrice = 0.0
if validlong
tradeStopPrice := longStopPrice
tradeTargetPrice := longTargetPrice
if validshort
tradeStopPrice := shortStopPrice
tradeTargetPrice := shortTargetPrice
strategy.entry ("Long", strategy.long,1, when=validlong)
strategy.entry ("Short", strategy.short,1, when=validshort)
strategy.exit(id="Long Exit", from_entry="Long", limit=tradeTargetPrice, stop=tradeStopPrice, when=strategy.position_size > 0)
strategy.exit(id="Short Exit", from_entry="Short", limit=tradeTargetPrice, stop=tradeStopPrice, when=strategy.position_size < 0)
plot(strategy.position_size != 0 or validlong or validshort ? tradeStopPrice : na, title="Trade Stop Price", color=color.red, style=plot.style_linebr, transp=0)
plot(strategy.position_size != 0 or validlong or validshort ? tradeTargetPrice : na, title="Trade Target Price", color=color.green, style=plot.style_linebr, transp=0)
```
> Detail
https://www.fmz.com/strategy/426830
> Last Modified
2023-09-14 17:53:17