예스스탁
예스스탁 답변
2023-08-21 11:27:37
안녕하세요
예스스탁입니다.
1-1 지표
input : sl_type("%");
input : sl_perc(500),atr_length(500),atr_mult(500),sl_absol(500);
input : startDate(20160101);
input : finishDate(21000101);
var : time_cond(False),sl_val(0),pos(0),trailing_sl(0);
var : nz1(0),nz2(0);
var : long_signal(False),short_signal(False);
time_cond = sDate >= startDate and sDate <= finishDate;
// SL values
sl_val = iff(sl_type == "ATR" , atr_mult * atr(atr_length) ,IFf( sl_type == "Absolute" , sl_absol , close * sl_perc / 100));
// Init Variables
pos = 0;
trailing_sl = 0.0;
nz1 = IFF(IsNan(pos[1])==False,pos[1],0);
nz2 = IFF(IsNan(trailing_sl[1])==False,trailing_sl[1],0);
// Signals
long_signal = nz1 != 1 and high > nz2;
short_signal = nz1 != -1 and low < nz2;
// Calculate SL
trailing_sl = iff(short_signal , high + sl_val ,
IFf( long_signal , low - sl_val ,
IFf(nz1 == 1 , max(low - sl_val, nz2) ,
IFF(nz1 == -1 , min(high + sl_val, nz2) , nz2))));
// Position var
pos = iff(long_signal , 1 ,IFf( short_signal , -1 , nz1));
// PLOTINGS //
plot1(trailing_sl,"trailing_sl",iff(pos == 1 , green,red));
1-2 시스템
input : sl_type("%");
input : sl_perc(500),atr_length(500),atr_mult(500),sl_absol(500);
input : startDate(20160101);
input : finishDate(21000101);
var : time_cond(False),sl_val(0),pos(0),trailing_sl(0);
var : nz1(0),nz2(0);
var : long_signal(False),short_signal(False);
time_cond = sDate >= startDate and sDate <= finishDate;
// SL values
sl_val = iff(sl_type == "ATR" , atr_mult * atr(atr_length) ,IFf( sl_type == "Absolute" , sl_absol , close * sl_perc / 100));
// Init Variables
pos = 0;
trailing_sl = 0.0;
nz1 = IFF(IsNan(pos[1])==False,pos[1],0);
nz2 = IFF(IsNan(trailing_sl[1])==False,trailing_sl[1],0);
// Signals
long_signal = nz1 != 1 and high > nz2;
short_signal = nz1 != -1 and low < nz2;
// Calculate SL
trailing_sl = iff(short_signal , high + sl_val ,
IFf( long_signal , low - sl_val ,
IFf(nz1 == 1 , max(low - sl_val, nz2) ,
IFF(nz1 == -1 , min(high + sl_val, nz2) , nz2))));
// Position var
pos = iff(long_signal , 1 ,IFf( short_signal , -1 , nz1));
if time_cond and pos != 1 Then
Buy();
if time_cond and pos != -1 Then
Sell();
1-3 종목검색
input : sl_type("%");
input : sl_perc(500),atr_length(500),atr_mult(500),sl_absol(500);
input : startDate(20160101);
input : finishDate(21000101);
var : time_cond(False),sl_val(0),pos(0),trailing_sl(0);
var : nz1(0),nz2(0);
var : long_signal(False),short_signal(False);
time_cond = sDate >= startDate and sDate <= finishDate;
// SL values
sl_val = iff(sl_type == "ATR" , atr_mult * atr(atr_length) ,IFf( sl_type == "Absolute" , sl_absol , close * sl_perc / 100));
// Init Variables
pos = 0;
trailing_sl = 0.0;
nz1 = IFF(IsNan(pos[1])==False,pos[1],0);
nz2 = IFF(IsNan(trailing_sl[1])==False,trailing_sl[1],0);
// Signals
long_signal = nz1 != 1 and high > nz2;
short_signal = nz1 != -1 and low < nz2;
// Calculate SL
trailing_sl = iff(short_signal , high + sl_val ,
IFf( long_signal , low - sl_val ,
IFf(nz1 == 1 , max(low - sl_val, nz2) ,
IFF(nz1 == -1 , min(high + sl_val, nz2) , nz2))));
// Position var
pos = iff(long_signal , 1 ,IFf( short_signal , -1 , nz1));
if time_cond and pos != 1 Then
Find(1);
2-1 지표
input : atr_length(500),start(500),increment(500),maximum(500),entry_bars(500);
var : atrv(0),psar(0),af(0),trend_dir(0),ep(0),trend_bars(0);
var : sar_long_to_short(False),sar_short_to_long(False);
var : trend_change(False);
atrv = atr(atr_length);
atrv = iff(IsNan(atrv) == true ,TrueRange , atrv);
psar = 0.0; // PSAR
af = 0.0; // Acceleration Factor
trend_dir = 0; // Current direction of PSAR
ep = 0.0; // Extreme point
trend_bars = 0;
sar_long_to_short = trend_dir[1] == 1 and close <= psar[1]; // PSAR switches from long to short
sar_short_to_long = trend_dir[1] == -1 and close >= psar[1]; // PSAR switches from short to long
trend_change = sar_long_to_short or sar_short_to_long;
// Calculate trend direction
trend_dir = iff(close[1] > open[1] , 1 ,
IFf(close[1] <= open[1] , -1 ,
IFf(sar_long_to_short , -1 ,
iff(sar_short_to_long , 1 , iff(isnan(trend_dir[1])==False,trend_dir[1],0)))));
trend_bars = iff(sar_long_to_short , -1 ,
IFf(sar_short_to_long , 1 ,
iff(trend_dir == 1 , iff(isnan(trend_bars[1])==False,trend_bars[1],0)+ 1 ,
IFf( trend_dir == -1 , iff(isnan(trend_bars[1])==False,trend_bars[1],0) - 1 , iff(isnan(trend_bars[1])==False,trend_bars[1],0) ))));
// Calculate Acceleration Factor
af = iff(trend_change , start ,
iff(trend_dir == 1 and high > ep[1] or trend_dir == -1 and low < ep[1] , min(maximum, af[1] + increment) , af[1]));
// Calculate extreme point
ep = iff(trend_change and trend_dir == 1 , high ,
iff(trend_change and trend_dir == -1 , low ,
iff(trend_dir == 1 , max(ep[1], high) , min(ep[1], low))));
// Calculate PSAR
psar = iff(close[1] > open[1] , low[1] ,
IFf(close[1] <= open[1] , high[1] ,
IFf(trend_change , ep[1] ,
IFf(trend_dir == 1 , psar[1] + af * atrv , psar[1] - af * atrv))));
plot1(psar,"psar",iff(trend_dir == 1 , green , red));
2-2 시스템
input : atr_length(500),start(500),increment(500),maximum(500),entry_bars(500);
var : atrv(0),psar(0),af(0),trend_dir(0),ep(0),trend_bars(0);
var : sar_long_to_short(False),sar_short_to_long(False);
var : trend_change(False);
atrv = atr(atr_length);
atrv = iff(IsNan(atrv) == true ,TrueRange , atrv);
psar = 0.0; // PSAR
af = 0.0; // Acceleration Factor
trend_dir = 0; // Current direction of PSAR
ep = 0.0; // Extreme point
trend_bars = 0;
sar_long_to_short = trend_dir[1] == 1 and close <= psar[1]; // PSAR switches from long to short
sar_short_to_long = trend_dir[1] == -1 and close >= psar[1]; // PSAR switches from short to long
trend_change = sar_long_to_short or sar_short_to_long;
// Calculate trend direction
trend_dir = iff(close[1] > open[1] , 1 ,
IFf(close[1] <= open[1] , -1 ,
IFf(sar_long_to_short , -1 ,
iff(sar_short_to_long , 1 , iff(isnan(trend_dir[1])==False,trend_dir[1],0)))));
trend_bars = iff(sar_long_to_short , -1 ,
IFf(sar_short_to_long , 1 ,
iff(trend_dir == 1 , iff(isnan(trend_bars[1])==False,trend_bars[1],0)+ 1 ,
IFf( trend_dir == -1 , iff(isnan(trend_bars[1])==False,trend_bars[1],0) - 1 , iff(isnan(trend_bars[1])==False,trend_bars[1],0) ))));
// Calculate Acceleration Factor
af = iff(trend_change , start ,
iff(trend_dir == 1 and high > ep[1] or trend_dir == -1 and low < ep[1] , min(maximum, af[1] + increment) , af[1]));
// Calculate extreme point
ep = iff(trend_change and trend_dir == 1 , high ,
iff(trend_change and trend_dir == -1 , low ,
iff(trend_dir == 1 , max(ep[1], high) , min(ep[1], low))));
// Calculate PSAR
psar = iff(close[1] > open[1] , low[1] ,
IFf(close[1] <= open[1] , high[1] ,
IFf(trend_change , ep[1] ,
IFf(trend_dir == 1 , psar[1] + af * atrv , psar[1] - af * atrv))));
IF trend_bars == entry_bars TheN
Buy();
IF trend_bars == -entry_bars TheN
Sell();
2-3 종목검색
input : atr_length(500),start(500),increment(500),maximum(500),entry_bars(500);
var : atrv(0),psar(0),af(0),trend_dir(0),ep(0),trend_bars(0);
var : sar_long_to_short(False),sar_short_to_long(False);
var : trend_change(False);
atrv = atr(atr_length);
atrv = iff(IsNan(atrv) == true ,TrueRange , atrv);
psar = 0.0; // PSAR
af = 0.0; // Acceleration Factor
trend_dir = 0; // Current direction of PSAR
ep = 0.0; // Extreme point
trend_bars = 0;
sar_long_to_short = trend_dir[1] == 1 and close <= psar[1]; // PSAR switches from long to short
sar_short_to_long = trend_dir[1] == -1 and close >= psar[1]; // PSAR switches from short to long
trend_change = sar_long_to_short or sar_short_to_long;
// Calculate trend direction
trend_dir = iff(close[1] > open[1] , 1 ,
IFf(close[1] <= open[1] , -1 ,
IFf(sar_long_to_short , -1 ,
iff(sar_short_to_long , 1 , iff(isnan(trend_dir[1])==False,trend_dir[1],0)))));
trend_bars = iff(sar_long_to_short , -1 ,
IFf(sar_short_to_long , 1 ,
iff(trend_dir == 1 , iff(isnan(trend_bars[1])==False,trend_bars[1],0)+ 1 ,
IFf( trend_dir == -1 , iff(isnan(trend_bars[1])==False,trend_bars[1],0) - 1 , iff(isnan(trend_bars[1])==False,trend_bars[1],0) ))));
// Calculate Acceleration Factor
af = iff(trend_change , start ,
iff(trend_dir == 1 and high > ep[1] or trend_dir == -1 and low < ep[1] , min(maximum, af[1] + increment) , af[1]));
// Calculate extreme point
ep = iff(trend_change and trend_dir == 1 , high ,
iff(trend_change and trend_dir == -1 , low ,
iff(trend_dir == 1 , max(ep[1], high) , min(ep[1], low))));
// Calculate PSAR
psar = iff(close[1] > open[1] , low[1] ,
IFf(close[1] <= open[1] , high[1] ,
IFf(trend_change , ep[1] ,
IFf(trend_dir == 1 , psar[1] + af * atrv , psar[1] - af * atrv))));
IF trend_bars == entry_bars TheN
find(1);
즐거운 하루되세요
> 하루삼프로 님이 쓴 글입니다.
> 제목 : 수식변환 부탁드립니다.
> 안녕하세요
항상 도움을 주셔서 감사드립니다.
파인스크립 수식을 예스 수식으로 부탁 드려봅니다.
종목검색식.지표식,시스템식 부탁합니다.
매번 부탁을 해서 송구 스럽습니다.
항상 가정에 건승과 건강이 함께 하시길 빕니다.
1.
// Inputs //
sl_type = input.string('%', options=['%', 'ATR', 'Absolute'])
sl_perc = input.float(500, title='% SL')
atr_length = input(500, title='ATR Length')
atr_mult = input.float(500, title='ATR Mult')
sl_absol = input.float(500, title='Absolute SL')
// BACKTESTING RANGE
// From Date Inputs
fromDay = input.int(defval=1, title='From Day', minval=1, maxval=31)
fromMonth = input.int(defval=1, title='From Month', minval=1, maxval=12)
fromYear = input.int(defval=2016, title='From Year', minval=1970)
// To Date Inputs
toDay = input.int(defval=1, title='To Day', minval=1, maxval=31)
toMonth = input.int(defval=1, title='To Month', minval=1, maxval=12)
toYear = input.int(defval=2100, title='To Year', minval=1970)
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = time >= startDate and time <= finishDate
// CALCULATIONS //
// SL values
sl_val = sl_type == 'ATR' ? atr_mult * ta.atr(atr_length) : sl_type == 'Absolute' ? sl_absol : close * sl_perc / 100
// Init Variables
pos = 0
trailing_sl = 0.0
// Signals
long_signal = nz(pos[1]) != 1 and high > nz(trailing_sl[1])
short_signal = nz(pos[1]) != -1 and low < nz(trailing_sl[1])
// Calculate SL
trailing_sl := short_signal ? high + sl_val : long_signal ? low - sl_val : nz(pos[1]) == 1 ? math.max(low - sl_val, nz(trailing_sl[1])) : nz(pos[1]) == -1 ? math.min(high + sl_val, nz(trailing_sl[1])) : nz(trailing_sl[1])
// Position var
pos := long_signal ? 1 : short_signal ? -1 : nz(pos[1])
// PLOTINGS //
plot(trailing_sl, linewidth=2, color=pos == 1 ? color.green : color.red)
// STRATEGY //
if time_cond and pos != 1
strategy.entry('long', strategy.long, stop=trailing_sl)
if time_cond and pos != -1
strategy.entry('short', strategy.short, stop=trailing_sl)
----------------------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------------------
2.
atr_length = input(500)
start = input(500)
increment = input(500)
maximum = input(500)
entry_bars = input(500, title='Entry on Nth trend bar')
atr = ta.atr(atr_length)
atr := na(atr) ? ta.tr : atr
psar = 0.0 // PSAR
af = 0.0 // Acceleration Factor
trend_dir = 0 // Current direction of PSAR
ep = 0.0 // Extreme point
trend_bars = 0
sar_long_to_short = trend_dir[1] == 1 and close <= psar[1] // PSAR switches from long to short
sar_short_to_long = trend_dir[1] == -1 and close >= psar[1] // PSAR switches from short to long
trend_change = barstate.isfirst[1] or sar_long_to_short or sar_short_to_long
// Calculate trend direction
trend_dir := barstate.isfirst[1] and close[1] > open[1] ? 1 : barstate.isfirst[1] and close[1] <= open[1] ? -1 : sar_long_to_short ? -1 : sar_short_to_long ? 1 : nz(trend_dir[1])
trend_bars := sar_long_to_short ? -1 : sar_short_to_long ? 1 : trend_dir == 1 ? nz(trend_bars[1]) + 1 : trend_dir == -1 ? nz(trend_bars[1]) - 1 : nz(trend_bars[1])
// Calculate Acceleration Factor
af := trend_change ? start : trend_dir == 1 and high > ep[1] or trend_dir == -1 and low < ep[1] ? math.min(maximum, af[1] + increment) : af[1]
// Calculate extreme point
ep := trend_change and trend_dir == 1 ? high : trend_change and trend_dir == -1 ? low : trend_dir == 1 ? math.max(ep[1], high) : math.min(ep[1], low)
// Calculate PSAR
psar := barstate.isfirst[1] and close[1] > open[1] ? low[1] : barstate.isfirst[1] and close[1] <= open[1] ? high[1] : trend_change ? ep[1] : trend_dir == 1 ? psar[1] + af * atr : psar[1] - af * atr
plot(psar, style=plot.style_cross, color=trend_dir == 1 ? color.green : color.red, linewidth=2)
// Strategy
strategy.entry('Long', strategy.long, when=trend_bars == entry_bars)
strategy.entry('Short', strategy.short, when=trend_bars == -entry_bars)