커뮤니티

미장 시작 후 시스템 작동

프로필 이미지
이만스닥
2021-12-27 17:50:47
609
글번호 154906
답변완료
안녕하세요 아래와 같은 시스템을 만들고 싶은데 도움 부탁드립니다. 1. 미장 시작후 딱 30분만 매도 또는 매수 시그널 작동. (청산은 상관 없음) 1-a. 30분은 변수로 바꿀 수 있었으면 좋겠습니다.(ex. 240이면 미장 시작후 4시간만 작동) 1-b. 매도/매수 청산 시그널은 1-a의 시간 이후에 떠도 괜찮습니다. 1-c. 미장 종료 30분 전까지 포지션이 있다면 강제 청산 1-d. 1-c의 '30분'을 변수로 설정할 수 있도록 부탁드립니다. 2. If marketposition == 1 && X then Buy("물타기") 이렇게 해서 물타기를 하고 싶은데요 이떄 청산 관련해서 도움 부탁드립니다. 2-a. 물타기는 총 4번까지만 들어가게 부탁드립니다. 2-b. 2-a의 '4번'을 변수로 변경 가능하게 부탁드립니다 2-c. 물타기 1, 물타기 2, 물타기 3, 물타기 4 이런식으로 진입명을 각각 다르게하면, 각각 다르게 청산을 할 수 있나요? (ex. 4계약 까지 물타기 했을때 각 계약마다 다르게 트레일링스탑 & 손절라인 적용)
시스템
답변 2
프로필 이미지

예스스탁 예스스탁 답변

2021-12-28 15:05:59

안녕하세요 예스스탁입니다. 1 미장시작시간이 해외선물의 영엽일 변경기준이면 1-1번식을 사용하시면 되고 해외선물에서 미국주식장 시작시간을 기준으로 하시면 1-2번식을 사용하시면 됩니다. 1-1 input : 진입제한(30),청산(30); var : S1(0),D1(0),TM(0),Tcond(false),T1(0); if bdate != bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; if TM > 0 and (TM >= 1380-청산 and TM[1] < 1380-청산) Then { Tcond = False; if MarketPosition == 1 Then ExitLong(); if MarketPosition == -1 Then ExitShort(); } if Bdate != Bdate[1] Then { Tcond = true; T1 = TM; } if Tcond == true Then { if 매수진입조건 Then { if TM < T1+진입제한 Then Buy(); Else ExitLong(); } if 매도진입조건 Then { if TM < T1+진입제한 Then Sell(); Else ExitShort(); } } } 1-2 input : 진입제한(30),청산(30); var : Year(0),V1(0),V2(0),V3(0),V4(0),summer(False); var : ST(0),ET(0),Tcond(false),S1(0),D1(0),TM(0),T1(0); if bdate != bdate[1] Then { Year = Floor(bdate/10000); V1 = (10000 * Year) + (100 * 3) + 1; V2 = 15 - dayofweek(v1); v3 = (10000 * Year) + (100 * 11) + 1; v4 = 8 - dayofweek(v3); Summer = bdate > (10000 * Year) + (100 * 3) + v2 And bdate < (10000 * Year) + (100 * 11) + v4; if summer == true Then { ST = 223000; ET = 050000; } Else { ST = 233000; ET = 060000; } S1 = TimeToMinutes(stime); D1 = sdate; } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; if TM > 0 and (TM >= 1380-청산 and TM[1] < 1380-청산) Then { Tcond = False; if MarketPosition == 1 Then ExitLong(); if MarketPosition == -1 Then ExitShort(); } if (sdate != sdate[1] and stime >= ST) or (sdate == sdate[1] and stime >= ST and stime[1] < ST) Then { Tcond = true; T1 = TM; } if Tcond == true Then { if 매수진입조건 Then { if TM < T1+진입제한 Then Buy(); Else ExitLong(); } if 매도진입조건 Then { if TM < T1+진입제한 Then Sell(); Else ExitShort(); } } } 2 input: 추가진입횟수(4); If marketposition == 1 && MaxEntries <= 추가진입횟수+1 and X then Buy("물타기") 단지 추가진입을 4번까지(최초진입포함 5번) 하시면 위와 같습니다. 다만 물타기별로 따로 청산을 하기 위해서는 진입명을 별도로 지정해야 하므로 위와 같이 외벼변수로 횟수 조절이 가능하지 않습니다. 아래와 같이 진입횟수별로 별도로 모두 작성하신 후에 각각 진입에 대응하는 내용을 추가하셔야 합니다. 아래 내용 참고하셔서 응용하시기 바랍니다. var : H1(0),H2(0),H3(0),H4(0); var : E1(0),E2(0),E3(0),E4(0); If marketposition == 1 Then { if MaxEntries == 1 and X then Buy("물타기1"); If MaxEntries == 2 and X then Buy("물타기2"); If MaxEntries == 3 and X then Buy("물타기3"); If MaxEntries == 1 and X then Buy("물타기4"); #물타기1 청산 if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "물타기1" Then { Condition1 = true; H1 = H; E1 = LatestEntryPrice(0); } if Condition1 == true then { if H > H1 then H1 = H; ExitLong("bl1",AtStop,E1-PriceScale*10,"물타기1"); ExitLong("btr1",AtStop,H1-PriceScale*10,"물타기1"); } #물타기2 청산 if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "물타기2" Then { Condition2 = true; H2 = H; E2 = LatestEntryPrice(0); } if Condition2 == true then { if H > H2 then H2 = H; ExitLong("bl2",AtStop,E2-PriceScale*20,"물타기2"); ExitLong("btr2",AtStop,H2-PriceScale*20,"물타기2"); } #물타기3 청산 if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "물타기3" Then { Condition3 = true; H3 = H; E3 = LatestEntryPrice(0); } if Condition3 == true then { if H > H3 then H3 = H; ExitLong("bl3",AtStop,E3-PriceScale*30,"물타기3"); ExitLong("btr3",AtStop,H3-PriceScale*30,"물타기3"); } #물타기4 청산 if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "물타기4" Then { Condition4 = true; H4 = H; E4 = LatestEntryPrice(0); } if Condition4 == true then { if H > H4 then H4 = H; ExitLong("bl4",AtStop,E1-PriceScale*40,"물타기4"); ExitLong("btr4",AtStop,H1-PriceScale*40,"물타기4"); } } Else { Condition1 = False; Condition2 = False; Condition3 = False; Condition4 = False; } 새해 복 많이 받으세요 > 이만스닥 님이 쓴 글입니다. > 제목 : 미장 시작 후 시스템 작동 > 안녕하세요 아래와 같은 시스템을 만들고 싶은데 도움 부탁드립니다. 1. 미장 시작후 딱 30분만 매도 또는 매수 시그널 작동. (청산은 상관 없음) 1-a. 30분은 변수로 바꿀 수 있었으면 좋겠습니다.(ex. 240이면 미장 시작후 4시간만 작동) 1-b. 매도/매수 청산 시그널은 1-a의 시간 이후에 떠도 괜찮습니다. 1-c. 미장 종료 30분 전까지 포지션이 있다면 강제 청산 1-d. 1-c의 '30분'을 변수로 설정할 수 있도록 부탁드립니다. 2. If marketposition == 1 && X then Buy("물타기") 이렇게 해서 물타기를 하고 싶은데요 이떄 청산 관련해서 도움 부탁드립니다. 2-a. 물타기는 총 4번까지만 들어가게 부탁드립니다. 2-b. 2-a의 '4번'을 변수로 변경 가능하게 부탁드립니다 2-c. 물타기 1, 물타기 2, 물타기 3, 물타기 4 이런식으로 진입명을 각각 다르게하면, 각각 다르게 청산을 할 수 있나요? (ex. 4계약 까지 물타기 했을때 각 계약마다 다르게 트레일링스탑 & 손절라인 적용)
프로필 이미지

이만스닥

2021-12-28 14:32:46

너무나도 감사드립니다. 항상 건강하세요! > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 미장 시작 후 시스템 작동 > 안녕하세요 예스스탁입니다. 1 미장시작시간이 해외선물의 영엽일 변경기준이면 1-1번식을 사용하시면 되고 해외선물에서 미국주식장 시작시간을 기준으로 하시면 1-2번식을 사용하시면 됩니다. 1-1 input : 진입제한(30),청산(30); var : S1(0),D1(0),TM(0),Tcond(false),T1(0); if bdate != bdate[1] Then { S1 = TimeToMinutes(stime); D1 = sdate; } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; if TM > 0 and (TM >= 1380-청산 and TM[1] < 1380-청산) Then { Tcond = False; if MarketPosition == 1 Then ExitLong(); if MarketPosition == -1 Then ExitShort(); } if Bdate != Bdate[1] Then { Tcond = true; T1 = TM; } if Tcond == true Then { if 매수진입조건 Then { if TM < T1+진입제한 Then Buy(); Else ExitLong(); } if 매도진입조건 Then { if TM < T1+진입제한 Then Sell(); Else ExitShort(); } } } 1-2 input : 진입제한(30),청산(30); var : Year(0),V1(0),V2(0),V3(0),V4(0),summer(False); var : ST(0),ET(0),Tcond(false),S1(0),D1(0),TM(0),T1(0); if bdate != bdate[1] Then { Year = Floor(bdate/10000); V1 = (10000 * Year) + (100 * 3) + 1; V2 = 15 - dayofweek(v1); v3 = (10000 * Year) + (100 * 11) + 1; v4 = 8 - dayofweek(v3); Summer = bdate > (10000 * Year) + (100 * 3) + v2 And bdate < (10000 * Year) + (100 * 11) + v4; if summer == true Then { ST = 223000; ET = 050000; } Else { ST = 233000; ET = 060000; } S1 = TimeToMinutes(stime); D1 = sdate; } if D1 > 0 then { if sdate == D1 Then TM = TimeToMinutes(stime)-S1; Else TM = TimeToMinutes(stime)+1440-S1; if TM > 0 and (TM >= 1380-청산 and TM[1] < 1380-청산) Then { Tcond = False; if MarketPosition == 1 Then ExitLong(); if MarketPosition == -1 Then ExitShort(); } if (sdate != sdate[1] and stime >= ST) or (sdate == sdate[1] and stime >= ST and stime[1] < ST) Then { Tcond = true; T1 = TM; } if Tcond == true Then { if 매수진입조건 Then { if TM < T1+진입제한 Then Buy(); Else ExitLong(); } if 매도진입조건 Then { if TM < T1+진입제한 Then Sell(); Else ExitShort(); } } } 2 input: 추가진입횟수(4); If marketposition == 1 && MaxEntries <= 추가진입횟수+1 and X then Buy("물타기") 단지 추가진입을 4번까지(최초진입포함 5번) 하시면 위와 같습니다. 다만 물타기별로 따로 청산을 하기 위해서는 진입명을 별도로 지정해야 하므로 위와 같이 외벼변수로 횟수 조절이 가능하지 않습니다. 아래와 같이 진입횟수별로 별도로 모두 작성하신 후에 각각 진입에 대응하는 내용을 추가하셔야 합니다. 아래 내용 참고하셔서 응용하시기 바랍니다. var : H1(0),H2(0),H3(0),H4(0); var : E1(0),E2(0),E3(0),E4(0); If marketposition == 1 Then { if MaxEntries == 1 and X then Buy("물타기1"); If MaxEntries == 2 and X then Buy("물타기2"); If MaxEntries == 3 and X then Buy("물타기3"); If MaxEntries == 1 and X then Buy("물타기4"); #물타기1 청산 if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "물타기1" Then { Condition1 = true; H1 = H; E1 = LatestEntryPrice(0); } if Condition1 == true then { if H > H1 then H1 = H; ExitLong("bl1",AtStop,E1-PriceScale*10,"물타기1"); ExitLong("btr1",AtStop,H1-PriceScale*10,"물타기1"); } #물타기2 청산 if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "물타기2" Then { Condition2 = true; H2 = H; E2 = LatestEntryPrice(0); } if Condition2 == true then { if H > H2 then H2 = H; ExitLong("bl2",AtStop,E2-PriceScale*20,"물타기2"); ExitLong("btr2",AtStop,H2-PriceScale*20,"물타기2"); } #물타기3 청산 if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "물타기3" Then { Condition3 = true; H3 = H; E3 = LatestEntryPrice(0); } if Condition3 == true then { if H > H3 then H3 = H; ExitLong("bl3",AtStop,E3-PriceScale*30,"물타기3"); ExitLong("btr3",AtStop,H3-PriceScale*30,"물타기3"); } #물타기4 청산 if CurrentContracts > CurrentContracts[1] and LatestEntryName(0) == "물타기4" Then { Condition4 = true; H4 = H; E4 = LatestEntryPrice(0); } if Condition4 == true then { if H > H4 then H4 = H; ExitLong("bl4",AtStop,E1-PriceScale*40,"물타기4"); ExitLong("btr4",AtStop,H1-PriceScale*40,"물타기4"); } } Else { Condition1 = False; Condition2 = False; Condition3 = False; Condition4 = False; } 즐거운 하루되세요 > 이만스닥 님이 쓴 글입니다. > 제목 : 미장 시작 후 시스템 작동 > 안녕하세요 아래와 같은 시스템을 만들고 싶은데 도움 부탁드립니다. 1. 미장 시작후 딱 30분만 매도 또는 매수 시그널 작동. (청산은 상관 없음) 1-a. 30분은 변수로 바꿀 수 있었으면 좋겠습니다.(ex. 240이면 미장 시작후 4시간만 작동) 1-b. 매도/매수 청산 시그널은 1-a의 시간 이후에 떠도 괜찮습니다. 1-c. 미장 종료 30분 전까지 포지션이 있다면 강제 청산 1-d. 1-c의 '30분'을 변수로 설정할 수 있도록 부탁드립니다. 2. If marketposition == 1 && X then Buy("물타기") 이렇게 해서 물타기를 하고 싶은데요 이떄 청산 관련해서 도움 부탁드립니다. 2-a. 물타기는 총 4번까지만 들어가게 부탁드립니다. 2-b. 2-a의 '4번'을 변수로 변경 가능하게 부탁드립니다 2-c. 물타기 1, 물타기 2, 물타기 3, 물타기 4 이런식으로 진입명을 각각 다르게하면, 각각 다르게 청산을 할 수 있나요? (ex. 4계약 까지 물타기 했을때 각 계약마다 다르게 트레일링스탑 & 손절라인 적용)