커뮤니티

시스템식 부탁드립니다.

프로필 이미지
양치기
2023-03-05 11:23:16
891
글번호 166927
답변완료
항상 도움 주셔서 감사합니다. 아래와 같은 시스템식을 작성하였습니다. 종목 : 해외선물 도움요청1 : 가령 가격이 계속 하락하여 매수로 3계약이 들어갔을 경우 가격이 다시 상승하면 맨 마지막 진입부터 청산이 되어야 하는데 처음 들어간 계약부터 청산 되고, 마지막 3번째 들어간 매수는 가장 높은곳에서 청산 됩니다. 저는 가격이 다시 상승할 경우 마지막 매수진입분터 제일 먼저 청산하고 처음들어간 매수포지션은 맨 마지막에 청산하고 싶습니다 아래 시스템 수식 수정 부탁드립니다. 도움요청2 : 당일 청산 순수익과 현재 포지션 손익의 합이 20틱 이상 수익인 경우 새벽 6시에 체크하여 잔고 모두 청산하도록 시스템식 수정 부탁드립니다. 도움요청3 : 매수든 매도든 포지션 처음 진입이후 포지션 청산 순수익과 현재 포지션 손익의 합이 20틱 이상 수익인 경우 잔고 모두 청산하도록 시스템식 수정 부탁드립니다. 도움요청4 : 포지션이 있는 경우 가격이 특정값보도 높게 상승하거나 특정값보다 낮게 하락하는 경우 모든 포지션 청산(손절)하도록 시스템식 수정부탁드립니다. #---------------------------------------------------------------- #-------------------------------- # 매수 #-------------------------------- var : x(0); var1 = PriceScale*매수진입폭; if MarketPosition == 0 and L > DayOpen-var1 Then Buy("B",AtLimit,DayOpen-var1,1); if MarketPosition == 1 Then { Buy("B2",AtLimit,DayOpen-var1*(MaxEntries+1),1); if CurrentContracts > CurrentContracts[1] Then Var2 = AvgEntryPrice; if CurrentContracts < CurrentContracts[1] Then x = x+1; ExitLong("BX",AtLimit,Var2+var1*(x+1),"",1,2); } Else x = 0; #-------------------------------- # 매도 #-------------------------------- var : xx(0); var3 = PriceScale*매도진입폭; if MarketPosition == 0 and H < DayOpen+var3 Then Sell("S",AtLimit,DayOpen+var3,1); if MarketPosition == -1 Then { Sell("S2",AtLimit,DayOpen+var3*(MaxEntries+1),1); if CurrentContracts > CurrentContracts[1] Then Var4 = AvgEntryPrice; if CurrentContracts < CurrentContracts[1] Then xx = xx+1; ExitShort("SX",AtLimit,Var4-var3*(xx+1),"",1,2); } Else xx = 0; #---------------------------------------------------------------- 감사합니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2023-03-06 15:09:08

안녕하세요 예스스탁입니다. 1 시스템은 청산신호에 이름을 지정하지 않으면 먼저 발생한 진입신호가 먼저 청산을 하게 됩니다. 자동으로 최근부터 청산하게 할 방법은 없습니다. 또한 위 내용은 앞에서 순서대로 청산하는것과 최근부터 청산하는 내용이 단지 차트 신호상 진입청산 짝을 맞추는 부분입니다. 실제 계좌에서 위 내용으로 청산을 하는 것이 아니며 차트신호상 손익도 위 2가지는 결과가 같습니다. 아래 2개의식을 차트에 적용해 보시기 바랍니다. A식은 첫진입부터 청산되고 B식은 청산함수에 이름을 지정해 마지막진입부터 청산하게 한 식입니다. 2식 모두 총손익은 같습니다. A식 if sDate == 20230306 Then { if DayIndex == 0 Then Buy("b1"); if DayIndex == 5 Then Buy("b2"); if DayIndex == 10 Then Buy("b3"); if DayIndex == 15 Then ExitLong("bx1",OnClose,Def,"",1,1); if DayIndex == 20 Then ExitLong("bx2",OnClose,Def,"",1,1); if DayIndex == 25 Then ExitLong("bx3",OnClose,Def,"",1,1); } B식 if sDate == 20230306 Then { if DayIndex == 0 Then Buy("b1"); if DayIndex == 5 Then Buy("b2"); if DayIndex == 10 Then Buy("b3"); if DayIndex == 15 Then ExitLong("bx1",OnClose,Def,"b3"); if DayIndex == 20 Then ExitLong("bx2",OnClose,Def,"b2"); if DayIndex == 25 Then ExitLong("bx3",OnClose,Def,"b1"); } 작성하신 수식이 동일이름으로 추가가 되고 몇번추가신호가 발생할 수 없습니다. 횟수등 지정하셔도 최대진입횟수별로 많이 나열되는 내용이라 저희가 시간상 작성해 드리지 않습니다. 해당 부분은 아래 내용 참고하셔서 직접 추가해 보셔야 합니다. 진입횟수별로 각각 이름을 달리 지정해 진입식을 만든 후 청산도 최대 2번진입한경우, 최대 3번진입한경우, 최대 4번진한경우와 같이 경우의 수 잡아서 모두 나열해 청산식 작성하셔야 합니다. 2,3,4 #---------------------------------------------------------------- #-------------------------------- # 매수 #-------------------------------- input : 수익틱수(20),특정상단값(360),특정하단값(340); var : x(0),NP1(0),daypl(0),수익(0); 수익 = PriceScale*20; if Bdate != Bdate[1] Then NP1 = NetProfit; daypl = NetProfit-NP1+PositionProfit; var1 = PriceScale*매수진입폭; if MarketPosition == 0 and L > DayOpen-var1 Then Buy("B",AtLimit,DayOpen-var1,1); if MarketPosition == 1 Then { Buy("B2",AtLimit,DayOpen-var1*(MaxEntries+1),1); if CurrentContracts > CurrentContracts[1] Then Var2 = AvgEntryPrice; if CurrentContracts < CurrentContracts[1] Then x = x+1; ExitLong("BX",AtLimit,Var2+var1*(x+1),"",1,2); Value2 = PriceScale*20; if sTime == 060000 and C >= EntryPrice+((수익-daypl)/CurrentContracts) Then ExitLong("bx2"); ExitLong("bx3",atlimit,EntryPrice+((수익-daypl)/CurrentContracts)); ExitLong("bx41",atlimit,특정상단값); ExitLong("bx42",AtStop,특정하단값); } Else x = 0; #-------------------------------- # 매도 #-------------------------------- var : xx(0); var3 = PriceScale*매도진입폭; if MarketPosition == 0 and H < DayOpen+var3 Then Sell("S",AtLimit,DayOpen+var3,1); if MarketPosition == -1 Then { Sell("S2",AtLimit,DayOpen+var3*(MaxEntries+1),1); if CurrentContracts > CurrentContracts[1] Then Var4 = AvgEntryPrice; if CurrentContracts < CurrentContracts[1] Then xx = xx+1; ExitShort("SX",AtLimit,Var4-var3*(xx+1),"",1,2); Value2 = PriceScale*20; if sTime == 060000 and C <= EntryPrice-((수익-daypl)/CurrentContracts) Then ExitShort("sx2"); ExitShort("sx3",AtLimit,EntryPrice-((수익-daypl)/CurrentContracts)); ExitShort("sx41",AtStop,특정상단값); ExitShort("sx42",AtLimit,특정하단값); } Else xx = 0; #---------------------------------------------------------------- 즐거운 하루되세요 > 양치기 님이 쓴 글입니다. > 제목 : 시스템식 부탁드립니다. > 항상 도움 주셔서 감사합니다. 아래와 같은 시스템식을 작성하였습니다. 종목 : 해외선물 도움요청1 : 가령 가격이 계속 하락하여 매수로 3계약이 들어갔을 경우 가격이 다시 상승하면 맨 마지막 진입부터 청산이 되어야 하는데 처음 들어간 계약부터 청산 되고, 마지막 3번째 들어간 매수는 가장 높은곳에서 청산 됩니다. 저는 가격이 다시 상승할 경우 마지막 매수진입분터 제일 먼저 청산하고 처음들어간 매수포지션은 맨 마지막에 청산하고 싶습니다 아래 시스템 수식 수정 부탁드립니다. 도움요청2 : 당일 청산 순수익과 현재 포지션 손익의 합이 20틱 이상 수익인 경우 새벽 6시에 체크하여 잔고 모두 청산하도록 시스템식 수정 부탁드립니다. 도움요청3 : 매수든 매도든 포지션 처음 진입이후 포지션 청산 순수익과 현재 포지션 손익의 합이 20틱 이상 수익인 경우 잔고 모두 청산하도록 시스템식 수정 부탁드립니다. 도움요청4 : 포지션이 있는 경우 가격이 특정값보도 높게 상승하거나 특정값보다 낮게 하락하는 경우 모든 포지션 청산(손절)하도록 시스템식 수정부탁드립니다. #---------------------------------------------------------------- #-------------------------------- # 매수 #-------------------------------- var : x(0); var1 = PriceScale*매수진입폭; if MarketPosition == 0 and L > DayOpen-var1 Then Buy("B",AtLimit,DayOpen-var1,1); if MarketPosition == 1 Then { Buy("B2",AtLimit,DayOpen-var1*(MaxEntries+1),1); if CurrentContracts > CurrentContracts[1] Then Var2 = AvgEntryPrice; if CurrentContracts < CurrentContracts[1] Then x = x+1; ExitLong("BX",AtLimit,Var2+var1*(x+1),"",1,2); } Else x = 0; #-------------------------------- # 매도 #-------------------------------- var : xx(0); var3 = PriceScale*매도진입폭; if MarketPosition == 0 and H < DayOpen+var3 Then Sell("S",AtLimit,DayOpen+var3,1); if MarketPosition == -1 Then { Sell("S2",AtLimit,DayOpen+var3*(MaxEntries+1),1); if CurrentContracts > CurrentContracts[1] Then Var4 = AvgEntryPrice; if CurrentContracts < CurrentContracts[1] Then xx = xx+1; ExitShort("SX",AtLimit,Var4-var3*(xx+1),"",1,2); } Else xx = 0; #---------------------------------------------------------------- 감사합니다.