커뮤니티
문의
2019-05-20 13:10:48
198
글번호 128795
1. 아래 식이 재진입 한번만인가요 ? 아니면 한번만으로 해주세요
2. 그래도 비추세 구간에서 매매가 많은데 더 줄일수 없나요 ?
3. 종합지수가 0.8% 이상이면 매도 신호 금지 , 이하면 매수신호 금지를 추가 할 수 있나요 ?
4. 25일선 아래선 매도신호만 , 위에서 매수 신호만 실행하라
5. 3번 연속 손실나면 그날 매매는 중지 ...
6. 종합지수가 +0.3--0.3% 일때 ,+-0.31-+-0.8% 일때 , +->0.8% 일때 변수를 따로 설정해 놓
고 싶은데 가능 한가요 ? (ChgRate(0.3),Period(20),Change(3);)
질문이 많아서 죄송 합니다 항상 감사합니다
Input:ChgRate(0.3),Period(20),Change(3);
Var:Row(0),Col(0),hiBar(0),loBar(0),HiCond(False),LoCond(False),
LastStat(0),WorkBit(0);
Var:HA_C(0),HA_O(0),HA_H(0),HA_L(0);
Var:ZzOsc(0);
Array : HiZZ[10,4](0), // 열번호 1:가격,2:Index,3:sDate,4:sTime
LoZZ[10,4](0);
#==========================================#
HA_C = (O+H+L+C)/4;
If IsNaN(HA_O[1]) Then
HA_O = O;
Else
HA_O = (HA_O[1]+HA_C[1])/2;
HA_H = max(H,HA_O,HA_C);
HA_L = min(L,HA_O,HA_C);
If Index == 1 Then {
HiZZ[1,1] = HA_H;
HiZZ[1,2] = 0;
HiZZ[1,3] = sDate;
HiZZ[1,4] = sTime;
LoZZ[1,1] = HA_L;
LoZZ[1,2] = 0;
LoZZ[1,3] = sDate;
LoZZ[1,4] = sTime;
}
If Index > 0 Then {
hiBar = hiBar + 1;
loBar = loBar + 1;
}
If HA_H[hiBar] < HA_H Then hiBar = 0;
If HA_L[loBar] > HA_L Then loBar = 0;
HiCond = LoZZ[1,1] * (1 + (ChgRate/100)) < HA_H and hiBar == 0;
LoCond = HiZZ[1,1] * (1 - (ChgRate/100)) > HA_L and loBar == 0;
WorkBit = 0;
If HiCond and LoCond Then {
If HiZZ[1,1] < HA_H and LoZZ[1,1] > HA_L Then {
If HA_H - HiZZ[1,1] > LoZZ[1,1] - HA_L Then
WorkBit = 1;
Else If HA_H - HiZZ[1,1] < LoZZ[1,1] - HA_L Then
WorkBit = -1;
Else If LastStat == -1 Then
WorkBit = 1;
Else
WorkBit = -1;
} Else If LoZZ[1,1] > HA_L Then WorkBit = -1;
Else If HiZZ[1,1] < HA_H Then WorkBit = 1;
Else If LastStat == -1 Then WorkBit = 1;
Else WorkBit = -1;
} Else If HiCond Then WorkBit = 1;
Else If LoCond Then WorkBit = -1;
#==========================================#
If WorkBit == 1 Then {
If LastStat == -1 Then {
For Row = 10 DownTo 2 {
For Col = 1 To 4 {
HiZZ[Row,Col] = HiZZ[Row-1,Col];
}
}
HiZZ[1,1] = HA_H;
HiZZ[1,2] = Index;
HiZZ[1,3] = sDate;
HiZZ[1,4] = sTime;
hiBar = -1;
loBar = -1;
} Else If HiZZ[1,1] < HA_H Then {
HiZZ[1,1] = HA_H;
HiZZ[1,2] = Index;
HiZZ[1,3] = sDate;
HiZZ[1,4] = sTime;
hiBar = -1;
loBar = -1;
}
LastStat = 1;
}
#==========================================#
If WorkBit == -1 Then {
If LastStat == 1 then {
For Row = 10 DownTo 2 {
For Col = 1 To 4 {
LoZZ[Row,Col] = LoZZ[Row-1,Col];
}
}
LoZZ[1,1] = HA_L;
LoZZ[1,2] = Index;
LoZZ[1,3] = sDate;
LoZZ[1,4] = sTime;
hiBar = -1;
loBar = -1;
} Else If LoZZ[1,1] > HA_L then {
LoZZ[1,1] = HA_L;
LoZZ[1,2] = Index;
LoZZ[1,3] = sDate;
LoZZ[1,4] = sTime;
hiBar = -1;
loBar = -1;
}
LastStat = -1;
}
ZzOsc = HA_C - IFF(LastStat == -1,HiZZ[1,1],LoZZ[1,1]);
input: n(0.5), n1(2), n2(1.3);
if highest(H,Period) <= lowest(L,Period)*(1+Change/100) then
{
If CrossUp(ZzOsc,0) Then Buy("B");
if MarketPosition == 0 and MarketPosition(1) == 1 and IsExitName("StopTrailing",1) == true and
ZzOsc > ZzOsc[1] and ZzOsc[1] > 0 Then
buy("bb");
If CrossDown(ZzOsc,0) Then Sell("S");
if MarketPosition == 0 and MarketPosition(1) == -1 and IsExitName("StopTrailing",1) == true and
ZzOsc < ZzOsc[1] and ZzOsc[1] < 0 Then
sell("ss");
}
SetStopTrailing(n,n1,PointStop);
setstoploss (n2,pointstop);
답변 1
예스스탁 예스스탁 답변
2019-05-20 16:15:52
안녕하세요
예스스탁입니다.
직전거래가 트레일링스탑으로 끝나면 재집입이 반복적으로 발생합니다.
B나 S로 진입후에만 재집입이 발생하게 수정해 드립니다.
비추세 구간 제어는 사용자분이 조건을 고민해 보셔야 합니다.
이전에 추가해 드린 부분은 예시로 추가해 드린 내용일뿐입니다.
최근 Period봉 내에 최고가와 최저가의 폭이 change%이상일떄만
신호가 발생하는 내용입니다. 부등호가 반대로 되어 있어 수정해 드립니다.
3번 내용은 종합주가지수는 참조데이타로 추가하셔야 합니다.
다만 6번내용은 처리해 드리기 어렵습니다.
케이스별로 계산을 각각 해야 하는데 업무상 해당 내용까지 처리해 드리기는 어렵습니다.
1~5번까지만 처리한 수식입니다.
Input:ChgRate(0.3),Period(20),Change(3),당일연속손실(3);
Var:Row(0,data1),Col(0,data1),hiBar(0,data1),loBar(0,data1),
HiCond(False,data1),LoCond(False,data1),LastStat(0,data1),WorkBit(0,data1);
Var:HA_C(0,data1),HA_O(0,data1),HA_H(0,data1),HA_L(0,data1);
Var:ZzOsc(0,data1);
Array : HiZZ[10,4](0,data1), // 열번호 1:가격,2:Index,3:sDate,4:sTime
LoZZ[10,4](0,data1);
#==========================================#
HA_C = data1((O+H+L+C)/4);
If IsNaN(HA_O[1]) Then
HA_O = data1(O);
Else
HA_O = (HA_O[1]+HA_C[1])/2;
HA_H = data1(max(H,HA_O,HA_C));
HA_L = data1(min(L,HA_O,HA_C));
If data1(Index == 1) Then {
HiZZ[1,1] = HA_H;
HiZZ[1,2] = 0;
HiZZ[1,3] = data1(sDate);
HiZZ[1,4] = data1(sTime);
LoZZ[1,1] = HA_L;
LoZZ[1,2] = 0;
LoZZ[1,3] = data1(sDate);
LoZZ[1,4] = data1(sTime);
}
If data1(Index > 0) Then {
hiBar = hiBar + 1;
loBar = loBar + 1;
}
If HA_H[hiBar] < HA_H Then hiBar = 0;
If HA_L[loBar] > HA_L Then loBar = 0;
HiCond = LoZZ[1,1] * (1 + (ChgRate/100)) < HA_H and hiBar == 0;
LoCond = HiZZ[1,1] * (1 - (ChgRate/100)) > HA_L and loBar == 0;
WorkBit = 0;
If HiCond and LoCond Then {
If HiZZ[1,1] < HA_H and LoZZ[1,1] > HA_L Then {
If HA_H - HiZZ[1,1] > LoZZ[1,1] - HA_L Then
WorkBit = 1;
Else If HA_H - HiZZ[1,1] < LoZZ[1,1] - HA_L Then
WorkBit = -1;
Else If LastStat == -1 Then
WorkBit = 1;
Else
WorkBit = -1;
} Else If LoZZ[1,1] > HA_L Then WorkBit = -1;
Else If HiZZ[1,1] < HA_H Then WorkBit = 1;
Else If LastStat == -1 Then WorkBit = 1;
Else WorkBit = -1;
} Else If HiCond Then WorkBit = 1;
Else If LoCond Then WorkBit = -1;
#==========================================#
If WorkBit == 1 Then {
If LastStat == -1 Then {
For Row = 10 DownTo 2 {
For Col = 1 To 4 {
HiZZ[Row,Col] = HiZZ[Row-1,Col];
}
}
HiZZ[1,1] = HA_H;
HiZZ[1,2] = data1(Index);
HiZZ[1,3] = data1(sDate);
HiZZ[1,4] = data1(sTime);
hiBar = -1;
loBar = -1;
} Else If HiZZ[1,1] < HA_H Then {
HiZZ[1,1] = HA_H;
HiZZ[1,2] = data1(Index);
HiZZ[1,3] = data1(sDate);
HiZZ[1,4] = data1(sTime);
hiBar = -1;
loBar = -1;
}
LastStat = 1;
}
#==========================================#
If WorkBit == -1 Then {
If LastStat == 1 then {
For Row = 10 DownTo 2 {
For Col = 1 To 4 {
LoZZ[Row,Col] = LoZZ[Row-1,Col];
}
}
LoZZ[1,1] = HA_L;
LoZZ[1,2] = data1(Index);
LoZZ[1,3] = data1(sDate);
LoZZ[1,4] = data1(sTime);
hiBar = -1;
loBar = -1;
} Else If LoZZ[1,1] > HA_L then {
LoZZ[1,1] = HA_L;
LoZZ[1,2] = data1(Index);
LoZZ[1,3] = data1(sDate);
LoZZ[1,4] = data1(sTime);
hiBar = -1;
loBar = -1;
}
LastStat = -1;
}
ZzOsc = HA_C - IFF(LastStat == -1,HiZZ[1,1],LoZZ[1,1]);
input: n(0.5), n1(2), n2(1.3);
var : mav(0,data1),loss(0,data1);
mav = data1(ma(C,25));
if bdate != bdate[1] Then
loss = 0;
if TotalTrades > TotalTrades[1] then
{
if IsExitName("StopLoss",1) == true Then
loss = loss +1;
Else
loss = 0;
}
if data1(highest(H,Period) >= lowest(L,Period)*(1+Change/100)) and loss < 당일연속손실 then
{
If CrossUp(ZzOsc,0) Then
{
if C > mav and data2(C>=closeD(0)*0.992) Then
Buy("B");
Else
ExitShort("sx");
}
if MarketPosition == 0 and MarketPosition(1) == 1 and
IsExitName("StopTrailing",1) == true and IsEntryName("b",1) == true and
ZzOsc > ZzOsc[1] and ZzOsc[1] > 0 Then
{
if C > mav and data2(C>=closeD(0)*0.992) Then
buy("bb");
}
If CrossDown(ZzOsc,0) Then
{
if C < mav and data2(C<=closeD(0)*1.008) Then
Sell("S");
Else
ExitLong("bx");
}
if MarketPosition == 0 and MarketPosition(1) == -1 and
IsExitName("StopTrailing",1) == true and IsEntryName("s",1) == true and
ZzOsc < ZzOsc[1] and ZzOsc[1] < 0 Then
{
if C < mav and data2(C<=closeD(0)*1.008) Then
sell("ss");
}
}
SetStopTrailing(n,n1,PointStop);
setstoploss (n2,pointstop);
즐거운 하루되세요
> 구다이전설 님이 쓴 글입니다.
> 제목 : 문의
> 1. 아래 식이 재진입 한번만인가요 ? 아니면 한번만으로 해주세요
2. 그래도 비추세 구간에서 매매가 많은데 더 줄일수 없나요 ?
3. 종합지수가 0.8% 이상이면 매도 신호 금지 , 이하면 매수신호 금지를 추가 할 수 있나요 ?
4. 25일선 아래선 매도신호만 , 위에서 매수 신호만 실행하라
5. 3번 연속 손실나면 그날 매매는 중지 ...
6. 종합지수가 +0.3--0.3% 일때 ,+-0.31-+-0.8% 일때 , +->0.8% 일때 변수를 따로 설정해 놓
고 싶은데 가능 한가요 ? (ChgRate(0.3),Period(20),Change(3);)
질문이 많아서 죄송 합니다 항상 감사합니다
Input:ChgRate(0.3),Period(20),Change(3);
Var:Row(0),Col(0),hiBar(0),loBar(0),HiCond(False),LoCond(False),
LastStat(0),WorkBit(0);
Var:HA_C(0),HA_O(0),HA_H(0),HA_L(0);
Var:ZzOsc(0);
Array : HiZZ[10,4](0), // 열번호 1:가격,2:Index,3:sDate,4:sTime
LoZZ[10,4](0);
#==========================================#
HA_C = (O+H+L+C)/4;
If IsNaN(HA_O[1]) Then
HA_O = O;
Else
HA_O = (HA_O[1]+HA_C[1])/2;
HA_H = max(H,HA_O,HA_C);
HA_L = min(L,HA_O,HA_C);
If Index == 1 Then {
HiZZ[1,1] = HA_H;
HiZZ[1,2] = 0;
HiZZ[1,3] = sDate;
HiZZ[1,4] = sTime;
LoZZ[1,1] = HA_L;
LoZZ[1,2] = 0;
LoZZ[1,3] = sDate;
LoZZ[1,4] = sTime;
}
If Index > 0 Then {
hiBar = hiBar + 1;
loBar = loBar + 1;
}
If HA_H[hiBar] < HA_H Then hiBar = 0;
If HA_L[loBar] > HA_L Then loBar = 0;
HiCond = LoZZ[1,1] * (1 + (ChgRate/100)) < HA_H and hiBar == 0;
LoCond = HiZZ[1,1] * (1 - (ChgRate/100)) > HA_L and loBar == 0;
WorkBit = 0;
If HiCond and LoCond Then {
If HiZZ[1,1] < HA_H and LoZZ[1,1] > HA_L Then {
If HA_H - HiZZ[1,1] > LoZZ[1,1] - HA_L Then
WorkBit = 1;
Else If HA_H - HiZZ[1,1] < LoZZ[1,1] - HA_L Then
WorkBit = -1;
Else If LastStat == -1 Then
WorkBit = 1;
Else
WorkBit = -1;
} Else If LoZZ[1,1] > HA_L Then WorkBit = -1;
Else If HiZZ[1,1] < HA_H Then WorkBit = 1;
Else If LastStat == -1 Then WorkBit = 1;
Else WorkBit = -1;
} Else If HiCond Then WorkBit = 1;
Else If LoCond Then WorkBit = -1;
#==========================================#
If WorkBit == 1 Then {
If LastStat == -1 Then {
For Row = 10 DownTo 2 {
For Col = 1 To 4 {
HiZZ[Row,Col] = HiZZ[Row-1,Col];
}
}
HiZZ[1,1] = HA_H;
HiZZ[1,2] = Index;
HiZZ[1,3] = sDate;
HiZZ[1,4] = sTime;
hiBar = -1;
loBar = -1;
} Else If HiZZ[1,1] < HA_H Then {
HiZZ[1,1] = HA_H;
HiZZ[1,2] = Index;
HiZZ[1,3] = sDate;
HiZZ[1,4] = sTime;
hiBar = -1;
loBar = -1;
}
LastStat = 1;
}
#==========================================#
If WorkBit == -1 Then {
If LastStat == 1 then {
For Row = 10 DownTo 2 {
For Col = 1 To 4 {
LoZZ[Row,Col] = LoZZ[Row-1,Col];
}
}
LoZZ[1,1] = HA_L;
LoZZ[1,2] = Index;
LoZZ[1,3] = sDate;
LoZZ[1,4] = sTime;
hiBar = -1;
loBar = -1;
} Else If LoZZ[1,1] > HA_L then {
LoZZ[1,1] = HA_L;
LoZZ[1,2] = Index;
LoZZ[1,3] = sDate;
LoZZ[1,4] = sTime;
hiBar = -1;
loBar = -1;
}
LastStat = -1;
}
ZzOsc = HA_C - IFF(LastStat == -1,HiZZ[1,1],LoZZ[1,1]);
input: n(0.5), n1(2), n2(1.3);
if highest(H,Period) <= lowest(L,Period)*(1+Change/100) then
{
If CrossUp(ZzOsc,0) Then Buy("B");
if MarketPosition == 0 and MarketPosition(1) == 1 and IsExitName("StopTrailing",1) == true and
ZzOsc > ZzOsc[1] and ZzOsc[1] > 0 Then
buy("bb");
If CrossDown(ZzOsc,0) Then Sell("S");
if MarketPosition == 0 and MarketPosition(1) == -1 and IsExitName("StopTrailing",1) == true and
ZzOsc < ZzOsc[1] and ZzOsc[1] < 0 Then
sell("ss");
}
SetStopTrailing(n,n1,PointStop);
setstoploss (n2,pointstop);