예스스탁
예스스탁 답변
2022-09-13 12:59:58
안녕하세요
예스스탁입니다.
현재 수식에 MACDV,MACDS는 배열변수입니다.
수식에서 배열변수를 사용하고 배열변수로 조건이나 값계산을 할때
macd[0]와 같이 반드시 배열변수의 방번호를 지정하셔야 합니다.
현재 CrossUp(macdv, macds)와 같이 방번호가 지정되지 않고
사용된 경우가 많습니다.
어떤 방번호로 조건을 지정하는지 알수 없어 저희가 수정해 드릴수 없습니다.
해당 부분을 모두 수정하셔야 합니다.
즐거운 하루되세요
> jshwang2 님이 쓴 글입니다.
> 제목 : 수식문의드립니다
> 안녕하세요~
수식을 작성하였는데 실행하면 자꾸 프로그램이 응답 안한다며 hts가 종료됩니다
다른 수식을 켜보니 이런일이 없는걸 보니, 뭔가가 잘못되서 꺼지는것 같은데 원인을 못찾겠네요..ㅠ
확인 부탁드리겠습니다!
감사합니다
----------------------------------------------
var : BS(False), SS(False);
var : e60(0), exitC(0), HB(0), LB(0),N(0), rHB(0), rLB(0), unitP(0), MDD(100000);
input : TT1(125000), TD1(20220908), TT2(134300), TD2(20220908);
array : p[6](False), MACDV[2](0), MACDS[2](0);
MACDV[0] = MACD(5,20);
MACDV[1] = MACD(5,40);
MACDV[2] = MACD(20,40);
MACDS[0] = Ema(MACD(5,20),9);
MACDS[1] = Ema(MACD(5,40),9);
MACDS[2] = Ema(MACD(20,40),9);
e60 = Ema(c,60);
exitC = 2*ATr(14);
N = ATR(14);
unitP = floor(MDD/(2*N*BigPointValue*1400));
if sDate >= TD1 && sTime > TT1 Then condition11 = true;
if sDate >= TD2 && sTime > TT2 Then condition11 = False;
if condition11 == true Then
{
//phase
if Ema(c,5) > Ema(c,20) && Ema(c,20) > Ema(c,40) Then p[1] = true;
Else p[1] = False;
if Ema(c,20) > Ema(c,5) && Ema(c,5) > Ema(c,40) Then p[2] = true;
Else p[2] = False;
if Ema(c,20) > Ema(c,40) && Ema(c,40) > Ema(c,5) Then p[3] = true;
Else p[3] = False;
if Ema(c,40) > Ema(c,20) && Ema(c,20) > Ema(c,5) Then p[4] = true;
Else p[4] = False;
if Ema(c,40) > Ema(c,5) && Ema(c,5) > Ema(c,20) Then p[5] = true;
Else p[5] = False;
if Ema(c,5) > Ema(c,40) && Ema(c,40) > Ema(c,20) Then p[6] = true;
Else p[6] = False;
// 진입조건
if MACDV[0] > MACDV[0][1] && MACDV[1] > MACDV[1][1] && MACDV[2] > MACDV[2][1] Then BS = TRUE;
Else BS = False;
if MACDV[0] < MACDV[0][1] && MACDV[1] < MACDV[1][1] && MACDV[2] < MACDV[2][1] Then SS = TRUE;
Else SS = False;
if p[4] == true && BS == true && CrossUp(macdv, macds) Then Buy();
if p[1] == true && SS == true && crossdown(macdv, macds) Then Sell();
if p[5] == true && p[5][1] == False && BS == true && CrossUp(macdv, macds) Then Buy();
if p[2] == true && p[2][1] == false && SS == true && crossdown(macdv, macds) Then Sell();
if p[6] == true && p[6][1] == False && BS == true && macdv > macds Then Buy();
if p[3] == true && p[3][1] == False && SS == true && macdv < macds Then Sell();
//청산
if marketposition == 1 Then
{
if e60 < HB+2*N Then
Exitlong("exitB1", atstop, HB-exitC);
if e60 >= HB+2*N and CrossDown(close, e60) Then
{
ExitLong("exitB2") ;
}
}
if marketposition == -1 Then
{
if e60 > LB-2*N Then
ExitShort("exitS1", atstop, LB+exitC);
if e60 <= LB-2*N and CrossUp(close, e60) Then
{
ExitShort("exitS2");
}
}
MessageLog("P[4] %2s, bs %2s",p[4], BS);
}