この戦略は主にBTCの自動化された長期投資に使用される.トレンド方向を決定するためにダブルEMAとLSMAのクロスオーバーを使用し,BTCの上昇傾向を効果的に追跡するために動的ストップロスを計算するためにATR指標を使用する.
25 期間の EMA と 100 期間の LSMA を使って二重移動平均を形成する.それらのクロスオーバーは市場の傾向を決定するために使用される.EMA は価格変化に迅速に対応し,LSMA は偽のブレイクアウトをフィルタリングする.
急速EMAが遅いLSMAを横切ると,上昇傾向がまだ不変であると判断され,ロングポジションが取られる.逆に,急速EMAが遅いLSMAを下回ると,下落傾向が始まって,既存のポジションが閉鎖されると判断される.
ロングポジションを取った後,ATRインジケーターを使用して計算されたダイナミックストップロスは,BTCの上昇傾向を効果的に追跡するために調整し続けます.具体的には,ストップロスの開始点はエントリー価格です.その後,各調整はATR幅の固定パーセントで上昇します.
ストップ損失線は,BTC上昇傾向によってもたらされた浮動利益を効果的にロックすることができ,ストップ損失ポイントが頻繁にストップ損失を避けるために最新の価格にあまりにも近づくのを防ぎます.また,戦略は,より多くの利益をロックするために異なる比率の2つの移動ストップ利益も設定します.
傾向を決定するために二重移動平均を使用することは,より信頼性があり,誤った信号を効果的に防ぐことができます.
ATR ダイナミック トレイリング・ストップ・ロスは,頻繁に小規模なストップ・ロスを避けながら,ほとんどの利益をロックすることができます.
上昇傾向が終わろうが終わらない限り 移動平均が出口信号を出している限り リスクをコントロールするために ポジションは停止されます
この戦略は手動的な介入なしで高度に自動化されており,長期間のライブ取引に適しています.
意外なニュースに注意を払う必要があります 巨大な滑り損失を避けるために
二重移動平均の組み合わせによって誤った信号が減少する可能性があるが,範囲限定市場では完全に回避することは困難である.
ATRのパラメータの設定が正しくない場合も,ストップ損失効果に影響を与えます.異なる製品に基づいて調整が必要です.
不合理な移動平均周期や 間に合わない更新が信号遅延を引き起こす可能性があります.
自動取引を中断する異常なクラッシュを避けるためにサーバーの安定性を確保する.
傾向を決定するために,ボリンジャー帯などのより多くの指標を追加することができます. 価格を予測するために機械学習モデルも使用できます.
ATR ダイナミックストップ損失の計算方法も,ストップ損失をよりスムーズにするために調整および最適化することができます.
取引量に基づく警告メカニズムと日中回転機能が追加され,主要なニュースの影響から守ることができます.
パラメータは異なるコインによって異なります. パーソナライズされたパラメータを訓練するために,より多くの歴史的データを使用できます.
一般的に,これは非常に実用的な自動BTC投資プログラムです.主要なトレンドを決定するためにダブルEMAを使用することは非常に信頼性があります.ATRの後ろのストップロスは,立派な利益を達成し,有効期間は非常に長くすることができます.パラメータが最適化され続けると,この戦略のパフォーマンスにはまだ改善の余地があります.ライブ取引の検証には価値がある.
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Wunderbit Trading //@version=4 strategy("Automated Bitcoin (BTC) Investment Strategy", overlay=true, initial_capital=5000,pyramiding = 0, currency="USD", default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent,commission_value=0.1) //////////// Functions Atr(p) => atr = 0. Tr = max(high - low, max(abs(high - close[1]), abs(low - close[1]))) atr := nz(atr[1] + (Tr - atr[1])/p,Tr) //TEMA TEMA(series, length) => if (length > 0) ema1 = ema(series, length) ema2 = ema(ema1, length) ema3 = ema(ema2, length) (3 * ema1) - (3 * ema2) + ema3 else na tradeType = input("LONG", title="What trades should be taken : ", options=["LONG", "SHORT", "BOTH", "NONE"]) /////////////////////////////////////////////////// /// INDICATORS source=close /// TREND trend_type1 = input("TEMA", title ="First Trend Line : ", options=["LSMA", "TEMA","EMA","SMA"]) trend_type2 = input("LSMA", title ="First Trend Line : ", options=["LSMA", "TEMA","EMA","SMA"]) trend_type1_length=input(25, "Length of the First Trend Line") trend_type2_length=input(100, "Length of the Second Trend Line") leadLine1 = if trend_type1=="LSMA" linreg(close, trend_type1_length, 0) else if trend_type1=="TEMA" TEMA(close,trend_type1_length) else if trend_type1 =="EMA" ema(close,trend_type1_length) else sma(close,trend_type1_length) leadLine2 = if trend_type2=="LSMA" linreg(close, trend_type2_length, 0) else if trend_type2=="TEMA" TEMA(close,trend_type2_length) else if trend_type2 =="EMA" ema(close,trend_type2_length) else sma(close,trend_type2_length) p3 = plot(leadLine1, color= #53b987, title="EMA", transp = 50, linewidth = 1) p4 = plot(leadLine2, color= #eb4d5c, title="SMA", transp = 50, linewidth = 1) fill(p3, p4, transp = 60, color = leadLine1 > leadLine2 ? #53b987 : #eb4d5c) //Upward Trend UT=crossover(leadLine1,leadLine2) DT=crossunder(leadLine1,leadLine2) // TP/ SL/ FOR LONG // TAKE PROFIT AND STOP LOSS long_tp1_inp = input(15, title='Long Take Profit 1 %', step=0.1)/100 long_tp1_qty = input(20, title="Long Take Profit 1 Qty", step=1) long_tp2_inp = input(30, title='Long Take Profit 2%', step=0.1)/100 long_tp2_qty = input(20, title="Long Take Profit 2 Qty", step=1) long_take_level_1 = strategy.position_avg_price * (1 + long_tp1_inp) long_take_level_2 = strategy.position_avg_price * (1 + long_tp2_inp) long_sl_input = input(5, title='stop loss in %', step=0.1)/100 long_sl_input_level = strategy.position_avg_price * (1 - long_sl_input) // Stop Loss multiplier = input(3.5, "SL Mutiplier", minval=1, step=0.1) ATR_period=input(8,"ATR period", minval=1, step=1) // Strategy //LONG STRATEGY CONDITION SC = input(close, "Source", input.source) SL1 = multiplier * Atr(ATR_period) // Stop Loss Trail1 = 0.0 Trail1 := iff(SC < nz(Trail1[1], 0) and SC[1] < nz(Trail1[1], 0), min(nz(Trail1[1], 0), SC + SL1), iff(SC > nz(Trail1[1], 0), SC - SL1, SC + SL1)) Trail1_high=highest(Trail1,50) // iff(SC > nz(Trail1[1], 0) and SC[1] > nz(Trail1[1], 0), max(nz(Trail1[1], 0), SC - SL1), entry_long=crossover(leadLine1,leadLine2) and Trail1_high < close exit_long = close < Trail1_high or crossover(leadLine2,leadLine1) or close < long_sl_input_level ///// BACKTEST PERIOD /////// testStartYear = input(2016, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0) testStopYear = input(9999, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0) testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false if testPeriod() if tradeType=="LONG" or tradeType=="BOTH" if strategy.position_size == 0 or strategy.position_size > 0 strategy.entry("long", strategy.long, comment="b8f60da7_ENTER-LONG_BINANCE_BTC/USDT_b8f60da7-BTC-Investment_4H", when=entry_long) strategy.exit("TP1", "long", qty_percent=long_tp1_qty, limit=long_take_level_1) strategy.exit("TP2", "long", qty_percent=long_tp2_qty, limit=long_take_level_2) strategy.close("long", when=exit_long, comment="b8f60da7_EXIT-LONG_BINANCE_BTC/USDT_b8f60da7-BTC-Investment_4H" ) // LONG POSITION plot(strategy.position_size > 0 ? long_take_level_1 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="1st Long Take Profit") plot(strategy.position_size > 0 ? long_take_level_2 : na, style=plot.style_linebr, color=color.green, linewidth=1, title="2nd Long Take Profit") plot(strategy.position_size > 0 ? Trail1_high : na, style=plot.style_linebr, color=color.red, linewidth=1, title="Long Stop Loss")