예스스탁
예스스탁 답변
2020-09-08 14:59:31
안녕하세요
예스스탁입니다.
1
상향돌파/하향이탈은 현재봉상태와 전봉상태를 보게 됩니다.
전봉상태를 볼때 전봉이 당일봉일때만 보고자 하시면 아래와 같이 작성하시면 됩니다.
Input : dix(10),Period(24);
value1 = DIPlus(Period);
value2 = DIMinus(Period);
value3 = ADX(Period);
var : T1(0),entry(0);
if Bdate != bdate[1] Then
T1 = TotalTrades[1];
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = TotalTrades-T1+1;
if Bdate == Bdate[1] and dayindex <= dix Then
{
If CrossUp(value3, value1) or CrossDown(value3, value1) Then
if entry < 5 Then
Buy();
If CrossUp(value3, value2) or CrossDown(value3, value2) Then
if entry < 5 Then
Sell();
}
SetStopEndofday(150000);
SetStopProfittarget(100,PointStop);
SetStopLoss(10.0,PointStop);
2
지표값을 모두 당일데이타로만 계산하고자 하시면 아래식 이용하시면 됩니다.
다만 24기간의 DIPlus,DIMinus,adx를 계산하기 위해서는
계산상 당일 봉갯수가 최소 26개 이상이 발생한 후부터 계산할수가 있습니다.
즉 장시작후 최초 26개봉은 신호가 발생할수 없습니다.
현재 수식이 dix로 당일 10개봉 안에만 신호가 발생하게 되어 있는데 해당 값을 뒤로 많이 미루셔야 합니다.
해당 내용 감안해서 dix를 조정하셔야 합니다.
Inputs : dix(36), Period(24);
Var : idx(0),Counter(0), TRange(0), PlusDM14(0),MinusDM14(0);
var : PlusDM(0), MinusDM(0),DMIv(0);
var : DP(0),DM(0),entry(0);
if bdate != Bdate[1] Then
{
idx = 0;
DP = 0;
DM = 0;
}
else
idx = idx+1;
If idx == Period+1 Then
{
DP = 0;
DM = 0;
PlusDM14 = 0;
MinusDM14 = 0;
TRange = 0;
For Counter = 0 To Period - 1
{
If High[Counter] - High[Counter+1] < 0 Then
PlusDM = 0;
Else
PlusDM = High[Counter] - High[Counter+1];
If Low[Counter+1] - Low[Counter] < 0 Then
MinusDM = 0;
Else
MinusDM = Low[Counter+1] - Low[Counter];
var1 = PlusDM;
Var2 = MinusDM;
If Var2 >= var1 Then
PlusDM = 0;
If var1 >= Var2 Then
MinusDM = 0;
TRange = TRange + TrueRange[Counter];
PlusDM14 = PlusDM14 + PlusDM;
MinusDM14 = MinusDM14 + MinusDM;
}
If TRange <> 0 Then
{
DP = 100 * PlusDM14 / TRange;
DM = 100 * MinusDM14 / TRange;
}
Else
{
DP = 0;
DM = 0;
}
}
If idx > Period+1 Then
{
If High[0] - High[1] < 0 Then
PlusDM = 0;
Else
PlusDM = High[0] - High[1];
If Low [1] - Low [0] < 0 Then
MinusDM = 0;
Else
MinusDM = Low[1] - Low[0];
var1 = PlusDM;
Var2 = MinusDM;
If Var2 >= var1 Then
PlusDM = 0;
If var1 >= Var2 Then
MinusDM = 0;
If Period > 0 Then Begin
TRange = TRange[1] - (TRange[1] / Period) + TrueRange;
PlusDM14 = PlusDM14[1] - (PlusDM14[1] / Period) + PlusDM;
MinusDM14 = MinusDM14[1] - (MinusDM14[1] / Period) + MinusDM;
End;
If TRange <> 0 Then
{
DP = 100 * PlusDM14 / TRange;
DM = 100 * MinusDM14 / TRange;
}
Else
{
DP = 0;
DM = 0;
}
}
If DP + DM == 0 Then
DMIv = 0;
Else
DMIv = 100 * AbsValue(DP - DM) / (DP + DM);
var : CummDMI(0),ADXV(0);
If idx >= Period+1 and idx <= period*2+1 Then
{
CummDMI = 0;
for Counter = 0 To idx-(Period+1)
{
CummDMI = CummDMI + DMIV[Counter];
}
ADXV = CummDMI / (idx-(Period+1)+1);
}
Else
ADXV = (ADXV[1] * (Period - 1) + DMIV) / Period;
If idx > Period+1 Then
{
If CrossUp(ADXV, DP) or CrossDown(ADXV, DP) Then
if entry < 5 Then
Buy();
If CrossUp(ADXV, DM) or CrossDown(ADXV, DM) Then
if entry < 5 Then
Sell();
}
SetStopEndofday(150000);
SetStopProfittarget(100,PointStop);
SetStopLoss(10.0,PointStop);
즐거운 하루되세요
> 바둑이 님이 쓴 글입니다.
> 제목 : adx와 di 관련 수정부탁드립니다.
>
안녕하세요.
아래와 같이 작성하면 전일 di선을 연속적으로 인식하여 당일 신호가 안나오거나 9시에 바로 신호가 나옵니다.
전일과 전혀 상관없이 당일 dl선 나오는 것 부터 인식하여 당일 adx선이 당일 di선 돌파시 신호가 나오도록 부탁드립니다.
감사합니다.
Input : dix(10),Period(24);
value1 = DIPlus(Period);
value2 = DIMinus(Period);
value3 = ADX(Period);
var : T1(0),entry(0);
if Bdate != bdate[1] Then
T1 = TotalTrades[1];
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = TotalTrades-T1+1;
if dayindex <= dix then{
If CrossUp(value3, value1) or CrossDown(value3, value1) Then
if entry < 5 Then
Buy();
If CrossUp(value3, value2) or CrossDown(value3, value2) Then
if entry < 5 Then
Sell();
}
SetStopEndofday(150000);
SetStopProfittarget(100,PointStop);
SetStopLoss(10.0,PointStop);
안녕하세요.
작성해주신 2가지 식은 전혀 제가 의도한 바가 아니었습니다.
아래식을 이용하여 첨부파일1에서 노란색 동그라미 부분에 진입신호가 나오게 하고싶습니다.
빨간색 엑스표시는 전일 DIMinus를 당일ADX가 돌파하고 있으므로 진입이 안나오게 하여주시고,
꼭 당일부터의 DI선을 ADX가 돌파시 진입하게 해주십시오.
진입 후 청산은 DIPlus 와 DIMinus가 반대로 교차시 청산신호 나오게 부탁드립니다.
감사합니다.
Input: dix(1), s2(6.4);
Input : Period(14);
value1 = DIPlus(Period);
value2 = DIMinus(Period);
value3 = ADX(Period);
var : T1(0),entry(0);
if Bdate != bdate[1] Then
T1 = TotalTrades[1];
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = TotalTrades-T1+1;
if dayindex <= dix then{
If CrossUp(value3, value1) or CrossDown(value3, value1) Then
if entry < 1 Then
Buy();
If CrossUp(value3, value2) or CrossDown(value3, value2) Then
if entry < 1 Then
Sell();
}
If marketposition<>0 then {
exitlong("추적스탑B",Atstop,highest(high,barsSinceEntry +2)-atr(6)*s2);
exitshort("추적스탑S",Atstop,lowest(low,barsSinceEntry +2)+atr(6)*s2);
}
SetStopProfittarget(12.6,PointStop);
SetStopLoss(2.0,PointStop);
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : adx와 di 관련 수정부탁드립니다.
> 안녕하세요
예스스탁입니다.
1
상향돌파/하향이탈은 현재봉상태와 전봉상태를 보게 됩니다.
전봉상태를 볼때 전봉이 당일봉일때만 보고자 하시면 아래와 같이 작성하시면 됩니다.
Input : dix(10),Period(24);
value1 = DIPlus(Period);
value2 = DIMinus(Period);
value3 = ADX(Period);
var : T1(0),entry(0);
if Bdate != bdate[1] Then
T1 = TotalTrades[1];
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = TotalTrades-T1+1;
if Bdate == Bdate[1] and dayindex <= dix Then
{
If CrossUp(value3, value1) or CrossDown(value3, value1) Then
if entry < 5 Then
Buy();
If CrossUp(value3, value2) or CrossDown(value3, value2) Then
if entry < 5 Then
Sell();
}
SetStopEndofday(150000);
SetStopProfittarget(100,PointStop);
SetStopLoss(10.0,PointStop);
2
지표값을 모두 당일데이타로만 계산하고자 하시면 아래식 이용하시면 됩니다.
다만 24기간의 DIPlus,DIMinus,adx를 계산하기 위해서는
계산상 당일 봉갯수가 최소 26개 이상이 발생한 후부터 계산할수가 있습니다.
즉 장시작후 최초 26개봉은 신호가 발생할수 없습니다.
현재 수식이 dix로 당일 10개봉 안에만 신호가 발생하게 되어 있는데 해당 값을 뒤로 많이 미루셔야 합니다.
해당 내용 감안해서 dix를 조정하셔야 합니다.
Inputs : dix(36), Period(24);
Var : idx(0),Counter(0), TRange(0), PlusDM14(0),MinusDM14(0);
var : PlusDM(0), MinusDM(0),DMIv(0);
var : DP(0),DM(0),entry(0);
if bdate != Bdate[1] Then
{
idx = 0;
DP = 0;
DM = 0;
}
else
idx = idx+1;
If idx == Period+1 Then
{
DP = 0;
DM = 0;
PlusDM14 = 0;
MinusDM14 = 0;
TRange = 0;
For Counter = 0 To Period - 1
{
If High[Counter] - High[Counter+1] < 0 Then
PlusDM = 0;
Else
PlusDM = High[Counter] - High[Counter+1];
If Low[Counter+1] - Low[Counter] < 0 Then
MinusDM = 0;
Else
MinusDM = Low[Counter+1] - Low[Counter];
var1 = PlusDM;
Var2 = MinusDM;
If Var2 >= var1 Then
PlusDM = 0;
If var1 >= Var2 Then
MinusDM = 0;
TRange = TRange + TrueRange[Counter];
PlusDM14 = PlusDM14 + PlusDM;
MinusDM14 = MinusDM14 + MinusDM;
}
If TRange <> 0 Then
{
DP = 100 * PlusDM14 / TRange;
DM = 100 * MinusDM14 / TRange;
}
Else
{
DP = 0;
DM = 0;
}
}
If idx > Period+1 Then
{
If High[0] - High[1] < 0 Then
PlusDM = 0;
Else
PlusDM = High[0] - High[1];
If Low [1] - Low [0] < 0 Then
MinusDM = 0;
Else
MinusDM = Low[1] - Low[0];
var1 = PlusDM;
Var2 = MinusDM;
If Var2 >= var1 Then
PlusDM = 0;
If var1 >= Var2 Then
MinusDM = 0;
If Period > 0 Then Begin
TRange = TRange[1] - (TRange[1] / Period) + TrueRange;
PlusDM14 = PlusDM14[1] - (PlusDM14[1] / Period) + PlusDM;
MinusDM14 = MinusDM14[1] - (MinusDM14[1] / Period) + MinusDM;
End;
If TRange <> 0 Then
{
DP = 100 * PlusDM14 / TRange;
DM = 100 * MinusDM14 / TRange;
}
Else
{
DP = 0;
DM = 0;
}
}
If DP + DM == 0 Then
DMIv = 0;
Else
DMIv = 100 * AbsValue(DP - DM) / (DP + DM);
var : CummDMI(0),ADXV(0);
If idx >= Period+1 and idx <= period*2+1 Then
{
CummDMI = 0;
for Counter = 0 To idx-(Period+1)
{
CummDMI = CummDMI + DMIV[Counter];
}
ADXV = CummDMI / (idx-(Period+1)+1);
}
Else
ADXV = (ADXV[1] * (Period - 1) + DMIV) / Period;
If idx > Period+1 Then
{
If CrossUp(ADXV, DP) or CrossDown(ADXV, DP) Then
if entry < 5 Then
Buy();
If CrossUp(ADXV, DM) or CrossDown(ADXV, DM) Then
if entry < 5 Then
Sell();
}
SetStopEndofday(150000);
SetStopProfittarget(100,PointStop);
SetStopLoss(10.0,PointStop);
즐거운 하루되세요
> 바둑이 님이 쓴 글입니다.
> 제목 : adx와 di 관련 수정부탁드립니다.
>
안녕하세요.
아래와 같이 작성하면 전일 di선을 연속적으로 인식하여 당일 신호가 안나오거나 9시에 바로 신호가 나옵니다.
전일과 전혀 상관없이 당일 dl선 나오는 것 부터 인식하여 당일 adx선이 당일 di선 돌파시 신호가 나오도록 부탁드립니다.
감사합니다.
Input : dix(10),Period(24);
value1 = DIPlus(Period);
value2 = DIMinus(Period);
value3 = ADX(Period);
var : T1(0),entry(0);
if Bdate != bdate[1] Then
T1 = TotalTrades[1];
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = TotalTrades-T1+1;
if dayindex <= dix then{
If CrossUp(value3, value1) or CrossDown(value3, value1) Then
if entry < 5 Then
Buy();
If CrossUp(value3, value2) or CrossDown(value3, value2) Then
if entry < 5 Then
Sell();
}
SetStopEndofday(150000);
SetStopProfittarget(100,PointStop);
SetStopLoss(10.0,PointStop);
예스스탁
예스스탁 답변
2020-09-09 11:00:41
안녕하세요
예스스탁입니다.
답변드린 수식 중 1번수식을 Period를 14로 지정해서 적용하시면 첨부하신 그림과 같이 진입신호가 발생합니다.
1번에 청산식 추가해 드립니다.
Input : dix(10),Period(14);
value1 = DIPlus(Period);
value2 = DIMinus(Period);
value3 = ADX(Period);
var : T1(0),entry(0);
if Bdate != bdate[1] Then
T1 = TotalTrades[1];
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = TotalTrades-T1+1;
if Bdate == Bdate[1] Then
{
If CrossUp(value3, value1) or CrossDown(value3, value1) Then
{
if entry < 5 and dayindex <= dix Then
Buy();
}
If CrossUp(value3, value2) or CrossDown(value3, value2) Then
{
if entry < 5 and dayindex <= dix Then
Sell();
Else
ExitLong();
}
if MarketPosition == 1 and CrossDown(Value1,Value2) Then
ExitLong();
if MarketPosition == -1 and CrossUp(Value1,Value2) Then
ExitShort();
}
SetStopEndofday(150000);
SetStopProfittarget(100,PointStop);
SetStopLoss(10.0,PointStop);
즐거운 하루되세요
> 바둑이 님이 쓴 글입니다.
> 제목 : Re : Re : adx와 di 관련 수정부탁드립니다.
> 안녕하세요.
작성해주신 2가지 식은 전혀 제가 의도한 바가 아니었습니다.
아래식을 이용하여 첨부파일1에서 노란색 동그라미 부분에 진입신호가 나오게 하고싶습니다.
빨간색 엑스표시는 전일 DIMinus를 당일ADX가 돌파하고 있으므로 진입이 안나오게 하여주시고,
꼭 당일부터의 DI선을 ADX가 돌파시 진입하게 해주십시오.
진입 후 청산은 DIPlus 와 DIMinus가 반대로 교차시 청산신호 나오게 부탁드립니다.
감사합니다.
Input: dix(1), s2(6.4);
Input : Period(14);
value1 = DIPlus(Period);
value2 = DIMinus(Period);
value3 = ADX(Period);
var : T1(0),entry(0);
if Bdate != bdate[1] Then
T1 = TotalTrades[1];
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = TotalTrades-T1+1;
if dayindex <= dix then{
If CrossUp(value3, value1) or CrossDown(value3, value1) Then
if entry < 1 Then
Buy();
If CrossUp(value3, value2) or CrossDown(value3, value2) Then
if entry < 1 Then
Sell();
}
If marketposition<>0 then {
exitlong("추적스탑B",Atstop,highest(high,barsSinceEntry +2)-atr(6)*s2);
exitshort("추적스탑S",Atstop,lowest(low,barsSinceEntry +2)+atr(6)*s2);
}
SetStopProfittarget(12.6,PointStop);
SetStopLoss(2.0,PointStop);
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : adx와 di 관련 수정부탁드립니다.
> 안녕하세요
예스스탁입니다.
1
상향돌파/하향이탈은 현재봉상태와 전봉상태를 보게 됩니다.
전봉상태를 볼때 전봉이 당일봉일때만 보고자 하시면 아래와 같이 작성하시면 됩니다.
Input : dix(10),Period(24);
value1 = DIPlus(Period);
value2 = DIMinus(Period);
value3 = ADX(Period);
var : T1(0),entry(0);
if Bdate != bdate[1] Then
T1 = TotalTrades[1];
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = TotalTrades-T1+1;
if Bdate == Bdate[1] and dayindex <= dix Then
{
If CrossUp(value3, value1) or CrossDown(value3, value1) Then
if entry < 5 Then
Buy();
If CrossUp(value3, value2) or CrossDown(value3, value2) Then
if entry < 5 Then
Sell();
}
SetStopEndofday(150000);
SetStopProfittarget(100,PointStop);
SetStopLoss(10.0,PointStop);
2
지표값을 모두 당일데이타로만 계산하고자 하시면 아래식 이용하시면 됩니다.
다만 24기간의 DIPlus,DIMinus,adx를 계산하기 위해서는
계산상 당일 봉갯수가 최소 26개 이상이 발생한 후부터 계산할수가 있습니다.
즉 장시작후 최초 26개봉은 신호가 발생할수 없습니다.
현재 수식이 dix로 당일 10개봉 안에만 신호가 발생하게 되어 있는데 해당 값을 뒤로 많이 미루셔야 합니다.
해당 내용 감안해서 dix를 조정하셔야 합니다.
Inputs : dix(36), Period(24);
Var : idx(0),Counter(0), TRange(0), PlusDM14(0),MinusDM14(0);
var : PlusDM(0), MinusDM(0),DMIv(0);
var : DP(0),DM(0),entry(0);
if bdate != Bdate[1] Then
{
idx = 0;
DP = 0;
DM = 0;
}
else
idx = idx+1;
If idx == Period+1 Then
{
DP = 0;
DM = 0;
PlusDM14 = 0;
MinusDM14 = 0;
TRange = 0;
For Counter = 0 To Period - 1
{
If High[Counter] - High[Counter+1] < 0 Then
PlusDM = 0;
Else
PlusDM = High[Counter] - High[Counter+1];
If Low[Counter+1] - Low[Counter] < 0 Then
MinusDM = 0;
Else
MinusDM = Low[Counter+1] - Low[Counter];
var1 = PlusDM;
Var2 = MinusDM;
If Var2 >= var1 Then
PlusDM = 0;
If var1 >= Var2 Then
MinusDM = 0;
TRange = TRange + TrueRange[Counter];
PlusDM14 = PlusDM14 + PlusDM;
MinusDM14 = MinusDM14 + MinusDM;
}
If TRange <> 0 Then
{
DP = 100 * PlusDM14 / TRange;
DM = 100 * MinusDM14 / TRange;
}
Else
{
DP = 0;
DM = 0;
}
}
If idx > Period+1 Then
{
If High[0] - High[1] < 0 Then
PlusDM = 0;
Else
PlusDM = High[0] - High[1];
If Low [1] - Low [0] < 0 Then
MinusDM = 0;
Else
MinusDM = Low[1] - Low[0];
var1 = PlusDM;
Var2 = MinusDM;
If Var2 >= var1 Then
PlusDM = 0;
If var1 >= Var2 Then
MinusDM = 0;
If Period > 0 Then Begin
TRange = TRange[1] - (TRange[1] / Period) + TrueRange;
PlusDM14 = PlusDM14[1] - (PlusDM14[1] / Period) + PlusDM;
MinusDM14 = MinusDM14[1] - (MinusDM14[1] / Period) + MinusDM;
End;
If TRange <> 0 Then
{
DP = 100 * PlusDM14 / TRange;
DM = 100 * MinusDM14 / TRange;
}
Else
{
DP = 0;
DM = 0;
}
}
If DP + DM == 0 Then
DMIv = 0;
Else
DMIv = 100 * AbsValue(DP - DM) / (DP + DM);
var : CummDMI(0),ADXV(0);
If idx >= Period+1 and idx <= period*2+1 Then
{
CummDMI = 0;
for Counter = 0 To idx-(Period+1)
{
CummDMI = CummDMI + DMIV[Counter];
}
ADXV = CummDMI / (idx-(Period+1)+1);
}
Else
ADXV = (ADXV[1] * (Period - 1) + DMIV) / Period;
If idx > Period+1 Then
{
If CrossUp(ADXV, DP) or CrossDown(ADXV, DP) Then
if entry < 5 Then
Buy();
If CrossUp(ADXV, DM) or CrossDown(ADXV, DM) Then
if entry < 5 Then
Sell();
}
SetStopEndofday(150000);
SetStopProfittarget(100,PointStop);
SetStopLoss(10.0,PointStop);
즐거운 하루되세요
> 바둑이 님이 쓴 글입니다.
> 제목 : adx와 di 관련 수정부탁드립니다.
>
안녕하세요.
아래와 같이 작성하면 전일 di선을 연속적으로 인식하여 당일 신호가 안나오거나 9시에 바로 신호가 나옵니다.
전일과 전혀 상관없이 당일 dl선 나오는 것 부터 인식하여 당일 adx선이 당일 di선 돌파시 신호가 나오도록 부탁드립니다.
감사합니다.
Input : dix(10),Period(24);
value1 = DIPlus(Period);
value2 = DIMinus(Period);
value3 = ADX(Period);
var : T1(0),entry(0);
if Bdate != bdate[1] Then
T1 = TotalTrades[1];
if MarketPosition == 0 Then
entry = TotalTrades-T1;
Else
entry = TotalTrades-T1+1;
if dayindex <= dix then{
If CrossUp(value3, value1) or CrossDown(value3, value1) Then
if entry < 5 Then
Buy();
If CrossUp(value3, value2) or CrossDown(value3, value2) Then
if entry < 5 Then
Sell();
}
SetStopEndofday(150000);
SetStopProfittarget(100,PointStop);
SetStopLoss(10.0,PointStop);