예스스탁
예스스탁 답변
2025-09-01 17:03:24
안녕하세요
예스스탁입니다.
계산상 과거봉수에 따라 영향을 받으므로
전략실행차트에 봉수를 최대한 많이 조회하고 적용하시기 바랍니다.
전략실행차트는 최대 2만봉 조회가 가능합니다.
input : Length(14);
var : TL(0),TH(0),cnt(0),Dcnt(0),preTRange(0),prePlusDM14(0),MinusDM14(0),TRange1(0),preMinusDM14(0);
Var : Counter(0), TRange(0), MyRange(Length), PlusDM14(0), PlusDM(0), MinusDM(0),preADX(0);
Var : CummDMI(0),b(0),DayDP(0),DayDM(0),DayADX(0),preADXv(0);
Array : HH[100](0),LL[100](0),CC[100](0),TR[100](0),DMIv[100](0);
if bdate != bdate[1] Then
{
Dcnt = Dcnt+1;
for cnt = 99 downto 1
{
HH[cnt] = HH[cnt-1];
LL[cnt] = LL[cnt-1];
CC[cnt] = CC[cnt-1];
TR[cnt] = TR[cnt-1];
DMIv[cnt] = DMIv[cnt-1];
}
HH[0] = H;
LL[0] = L;
CC[0] = C;
preTRange = TRange[1];
prePlusDM14 = PlusDM14[1];
preMinusDM14 = MinusDM14[1];
preADXv = DayADX[1];
}
if H > HH[0] Then
HH[0] = H;
if L < LL[0] Then
LL[0] = L;
CC[0] = C;
if CC[1] > 0 Then{
If CC[1] > HH[0] then
TH = CC[1];
else
TH = HH[0];
If CC[1] < LL[0] then
TL = CC[1];
else
TL = LL[0];
TR[0] = TH-TL;
}
If Dcnt == Length+1 Then
{
MyRange = Length;
DayDP = 0;
PlusDM14 = 0;
TRange = 0;
DayDM = 0;
MinusDM14 = 0;
TRange1 = 0;
For Counter = 0 To MyRange - 1
{
If HH[Counter] - HH[Counter+1] < 0 Then
PlusDM = 0 ;
Else
PlusDM = HH[Counter] - HH[Counter+1];
If LL[Counter+1] - LL[Counter] < 0 Then
MinusDM = 0;
Else
MinusDM = LL[Counter+1] - LL[Counter];
var1 = PlusDM;
var2 = MinusDM;
If var1 >= var2 Then
MinusDM = 0;
If var2 >= var1 Then
PlusDM = 0;
TRange = TRange + TR[Counter];
PlusDM14 = PlusDM14 + PlusDM;
MinusDM14 = MinusDM14 + MinusDM;
}
If TRange <> 0 Then
DayDP = 100 * PlusDM14 / TRange;
Else
DayDP = 0 ;
If TRange <> 0 Then
DayDM = 100 * MinusDM14 / TRange;
Else
DayDM = 0;
If DayDP + DayDM == 0 Then
DMIv[0] = 0;
Else
DMIv[0] = 100 * AbsValue(DayDP - DayDM) / (DayDP + DayDM);
}
Else If Dcnt > Length+1 Then
{
If HH[0] - HH[1] < 0 Then
PlusDM = 0;
Else
PlusDM = HH[0] - HH[1];
If LL[1] - LL[0] < 0 Then
MinusDM = 0;
Else
MinusDM = LL[1] - LL[0];
var1 = PlusDM;
var2 = MinusDM;
If var1 >= var2 Then
MinusDM = 0;
If var2 >= var1 Then
PlusDM = 0;
If MyRange > 0 Then {
TRange = preTRange - (preTRange / MyRange) + TR[0];
PlusDM14 = prePlusDM14 - (prePlusDM14 / MyRange) + PlusDM;
MinusDM14 = preMinusDM14 - (preMinusDM14 / MyRange) + MinusDM;
}
If TRange <> 0 Then
DayDP = 100 * PlusDM14 / TRange;
Else
DayDP = 0 ;
If TRange <> 0 Then
DayDM = 100 * MinusDM14 / TRange;
Else
DayDM = 0;
If DayDP + DayDM == 0 Then
DMIv[0] = 0;
Else
DMIv[0] = 100 * AbsValue(DayDP - DayDM) / (DayDP + DayDM);
}
If DMIV[Length] == 0 Then
{
CummDMI = 0;
b = 0;
for Counter = 0 To Length-1
{
if DMiV[counter] > 0 Then
{
CummDMI = CummDMI + DMIV[Counter];
b = b+1;
}
}
DayADX = CummDMI / B;
}
Else
DayADX = (preADXv * (Length - 1) + DMIv[0]) / Length;
if DayDP > DayDM and dayADX > 20 Then
Buy();
if DayDP < DayDM Then
Sell();
즐거운 하루되세요
> 로카2 님이 쓴 글입니다.
> 제목 : 일봉 데이터를 분봉차트에서 매매
> 안녕하세요
일봉 diplus > diminus 이고 ADX > 20 일때
분봉 차트에서 매수
일봉 diplus < diminus 일때
분봉 차트에서 매도
조건식이 작동할수 있는 함수 부탁드립니다!