답변완료
수식문의 드립니다.
문의 드립니다.
-아래에서
1.조건을 1번 2번으로 나누어서 진입횟수가 5회까지는 1번조건 금액1만매수
2. 5~10회 까지는 2번조건 금액3만매수
3. 10회 이후는 3번조건으로 금액 5만매수 20회 이내에 매수후
토탈 평균가 a% 이상일때 일괄 시장가 매도수식도 가능할까요?
자꾸 질문드려서 죄송합니다. 잘 부탁드려요.
==올 한해 마무리 잘 하시고 새해 복 마니마니 받으세요! ~~^^==
-아래
Input : Period1(50),Period2(9),period(30),n(30),진입횟수1(5),진입횟수2(10), 진입회수3(20),금액1(0000),금액2(0000),금액3(0000), percent(2);
var :af(0.02), maxAF(0.2),f(0), CCIv(0),CCIsig(0),a(0),b(0),DMIv(0),dp(0),dm(0),DParity(0),DParity1(0),count(0);
CCIv = CCI(Period1);
CCIsig = ema(CCIv,Period2);
var1 = SAR(af,maxAF);
a=ma(c,120);
b=ma(c,5);
f=highest(h,2);
value1 = MACD(12,26);
value2 = ema(value1, 9);
DMIv = DMI(Period);
DP = DIPlus(Period);
DM = DIMinus(Period);
DParity = Disparity(120);
DParity1 = Disparity(240);
if CrossDown(CCIv,100) and CountIf(CCIV > 100,n) >= 1 Then
{
count = 0;
}
1번조건 if cciv<100 and CrossUp(CCIv,CCIsig) Then
{
count = count+1;
if count < 1.진입횟수*금액1 Then
Buy("b");
}
2번 조건 if cciv<100 and CrossUp(CCIv,CCIsig) Then
{
count = count+1;
if count < 2.진입횟수*금액2 Then
Buy("b");
}
3번 조건 if cciv<100 and CrossUp(CCIv,CCIsig) Then
{
count = count+1;
if count < 3.진입횟수*금액3 Then
Buy("b");
}
if MarketPosition == 1 Then
{
ExitLong("Bp",AtLimit,AvgEntryPrice*(1+percent/100));
}
2024-12-30
658
글번호 186720
시스템
답변완료
질문 드리겠습니다
안녕하세요
몇 가지 질문 좀 부탁드리겠습니다
1. 아래 수식은 현재 만족봉과 이전 만족봉 사이의 평균 구하는 식인데요
var: cnt(0), sum1(0), sumi(0);
if h>l*1.05 Then
{
TL_NEW(sDatE,sTimE,h*1.01,sDatE,sTimE,99999);
var1= Index;
Var2=Index[1];
sum1=0;
sumi=0;
For cnt = 1 to (var1-Var2)-1
{
sum1=sum1+h[cnt];
sumi=sumi+1;
}
value1=sum1/sumi;
Plot11(value1);
}
For cnt = 1 to (var1-Var2)-1
이 부분에 따르면 현재 만족봉과 이전만족봉은 포함시키지 않고 평균을 구하는건데
둘 사이에 봉이 없을 경우 0이 출력 되는거죠?.
그리고 만약에 현재 만족봉까지 포함 시키려면
for cnt=0 to (var1-var2)-1 이라고 작성하면 되고
현재봉과 이전봉 모두 포함하려면
for cnt=0 to (var1-var2) 이렇게 작성하는게 맞는지 궁금합니다
2.
수식을 부탁드립니다
아래 평균구하는 수식에서 변형을 하려고 하는데요
(현재봉 , 이전봉 둘다 포함시키려고 for 문에는 0 to (var1-var2) 로 해놨습니다, 틀렸으면 고쳐주세요)
만일 조건만족봉 사이 간격이 5봉 미만이라면 평균을 일단 구하지 않고,
새로운 만족봉이 나왔을때 간격이 5봉 이상이라면 모든 봉들을 이용해서 평균을 구하고 싶습니다
예를들어 a2,a1,a0 가 조건 만족했을때의 봉이라고 했을때
a2 와 a1 사이가 3봉이고 (조건만족봉 a2,a1 까지 포함해서 3개) 새로운 조건봉 a0 가 나타났을때
a1와 a0 사이가 10개봉 (a1,a0 까지 포함해서 10개)이라면 3봉+10봉 해서 13개봉의 평균을 구하고 싶습니다
var: cnt(0), sum1(0), sumi(0);
if h>l*1.05 Then
{
TL_NEW(sDatE,sTimE,h*1.01,sDatE,sTimE,99999);
var1= Index;
Var2=Index[1];
sum1=0;
sumi=0;
For cnt = 0 to (var1-Var2)
{
sum1=sum1+h[cnt];
sumi=sumi+1;
}
value1=sum1/sumi;
Plot11(value1);
}
3.
아래식을 작성해봤는데 맞는건지 한번 확인해주심 감사하겠습니다
원하는 조건:
만약
aa[2] > aa[1] and aa[1] < aa[0]
이라는 조건이 만족하면,
aa[3]가 시작한 시점부터 aa[0]까지의 모든 봉의 평균을 구하고 싶습니다
var: cnt(0), sum1(0), sumi(0),period(0),sumsqrt(0),stdv(0),stand(0);
var : sum2(0),sumi2(0),avg2(0);
array: aa[50](0);
if h>l*1.06 Then
{
TL_NEW(sDatE,sTimE,h*1.15,sDatE,sTimE,99999);
var1= Index;
Var2=Index[1];
sum1=0;
sumi=0;
For cnt = 0 to (var1-Var2)
{
sum1=sum1+h[cnt];
sumi=sumi+1;
}
value1=sum1/sumi;
value12= ma(h,20);
For cnt = 50 DownTo 1
{
aa[cnt]=aa[cnt-1];
}
aa[0]= value1;
if aa[2] > aa[1] and aa[1] < aa[0] Then
{
Var3=Index;
Var4=Index[3];
sum2=0;
sumi2=0;
For cnt = 0 to (var3-Var4)
{
sum2=sum2+h[cnt];
sumi2=sumi2+1;
}
avg2=sum2/sumi2;
}
Plot16(avg2,"aa",Orange,Def,1);
}
2024-12-30
559
글번호 186719
지표
답변완료
예스랭귀지 수식 요청합니다
<1번>
R=RSI(14)>50
S=(highest(high,52)+lowest(low,52));
D=valuewhen(1,R,S);
Z=crossup(C,D) && dayhigh()>daylow();
cnt=countsince(date!=date(1),Z);
cnt==1 && cnt(1)==0
<2번>
A=(highest(high,20)-lowest(low,20));
B=highest(high,20)-(A*0.2);
C>B
<3번>
S=EAVG(C,5);
L=EAVG(C,20);
X=crossup(S,L)
<4번>
X = BBandsup(20,2);
Y = MA(C,20,단순);
IF CROSSUP(C, X),D,0) &&
CROSSUP(C, Y)
<5번>
R=RSI(14);
E=EAVG(RSI(14),9);
D=Crossup(R, E);
sum(if(D, 1, 0), 10) >= 1
안녕하세요
위의 키움수식들을 예스랭귀지 변환 가능할까요?
감사합니다
2024-12-29
626
글번호 186717
종목검색
답변완료
TradingView 지표인데 예스트레이더 형식으로 바꾸어 주시면...
Box가 나오니 어렵네요. 변환이 가능허면 부탁드릴께요. 미리 감사드립니다.
//@version=6
// ★★★ Range Detector [LuxAlgo] ★★★
indicator('Range Detector [LuxAlgo]', '@Range Detector - LuxAlgo', overlay = true, max_boxes_count = 500, max_lines_count = 500)
//------------------------------------------------------------------------------
//Settings
//-----------------------------------------------------------------------------{
length = input.int(20, 'Minimum Range Length', minval = 2)
mult = input.float(1., 'Range Width', minval = 0, step = 0.1)
atrLen = input.int(500, 'ATR Length', minval = 1)
//Style
upCss = input(color.fuchsia, 'Broken Upward', group = 'Style')
dnCss = input(color.teal, 'Broken Downward', group = 'Style')
unbrokenCss = input(#5079f3, 'Unbroken', group = 'Style')
//-----------------------------------------------------------------------------}
//Detect and highlight ranges
//-----------------------------------------------------------------------------{
//Ranges drawings
var box bx = na
var line lvl = na
//Extensions
var float max = na
var float min = na
var os = 0
color detect_css = na
n = bar_index
atr = ta.atr(atrLen) * mult
ma = ta.sma(close, length)
count = 0
for i = 0 to length - 1 by 1
count := count + (math.abs(close[i] - ma) > atr ? 1 : 0)
count
if count == 0 and count[1] != count
//Test for overlap and change coordinates
if n[length] <= bx.get_right()
max := math.max(ma + atr, bx.get_top())
min := math.min(ma - atr, bx.get_bottom())
//Box new coordinates
bx.set_top(max)
bx.set_rightbottom(n, min)
bx.set_bgcolor(color.new(unbrokenCss, 80))
//Line new coordinates
avg = math.avg(max, min)
lvl.set_y1(avg)
lvl.set_xy2(n, avg)
lvl.set_color(unbrokenCss)
else
max := ma + atr
min := ma - atr
//Set new box and level
bx := box.new(n[length], ma + atr, n, ma - atr, na, bgcolor = color.new(unbrokenCss, 80))
lvl := line.new(n[length], ma, n, ma, color = unbrokenCss, style = line.style_dotted)
detect_css := color.new(color.gray, 50)
os := 0
os
else if count == 0
bx.set_right(n)
lvl.set_x2(n)
//Set color
if close > bx.get_top()
bx.set_bgcolor(color.new(upCss, 80))
lvl.set_color(upCss)
os := 1
os
else if close < bx.get_bottom()
bx.set_bgcolor(color.new(dnCss, 80))
lvl.set_color(dnCss)
os := -1
os
//-----------------------------------------------------------------------------}
//Plots
//-----------------------------------------------------------------------------{
//Range detection bgcolor
bgcolor(detect_css)
plot(max, 'Range Top', max != max[1] ? na : os == 0 ? unbrokenCss : os == 1 ? upCss : dnCss, 2)
plot(min, 'Range Bottom', min != min[1] ? na : os == 0 ? unbrokenCss : os == 1 ? upCss : dnCss, 2)
//-----------------------------------------------------------------------------}
// my add
longCond = ta.crossover(close, max)
shortCond = ta.crossunder(close, min)
//plot(longCond ? max : na, color=color.yellow, style = plot.style_cross, linewidth = 4, title="Cross+")
//plot(shortCond ? min : na, color=color.yellow, style = plot.style_cross, linewidth = 4, title="Cross-")
plotchar(longCond ? max : na, 'cross Up ↑', '△', location.absolute, #ffff00, size = size.small)
plotchar(shortCond ? min : na, 'cross Dn ↓', '▽', location.absolute, #ffff00, size = size.small)
2024-12-29
720
글번호 186716
지표
답변완료
예스트레이더 언어로 변환해서 검색식 부탁드립니다.
1. 신호수식
최고가=최고값(고가,20);
최저가=최저값(저가,20);
경계=(최고가+최저가)/2-(최고가-최저가)*배분1;
경1=crossup(종가, 경계)&& 종가>시가*배분2;
경2=crossdown(c, 경계);
기준봉=valuewhen(1, 경1 or 경2, 시가);
기봉1=crossup(종가, 기준봉);
기봉2=crossdown(종가, 기준봉);
결준=valuewhen(1, 기봉1 or 기봉2, 시가);
결기1=crossup(종가, 결준);
결기2=crossdown(종가, 결준);
A=valuewhen(1, 결기1 or 결기2, 시가);
M5=eavg(C,5);
M10=eavg(C,10);
M20=eavg(C,20);
M60=eavg(C,60);
M120=eavg(C,120);
M240=eavg(C,240);
M250=eavg(C,250);
M480=eavg(C,480);
BH=BBandsUp(20,2);
BC=BBandsC(20,2);
평균=((M5*2)+(M10*2)+(M20*3)+(M60*2)+(M120*3)+(M240*2)+(M480*2)+(BH*1)+(BC*1)) / 18;
평균라인=Tema(평균, 5, 지수);
B=평균라인 + 20*stdev(평균라인,5);
AA=sar(0.02,0.2);
거래대금=V*C; // 거래대금 계산
C >= A && CROSSUP(C, B) && AA <= C && C >= M250 && 거래대금 >= 6000000&& MACD(shortPeriod,longPeriod)>baseLine
&&MACD(shortPeriod,longPeriod)>= eavg(MACD(shortPeriod,longPeriod),sigPeriod)
2. 지표변수
배분1 0.236
배분2 1.02
shortPeriod 12
longPeriod 26
sigPeriod 9
baseLine 0
sigPeriod 9
이건 키움증권 화살표 수식입니다. 이걸 예스트레이더 언어로 변환해서 검색식으로 만들수 있을까요?
2024-12-29
651
글번호 186714
검색
답변완료
수식수정 부탁합니다
안녕하세요
수식지왕님의 마켓프로파일수식입니다.
1.아래수식이 9시에시작하는데 선물옵션에 사용하는지라 8시45분시작으로
수정해주시면 좋겠읍니다
2.차트시간 1분3분등 사용시간에따라 타임이라는 변수를 변경하는건가요?
input: 타임(15);
var:arr(0),k(0),tick(0),chk_cnt(0),ttm(0),t_val(0),max_tpo(0),tot_tpo(0),
sum(0),acc(0),mdl_prc(0),mdl_arr(0),range_u(0),range_d(0),base(0),
cal_tpo(0),up_tpo(0),dn_tpo(0),up_tail_u(0),up_tail_d(0),dn_tail_u(0),dn_tail_d(0);
array:price_u[100](0),price_m[100](0),price_d[100](0),
status_u[100](0),status_m[100](0),status_d[100](0),
tpo_u[100](0),tpo_m[100](0),tpo_d[100](0);
tick = _TickValue();
if dayindex()==0 then //매일 첫번째 봉에서 해당 변수들의 값을 0으로 초기화
{
for arr = 0 to 99 {
price_u[arr] = 0;
price_m[arr] = 0;
price_d[arr] = 0;
status_u[arr] = 0;
status_m[arr] = 0;
status_d[arr] = 0;
tpo_u[arr] = 0;
tpo_m[arr] = 0;
tpo_d[arr] = 0;
}
max_tpo = 0;
tot_tpo = 0;
sum = 0;
acc = 0;
mdl_prc = 0;
mdl_arr = 0;
range_u = 0;
range_d = 0;
base = dayopen() + tick * 149; //300개 가격대중 최상단에 해당하는 가격
price_u[0] = base; //지수 배열 상단
for arr = 1 to 99 {
price_u[arr] = price_u[arr-1] - tick;
}
price_m[0] = price_u[99] - tick; //지수 배열 중단
for arr = 1 to 99 {
price_m[arr] = price_m[arr-1] - tick;
}
price_d[0] = price_m[99] - tick; //지수 배열 하단
for arr = 1 to 99 {
price_d[arr] = price_d[arr-1] - tick;
}
}
ttm = TimeToMinutes(stime); //시간을 30분,15분,10분등으로 나누기 쉽도록 환산
t_val = int((ttm-540)/interval) + 1; //540은 09:00. 9시를 빼고 나서 원하는 시간단위로 나눈다
for arr = 0 to 99 {
if l <= price_u[arr] and price_u[arr] <= h then
{
if status_u[arr] < t_val then //A가 찍혔는데 또 A를 찍을 필요가 없음. 그걸 확인
{
status_u[arr] = t_val; //중복을 막기 위해 마지막 time value 저장
tpo_u[arr] = tpo_u[arr] + 1; //현재 가격대의 TPO 누적
tot_tpo = tot_tpo + 1; //전체 TPO 누적
if max_tpo < tpo_u[arr] then //TPO 최빈값
{
max_tpo = tpo_u[arr];
sum = 0; //TPO가 동일한 가격대가 여러가격일 경우
acc = 0; //평균값을 구하기 위해 가격 누적변수와 가격대 수 초기화
}
if max_tpo == tpo_u[arr] then //최빈값과 동일하면
{
sum = sum + price_u[arr]; //해당 가격을 누적
acc = acc + 1; //가격대 개수 누적
}
}
}
//3개의 동일 성격을 지닌 배열에 대해 한꺼번에 처리 못하므로 동일 루틴으로 3회 처리
if l <= price_m[arr] and price_m[arr] <= h then
{
if status_m[arr] < t_val then
{
status_m[arr] = t_val;
tpo_m[arr] = tpo_m[arr] + 1;
tot_tpo = tot_tpo + 1;
if max_tpo < tpo_m[arr] then
{
max_tpo = tpo_m[arr];
sum = 0;
acc = 0;
}
if max_tpo == tpo_m[arr] then
{
sum = sum + price_m[arr];
acc = acc + 1;
}
}
}
if l <= price_d[arr] and price_d[arr] <= h then
{
if status_d[arr] < t_val then
{
status_d[arr] = t_val;
tpo_d[arr] = tpo_d[arr] + 1;
tot_tpo = tot_tpo + 1;
if max_tpo < tpo_d[arr] then
{
max_tpo = tpo_d[arr];
sum = 0;
acc = 0;
}
if max_tpo == tpo_d[arr] then
{
sum = sum + price_d[arr];
acc = acc + 1;
}
}
}
}
mdl_prc = round(sum/acc/tick,0)*tick; //평균하여 중심가격으로 삼음
mdl_arr = int((base-mdl_prc)/tick); //배열변수의 첨자는 정수이어야 함
//처음부터 int()를 생각해 냈던 것은 아니고 디버그 과정에서 알게 됨
range_u = mdl_arr;
range_d = mdl_arr;
//MessageLog(",%.2f",range_u);
// 전체 TPO의 70%가 될 때까지 상하값을 비교하면서 누적
cal_tpo = iff(mdl_arr<100,tpo_u[mdl_arr],iff(mdl_arr<200,tpo_m[mdl_arr-100],tpo_d[mdl_arr-200]));
for k = 0 to 150 {
// range_u는 한단위씩 위로(-1), range_d는 한단위씩 아래로(+1)
// TPO가 많은 쪽의 TPO를 먼저 누적한다
var2 = iff(range_u-1<100,tpo_u[range_u-1],iff(range_u-1<200,tpo_m[range_u-1-100],tpo_d[range_u-1-200]));
var3 = iff(range_d+1<100,tpo_u[range_d+1],iff(range_d+1<200,tpo_m[range_d+1-100],tpo_d[range_d+1-200]));
if var2 > var3 then
{
cal_tpo = cal_tpo + var2;
range_u = range_u - 1;
}
else if var2 < var3 then
{
cal_tpo = cal_tpo + var3;
range_d = range_d + 1;
}
else if var2 == var3 and var2 > 0 and var3 > 0 then
{
cal_tpo = cal_tpo + var2;
range_u = range_u - 1;
}
if cal_tpo >= tot_tpo * 0.7 or var2 + var3 == 0 then
k = 150;
}
up_tpo = 0; //중심가격의 상위 TPO
if tpo_u[0] == 1 then up_tail_u = 0; //윗꼬리 상단 경계선, 0행부터 1이면 윗꼬리 상단은 0행이 됨
else up_tail_u = 299; //윗꼬리를 못 찾을 경우를 대비해서 상단과 하단의 관계를 역으로 만듬
//꼬리 경계값을 찾는 루틴을 성공적으로 마치면 상단값 < 하단값 성립
up_tail_d = 0; //윗꼬리 하단 경계선
//0행부터 중심가격 이전행까지 아래로 내려가면서
for arr = 0 to mdl_arr-1 {
//현재 행의 tpo 값이 0이고 다음 행의 tpo값이 1이면 1의 시작으로 보고 다음 행의 행번호를 윗꼬리 상단으로 봄
if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])) == 0 and
iff(arr+1<100,tpo_u[arr+1],iff(arr+1<200,tpo_m[arr-100+1],tpo_d[arr-200+1])) == 1 then
up_tail_u = arr + 1; //윗꼬리 상단 경계선 array
//현재 행의 tpo 값이 1이고 다음 행의 tpo값이 1보다 크면 현재 행의 행번호를 윗꼬리 하단으로 봄
if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])) == 1 and
iff(arr+1<100,tpo_u[arr+1],iff(arr+1<200,tpo_m[arr-100+1],tpo_d[arr-200+1])) > 1 and
up_tail_d == 0 then //조건을 만족하는 경우가 여러번 발생하는데 up_tail_d가 0일때만
//즉, 처음에 찾아진 값만 유효한 것로 봄
up_tail_d = arr; //윗꼬리 하단 경계선 array
//TPO가 1보다 큰 상위 TPO 누적
if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])) > 1 then
up_tpo = up_tpo + iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200]));
}
dn_tpo = 0; //중심가격의 하위 TPO
dn_tail_u = 299; //아래꼬리 상단 경계선
if tpo_d[99] == 1 then dn_tail_d = 299;
else dn_tail_d = 0; //아래꼬리 하단 경계선
//299행부터 중심가격 이전행까지 위로 올라가면서
for arr = 299 downto mdl_arr+1 {
//TPO가 1보다 큰 하위 TPO 누적
if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_u[arr-100],tpo_d[arr-200])) > 1 then
dn_tpo = dn_tpo + iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200]));
//현재 행의 tpo 값이 1이고 윗행의 tpo값이 1보다 크면 현재 행의 행번호를 아랫꼬리 상단으로 봄
if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])) == 1 and
iff(arr-1<100,tpo_u[arr-1],iff(arr-1<200,tpo_m[arr-100-1],tpo_d[arr-200-1])) > 1 and
dn_tail_u == 299 then
dn_tail_u = arr; //아래꼬리 상단 경계선 array
//현재 행의 tpo 값이 0이고 윗행의 tpo값이 1이면 1의 시작으로 보고 윗행의 행번호를 아랫꼬리 하단으로 봄
if iff(arr<100,tpo_u[arr],iff(arr<200,tpo_m[arr-100],tpo_d[arr-200])) == 0 and
iff(arr-1<100,tpo_u[arr-1],iff(arr-1<200,tpo_m[arr-100-1],tpo_d[arr-200-1])) == 1 then
dn_tail_d = arr - 1; //아래꼬리 하단 경계선 array
}
plot1(mdl_prc,"중심가격");
plot2(base-(range_u*tick),"가치영역(상)");
plot3(base-(range_d*tick),"가치영역(하)");
if up_tail_u <= up_tail_d then //꼬리의 경계값이 정상적으로 찾아졌다면
{
plot4(base-(up_tail_u*tick),"윗꼬리상단"); //점그래프로 표현
plot5(base-(up_tail_d*tick),"윗꼬리하단");
}
if dn_tail_u <= dn_tail_d then
{
plot6(base-(dn_tail_u*tick),"아랫꼬리상단");
plot7(base-(dn_tail_d*tick),"아랫꼬리하단");
}
//plot8(up_tpo,"상위TPO");
//plot9(dn_tpo,"하위TPO");
2024-12-29
669
글번호 186711
지표