예스스탁
예스스탁 답변
2020-03-11 14:24:20
안녕하세요
예스스탁입니다.
data1과 data2처리해서 수식을려드립니다.
구현하시는 전략에 추세선과 관련된 내용은 동시에 2개 데이타에 그릴수는 없고
전략 내용에서는 사용하지 않아 제외했습니다.
아래내용 참고하셔서 수정보완해 식 완성하시기 바랍니다.
진입식은 2개의 데이타 내용에 같은 내용을 모두 추가했습니다.
원하시는 시점을 제외하고 삭제하시면 됩니다.
input : D1P(20),D1레벨(4),D1변동률(0.2);
input : D2P(20),D2레벨(4),D2변동률(0.2);
input : 익절틱수(20),손절틱수(20);
var : D1mav(0,data1),D1v1(0,data1),D1val1(0,data1),D1cnt(0,data1),
D1신규(1,data1),D1연장(2,data1),D1연속(3,data1),
D1행(0,data1),D1열(0,data1),D1val2(0,data1),
D1시작일(0,data1),D1시작시각(0,data1),D1고라인기울기(0,data1),D1고라인시작(0,data1),
D1고라인끝(0,data1),D1저라인기울기(0,data1),D1저라인시작(0,data1),D1저라인끝(0,data1);
var : D2mav(0,data2),D2v1(0,data2),D2val1(0,data2),D2cnt(0,data2),
D2신규(1,data2),D2연장(2,data2),D2연속(3,data2),
D2행(0,data2),D2열(0,data2),D2val2(0,data2),
D2시작일(0,data2),D2시작시각(0,data2),D2고라인기울기(0,data2),D2고라인시작(0,data2),
D2고라인끝(0,data2),D2저라인기울기(0,data2),D2저라인시작(0,data2),D2저라인끝(0,data2);
Array:D1고[10,44](0,data1),D1저[10,44](0,data1),D1최종상태[5](0,data1),D1처리구분[5](0,data1),D1고0[10,4](0,data1),D1저0[10,4](0,data1),D1결과리턴[8](0,data1);
Array:D2고[10,44](0,data2),D2저[10,44](0,data2),D2최종상태[5](0,data2),D2처리구분[5](0,data2),D2고0[10,4](0,data2),D2저0[10,4](0,data2),D2결과리턴[8](0,data2);
D1mav = data1(ma(c,D1P));
D2mav = data2(ma(c,D2P));
If D1레벨 <= 4 Then
{
D1v1 = D1레벨 * 10;
D1val1 = data1(ChgRateZigZag301(H,L,D1변동률,D1고,D1저,D1최종상태,D1처리구분));
}
D1cnt = D1cnt + 1;
If (D1처리구분[D1레벨] == D1신규 or D1처리구분[D1레벨] == D1연속) Then
{
For D1행 = 1 To 10
{
For D1열 = 1 To 4
{
D1고0[D1행,D1열] = D1고[D1행,D1v1 + D1열];
D1저0[D1행,D1열] = D1저[D1행,D1v1 + D1열];
}
}
D1val2 = data1(YHS_Channel(D1고0,D1저0,D1결과리턴));
If D1val2 == 1 Then
{
D1시작일 = D1결과리턴[0];
D1시작시각 = D1결과리턴[1];
D1고라인기울기 = D1결과리턴[2];
D1고라인시작 = D1결과리턴[3];
D1고라인끝 = D1결과리턴[4];
D1저라인기울기 = D1결과리턴[5];
D1저라인시작 = D1결과리턴[6];
D1저라인끝 = D1결과리턴[7];
D1cnt = 0;
if max(D1고라인끝,D1저라인끝) >= data1(c) and data1(c) >= min(D1고라인끝,D1저라인끝) and
max(D2고라인끝,D2저라인끝) >= data2(c) and data2(c) >= min(D2고라인끝,D2저라인끝) and
data2(c> D2mav) and
data3(C>C[1]) Then
buy();
}
}
If D1cnt > 0 and D1cnt < (D1레벨 + 1) * 20 Then {
D1고라인끝 = D1고라인끝 + D1고라인기울기;
D1저라인끝 = D1저라인끝 + D1저라인기울기;
if max(D1고라인끝,D1저라인끝) >= data1(c) and data1(c) >= min(D1고라인끝,D1저라인끝) and
max(D2고라인끝,D2저라인끝) >= data2(c) and data2(c) >= min(D2고라인끝,D2저라인끝) and
data2(c< d2mav) and
data3(C<C[1]) Then
sell();
}
If D2레벨 <= 4 Then
{
D2v1 = D2레벨 * 10;
D2val1 = data2(ChgRateZigZag301(H,L,D2변동률,D2고,D2저,D2최종상태,D2처리구분));
}
D2cnt = D2cnt + 1;
If (D2처리구분[D2레벨] == D2신규 or D2처리구분[D1레벨] == D2연속) Then
{
For D2행 = 1 To 10
{
For D2열 = 1 To 4
{
D2고0[D2행,D2열] = D2고[D2행,D2v1 + D2열];
D2저0[D2행,D2열] = D2저[D2행,D2v1 + D2열];
}
}
D2val2 = data2(YHS_Channel(D2고0,D2저0,D2결과리턴));
If D2val2 == 1 Then
{
D2시작일 = D2결과리턴[0];
D2시작시각 = D2결과리턴[1];
D2고라인기울기 = D2결과리턴[2];
D2고라인시작 = D2결과리턴[3];
D2고라인끝 = D2결과리턴[4];
D2저라인기울기 = D2결과리턴[5];
D2저라인시작 = D2결과리턴[6];
D2저라인끝 = D2결과리턴[7];
D2cnt = 0;
if max(D1고라인끝,D1저라인끝) >= data1(c) and data1(c) >= min(D1고라인끝,D1저라인끝) and
max(D2고라인끝,D2저라인끝) >= data2(c) and data2(c) >= min(D2고라인끝,D2저라인끝) and
data2(c> D2mav) and
data3(C>C[1]) Then
buy();
}
}
If D2cnt > 0 and D2cnt < (D2레벨 + 1) * 20 Then {
D2고라인끝 = D2고라인끝 + D2고라인기울기;
D2저라인끝 = D2저라인끝 + D2저라인기울기;
if max(D1고라인끝,D1저라인끝) >= data1(c) and data1(c) >= min(D1고라인끝,D1저라인끝) and
max(D2고라인끝,D2저라인끝) >= data2(c) and data2(c) >= min(D2고라인끝,D2저라인끝) and
data2(c< d2mav) and
data3(C<C[1]) Then
sell();
}
SetStopProfittarget(PriceScale*익절틱수,PointStop);
SetStopLoss(PriceScale*손절틱수,PointStop);
즐거운 하루되세요
> maker 님이 쓴 글입니다.
> 제목 : Data2 질문 드립니다.
> Data2를 제가 직접 적어서 수정해봤는데
Data2가 제대로 적용이 안되는 것 같습니다.
수정 가능하시면 수정 부탁 드리며,
시간상 수정이 불가능하시면 방법이라도 부탁드리겠습니다.
부탁드립니다.
감사합니다.
Input:변동률(0.01),레벨(1),익절틱수(20),손절틱수(15);
Var:행(0,data1),열(0,data1),고점(1,data1),저점(-1,data1),신규(1,data1),연장(2,data1),연속(3,data1),삼선(4,data1),cnt(0,data1),
고라인기울기(0,data1),고라인시작(0,data1),고라인끝(0,data1),
저라인기울기(0,data1),저라인시작(0,data1),저라인끝(0,data1),
시작일(0,data1),시작시각(0,data1),v1(0,data1),val1(0,data1),val2(0,data1);
Array:고[10,44](0,data1),저[10,44](0,data1), // 열번호 : 1=가격,2=Index,3=sDate,4=sTime,11=가격,12=Index,13=sDate,14=sTime
최종상태[5](0,data1),처리구분[5](0,data1),TL[3](0,data1),TL1[2](0,data1),고0[10,4](0,data1),저0[10,4](0,data1),결과리턴[8](0,data1);
//=========================================================//
If 레벨 <= 4 Then
{
v1 = 레벨 * 10;
val1 = data1(ChgRateZigZag301(H,L,변동률,고,저,최종상태,처리구분));
If 최종상태[레벨] == 고점 Then
{
If 처리구분[레벨] == 신규 Then
TL[2] = TL_New(저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1],
고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
If 처리구분[레벨] == 연장 Then
TL_SetEnd(TL[2],고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
If 처리구분[레벨] == 연속 Then
{
TL[1] = TL_New(고[2,v1 + 3],고[2,v1 + 4],고[2,v1 + 1],
저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
TL[2] = TL_New(저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1],
고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
}
If 처리구분[레벨] == 삼선 Then
{
TL[0] = TL_New(저[2,v1 + 3],저[2,v1 + 4],저[2,v1 + 1],
고[2,v1 + 3],고[2,v1 + 4],고[2,v1 + 1]);
TL[1] = TL_New(고[2,v1 + 3],고[2,v1 + 4],고[2,v1 + 1],
저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
TL[2] = TL_New(저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1],
고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
}
}
If 최종상태[레벨] == 저점 Then
{
If 처리구분[레벨] == 신규 Then
TL[2] = TL_New(고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1],
저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
If 처리구분[레벨] == 연장 Then
TL_SetEnd(TL[2],저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
If 처리구분[레벨] == 연속 Then
{
TL[1] = TL_New(저[2,v1 + 3],저[2,v1 + 4],저[2,v1 + 1],
고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
TL[2] = TL_New(고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1],
저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
}
If 처리구분[레벨] == 삼선 Then
{
TL[0] = TL_New(고[2,v1 + 3],고[2,v1 + 4],고[2,v1 + 1],
저[2,v1 + 3],저[2,v1 + 4],저[2,v1 + 1]);
TL[1] = TL_New(저[2,v1 + 3],저[2,v1 + 4],저[2,v1 + 1],
고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
TL[2] = TL_New(고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1],
저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
}
}
}
Else
{
Alert("4레벨까지만 가능합니다!!");
}
//=========================================================//
cnt = cnt + 1;
If (처리구분[레벨] == 신규 or 처리구분[레벨] == 연속) Then
{
For 행 = 1 To 10
{
For 열 = 1 To 4 { // 추세채널을 판단할 레벨만 사용자함수에 전달
고0[행,열] = 고[행,v1 + 열];
저0[행,열] = 저[행,v1 + 열];
}
}
val2 = data1(YHS_Channel(고0,저0,결과리턴));
If val2 == 1 Then { // 추세대가 형성되었다면
시작일 = 결과리턴[0];
시작시각 = 결과리턴[1];
고라인기울기 = 결과리턴[2];
고라인시작 = 결과리턴[3];
고라인끝 = 결과리턴[4];
저라인기울기 = 결과리턴[5];
저라인시작 = 결과리턴[6];
저라인끝 = 결과리턴[7];
If 고라인시작[1] == 고라인시작 and 고라인기울기[1] == 고라인기울기 Then { // 겹쳐 그리지 않도록
TL_SetEnd(TL1[0],sDate,sTime,고라인끝);
} Else {
TL1[0] = TL_New(시작일,시작시각,고라인시작,sDate,sTime,고라인끝);
TL_SetColor(TL1[0],IFF(고라인기울기<0,RED,BLUE));
TL_SetSize(TL1[0],3);
}
If 저라인시작[1] == 저라인시작 and 저라인기울기[1] == 저라인기울기 Then {
TL_SetEnd(TL1[1],sDate,sTime,저라인끝);
} Else {
TL1[1] = TL_New(시작일,시작시각,저라인시작,sDate,sTime,저라인끝);
TL_SetColor(TL1[1],IFF(고라인기울기<0,RED,BLUE));
TL_SetSize(TL1[1],3);
}
}
}
Var:행2(0,data2),열2(0,data2),고점2(1,data2),저점2(-1,data2),신규2(1,data2),연장2(2,data2),연속2(3,data2),삼선2(4,data2),cnt2(0,data2),
고라인기울기2(0,data2),고라인시작2(0,data2),고라인끝2(0,data2),
저라인기울기2(0,data2),저라인시작2(0,data2),저라인끝2(0,data2),
시작일2(0,data2),시작시각2(0,data2),v12(0,data2),val12(0,data2),val22(0,data2);
Array:고2[10,44](0,data2),저2[10,44](0,data2), // 열번호 : 1=가격,2=Index,3=sDate,4=sTime,11=가격,12=Index,13=sDate,14=sTime
최종상태2[5](0,data2),처리구분2[5](0,data2),TL2[3](0,data2),TL12[2](0,data2),고02[10,4](0,data2),저02[10,4](0,data2),결과리턴2[8](0,data2);
//=========================================================//
If 레벨 <= 4 Then
{
v1 = 레벨 * 10;
val1 = data2(ChgRateZigZag301(H,L,변동률,고,저,최종상태,처리구분));
If 최종상태[레벨] == 고점 Then
{
If 처리구분[레벨] == 신규 Then
TL[2] = TL_New(저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1],
고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
If 처리구분[레벨] == 연장 Then
TL_SetEnd(TL[2],고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
If 처리구분[레벨] == 연속 Then {
TL[1] = TL_New(고[2,v1 + 3],고[2,v1 + 4],고[2,v1 + 1],
저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
TL[2] = TL_New(저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1],
고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
}
If 처리구분[레벨] == 삼선 Then {
TL[0] = TL_New(저[2,v1 + 3],저[2,v1 + 4],저[2,v1 + 1],
고[2,v1 + 3],고[2,v1 + 4],고[2,v1 + 1]);
TL[1] = TL_New(고[2,v1 + 3],고[2,v1 + 4],고[2,v1 + 1],
저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
TL[2] = TL_New(저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1],
고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
}
}
If 최종상태[레벨] == 저점 Then
{
If 처리구분[레벨] == 신규 Then
TL[2] = TL_New(고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1],
저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
If 처리구분[레벨] == 연장 Then
TL_SetEnd(TL[2],저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
If 처리구분[레벨] == 연속 Then
{
TL[1] = TL_New(저[2,v1 + 3],저[2,v1 + 4],저[2,v1 + 1],
고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
TL[2] = TL_New(고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1],
저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
}
If 처리구분[레벨] == 삼선 Then
{
TL[0] = TL_New(고[2,v1 + 3],고[2,v1 + 4],고[2,v1 + 1],
저[2,v1 + 3],저[2,v1 + 4],저[2,v1 + 1]);
TL[1] = TL_New(저[2,v1 + 3],저[2,v1 + 4],저[2,v1 + 1],
고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1]);
TL[2] = TL_New(고[1,v1 + 3],고[1,v1 + 4],고[1,v1 + 1],
저[1,v1 + 3],저[1,v1 + 4],저[1,v1 + 1]);
}
}
}
Else
{
Alert("4레벨까지만 가능합니다!!");
}
//=========================================================//
cnt = cnt + 1;
If (처리구분[레벨] == 신규 or 처리구분[레벨] == 연속) Then
{
For 행 = 1 To 10
{
For 열 = 1 To 4 { // 추세채널을 판단할 레벨만 사용자함수에 전달
고0[행,열] = 고[행,v1 + 열];
저0[행,열] = 저[행,v1 + 열];
}
}
val2 = data1(YHS_Channel(고0,저0,결과리턴));
If val2 == 1 Then { // 추세대가 형성되었다면
시작일 = 결과리턴[0];
시작시각 = 결과리턴[1];
고라인기울기 = 결과리턴[2];
고라인시작 = 결과리턴[3];
고라인끝 = 결과리턴[4];
저라인기울기 = 결과리턴[5];
저라인시작 = 결과리턴[6];
저라인끝 = 결과리턴[7];
If 고라인시작[1] == 고라인시작 and 고라인기울기[1] == 고라인기울기 Then { // 겹쳐 그리지 않도록
TL_SetEnd(TL1[0],sDate,sTime,고라인끝);
} Else {
TL1[0] = TL_New(시작일,시작시각,고라인시작,sDate,sTime,고라인끝);
TL_SetColor(TL1[0],IFF(고라인기울기<0,RED,BLUE));
TL_SetSize(TL1[0],3);
}
If 저라인시작[1] == 저라인시작 and 저라인기울기[1] == 저라인기울기 Then {
TL_SetEnd(TL1[1],sDate,sTime,저라인끝);
} Else {
TL1[1] = TL_New(시작일,시작시각,저라인시작,sDate,sTime,저라인끝);
TL_SetColor(TL1[1],IFF(고라인기울기<0,RED,BLUE));
TL_SetSize(TL1[1],3);
}
}
If (cnt = 0) and (cnt2 > 0 and cnt2 < (레벨 + 1) * 20) Then
{
고라인끝2 = 고라인끝2 + 고라인기울기2;
저라인끝2 = 저라인끝2 + 저라인기울기2;
If (max(고라인끝,저라인끝) >= data1(C)) and (data1(c) >= min(고라인끝,저라인끝)) and (CrossUp(data2(C), max(고라인끝2, 저라인끝2)))
Then
Buy();
}
If (cnt > 0) and (cnt < (레벨 + 1) * 20) and (cnt2 = 0) Then
{
고라인끝 = 고라인끝 + 고라인기울기;
저라인끝 = 저라인끝 + 저라인기울기;
If (CrossUp(data1(C), max(고라인끝,저라인끝)) and max(고라인끝2,저라인끝2) >= data2(c) and data2(c) >= min(고라인끝2,저라인끝2))
Then
Buy();
}
If (cnt = 0) and (cnt2 > 0 and cnt2 < (레벨 + 1) * 20) Then
{
고라인끝2 = 고라인끝2 + 고라인기울기2;
저라인끝2 = 저라인끝2 + 저라인기울기2;
If (CrossDown(data1(C), Min(고라인끝,저라인끝)) and max(고라인끝2,저라인끝2) >= data2(c) and data2(c) >= min(고라인끝2,저라인끝2))
Then
Sell();
}
If (cnt > 0) and (cnt < (레벨 + 1) * 20) and (cnt2 = 0) Then
{
고라인끝 = 고라인끝 + 고라인기울기;
저라인끝 = 저라인끝 + 저라인기울기;
If (max(고라인끝,저라인끝) >= data1(C)) and (data1(c) >= min(고라인끝,저라인끝)) and (CrossDown(data2(C), max(고라인끝2, 저라인끝2)))
Then
Sell();
}
}
If (cnt = 0) and (cnt2 = 0) Then {
If (CrossUp(data1(C), Min(고라인끝,저라인끝)) and max(고라인끝2,저라인끝2) >= data2(c) and data2(c) >= min(고라인끝2,저라인끝2))
or (CrossUp(data2(C), Min(고라인끝2,저라인끝2)) and max(고라인끝,저라인끝) >= data1(c) and data1(c) >= min(고라인끝,저라인끝))
Then
Buy();
}
If (cnt > 0) and (cnt < (레벨 + 1) * 20) and (cnt2 > 0) and (cnt2 < (레벨 + 1) * 20) Then {
고라인끝 = 고라인끝 + 고라인기울기;
저라인끝 = 저라인끝 + 저라인기울기;
고라인끝2 = 고라인끝2 + 고라인기울기2;
저라인끝2 = 저라인끝2 + 저라인기울기2;
If (CrossDown(data1(C), Max(고라인끝,저라인끝)) and max(고라인끝2,저라인끝2) >= data2(c) and data2(c) >= min(고라인끝2,저라인끝2))
or (CrossDown(data2(C), Max(고라인끝2,저라인끝2)) and max(고라인끝,저라인끝) >= data1(c) and data1(c) >= min(고라인끝,저라인끝))
Then
Sell();
}
SetStopProfittarget(PriceScale*익절틱수,PointStop);
SetStopLoss(PriceScale*손절틱수,PointStop);