
Chiến lược này được gọi là Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình Phúc trình
Các nguyên tắc cốt lõi của chiến lược này là:
Sử dụng đường vòng, đường ngày để đánh giá xu hướng thị trường, là điều kiện lọc hướng chiến lược, chỉ có điều kiện phù hợp với xu hướng mới có thể giao dịch.
4 giờ xây dựng kênh, đánh giá điểm mua và bán, phát tín hiệu giao dịch.
Đường tròn, đường mặt trời và đường 4 giờ có thể lọc ra nhiều tín hiệu giả và cải thiện độ tin cậy của tín hiệu giao dịch.
Sử dụng điểm rút Fibonacci để xác định vị trí dừng lỗ để thực hiện dừng lỗ nhanh chóng.
Cụ thể, chiến lược đầu tiên đánh giá hướng ưu tiên của xu hướng trên đường vòng và đường mặt trời, nguyên tắc đánh giá hướng ưu tiên là: giá đóng cửa đường K hiện tại ở góc lớn hơn trên đường chu kỳ, đánh giá hướng đường chu kỳ; sau đó xây dựng kênh A B C D ở cấp độ 4 giờ, đánh giá điểm mua bán thông qua hướng kênh và điểm quay trở lại, phát tín hiệu giao dịch; cuối cùng, hướng ưu tiên của đường chu kỳ hiện tại phải phù hợp với tín hiệu hướng giao dịch 4 giờ, do đó có thể lọc nhiều tín hiệu giả, do đó tăng độ tin cậy của tín hiệu giao dịch.
Chiến lược này có những lợi thế chính như sau:
Cơ chế lọc tín hiệu kép dựa trên nhiều khung thời gian, có thể lọc ra rất nhiều tiếng ồn và có được cơ hội giao dịch có độ tin cậy cao.
Các nhà đầu tư đã sử dụng các kênh này để xây dựng các điểm mua và bán, và các tín hiệu giao dịch được xác định rõ ràng.
Điểm rút lui Fibonacci thiết lập vị trí dừng lỗ, có thể dừng lỗ nhanh chóng.
Các tham số chiến lược ít hơn, dễ hiểu và nắm bắt.
Nó có thể mở rộng và dễ dàng tối ưu hóa.
Chiến lược này có những rủi ro:
Có quá nhiều khung thời gian giám sát, làm tăng sự phức tạp và dễ bị lỗi.
Những sự kiện bất ngờ trong các tình huống đặc biệt, chẳng hạn như sự biến động mạnh mẽ của các sự kiện tin tức quan trọng, không được tính đến.
Điểm rút lui thiết lập điểm dừng lỗ có thể có lợi nhuận không đủ.
Thiết lập tham số không đúng có thể dẫn đến giao dịch quá mức hoặc bỏ phiếu.
Phản ứng:
Tăng cường giám sát các tình huống bất thường và các sự kiện báo chí quan trọng
Tối ưu hóa logic dừng lỗ để đảm bảo lợi nhuận đạt đến một mức độ nhất định.
Kiểm tra chi tiết và tối ưu hóa các tham số, giảm khả năng giao dịch quá mức và bỏ phiếu.
Các hướng tối ưu hóa chính của chiến lược này là:
Tăng khả năng mô hình học máy đánh giá xu hướng ưu tiên, sử dụng nhiều dữ liệu hơn để tăng độ chính xác đánh giá.
Kiểm tra các chỉ số khác để xây dựng các kênh để đánh giá điểm mua và bán.
Thử các phương pháp dừng chân tiên tiến hơn, như di chuyển, nhảy, v.v.
Sử dụng kết quả phản hồi để suy ra các tham số tối ưu, làm cho các thiết lập tham số phù hợp hơn với nguyên tắc đầu tư định lượng.
Tăng cơ chế giám sát và phản ứng đối với các sự kiện bất ngờ quan trọng.
Về tổng thể, ý tưởng cốt lõi của chiến lược là một chiến lược giao dịch định lượng tần số cao dựa trên hai bộ lọc giảm tiếng ồn. Nó sử dụng phương pháp phán đoán nhiều khung thời gian và kênh để xác định điểm mua và bán, thực hiện bộ lọc độ tin cậy kép của tín hiệu giao dịch. Đồng thời, các tham số chiến lược ít hơn, dễ nắm bắt; khả năng mở rộng tốt, dễ dàng cải tiến tối ưu hóa. Bước tiếp theo sẽ được tối ưu hóa từ tính chính xác của phán đoán, phương thức dừng lỗ, tối ưu hóa tham số, để hiệu quả chiến lược tốt hơn.
/*backtest
start: 2023-11-19 00:00:00
end: 2023-11-26 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title='AG328', shorttitle='AG328', overlay=true )
// Настройки для включения/выключения торговли в Лонг и Шорт
longEnabled = input(true, title="Торговля в Лонг")
shortEnabled = input(true, title="Торговля в Шорт")
smaEnabled = input(true, title="Включить SMA89")
tradeInGrey = input(false, title = "Сигнал в серой зоне")
pipsBuyStop = input.int(0, title="Пунктов добавить для Buy ордера", minval=-50, step=1, maxval=50)
pipsSellStop = input.int(0, title="Пунктов добавить для Sell ордера", minval=-50, step=1, maxval=50)
// Const
LicenseID = 6889430941909
contracts = input.float(0.01, title="Контрактов на сделку:", minval=0, step=0.01, maxval=10)
var float sma = na
var float UW = na
var float DW = na
var bool weeklyLongPriority = na
var bool weeklyShortPriority = na
var float UD = na
var float DD = na
var bool dailyLongPriority = na
var bool dailyShortPriority = na
var float UP = na
var float DOWN = na
var bool h4LongPriority = na
var bool h4ShortPriority = na
var bool LongCondition = na
var bool ShortCondition = na
var bool GreenZone = na
var bool GreyZone = na
var bool RedZone = na
var float LongOrder = 0
var float ShortOrder = 0
var float LongTP = 0
var float ShortTP = 0
var float LongTake = 0
var float ShortTake = 0
var float AA = 0
var float BB = 0
var float CC = 0
var float D = 0
var float AAA = 0
var float BBB = 0
var float CCC = 0
var float DDD = 0
var float stopLong = 0
var float stopShort = 0
var string olderTF = ""
var string oldestTF = ""
var string pivotTF = ""
// Создаем входную настройку для ТФ Пивота
maxValuePivotTF = input.int(2, title="ТФ Пивота старше на:", minval=1, step=1, maxval=3)
// Шаг цены инструмента
stepSize = syminfo.mintick
currentTF = timeframe.period // Получаем текущий ТФ
if currentTF == "1" // Определяем 2 более старших ТФ
olderTF := "5"
oldestTF := "15"
pivotTF := (maxValuePivotTF == 1 ? "5" : (maxValuePivotTF == 2 ? "15" : "60"))
if currentTF == "5"
olderTF := "15"
oldestTF := "60"
pivotTF := (maxValuePivotTF == 1 ? "15" : (maxValuePivotTF == 2 ? "60" : "240"))
if currentTF == "15"
olderTF := "60"
oldestTF := "240"
pivotTF := (maxValuePivotTF == 1 ? "60" : (maxValuePivotTF == 2 ? "240" : "D"))
if currentTF == "60"
olderTF := "240"
oldestTF := "D"
pivotTF := (maxValuePivotTF == 1 ? "240" : (maxValuePivotTF == 2 ? "D" : "W"))
if currentTF == "240"
olderTF := "D"
oldestTF := "W"
pivotTF := (maxValuePivotTF == 1 ? "D" : (maxValuePivotTF == 2 ? "W" : "M"))
if currentTF == "D"
olderTF := "W"
oldestTF := "M"
pivotTF := (maxValuePivotTF == 1 ? "W" : (maxValuePivotTF == 2 ? "M" : "3M"))
if currentTF == "W"
olderTF := "M"
oldestTF := "3M"
pivotTF := (maxValuePivotTF == 1 ? "M" : (maxValuePivotTF == 2 ? "3M" : "3M"))
// Рассчитываем бары ТФ+2
weekHigh0 = request.security(syminfo.tickerid, oldestTF, high)
weekHigh1 = request.security(syminfo.tickerid, oldestTF, high[1])
weekHigh2 = request.security(syminfo.tickerid, oldestTF, high[2])
weekHigh3 = request.security(syminfo.tickerid, oldestTF, high[3])
weekHigh4 = request.security(syminfo.tickerid, oldestTF, high[4])
weekLow0 = request.security(syminfo.tickerid, oldestTF, low)
weekLow1 = request.security(syminfo.tickerid, oldestTF, low[1])
weekLow2 = request.security(syminfo.tickerid, oldestTF, low[2])
weekLow3 = request.security(syminfo.tickerid, oldestTF, low[3])
weekLow4 = request.security(syminfo.tickerid, oldestTF, low[4])
// ТФ+2 Фракталы
weekFractal_UP = weekHigh2 > weekHigh1 and weekHigh2 > weekHigh0 and weekHigh2 > weekHigh3 and weekHigh2 > weekHigh4
weekFractal_DOWN = weekLow2 < weekLow1 and weekLow2 < weekLow0 and weekLow2 < weekLow3 and weekLow2 < weekLow4
if weekFractal_UP
UW := weekHigh2
UW
if weekFractal_DOWN
DW := weekLow2
DW
// Рисуем UW, DW
plot(UW, title = "UW", color=color.green)
plot(DW, title = "DW", color=color.red)
// ТФ+2 priority
if close > UW
weeklyLongPriority := true
weeklyLongPriority
else if close < DW
weeklyLongPriority := false
weeklyLongPriority
//weeklyColor = weeklyLongPriority ? color.new(color.green, transp=70) : color.new(color.red, transp=70)
//bgcolor(weeklyColor, title = "WeeklyPriority")
//-----------------------------------------------
// Рассчитываем дневные бары
dayHigh0 = request.security(syminfo.tickerid, olderTF, high)
dayHigh1 = request.security(syminfo.tickerid, olderTF, high[1])
dayHigh2 = request.security(syminfo.tickerid, olderTF, high[2])
dayHigh3 = request.security(syminfo.tickerid, olderTF, high[3])
dayHigh4 = request.security(syminfo.tickerid, olderTF, high[4])
dayLow0 = request.security(syminfo.tickerid, olderTF, low)
dayLow1 = request.security(syminfo.tickerid, olderTF, low[1])
dayLow2 = request.security(syminfo.tickerid, olderTF, low[2])
dayLow3 = request.security(syminfo.tickerid, olderTF, low[3])
dayLow4 = request.security(syminfo.tickerid, olderTF, low[4])
// Дневные Фракталы
dayFractal_UP = dayHigh2 > dayHigh1 and dayHigh2 > dayHigh0 and dayHigh2 > dayHigh3 and dayHigh2 > dayHigh4
dayFractal_DOWN = dayLow2 < dayLow1 and dayLow2 < dayLow0 and dayLow2 < dayLow3 and dayLow2 < dayLow4
if dayFractal_UP
UD := dayHigh2
UD
if dayFractal_DOWN
DD := dayLow2
DD
// Рисуем UD, DD
//plot(UD, title = "UD", color=color.green)
//plot(DD, title = "DD", color=color.red)
// Daily priority
if close > UD
dailyLongPriority := true
dailyLongPriority
else if close < DD
dailyLongPriority := false
dailyLongPriority
//dailyColor = dailyLongPriority ? color.new(color.green, transp=70) : color.new(color.red, transp=70)
//bgcolor(dailyColor, title = "DailyPriority")
//-----------------------------------------------
// Рассчитываем 4-часовые бары
h4High0 = request.security(syminfo.tickerid, currentTF, high)
h4High1 = request.security(syminfo.tickerid, currentTF, high[1])
h4High2 = request.security(syminfo.tickerid, currentTF, high[2])
h4High3 = request.security(syminfo.tickerid, currentTF, high[3])
h4High4 = request.security(syminfo.tickerid, currentTF, high[4])
h4Low0 = request.security(syminfo.tickerid, currentTF, low)
h4Low1 = request.security(syminfo.tickerid, currentTF, low[1])
h4Low2 = request.security(syminfo.tickerid, currentTF, low[2])
h4Low3 = request.security(syminfo.tickerid, currentTF, low[3])
h4Low4 = request.security(syminfo.tickerid, currentTF, low[4])
// H4 Фракталы
h4Fractal_UP = h4High2 > h4High1 and h4High2 > h4High0 and h4High2 > h4High3 and h4High2 > h4High4
h4Fractal_DOWN = h4Low2 < h4Low1 and h4Low2 < h4Low0 and h4Low2 < h4Low3 and h4Low2 < h4Low4
if h4Fractal_UP
UP := h4High2
UP
if h4Fractal_DOWN
DOWN := h4Low2
DOWN
// Рисуем UP, DOWN
plot(UP, title='UP', color=color.new(color.green, 0))
plot(DOWN, title='DOWN', color=color.new(color.red, 0))
// SMA89
sma89 = ta.sma(close, 89)
plot(smaEnabled ? sma89 : na, title='sma89', color=color.new(color.white, transp=10))
//smaColor = close > sma89 ? color.new(color.green, transp=70) : color.new(color.red, transp=70)
//bgcolor(smaColor, title = "smaPriority")
// Condition
LongCondition := weeklyLongPriority and dailyLongPriority and (smaEnabled ? close > sma89 : true)
ShortCondition := weeklyLongPriority == false and dailyLongPriority == false and (smaEnabled ? close < sma89 : true)
ConditionColor = LongCondition ? color.new(color.green, transp=85) : ShortCondition ? color.new(color.red, transp=85) : color.new(color.gray, transp=85)
bgcolor(ConditionColor, title='Condition')
// LOGIC LONG
if AA == 0 and h4Fractal_UP
AA := UP
if (AA[1] != 0 and BB == 0 and h4Fractal_DOWN) or (AA[1] != 0 and BB != 0 and D == 2 and h4Fractal_DOWN)
BB := DOWN
D := 1
if BB != 0 and D == 1 and ta.crossunder(low, BB)
D := 2
if AA != 0 and BB != 0
if D == 2 and (D[1] == 1 or D[2] == 1 or D[3] == 1) and h4Fractal_UP
CC := UP
else if D == 1 and h4Fractal_UP
CC := UP
if (AA != 0 and high > AA) or (LongOrder != 0 and high > LongOrder + pipsBuyStop * stepSize) or (tradeInGrey ? ShortCondition : not LongCondition)
AA := 0
BB := 0
CC := 0
D := 0
//
//plot(AA != 0 ? AA : na, title='A', color=color.new(color.white, transp=10), linewidth=2, style=plot.style_linebr)
//plot(BB != 0 ? BB : na, title='B', color=color.new(color.gray, transp=10), linewidth=2, style=plot.style_linebr)
//plot(CC != 0 ? CC : na, title='C', color=color.new(color.blue, transp=10), linewidth=2, style=plot.style_linebr)
//plot(D != 0 ? D : na, title='D', color=color.new(color.green, transp=80), linewidth=2, style=plot.style_linebr)
// LOGIC SHORT
if AAA == 0 and h4Fractal_DOWN
AAA := DOWN
if (AAA[1] != 0 and BBB == 0 and h4Fractal_UP) or (AAA[1] != 0 and BBB[1] != 0 and DDD == 2 and h4Fractal_UP)
BBB := UP
DDD := 1
if BBB != 0 and DDD == 1 and ta.crossover(high, BBB)
DDD := 2
if AAA != 0 and BBB != 0
if DDD == 2 and (DDD[1] == 1 or DDD[2] == 1 or DDD[3] == 1) and h4Fractal_DOWN
CCC := DOWN
else if DDD == 1 and h4Fractal_DOWN
CCC := DOWN
if (AAA != 0 and low < AAA) or (ShortOrder != 0 and low < ShortOrder - pipsSellStop * stepSize) or (tradeInGrey ? LongCondition : not ShortCondition)
AAA := 0
BBB := 0
CCC := 0
DDD := 0
//
//plot(AAA != 0 ? AAA : na, title='ShortA', color=color.new(color.white, transp=10), linewidth=2, style=plot.style_linebr)
//plot(BBB != 0 ? BBB : na, title='ShortB', color=color.new(color.gray, transp=10), linewidth=2, style=plot.style_linebr)
//plot(CCC != 0 ? CCC : na, title='ShortC', color=color.new(color.blue, transp=10), linewidth=2, style=plot.style_linebr)
//plot(DDD != 0 ? DDD : na, title='ShortD', color=color.new(color.green, transp=80), linewidth=2, style=plot.style_linebr)
// LongOrder
if (tradeInGrey ? not ShortCondition : LongCondition) and CC != 0 and D == 2 and strategy.position_size[1] == 0 and longEnabled
LongOrder := CC
LongOrder
else if (tradeInGrey ? ShortCondition : not LongCondition) or strategy.position_size[1] > 0 or (LongOrder != 0 and high > LongOrder + pipsBuyStop * stepSize)
LongOrder := 0
LongOrder
plot(LongOrder != 0 ? LongOrder : na, title='LongOrder', color=color.new(color.yellow, transp=10), linewidth=2, style=plot.style_linebr)
// ShortOrder
if (tradeInGrey ? not LongCondition : ShortCondition) and CCC != 0 and DDD == 2 and strategy.position_size[1] == 0 and shortEnabled
ShortOrder := CCC
ShortOrder
else if (tradeInGrey ? LongCondition : not ShortCondition) or strategy.position_size[1] < 0 or (ShortOrder != 0 and low < ShortOrder - pipsSellStop * stepSize)
ShortOrder := 0
ShortOrder
plot(ShortOrder != 0 ? ShortOrder : na, title='ShortOrder', color=color.new(color.orange, transp=10), linewidth=2, style=plot.style_linebr)
// Fibo Pivots
H = request.security(syminfo.tickerid, pivotTF, high[1])
L = request.security(syminfo.tickerid, pivotTF, low[1])
C = request.security(syminfo.tickerid, pivotTF, close[1])
PP = (H + L + C) / 3
R3 = PP + 1.000 * (H - L)
R2 = PP + 0.618 * (H - L)
R1 = PP + 0.382 * (H - L)
S1 = PP - 0.382 * (H - L)
S2 = PP - 0.618 * (H - L)
S3 = PP - 1.000 * (H - L)
//plot(PP)
//plot(R3)
//plot(R2)
//plot(R1)
//plot(S1)
//plot(S2)
//plot(S3)
// Расчет цены Лонг Тейка
if S3 - LongOrder > LongOrder - DOWN
LongTP := S3
LongTP
else if S2 - LongOrder > LongOrder - DOWN
LongTP := S2
LongTP
else if S1 - LongOrder > LongOrder - DOWN
LongTP := S1
LongTP
else if PP - LongOrder > LongOrder - DOWN
LongTP := PP
LongTP
else if R1 - LongOrder > LongOrder - DOWN
LongTP := R1
LongTP
else if R2 - LongOrder > LongOrder - DOWN
LongTP := R2
LongTP
else if R3 - LongOrder > LongOrder - DOWN
LongTP := R3
LongTP
else
LongTP := 0
LongTP
//
//plot(LongTake)
if strategy.position_size == 0
if LongTP == 0 and LongOrder != 0
LongTake := LongOrder + LongOrder - DOWN
LongTake
else
LongTake := LongTP
LongTake
plot(series=strategy.position_size > 0 ? LongTake : na, title='LongTake', color=color.new(color.rgb(99, 253, 104), transp=0), linewidth=1, style=plot.style_linebr)
// Расчет цены Шорт Тейка
if ShortOrder - R3 > UP - ShortOrder
ShortTP := R3
ShortTP
else if ShortOrder - R2 > UP - ShortOrder
ShortTP := R2
ShortTP
else if ShortOrder - R1 > UP - ShortOrder
ShortTP := R1
ShortTP
else if ShortOrder - PP > UP - ShortOrder
ShortTP := PP
ShortTP
else if ShortOrder - S1 > UP - ShortOrder
ShortTP := S1
ShortTP
else if ShortOrder - S2 > UP - ShortOrder
ShortTP := S2
ShortTP
else if ShortOrder - S3 > UP - ShortOrder
ShortTP := S3
ShortTP
else
ShortTP := 0
ShortTP
//
//plot(ShortTP)
if strategy.position_size == 0
if ShortTP == 0 and ShortOrder != 0
ShortTake := ShortOrder - (UP - ShortOrder)
ShortTake
else
ShortTake := ShortTP
ShortTake
plot(series=strategy.position_size < 0 ? ShortTake : na, title='ShortTake', color=color.new(color.rgb(99, 253, 104), transp=0), linewidth=1, style=plot.style_linebr)
// StopForLONG and SHORT
stopLong := math.min(DOWN,ta.lowest(low,3)) - pipsSellStop*stepSize
//plot(stopLong)
stopShort := math.max(UP,ta.highest(high,3)) + pipsBuyStop*stepSize
//plot(stopShort)
// TRADES LONG
if LongOrder > 0 and close < LongOrder and longEnabled and LongCondition
strategy.entry('Long', strategy.long, stop=LongOrder + pipsBuyStop*stepSize)
if LongOrder == 0 or not LongCondition or not longEnabled
strategy.cancel('Long')
strategy.exit('CloseLong', from_entry='Long', stop=stopLong, limit=LongTake - pipsSellStop*stepSize)
// // LONG ALERT !!!
// if longEnabled and LongCondition and LongOrder[1] == 0 and LongOrder != 0
// alert(str.tostring(LicenseID)+',buystop,GBPUSDb,price=' +str.tostring(LongOrder + pipsBuyStop*stepSize)+',risk='+str.tostring(contracts), alert.freq_once_per_bar_close)
// if longEnabled and LongCondition and LongOrder[1] != 0 and LongOrder != 0 and LongOrder != LongOrder[1]
// alert(str.tostring(LicenseID)+',cancellongbuystop,GBPUSDb,price='+str.tostring(LongOrder + pipsBuyStop*stepSize)+',risk='+str.tostring(contracts), alert.freq_once_per_bar_close)
// if (strategy.position_size > 0 and (LongTake != LongTake[1] or stopLong != stopLong[1])) or (strategy.position_size > 0 and strategy.position_size[1] == 0 )
// alert(str.tostring(LicenseID)+',newsltplong,GBPUSDb,sl='+str.tostring(stopLong)+',tp='+str.tostring(LongTake - pipsSellStop*stepSize), alert.freq_once_per_bar_close)
// if strategy.position_size == 0 and ((LongCondition[1] and not LongCondition) or not longEnabled) and (LongOrder[1] != 0 and LongOrder == 0)
// alert(str.tostring(LicenseID)+',cancellong,GBPUSDb', alert.freq_once_per_bar_close)
// // TRADES SHORT
// if ShortOrder > 0 and close > ShortOrder and shortEnabled and ShortCondition
// strategy.entry('Short', strategy.short, stop=ShortOrder - pipsSellStop*stepSize)
// if ShortOrder == 0 or not ShortCondition or not shortEnabled
// strategy.cancel('Short')
// strategy.exit('CloseShort', from_entry='Short', stop=stopShort, limit=ShortTake + pipsBuyStop*stepSize)
// // SHORT ALERT !!!
// if shortEnabled and ShortCondition and ShortOrder[1] == 0 and ShortOrder != 0
// alert(str.tostring(LicenseID)+',sellstop,GBPUSDb,price=' +str.tostring(ShortOrder - pipsSellStop*stepSize)+',risk='+str.tostring(contracts), alert.freq_once_per_bar_close)
// if shortEnabled and ShortCondition and ShortOrder[1] != 0 and ShortOrder != 0 and ShortOrder != ShortOrder[1]
// alert(str.tostring(LicenseID)+',cancelshortsellstop,GBPUSDb,price='+str.tostring(ShortOrder - pipsSellStop*stepSize)+',risk='+str.tostring(contracts), alert.freq_once_per_bar_close)
// if (strategy.position_size < 0 and (ShortTake != ShortTake[1] or stopShort != stopShort[1])) or (strategy.position_size < 0 and strategy.position_size[1] == 0)
// alert(str.tostring(LicenseID)+',newsltpshort,GBPUSDb,sl='+str.tostring(stopShort)+',tp='+str.tostring(ShortTake + pipsBuyStop*stepSize), alert.freq_once_per_bar_close)
// if strategy.position_size == 0 and ((ShortCondition[1] and not ShortCondition) or not shortEnabled) and (ShortOrder[1] != 0 and ShortOrder == 0)
// alert(str.tostring(LicenseID)+',cancelshort,GBPUSDb', alert.freq_once_per_bar_close)