예스스탁
예스스탁 답변
2020-12-15 14:47:04
안녕하세요
예스스탁입니다.
1
var1은 파라볼릭값입니다. 0보다 작은갑은 없습니다.
현재 작성하신 수식에
종가가 파라볼릭보다 작으면 condition1은 true,
크거나 같으면 false가 저장되게 되어 있습니다.
종가가 파라볼록보다 큰구간이 빨간색이므로
매수는 condition1 == false
매도는 condition1 == true조건이 되어야 합니다.
2
작성하신 수식에서 PCI는 0~100사이의 값으로 나오고 있습니다.
Condition7 = pci<10 or pci>90 ;
위 조건 충족시에 매수진입과 매도진입신호 정상적으로 나오고 있습니다.
3
var1이라는 변수가 수식 상단에서는 파라볼릭을 저장하고
하단에서는 다이버전스의값을 저장하게 또 사용되었습니다.
상단의 파라볼릭은 다름변수로 변경해 드립니다.
수식에서 같은 이름의 변수의 중복사용에 유의하시기 바랍니다.
4
수정한 식입니다.
Input:length(10);
Var:j1(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL11(0),
Text1(0),처리구분(""),Buysetup(0),sellsetup(0),Sarv(0);
Array:고점[10,2](0),저점[10,2](0); //가격,위치
//
Input : af(0.002), maxAF(0.2);
Sarv = CSar(af,maxAF);
if Sarv > C Then
Condition1=true;
Else
Condition1=False;
//
Variables: NCO(0);
NCO = C - C[Length];
//pci
input : Period(20);
var : mo(0),cnt(0),P(0),UPsum(0),Dnsum(0),PCI(0);
Array : Gredient[100](0),Updev[100](0),Dndev[100](0);
P = Period-1;
Mo = C-C[Period];
for cnt = 0 to P{
Gredient[cnt] = C[P]+Mo*(P-cnt)/P;
}
for cnt = 0 to P{
Updev[cnt] = 0;
Dndev[cnt] = 0;
if C[cnt] > Gredient[cnt] Then
Updev[cnt] = C[cnt]-Gredient[cnt];
if C[cnt] < Gredient[cnt] Then
Dndev[cnt] = Gredient[cnt]-C[cnt];
}
upsum = 0;
Dnsum = 0;
for cnt = 0 to P{
upsum = upsum +Updev[cnt];
Dnsum = dnsum +dndev[cnt];
}
PCI = upsum/(upsum+Dnsum)*100;
Condition7 = pci<10 or pci>90 ;
//패턴시작
처리구분 = "";
If Highest(H,length) == H and lastHiVal <> H and
Lowest(L,length) == L and lastLoVal <> L Then
{
If 저점[1,1] > L Then 처리구분 = "저점처리";
If 고점[1,1] < H Then 처리구분 = "고점처리";
}
Else If Highest(H,length) == H and lastHiVal <> H Then
처리구분 = "고점처리";
Else If Lowest(L,length) == L and lastLoVal <> L Then
처리구분 = "저점처리";
If 처리구분 == "고점처리" Then
{
lastHiVal = H;
If 고점[1,2] < 저점[1,2] Then
{
For j1 = 10 DownTo 2
{
고점[j1,1] = 고점[j1-1,1];
고점[j1,2] = 고점[j1-1,2];
}
}
If 고점[1,2] < 저점[1,2] or 고점[1,1] < H Then
{
고점[1,1] = H;
고점[1,2] = Index;
sBar = Index - 저점[1,2];
eBar = 0;
If TL_GetBeginDate(TL11) == sDate[sBar] and
TL_GetBeginTime(TL11) == sTime[sBar] Then
{
TL_Delete(TL11);
Text_Delete(Text1);
}
TL11 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],
sDate[eBar],sTime[eBar],고점[1,1]);
Text1 = Text_New(sDate[eBar],sTime[eBar],고점[1,1],
NumToStr(고점[1,1],2));
Text_SetStyle(Text1, 2, 1);
if Condition7 and Condition1==False then Buy("b");
}
}
If 처리구분 == "저점처리" Then
{
lastLoVal = L;
If 저점[1,2] < 고점[1,2] then
{
For j1 = 10 DownTo 2
{
저점[j1,1] = 저점[j1-1,1];
저점[j1,2] = 저점[j1-1,2];
}
}
If 저점[1,2] < 고점[1,2] or 저점[1,1] > L then
{
저점[1,1] = L;
저점[1,2] = Index;
sBar = Index - 고점[1,2];
eBar = 0;
If TL_GetBeginDate(TL11) == sDate[sBar] and
TL_GetBeginTime(TL11) == sTime[sBar] Then
{
TL_Delete(TL11);
Text_Delete(Text1);
}
TL11 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],
sDate[eBar],sTime[eBar],저점[1,1]);
Text1 = Text_New(sDate[eBar],sTime[eBar],저점[1,1],
NumToStr(저점[1,1],2));
Text_SetStyle(Text1, 2, 0);
if Condition7 and Condition1==true Then Sell("s");
}
}
inPUT : RsiPeriod(13),PLPeriod(2),TSLPeriod(7), BandPeriod(34), 표준편차(1.6185);
var :RSIV(0), RSIPL(0), TSL(0), MidBand(0), UpBand(0),DnBand(0) ;
var : TL1(0), TL2(0), TLi1(0), TLi2(0), TX1(0), TX2(0), TX3(0), TX4(0), TX5(0), TX6(0);
RSIV = RSI(RSIPeriod);
RSIPL = ma(RSIV,PLPeriod); //RSI_Price_Line
TSL = ma(RSIV,TSLPeriod); //Trade_Signal_Line
MidBand = ma(RSIV,BandPeriod); //Volatility_Band
UpBand = MidBand + (표준편차 * std(RSIV, BandPeriod)); //Volatility_Band_Up
DnBand = MidBand - (표준편차 * std(RSIV, BandPeriod)); //Volatility_Band_Down
#
if RSIPL > RSIPL[1] and RSIPL[1] < RSIPL[2] and RSIPL < 50 then { //스토캐스틱 상승반전
var1 = RSIPL[1];
var2 = var1[1];
var3 = C[1];
var4 = var3[1];
var5 = sdate[1];
var6 = var5[1];
var7 = stime[1];
var8 = var7[1];
if var1 > var2 and var3 < var4 then //지표값은 높아지고 종가는 낮아지고
var9 = 1;
}
else
var9 = 0;
if var9 == 1 then {
//TL1 = TL_New(var6,var8,var4,var5,var7,var3);
//TLi1= TL_New_self(var6,var8,var2,var5,var7,var1);
TX1 = Text_new(var5, var7, L, "★");
//TL_SetSize(TL1, 2);
//TL_SetColor(TL1, Red);
//TL_SetSize(TLi1, 2);
//TL_SetColor(TLi1, Red);
//Text_SetColor(Tx1,Magenta);
//Text_SetStyle(Tx1,0,0);
}
if CrossUp(RSIPL, DnBand) then {
TX3 = Text_new(sdate, stime, L, "▲");
//Text_SetColor(Tx3,rgb(160,70,255));
//Text_SetStyle(Tx3,2,0);
}
if RSIPL < RSIPL[1] and RSIPL[1] > RSIPL[2] and RSIPL > 50 then {//스토캐스틱 하락반전
var11 = RSIPL[1];
var12 = var11[1];
var13 = C[1];
var14 = var13[1];
var15 = sdate[1];
var16 = var15[1];
var17 = stime[1];
var18 = var17[1];
if var11 < var12 and var13 > var14 then //지표값은 낮아지고 종가는 높아지고
var19 = 1;
}
else
var19 = 0;
if var19 == 1 then {
//TL2 = TL_New(var16,var18,var14,var15,var17,var13);
//TLi2= TL_New_self(var16,var18,var12,var15,var17,var11);
TX2 = Text_new(var15, var17, H, "★");
//TL_SetSize(TL2, 2);
//TL_SetColor(TL2, blue);
//TL_SetSize(TLi2, 2);
//TL_SetColor(TLi2, blue);
//Text_SetColor(Tx2,Lcyan);
//Text_SetStyle(Tx2,0,1);
}
if CrossDown(RSIPL, UpBand) then {
TX4 = Text_new(sdate, stime, H, "▼");
//Text_SetColor(Tx4,Rgb(0,255,0));
//Text_SetStyle(Tx4,2,1);
}
#
//plot1(RSIPL, "RSIPL",Lgreen,def,0);
//plot2(TSL,"TSL",red,def,0);
//plot3(MidBand,"MidBand",magenta,def,0);
//plot4(UpBand,"UpBand",blue,def,0);
//plot5(DnBand,"DnBand",blue,def,0);
//if CrossUp(RSIPL,DnBand) then
//plot6(RSIPL, "상향돌파시점");
//if CrossDown(RSIPL, UpBand) then
//plot7(RSIPL, "하향이탈시점");
//if var9 == 1 then
//plot8(RSIPL, "상승다이버전스");
//if var19 == 1 then
//plot9(RSIPL, "하락다이버전스");
if var19 == 1 and var19 != var19[1] then ExitLong("매수청");
if var9 == 1 and var9 != var9[1] then ExitShort("매도청");
if NCO < -50 Then ExitLong("매수손");
if NCO > 50 Then ExitShort("매도손");
즐거운 하루되세요
> 코샘매쓰 님이 쓴 글입니다.
> 제목 : 시스템합성중에 잘안됩니다.
> 주시스템은 패턴매매인데 for함수때문인지 매수매도를 어디에 두어야 하는지
잘안됩니다. .
그림과 같이 빨간선일때는 매수신호만 가능.
파란선일때는 매도신호만 가능
파라볼릭 var1>0일때는 매수만 var1<0일때로 해서 매수매신호에 넣어봐도
신호가 안먹히는 것같습니다. ₩
그리고 청산신호도 다이버전스를 이용하여 할려하는데 안먹힙니다. ㅠㅠ
필터로
pci를 쓰고 있는데 그것도 안먹히는 것같습니다.
도와주세요..감사합니다.
Input:length(10);
Var:j1(0),lastHiVal(0),lastLoVal(0),sBar(0),eBar(0),TL11(0),
Text1(0),처리구분(""),Buysetup(0),sellsetup(0);
Array:고점[10,2](0),저점[10,2](0); //가격,위치
//
Input : af(0.002), maxAF(0.2);
var1 = CSar(af,maxAF);
if var1 > C Then
Condition1=true;
Else
Condition1=False;
//
Variables: NCO(0);
NCO = C - C[Length];
//pci
input : Period(20);
var : mo(0),cnt(0),P(0),UPsum(0),Dnsum(0),PCI(0);
Array : Gredient[100](0),Updev[100](0),Dndev[100](0);
P = Period-1;
Mo = C-C[Period];
for cnt = 0 to P{
Gredient[cnt] = C[P]+Mo*(P-cnt)/P;
}
for cnt = 0 to P{
Updev[cnt] = 0;
Dndev[cnt] = 0;
if C[cnt] > Gredient[cnt] Then
Updev[cnt] = C[cnt]-Gredient[cnt];
if C[cnt] < Gredient[cnt] Then
Dndev[cnt] = Gredient[cnt]-C[cnt];
}
upsum = 0;
Dnsum = 0;
for cnt = 0 to P{
upsum = upsum +Updev[cnt];
Dnsum = dnsum +dndev[cnt];
}
PCI = upsum/(upsum+Dnsum)*100;
Condition7 = pci<10 or pci>90 ;
//패턴시작
처리구분 = "";
If Highest(H,length) == H and lastHiVal <> H and
Lowest(L,length) == L and lastLoVal <> L Then
{
If 저점[1,1] > L Then 처리구분 = "저점처리";
If 고점[1,1] < H Then 처리구분 = "고점처리";
}
Else If Highest(H,length) == H and lastHiVal <> H Then
처리구분 = "고점처리";
Else If Lowest(L,length) == L and lastLoVal <> L Then
처리구분 = "저점처리";
If 처리구분 == "고점처리" Then
{
lastHiVal = H;
If 고점[1,2] < 저점[1,2] Then
{
For j1 = 10 DownTo 2
{
고점[j1,1] = 고점[j1-1,1];
고점[j1,2] = 고점[j1-1,2];
}
}
If 고점[1,2] < 저점[1,2] or 고점[1,1] < H Then
{
고점[1,1] = H;
고점[1,2] = Index;
sBar = Index - 저점[1,2];
eBar = 0;
If TL_GetBeginDate(TL11) == sDate[sBar] and
TL_GetBeginTime(TL11) == sTime[sBar] Then
{
TL_Delete(TL11);
Text_Delete(Text1);
}
TL11 = TL_New(sDate[sBar],sTime[sBar],저점[1,1],
sDate[eBar],sTime[eBar],고점[1,1]);
Text1 = Text_New(sDate[eBar],sTime[eBar],고점[1,1],
NumToStr(고점[1,1],2));
Text_SetStyle(Text1, 2, 1);
if Condition7 and Condition1==True then Buy("b");
}
}
If 처리구분 == "저점처리" Then
{
lastLoVal = L;
If 저점[1,2] < 고점[1,2] then
{
For j1 = 10 DownTo 2
{
저점[j1,1] = 저점[j1-1,1];
저점[j1,2] = 저점[j1-1,2];
}
}
If 저점[1,2] < 고점[1,2] or 저점[1,1] > L then
{
저점[1,1] = L;
저점[1,2] = Index;
sBar = Index - 고점[1,2];
eBar = 0;
If TL_GetBeginDate(TL11) == sDate[sBar] and
TL_GetBeginTime(TL11) == sTime[sBar] Then
{
TL_Delete(TL11);
Text_Delete(Text1);
}
TL11 = TL_New(sDate[sBar],sTime[sBar],고점[1,1],
sDate[eBar],sTime[eBar],저점[1,1]);
Text1 = Text_New(sDate[eBar],sTime[eBar],저점[1,1],
NumToStr(저점[1,1],2));
Text_SetStyle(Text1, 2, 0);
if Condition7 and Condition1==False Then Sell("s");
}
}
inPUT : RsiPeriod(13),PLPeriod(2),TSLPeriod(7), BandPeriod(34), 표준편차(1.6185);
var :RSIV(0), RSIPL(0), TSL(0), MidBand(0), UpBand(0),DnBand(0) ;
var : TL1(0), TL2(0), TLi1(0), TLi2(0), TX1(0), TX2(0), TX3(0), TX4(0), TX5(0), TX6(0);
RSIV = RSI(RSIPeriod);
RSIPL = ma(RSIV,PLPeriod); //RSI_Price_Line
TSL = ma(RSIV,TSLPeriod); //Trade_Signal_Line
MidBand = ma(RSIV,BandPeriod); //Volatility_Band
UpBand = MidBand + (표준편차 * std(RSIV, BandPeriod)); //Volatility_Band_Up
DnBand = MidBand - (표준편차 * std(RSIV, BandPeriod)); //Volatility_Band_Down
#
if RSIPL > RSIPL[1] and RSIPL[1] < RSIPL[2] and RSIPL < 50 then { //스토캐스틱 상승반전
var1 = RSIPL[1];
var2 = var1[1];
var3 = C[1];
var4 = var3[1];
var5 = sdate[1];
var6 = var5[1];
var7 = stime[1];
var8 = var7[1];
if var1 > var2 and var3 < var4 then //지표값은 높아지고 종가는 낮아지고
var9 = 1;
}
else
var9 = 0;
if var9 == 1 then {
//TL1 = TL_New(var6,var8,var4,var5,var7,var3);
//TLi1= TL_New_self(var6,var8,var2,var5,var7,var1);
TX1 = Text_new(var5, var7, L, "★");
//TL_SetSize(TL1, 2);
//TL_SetColor(TL1, Red);
//TL_SetSize(TLi1, 2);
//TL_SetColor(TLi1, Red);
//Text_SetColor(Tx1,Magenta);
//Text_SetStyle(Tx1,0,0);
}
if CrossUp(RSIPL, DnBand) then {
TX3 = Text_new(sdate, stime, L, "▲");
//Text_SetColor(Tx3,rgb(160,70,255));
//Text_SetStyle(Tx3,2,0);
}
if RSIPL < RSIPL[1] and RSIPL[1] > RSIPL[2] and RSIPL > 50 then {//스토캐스틱 하락반전
var11 = RSIPL[1];
var12 = var11[1];
var13 = C[1];
var14 = var13[1];
var15 = sdate[1];
var16 = var15[1];
var17 = stime[1];
var18 = var17[1];
if var11 < var12 and var13 > var14 then //지표값은 낮아지고 종가는 높아지고
var19 = 1;
}
else
var19 = 0;
if var19 == 1 then {
//TL2 = TL_New(var16,var18,var14,var15,var17,var13);
//TLi2= TL_New_self(var16,var18,var12,var15,var17,var11);
TX2 = Text_new(var15, var17, H, "★");
//TL_SetSize(TL2, 2);
//TL_SetColor(TL2, blue);
//TL_SetSize(TLi2, 2);
//TL_SetColor(TLi2, blue);
//Text_SetColor(Tx2,Lcyan);
//Text_SetStyle(Tx2,0,1);
}
if CrossDown(RSIPL, UpBand) then {
TX4 = Text_new(sdate, stime, H, "▼");
//Text_SetColor(Tx4,Rgb(0,255,0));
//Text_SetStyle(Tx4,2,1);
}
#
//plot1(RSIPL, "RSIPL",Lgreen,def,0);
//plot2(TSL,"TSL",red,def,0);
//plot3(MidBand,"MidBand",magenta,def,0);
//plot4(UpBand,"UpBand",blue,def,0);
//plot5(DnBand,"DnBand",blue,def,0);
//if CrossUp(RSIPL,DnBand) then
//plot6(RSIPL, "상향돌파시점");
//if CrossDown(RSIPL, UpBand) then
//plot7(RSIPL, "하향이탈시점");
//if var9 == 1 then
//plot8(RSIPL, "상승다이버전스");
//if var19 == 1 then
//plot9(RSIPL, "하락다이버전스");
if var19 == 1 then ExitLong("매수청");
if var9 == 1 then ExitShort("매도청");
if NCO<-50 Then ExitLong("매수손");
if NCO>50 Then ExitShort("매도손");