예스스탁
예스스탁 답변
2024-08-21 11:43:03
안녕하세요
예스스탁입니다.
input : Period1(20),Period2(100),타주기분(10),P(100);
var : S1(0),D1(0),TM(0),TF(0),cnt(0);
var : m1(0),m2(0),sum1(0),mav(0),entry(0);
Array : CC[200](0);
#20이평
m1 = ma(C,Period1);
#100이평
m2 = ma(C,Period2);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
entry = 0;
}
#당일 진입횟수
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
#타주기 계산
if D1 > 0 then
{
#영업일 첫봉이후 경과한 시간(분)
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
#TM을 10으로 나누어 나머지 계산
TF = TM%타주기분;
#새로운 10분봉이 발생하면
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or
(Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then
{
#이전 10분의 종가를 200개 저장
for cnt = 199 downto 1
{
CC[cnt] = CC[cnt-1];
}
}
#현재 10분 구간 종가
CC[0] = C;
#10분봉 종가가 100개이상 모았을 경우
if CC[P-1] > 0 then
{
#10분봉 종가를 합산
sum1 = 0;
for cnt = 0 to P-1
{
sum1 = sum1+CC[cnt];
}
#평균값 계산
mav = sum1/P;
#시초가가 100이평보다 크고 100이평은 10분봉 100이평보다 크고
#종가가 100이평을 하향이탈하면 매도
if MarketPosition >= 0 and DayOpen > m2 and m2 > mav and CrossDown(c,m2) and entry < 1 Then
Sell("s",AtMarket);
#매도후
if MarketPosition == -1 Then
{
#10분봉 100이평 하향이탈하면 청산
if CrossDown(c,mav) Then
ExitShort("sx",AtMarket);
#진입이후 종가가 20이평을 3번 하향이탈하면 청산
if CountIf(CrossUp(C,m1),BarsSinceEntry) == 3 Then
ExitShort("sx2",AtMarket);
}
#시초가가 100이평보다 작고 100이평은 10분봉 100이평보다 작고
#종가가 100이평을 상향돌파하면 매수
if MarketPosition >= 0 and DayOpen < m2 and m2 < mav and CrossUp(c,m2) and entry < 1 Then
Buy("b",AtMarket);
#매수후
if MarketPosition == 1 Then
{
#10분봉 100이평을 상향돌파하면 청산
if CrossUp(c,mav) Then
ExitLong("bx",AtMarket);
#진입이후 종가가 20이평을 3번 상향돌파하면 청산
if CountIf(CrossDown(C,m1),BarsSinceEntry) == 3 Then
ExitLong("bx2",AtMarket);
}
}
}
#15시 청
SetStopEndofday(150000);
즐거운 하루되세요
> 흰둥이아빠 님이 쓴 글입니다.
> 제목 : 주석요청
> 안녕하세요?
아래 글번호 88697번 답변주신 스크립트 주석 좀 부탁드립니다.
감사합니다.
input : Period1(20),Period2(100),타주기분(10),P(100);
var : S1(0),D1(0),TM(0),TF(0),cnt(0);
var : m1(0),m2(0),sum1(0),mav(0),entry(0);
Array : CC[200](0);
m1 = ma(C,Period1);
m2 = ma(C,Period2);
if Bdate != Bdate[1] Then
{
S1 = TimeToMinutes(stime);
D1 = sdate;
entry = 0;
}
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
if D1 > 0 then
{
if sdate == D1 Then
TM = TimeToMinutes(stime)-S1;
Else
TM = TimeToMinutes(stime)+1440-S1;
TF = TM%타주기분;
if Bdate != Bdate[1] or
(Bdate == Bdate[1] and 타주기분 > 1 and TF < TF[1]) or
(Bdate == Bdate[1] and 타주기분 > 1 and TM >= TM[1]+타주기분) or
(Bdate == Bdate[1] and 타주기분 == 1 and TM > TM[1]) Then
{
for cnt = 199 downto 1
{
CC[cnt] = CC[cnt-1];
}
}
CC[0] = C;
if CC[P-1] > 0 then
{
sum1 = 0;
for cnt = 0 to P-1
{
sum1 = sum1+CC[cnt];
}
mav = sum1/P;
if MarketPosition >= 0 and DayOpen > m2 and m2 > mav and CrossDown(c,m2) and entry < 1 Then
Sell("s",AtMarket);
if MarketPosition == -1 Then
{
if CrossDown(c,mav) Then
ExitShort("sx",AtMarket);
if CountIf(CrossUp(C,m1),BarsSinceEntry) == 3 Then
ExitShort("sx2",AtMarket);
}
if MarketPosition >= 0 and DayOpen < m2 and m2 < mav and CrossUp(c,m2) and entry < 1 Then
Buy("b",AtMarket);
if MarketPosition == 1 Then
{
if CrossUp(c,mav) Then
ExitLong("bx",AtMarket);
if CountIf(CrossDown(C,m1),BarsSinceEntry) == 3 Then
ExitLong("bx2",AtMarket);
}
}
}
SetStopEndofday(150000);