예스스탁
예스스탁 답변
2020-01-22 15:27:46
안녕하세요
예스스탁입니다.
1
리셋하면 신호가 나오는 것은
수식에서는 완성봉의 값만 이용해 신호를 발생하는데
기본차트와 참조데이타의 봉완성 시점(다음봉시가수신)이 다르면 발생할수 있습니다.
해당 부분은 랭귀지에서 별도 처리가 되지 않습니다.
2
수식에 참조데이타를 사용하는데 변수선언과 값계산에 데이타함수를 지정하지 않은 경우들이 많습니다.
해당 부분은 사용자분이 해당 변수가 어떤 값을 저장하는지에 따라 처리하셔야 합니다.
전반적인 수식의 내용이 어떤 데이타의 값을 할당받는지 모호한 부분들이 있습니다.
수식을 수정해 드리지만 의도하시는 내용과 맞을지 알수가 없습니다.
예를 들어 작성하신 아래의 내용을 보시면 변수의 선언에는 data1,data2,data3으로 처리가 되어 있지만
변수에 할당하는 sar(af1,maxAF)와 같은 값은 데이타 처리가 없습니다.
Var : pvalue1(0,data1), pvalue3(0,data2), pvalue5(0,data3);
pvalue1 = sar(af1,maxAF);
pvalue3 = sar(af3,maxAF);
pvalue5 = sar(af5,maxAF);
해당 변수를 사용하는 if문에 단순히 C와 비교하는 것으로 보아
pvalue1,pvalue2,pvalue3이 모두 data1의 값을 저장하는 것으로 판단되어
아래와 같이 수정되었습니다.
Var : pvalue1(0,data1), pvalue3(0,data1), pvalue5(0,data1);
pvalue1 = data1(sar(af1,maxAF));
pvalue3 = data1(sar(af3,maxAF));
pvalue5 = data1(sar(af5,maxAF));
위 설명 내용과 아래식 참고하셔서 사용되는 모든 변수에 대해 재확인 하시기 바랍니다.
해당 부분은 사용자분이 수정하셔야 합니다.
3
input : 손절틱(50), 익절틱(60), 익절하락틱(1);
input : 진입시작(083000), 진입종료(045700);
input : 당일강제청산시간1(053000);
var : 손절(0,data1), 익절(0,data1), 익절하락(0,data1);
var : StartTime(0,data1),EndTime(0,data1),Tcond(false,data1);
StartTime = 진입시작;
Endtime = 진입종료;
if data1((sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime)) Then
{
Tcond = true;
}
if data1((sdate != sdate[1] and stime >= Endtime) or
(sdate == sdate[1] and stime >= Endtime and stime[1] < Endtime)) Then
{
Tcond = false;
}
손절 = 손절틱*0.25;
익절 = 익절틱*0.25;
익절하락 = 익절하락틱*0.25;
input : H1(80), L1(20), HL2(10.4);
Input : af1(0.02), af3(0.02), af5(0.02), maxAF(0.2);
Var : pvalue1(0,data1), pvalue3(0,data1), pvalue5(0,data1);
pvalue1 = data1(sar(af1,maxAF));
pvalue3 = data1(sar(af3,maxAF));
pvalue5 = data1(sar(af5,maxAF));
input : P(2), P31(30), P61(60), P81(280);
input : Period2(2), Period31(5), Period32(5);
var : V2(0,data1),V33(0,data1),v63(0,data1),V83(0,data1);
var : V36(0,data2),V66(0,data2),v86(0,data2);
var : V39(0,data3),V69(0,data3),v89(0,data3);
#### data1: 200틱
v2 = data1(ma(C,Period2));
v33 = data1(wma(C,P31)); #30일 가중이동 평균
v63 = data1(wma(C, P61)); #60일 가중이동 평균
v83 = data1(wma(C,P81)); #280일 가중이동 평균
#### data2: 400틱
v36= data2(wma(C,P31)); #30일 가중이동 평균
v66 = data2(wma(C, P61)); #60일 가중이동 평균
v86 = data2(wma(C,P81)); #280일 가중이동 평균
#### data3: 5분
v39 = data3(wma(C,P31)); #30일 가중이동 평균
v69 = data3(wma(C, P61)); #60일 가중이동 평균
v89 = data3(wma(C,P81)); #280일 가중이동 평균
var: t(0,data1),tx(0,data1),conditionB(false,data1),conditionS(false,data1);
if
C > pvalue5
and C > pvalue3
and v66 > v86
and v63 > v83
Then
{
#t는 1로
t = 1;
}
if
C < pvalue5
and C < pvalue3
and v66 < v86
and v63 < v83
Then
{
#t는 -1로
t = -1;
}
# t가 1까지 기록했으면
if t == 1
and v63 > v83
and Crossdown(v2,v63)
Then
{
t = 2; # t는 -2 로
ConditionB = false;
tx = Text_New(sdate,stime,H+PriceScale*3,"★"); #★출력
Text_SetStyle(tx,1,1);
Text_SetColor(tx,YELLOW);
}
#t가 -1까지 기록했으면
if t == -1
and v63 < v83
and Crossup(v2,v63)
Then
{
t = -2; # t는 -2 로
ConditionS = false;
tx = Text_New(sdate,stime,L-PriceScale*3,"★"); #★출력
Text_SetStyle(tx,1,1);
Text_SetColor(tx,MAGENTA);
}
#t가 2이고 조건 만족 시 매수
if Tcond == true
and ConditionB == false
and t >= 2
and v66 > v86
and v69 > v89
and v63[1] < v63
and C > pvalue1
and Crossup(v2,v63)
Then
{
buy("B");
ConditionB = true;
}
#t가 -2이고 조건 만족 시 매수
if Tcond == true
and ConditionS == false
and t <= -2
and v66 < v86
and v69 < v89
and v63[1] > v63
and C < pvalue1
and Crossdown(v2,v63)
Then
{
Sell("S");
ConditionS = true;
}
#### Target 청산
if MarketPosition == 1 then {
SetStopTrailing(익절하락,익절,PointStop);
SetStopLoss(손절,PointStop);
}
if Marketposition == -1 Then {
SetStopTrailing(익절하락,익절,PointStop);
SetStopLoss(손절,PointStop);
}
##### 당일 강제청산 #####
var : Dayfinish1(0,data1), Dayfinish2(0,data1),Dayfinish3(0,data1);
Dayfinish1 = 당일강제청산시간1;
if data1(((sdate != sdate[1] and stime >= Dayfinish1) or
(sdate == sdate[1] and stime >= Dayfinish1 and stime[1] < Dayfinish1))) Then {
if MarketPosition == 1 Then
ExitLong("E6");
if MarketPosition == -1 Then
ExitShort(" E6");
}
즐거운 명절 되시기 바랍니다.
> 라떼처럼 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 항상 감사드립니다.
아래식을 수행하면
전략실행 중에는 매매 신호가 발생하지 않고
리셋하거나 전략창을 껐다가 켜면 매매 신호가 발생합니다.
t가 2까지 도달하면 조건 만족시 매수 매도 하는 수식입니다.
수정을 부탁드립니다.
수정해 주신 사항에 대해 간단히 설명이 가능하시면 주석도 좀 부탁드립니다.
input : 손절틱(50), 익절틱(60), 익절하락틱(1);
input : 진입시작(083000), 진입종료(045700);
input : 당일강제청산시간1(053000);
var : 손절(0), 익절(0), 익절하락(0);
var : MMDD(0),StartTime(0),EndTime(0),StartTime2(0),EndTime2(0),Endtime3(0), Tcond(false), Ccond(false);
StartTime = 진입시작;
Endtime = 진입종료;
if (sdate != sdate[1] and stime >= StartTime) or
(sdate == sdate[1] and stime >= StartTime and stime[1] < StartTime)Then {
Tcond = true; }
if (sdate != sdate[1] and stime >= Endtime) or
(sdate == sdate[1] and stime >= Endtime and stime[1] < Endtime)Then {
Tcond = false; }
손절 = 손절틱*0.25;
익절 = 익절틱*0.25;
익절하락 = 익절하락틱*0.25;
input : H1(80), L1(20), HL2(10.4);
Input : af1(0.02), af3(0.02), af5(0.02), maxAF(0.2);
Var : pvalue1(0,data1), pvalue3(0,data2), pvalue5(0,data3);
pvalue1 = sar(af1,maxAF);
pvalue3 = sar(af3,maxAF);
pvalue5 = sar(af5,maxAF);
input : P(2), P31(30), P61(60), P81(280);
input : Period2(2), Period31(5), Period32(5);
#### data1: 200틱
var2 = data1(ma(C,Period2));
var33 = data1(wma(C,P31)); #30일 가중이동 평균
Var63 = data1(wma(C, P61)); #60일 가중이동 평균
Var83 = data1(wma(C,P81)); #280일 가중이동 평균
#### data2: 400틱
var36= data2(wma(C,P31)); #30일 가중이동 평균
Var66 = data2(wma(C, P61)); #60일 가중이동 평균
Var86 = data2(wma(C,P81)); #280일 가중이동 평균
#### data3: 5분
var39 = data3(wma(C,P31)); #30일 가중이동 평균
Var69 = data3(wma(C, P61)); #60일 가중이동 평균
Var89 = data3(wma(C,P81)); #280일 가중이동 평균
var: t(0),tx(0),conditionB(false),conditionS(false);
if
C > pvalue5
and C > pvalue3
and var66 > var86
and var63 > var83
Then
{
#t는 1로
t = 1;
}
if
C < pvalue5
and C < pvalue3
and var66 < var86
and var63 < var83
Then
{
#t는 -1로
t = -1;
}
# t가 1까지 기록했으면
if t == 1
and var63 > var83
and Crossdown(var2,var63)
Then
{
t = 2; # t는 -2 로
ConditionB = false;
tx = Text_New(sdate,stime,H+PriceScale*3,"★"); #★출력
Text_SetStyle(tx,1,1);
Text_SetColor(tx,YELLOW);
}
#t가 -1까지 기록했으면
if t == -1
and var63 < var83
and Crossup(var2,var63)
Then
{
t = -2; # t는 -2 로
ConditionS = false;
tx = Text_New(sdate,stime,L-PriceScale*3,"★"); #★출력
Text_SetStyle(tx,1,1);
Text_SetColor(tx,MAGENTA);
}
#t가 2이고 조건 만족 시 매수
if Tcond == true
and ConditionB == false
and t >= 2
and var66 > var86
and var69 > var89
and var63[1] < var63
and C > pvalue1
and Crossup(var2,var63)
Then
{
buy("B");
ConditionB = true;
}
#t가 -2이고 조건 만족 시 매수
if Tcond == true
and ConditionS == false
and t <= -2
and var66 < var86
and var69 < var89
and var63[1] > var63
and C < pvalue1
and Crossdown(var2,var63)
Then
{
Sell("S");
ConditionS = true;
}
#### Target 청산
if MarketPosition == 1 then {
SetStopTrailing(익절하락,익절,PointStop);
SetStopLoss(손절,PointStop);
}
if Marketposition == -1 Then {
SetStopTrailing(익절하락,익절,PointStop);
SetStopLoss(손절,PointStop);
}
##### 당일 강제청산 #####
var : Dayfinish1(0), Dayfinish2(0),Dayfinish3(0);
Dayfinish1 = 당일강제청산시간1;
if ((sdate != sdate[1] and stime >= Dayfinish1) or
(sdate == sdate[1] and stime >= Dayfinish1 and stime[1] < Dayfinish1)) Then {
if MarketPosition == 1 Then
ExitLong("E6");
if MarketPosition == -1 Then
ExitShort(" E6");
}