예스스탁
예스스탁 답변
2021-12-29 16:45:45
안녕하세요
예스스탁입니다.
봉 3개당 1번의 매매가 어떤 의미이신지 모르겠습니다.
차트 처음부터 Range bar를 카운트해 3개 간격으로 체크하면
이후에 차트를 다시 조회할때 차트 시작지점이 달라 3개 간격으로 나누는 부분이 달라질수 있습니다.
1번식은 위 내용과 같이 차트 첫 Range bar부터 카운트 하여 3개 간격으로 진입을 1회씩 허용하는 내용이고
2번식은 지정한 조건만족하면 진입이후 3개봉이후 청산하고 다시 조건충족시 진입하는 내용입니다.
아래 2개식 내용을 참고하셔서 이후 내용은 직접 보완해 보셔야 할것 같습니다.
1
Input:tick(20),봉(3);
Var:j(0),k(0),n(0),trend(0),tickVal(0),oneTick(0),count(0),remain(0),bars(0);
Array:OO[1000](0),HH[1000](0),LL[1000](0),CC[1000](0),val[4](0);
If Index == 0 Then
{
tickVal = tick * PriceScale;
oneTick = PriceScale;
OO[0] = O;
HH[0] = O;
LL[0] = O;
CC[0] = O;
}
count = 0;
val[0] = O;
val[3] = C;
If O > C Then
{
val[1] = H;
val[2] = L;
If L < C Then trend = 1;
Else trend = -1;
}
Else If O < C Then
{
val[1] = L;
val[2] = H;
If H > C Then trend = -1;
Else trend = 1;
}
Else If C[1] > O Then
{
val[1] = L;
val[2] = H;
If H > C Then trend = -1;
Else trend = 1;
}
Else If C[1] < O Then
{
val[1] = H;
val[2] = L;
If L < C Then trend = 1;
Else trend = -1;
}
Else If trend == 1 Then
{
val[1] = H;
val[2] = L;
If L < C Then trend = 1;
Else trend = -1;
}
Else If trend == -1 Then
{
val[1] = L;
val[2] = H;
If H > C Then trend = -1;
Else trend = 1;
}
For k = 0 To 3
{
If HH[0] > 0 && HH[0] < val[k] Then
{
While val[k] - LL[0] > tickVal
{
HH[0] = LL[0] + tickVal;
CC[0] = HH[0];
For j = 998 DownTo 0
{
OO[j+1] = OO[j];
HH[j+1] = HH[j];
LL[j+1] = LL[j];
CC[j+1] = CC[j];
}
count = count + 1;
OO[0] = HH[1] + oneTick;
LL[0] = OO[0];
}
If val[k] - LL[0] <= tickVal Then
{
HH[0] = val[k];
CC[0] = val[k];
}
}
Else If LL[0] > val[k] Then
{
While HH[0] - val[k] > tickVal
{
LL[0] = HH[0] - tickVal;
CC[0] = LL[0];
For j = 998 DownTo 0
{
OO[j+1] = OO[j];
HH[j+1] = HH[j];
LL[j+1] = LL[j];
CC[j+1] = CC[j];
}
count = count + 1;
OO[0] = LL[1] - oneTick;
HH[0] = OO[0];
}
If HH[0] - val[k] <= tickVal Then
{
LL[0] = val[k];
CC[0] = val[k];
}
}
Else
{
CC[0] = val[k];
}
}
If DayIndex == 0 Then remain = 0;
remain = remain + count;
If remain > 0 Then
{
n = remain;
If OO[n] < CC[n] Then
{
bars = bars+1;
}
Else
{
bars = bars+1;
}
remain = remain - 1;
}
input : 봉(3);
var : entry(0);
if bars%봉 == 0 Then
entry = 0;
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
if entry == 0 Then
{
if MarketPosition == 0 and 매수진입조건 Then
Buy();
if MarketPosition == 0 and 매도진입조건 Then
Sell();
}
if MarketPosition == 1 Then
{
if bars == bars[BarsSinceEntry]+3 Then
ExitLong();
if 매수청산조건 Then
ExitLong();
}
if MarketPosition == -1 Then
{
if bars == bars[BarsSinceEntry]+3 Then
ExitShort();
if 매도청산조건 Then
ExitShort();
}
2
Input:tick(20),봉(3);
Var:j(0),k(0),n(0),trend(0),tickVal(0),oneTick(0),count(0),remain(0),bars(0);
Array:OO[1000](0),HH[1000](0),LL[1000](0),CC[1000](0),val[4](0);
If Index == 0 Then
{
tickVal = tick * PriceScale;
oneTick = PriceScale;
OO[0] = O;
HH[0] = O;
LL[0] = O;
CC[0] = O;
}
count = 0;
val[0] = O;
val[3] = C;
If O > C Then
{
val[1] = H;
val[2] = L;
If L < C Then trend = 1;
Else trend = -1;
}
Else If O < C Then
{
val[1] = L;
val[2] = H;
If H > C Then trend = -1;
Else trend = 1;
}
Else If C[1] > O Then
{
val[1] = L;
val[2] = H;
If H > C Then trend = -1;
Else trend = 1;
}
Else If C[1] < O Then
{
val[1] = H;
val[2] = L;
If L < C Then trend = 1;
Else trend = -1;
}
Else If trend == 1 Then
{
val[1] = H;
val[2] = L;
If L < C Then trend = 1;
Else trend = -1;
}
Else If trend == -1 Then
{
val[1] = L;
val[2] = H;
If H > C Then trend = -1;
Else trend = 1;
}
For k = 0 To 3
{
If HH[0] > 0 && HH[0] < val[k] Then
{
While val[k] - LL[0] > tickVal
{
HH[0] = LL[0] + tickVal;
CC[0] = HH[0];
For j = 998 DownTo 0
{
OO[j+1] = OO[j];
HH[j+1] = HH[j];
LL[j+1] = LL[j];
CC[j+1] = CC[j];
}
count = count + 1;
OO[0] = HH[1] + oneTick;
LL[0] = OO[0];
}
If val[k] - LL[0] <= tickVal Then
{
HH[0] = val[k];
CC[0] = val[k];
}
}
Else If LL[0] > val[k] Then
{
While HH[0] - val[k] > tickVal
{
LL[0] = HH[0] - tickVal;
CC[0] = LL[0];
For j = 998 DownTo 0
{
OO[j+1] = OO[j];
HH[j+1] = HH[j];
LL[j+1] = LL[j];
CC[j+1] = CC[j];
}
count = count + 1;
OO[0] = LL[1] - oneTick;
HH[0] = OO[0];
}
If HH[0] - val[k] <= tickVal Then
{
LL[0] = val[k];
CC[0] = val[k];
}
}
Else
{
CC[0] = val[k];
}
}
If DayIndex == 0 Then remain = 0;
remain = remain + count;
If remain > 0 Then
{
n = remain;
If OO[n] < CC[n] Then
{
bars = bars+1;
}
Else
{
bars = bars+1;
}
remain = remain - 1;
}
if MarketPosition == 0 and 매수진입조건 Then
Buy();
if MarketPosition == 0 and 매도진입조건 Then
Sell();
if MarketPosition == 1 Then
{
if bars == bars[BarsSinceEntry]+3 Then
ExitLong();
if 매수청산조건 Then
ExitLong();
}
if MarketPosition == -1 Then
{
if bars == bars[BarsSinceEntry]+3 Then
ExitShort();
if 매도청산조건 Then
ExitShort();
}
새해 좋은 일만 가득하시길 바랍니다.
> 이만스닥 님이 쓴 글입니다.
> 제목 : 보조지표를 참고하여 매매
> 안녕하세요 항상 답변 감사드립니다. 매매 시스템 개발에 도움을 주셔서 고맙습니다.
아래는 수식지왕님의 range 바 차트의 수식입니다.
구현하고자하는 것은 아래와 같습니다.
1. Range bar가 3개당 1번 매매를 하길 원합니다. 다만 이때 A라는 의미를 충족했을 때 매수 또는 매도 신호가 들어갔으면 좋겠습니다.
청산의 경우,
a. 주문이 체결된 range bar 기준으로 3개가 봉완성(range bar 봉 완성)될 때 또는
b. Y라는 조건을 만족했을 때 청산이 되었으면 좋겠습니다.
부탁드립니다.
=================
Input:tick(20);
Var:j(0),k(0),n(0),trend(0),tickVal(0),oneTick(0),count(0),remain(0);
Array:OO[1000](0),HH[1000](0),LL[1000](0),CC[1000](0),val[4](0);
#==============================================================================#
# Range Bar Chart 계산
#==============================================================================#
If Index == 0 Then
{
tickVal = tick * PriceScale;
oneTick = PriceScale;
OO[0] = O;
HH[0] = O;
LL[0] = O;
CC[0] = O;
}
count = 0;
val[0] = O;
val[3] = C;
If O > C Then
{
val[1] = H;
val[2] = L;
If L < C Then trend = 1;
Else trend = -1;
}
Else If O < C Then
{
val[1] = L;
val[2] = H;
If H > C Then trend = -1;
Else trend = 1;
}
Else If C[1] > O Then
{
val[1] = L;
val[2] = H;
If H > C Then trend = -1;
Else trend = 1;
}
Else If C[1] < O Then
{
val[1] = H;
val[2] = L;
If L < C Then trend = 1;
Else trend = -1;
}
Else If trend == 1 Then
{
val[1] = H;
val[2] = L;
If L < C Then trend = 1;
Else trend = -1;
}
Else If trend == -1 Then
{
val[1] = L;
val[2] = H;
If H > C Then trend = -1;
Else trend = 1;
}
For k = 0 To 3
{
If HH[0] > 0 && HH[0] < val[k] Then
{
While val[k] - LL[0] > tickVal
{
HH[0] = LL[0] + tickVal;
CC[0] = HH[0];
For j = 998 DownTo 0
{
OO[j+1] = OO[j];
HH[j+1] = HH[j];
LL[j+1] = LL[j];
CC[j+1] = CC[j];
}
count = count + 1;
OO[0] = HH[1] + oneTick;
LL[0] = OO[0];
}
If val[k] - LL[0] <= tickVal Then
{
HH[0] = val[k];
CC[0] = val[k];
}
}
Else If LL[0] > val[k] Then
{
While HH[0] - val[k] > tickVal
{
LL[0] = HH[0] - tickVal;
CC[0] = LL[0];
For j = 998 DownTo 0
{
OO[j+1] = OO[j];
HH[j+1] = HH[j];
LL[j+1] = LL[j];
CC[j+1] = CC[j];
}
count = count + 1;
OO[0] = LL[1] - oneTick;
HH[0] = OO[0];
}
If HH[0] - val[k] <= tickVal Then
{
LL[0] = val[k];
CC[0] = val[k];
}
}
Else
{
CC[0] = val[k];
}
}