
この策略は,スローランス指標を使用して,自動的にストップとストップ価格を設定し,移動ストップの制限価格取引を実現する.これは,トレンドの状況でより多くの利益を得ることができ,同時に,揺れの状況で損失を減らすことができます.
この戦略は,主に線指標に基づいて価格を設定する.線指標は,市場の潜在的なサポートとレジスタンスを反映する.この戦略は,線指標の異なるレベルをストップ・ローズとストップ・価格として利用する.
具体的には,戦略は高点と低点を追跡し,10歩の価格区間を計算する. そして,配置に応じて1歩の価格を入場戦略として選択する. 価格がこの距離を突破すると,配置されたレバレッジに従って多額の注文を行う. 同時に,平均入場価格と配置されたストップパーセンテージに等しいストップ価格を設定する.
注文した後に,戦略は最新のセール価格を追跡し続けます. 低いセールが発生すると,戦略は,元の委託を取り消し,再注文し,移動ストップを実現します. 価格上昇がストップ価格を破るとき,戦略は,ストップを平行します.
この戦略の最大の利点は,動的にストップとストップの価格を調整することができ,トレンドの状況に専用であることです.以下の特徴があります:
トレンド行情でより多額の利益を得ることができる.平均入場価格に基づくストップセットが配置され,トレンド行情に最大限に参加し,より高い利益を得ることができる.
震動時の損失を減らすことができる.価格がより低いセールに再び触れたとき,損失をタイムリーに停止し,震動時に被り込まないようにする.
ポジション増設をサポートします. ポジション増設の設定が配置され,価格が一定の幅まで下落すると,ポジションを拡大し,平均ポジション保持コストを削減します.
操作は簡単です. 必要なのは,シール程とストップの比率を配置することだけです. 取引は,人工操作を必要とせず,完全に自動で完了します.
この戦略にはいくつかのリスクがあり,以下のような点に重点を置いています.
振動的な収束時に繰り返しストップ・ロスを被る傾向がある.横軸や振動的な状況が発生すると,価格が何度も上下してストップ・ロスを引き起こす可能性があり,取引頻度や手数料の支出が増加する.
止損設定がない. 利潤をさらに追求するため,戦略は止損設定がない. 市場が大きく逆転した場合,巨額の損失に直面する可能性がある.
積立の回数と金額に制限はない.複数積立は損失をさらに拡大する可能性がある.
対応方法:
この戦略は,以下のように多くの点で最適化できる.
他の指標の組み合わせを用いて入場を確認する.入場条件にEMA,MACDなどの指標の確認を加えることができ,震動行情で被套を避ける.
ストップメカニズムの加入. 固定ストップまたはストップを追跡する設定は,極端な状況で大きな損失を回避できます.
ポジションを最適化する論理.特定の市場状況に応じて,ポジションの価格区間と回数を最適化できる.過剰なポジションを防止する.
機械学習アルゴリズムと組み合わせて.例えば,LSTMなどのアルゴリズムを使用して,価格の可能な動きとサポートレジスタンスを予測する.より優れた入場出場論理を決定する.
この戦略は全体的にトレンドの動きを追跡するのに適しています. ストップ・ロスの価格を動的に調整することで,より多くの利益を得ることができます. 同時に,他のメカニズムと組み合わせて,より複雑な市場環境に適応できるように最適化および改善する必要があるリスクもあります.
/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 00:00:00
period: 1h
basePeriod: 15m
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/
// © CryptoRox
//@version=4
//Paste the line below in your alerts to run the built-in commands.
//{{strategy.order.alert_message}}
strategy(title="Fibs limit only", shorttitle="Strategy", overlay=true, precision=8, pyramiding=1000, commission_type=strategy.commission.percent, commission_value=0.04)
//Settings
testing = input(false, "Live")
//Use epochconverter or something similar to get the current timestamp.
starttime = input(1600976975, "Start Timestamp") * 1000
//Wait XX seconds from that timestamp before the strategy starts looking for an entry.
seconds = input(60, "Start Delay") * 1000
testPeriod = true
leverage = input(1, "Leverage")
tp = input(1.0, "Take Profit %") / leverage
dca = input(-1.0, "DCA when < %") / leverage *-1
fibEntry = input("1", "Entry Level", options=["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"])
//Strategy Calls
equity = strategy.equity
avg = strategy.position_avg_price
symbol = syminfo.tickerid
openTrades = strategy.opentrades
closedTrades = strategy.closedtrades
size = strategy.position_size
//Fibs
lentt = input(60, "Pivot Length")
h = highest(lentt)
h1 = dev(h, lentt) ? na : h
hpivot = fixnan(h1)
l = lowest(lentt)
l1 = dev(l, lentt) ? na : l
lpivot = fixnan(l1)
z = 400
p_offset= 2
transp = 60
a=(lowest(z)+highest(z))/2
b=lowest(z)
c=highest(z)
fib0 = (((hpivot - lpivot)) + lpivot)
fib1 = (((hpivot - lpivot)*.21) + lpivot)
fib2 = (((hpivot - lpivot)*.3) + lpivot)
fib3 = (((hpivot - lpivot)*.5) + lpivot)
fib4 = (((hpivot - lpivot)*.62) + lpivot)
fib5 = (((hpivot - lpivot)*.7) + lpivot)
fib6 = (((hpivot - lpivot)* 1.00) + lpivot)
fib7 = (((hpivot - lpivot)* 1.27) + lpivot)
fib8 = (((hpivot - lpivot)* 2) + lpivot)
fib9 = (((hpivot - lpivot)* -.27) + lpivot)
fib10 = (((hpivot - lpivot)* -1) + lpivot)
notna = nz(fib10[60])
entry = 0.0
if fibEntry == "1"
entry := fib10
if fibEntry == "2"
entry := fib9
if fibEntry == "3"
entry := fib0
if fibEntry == "4"
entry := fib1
if fibEntry == "5"
entry := fib2
if fibEntry == "6"
entry := fib3
if fibEntry == "7"
entry := fib4
if fibEntry == "8"
entry := fib5
if fibEntry == "9"
entry := fib6
if fibEntry == "10"
entry := fib7
profit = avg+avg*(tp/100)
pause = 0
pause := nz(pause[1])
paused = time < pause
fill = 0.0
fill := nz(fill[1])
count = 0.0
count := nz(fill[1])
filled = count > 0 ? entry > fill-fill/100*dca : 0
signal = testPeriod and notna and not paused and not filled ? 1 : 0
neworder = crossover(signal, signal[1])
moveorder = entry != entry[1] and signal and not neworder ? true : false
cancelorder = crossunder(signal, signal[1]) and not paused
filledorder = crossunder(low[1], entry[1]) and signal[1]
last_profit = 0.0
last_profit := nz(last_profit[1])
if neworder and signal
strategy.order("New", 1, 0.0001, alert_message='New Order|e=binancefuturestestnet s=btcusdt b=long q=0.0011 fp=' + tostring(entry))
if moveorder
strategy.order("Move", 1, 0.0001, alert_message='Move Order|e=binancefuturestestnet s=btcusdt b=long c=order|e=binancefuturestestnet s=btcusdt b=long q=0.0011 fp=' + tostring(entry))
if filledorder and size < 1
fill := entry
count := count+1
pause := time + 60000
p = close+close*(tp/100)
strategy.entry("Filled", 1, 1, alert_message='Long Filled|e=binancefuturestestnet s=btcusdt b=short c=order|delay=1|e=binancefuturestestnet s=btcusdt b=long c=position q=100% ro=1 fp=' + tostring(p))
if filledorder and size >= 1
fill := entry
count := count+1
pause := time + 60000
strategy.entry("Filled", 1, 1, alert_message='Long Filled|e=binancefuturestestnet s=btcusdt b=short c=order|delay=1|e=binancefuturestestnet s=btcusdt b=long c=position q=100% ro=1 fp=' + tostring(profit))
if cancelorder and not filledorder
pause := time + 60000
strategy.order("Cancel", 1, 0.0001, alert_message='Cancel Order|e=binancefuturestestnet s=btcusdt b=long c=order')
if filledorder
last_profit := profit
closeit = crossover(high, profit) and size >= 1
if closeit
strategy.entry("Close ALL", 0, 0, alert_message='Profit')
count := 0
fill := 0.0
last_profit := 0.0
//Plots
bottom = signal ? color.green : filled ? color.red : color.white
plot(entry, "Entry", bottom)