예스스탁
예스스탁 답변
2024-06-10 15:04:35
안녕하세요
예스스탁입니다.
주석 참고하시기 바랍니다.
input:swingPeriod(5);
Var:신고가(False), 신저가(False), j(0),jj(0),최종꼭지점(""),추세구간(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
var : TL1(0);
var : HighStop(0), LowStop(0),mp(0),ep(0);
# 추세 판정
신고가 = Highest(H,swingPeriod) == H ;
신저가 = Lowest (L,swingPeriod) == L ;
If 신고가 == True and 신저가 == True Then { // 신고가 신저가 동시 발생
If 최종꼭지점 == "저점" Then {
If 저[1,1] > L Then
추세구간 = -1;
Else
추세구간 = 1;
}
Else If 최종꼭지점 == "고점" Then {
If 고[1,1] < H Then
추세구간 = 1;
Else
추세구간 = -1;
}
}
Else If 신고가 == True Then //신고가 발생
추세구간 = 1;
Else If 신저가 == True Then //신저가 발생
추세구간 = -1;
# 상승추세 구간
If 추세구간 == 1 Then {
If 최종꼭지점 == "저점" Then {
For j = 3 DownTo 2 {
For jj = 1 To 4 {
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = H;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL_SetSize(TL1,1);
TL_SetColor(TL1,gray);
}
Else If 고[1,1] < H Then { // 1번 고점보다 높은 고가 출현
고[1,1] = H;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
}
최종꼭지점 = "고점";
}
# 하락추세 구간
If 추세구간 == -1 Then {
If 최종꼭지점 == "고점" then {
For j = 3 DownTo 2 {
For jj = 1 To 4 {
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = L;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_SetSize(TL1,1);
TL_SetColor(TL1,gray);
}
Else If 저[1,1] > L then {
저[1,1] = L;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
}
최종꼭지점 = "저점";
}
# 직전 스윙고가, 스윙저가
if 추세구간 == 1 Then
HighStop = 고[2,1];
Else
HighStop = 고[1,1];
if 추세구간 == -1 Then
LowStop = 저[2,1];
Else
LowStop = 저[1,1];
#HighStop터치
if mp <= 0 and H >= HighStop and H[1] < HighStop and HighStop > 0 Then
{
#mp는 1
mp = 1;
#진입가는 HighStop
ep = HighStop;
#시가가 HighStop보다 크면 시가가 진입가
if O >= HighStop Then
ep = O;
}
#LowStop터치
if mp >= 0 and L <= LowStop and L[1] > LowStop and LowStop > 0 Then
{
#mp는 -1
mp = -1;
#진입가는 LowStop
ep = LowStop;
#시가가 LowStop이하이면 진입가는 시가
if O <= HighStop Then
ep = O;
}
# mp가 -1일때 HighStop이 진입가보다 크고 (가상 매도진입후 HighStop에 도달하면 손실)
# HighStop을 터치하면 매수
if mp == -1 and HighStop > ep Then
Buy("B", AtStop, HighStop);
# mp가 1일때 LowStop이 진입가보다 작고 (가상 매수진입후 LowStop에 도달하면 손실)
# LowStop을 터치하면 매도
if mp == 1 and lowStop < ep Then
Sell("S", AtStop, LowStop);
즐거운 하루되세요
> doilzul 님이 쓴 글입니다.
> 제목 : 수식 문의드립니다
> 도움 많이 받고 있습니다. 감사합니다
이전 가상거래 추적을 해서 손실시에만 진입하는 필터를 적용하고자 합니다
아래 전략에 적용하는 방법이 있는지요?
제가 짜보려 아무리해도 거래가 초기 2~3개만 되어서....
감사합니다
input:swingPeriod(5);
Var:신고가(False), 신저가(False), j(0),jj(0),최종꼭지점(""),추세구간(0);
Array:고[10,4](0),저[10,4](0); // 1:가격,2:Index,3:sDate,4:sTime
var : TL1(0);
var : HighStop(0), LowStop(0);
​
# 추세 판정
신고가 = Highest(H,swingPeriod) == H ;
신저가 = Lowest (L,swingPeriod) == L ;
​
If 신고가 == True and 신저가 == True Then { // 신고가 신저가 동시 발생
If 최종꼭지점 == "저점" Then {
If 저[1,1] > L Then
추세구간 = -1;
Else
추세구간 = 1;
}
Else If 최종꼭지점 == "고점" Then {
If 고[1,1] < H Then
추세구간 = 1;
Else
추세구간 = -1;
}
}
Else If 신고가 == True Then //신고가 발생
추세구간 = 1;
Else If 신저가 == True Then //신저가 발생
추세구간 = -1;
​
# 상승추세 구간
If 추세구간 == 1 Then {
If 최종꼭지점 == "저점" Then {
For j = 3 DownTo 2 {
For jj = 1 To 4 {
고[j,jj] = 고[j-1,jj];
}
}
고[1,1] = H;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL1 = TL_New(저[1,3],저[1,4],저[1,1],고[1,3],고[1,4],고[1,1]);
TL_SetSize(TL1,1);
TL_SetColor(TL1,gray);
}
Else If 고[1,1] < H Then { // 1번 고점보다 높은 고가 출현
고[1,1] = H;
고[1,2] = Index;
고[1,3] = sDate;
고[1,4] = sTime;
TL_SetEnd(TL1,고[1,3],고[1,4],고[1,1]);
}
최종꼭지점 = "고점";
}
​
# 하락추세 구간
If 추세구간 == -1 Then {
If 최종꼭지점 == "고점" then {
For j = 3 DownTo 2 {
For jj = 1 To 4 {
저[j,jj] = 저[j-1,jj];
}
}
저[1,1] = L;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL1 = TL_New(고[1,3],고[1,4],고[1,1],저[1,3],저[1,4],저[1,1]);
TL_SetSize(TL1,1);
TL_SetColor(TL1,gray);
}
Else If 저[1,1] > L then {
저[1,1] = L;
저[1,2] = Index;
저[1,3] = sDate;
저[1,4] = sTime;
TL_SetEnd(TL1,저[1,3],저[1,4],저[1,1]);
}
최종꼭지점 = "저점";
}
​
# 직전 스윙고가, 스윙저가
if 추세구간 == 1 Then
HighStop = 고[2,1];
Else
HighStop = 고[1,1];
​
if 추세구간 == -1 Then
LowStop = 저[2,1];
Else
LowStop = 저[1,1];
​
# 손실필터
if TotalTrades > TotalTrades[1] Then
{
if PositionProfit(1) < 0 Then
trade = true;
Else
{
trade = False;
mp = 0;
}
}
if MarketPosition == 0 and trade == False Then
{
If mp == 0 and CrossUP(C, HighStop) Then
{
ep = c;
mp = 1;
If mp == 1 and CrossDown(C, LowStop ) Then
{
mp = 0;
xp = c;
if xp < ep Then
trade = true;
}
}
If mp == 0 and CrossDown(C, LowStop) Then
{
ep = c;
mp = -1;
If mp == -1 and CrossUp(C, HighStop ) Then
{
mp = 0;
xp = c;
if xp > ep Then
trade = true;
}
}
}
# 매매식
if MarketPosition <> 1 Then
Buy("B", AtStop, HighStop);
​
if MarketPosition <> -1 Then
Sell("S", AtStop, LowStop);