
La stratégie est un système de négociation quantitative basé sur la rupture de la fourchette de prix. Elle définit dynamiquement les limites supérieures et inférieures de la fourchette de prix et négocie lorsque les prix franchissent ces niveaux critiques. L’idée centrale de la stratégie est de capturer les opportunités de tendance lorsque le marché franchit la fourchette de prix établie, tout en adaptant dynamiquement la fourchette de prix pour s’adapter aux changements du marché.
Le fonctionnement de la stratégie est basé sur le mécanisme central suivant: d’abord, en fonction des caractéristiques des différentes variétés de transactions, un pas correspondant (step_size) est défini, qui est basé sur environ 1,5% du prix de la variété. Le système définit une fourchette de prix au-dessus et au-dessous du prix actuel, qui déclenche plusieurs signaux lorsque le prix franchit la limite supérieure; lorsque la limite inférieure est franchie, le signal de fermeture est déclenché. Après chaque rupture, la fourchette de prix est ajustée pour s’adapter à un nouveau contexte de marché.
Il s’agit d’une stratégie de suivi de tendance conçue de manière rationnelle et logique. La stratégie est capable de capturer efficacement les opportunités de tendance du marché grâce à la définition et à l’ajustement de la fourchette de prix dynamique, associée à une gestion de position flexible.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// @version=5
// 每个图表上画对应间隔的横线,自己手画吧
// 同方向追加20单,订单成交后重新计算,每个tick重新计算,变量保存1000个周期,k线结束后再处理一次订单,按照代码顺序来绘制plot
strategy("Price Level Breakout Strategy", overlay=true, pyramiding=200, calc_on_order_fills=true, calc_on_every_tick=true, max_bars_back=1000, process_orders_on_close=true, explicit_plot_zorder=true)
// var创建持久性变量,:=是更新变量,不重新声明
// 这个是全局变量
// a = array.new<string>(200)
// array.push(a, "a")
// plot(close, color = array.get(a, close > open ? 1 : 0))
string ticker = syminfo.ticker
var float step_size = 1000
// label.new(x=bar_index, y=close, text="当前品种代码: " + ticker)
// 根据定值画1.5的平行线
if ticker == "000300"
step_size := 4000 * 0.015
if ticker == "XAUUSD"
step_size := 3000 * 0.016
if ticker == "BTCUSD"
step_size := 60000 * 0.015
if ticker == "SILVER"
step_size := 50 * 0.015
if ticker == "UKOIL"
step_size := 150 * 0.015
if ticker == "GBPUSD"
step_size := 1.6 * 0.015
if ticker == "EURUSD"
step_size := 1.1 * 0.015
// 从0开始画200条间隔线
if ticker == "USDJPY"
step_size := 100 * 0.015
var float start_value = close
var float up_number = close + step_size
var float low_number = close - step_size
// hline(3.14, title='Pi', color=color.blue, linestyle=hline.style_dotted, linewidth=2)
// plot(1)
// 当价格突破上限,产生买入信号
if close > up_number
// 生成买入信号
strategy.entry(id = "Buy", direction = strategy.long)
// 更新新的价格区间
start_value := start_value + step_size
up_number := start_value + step_size
low_number := start_value - step_size
strategy.close(id = "Sell")
// 当价格跌破下限,产生卖出信号
if close < low_number
// 生成卖出信号
strategy.entry("Sell", strategy.short)
// 更新新的价格区间
start_value := start_value - step_size
up_number := start_value + step_size
low_number := start_value - step_size
strategy.close(id = "Buy")