커뮤니티

수식 작성 부탁드립니다.

프로필 이미지
duke
2015-12-10 03:51:13
124
글번호 93258
답변완료
선물 거래 시 아래의 조건일 경우 수식작성 부탁드립니다. * 진입가격 - 1차 : 20 이평 돌파/붕괴 후 해당 봉의 고점/저점 위/아래 3틱 (매매금액의 50%) - 2차 : 1차 진입 해당 봉의 고점/저점 위/아래 3틱 (나머지 50%) * 손절가격 - 1차 진입 후 : 매매금액의 3% 가격 - 2차 진입 후 : 1차포함 매매금액의 3% 가격 - 2차 진입 봉의 고점 돌파 시 : 본전가격으로 조정 * 청산가격 - 1차 : 5 이평 붕괴/돌파 후 해당 봉의 저점/고점 아래/위 3틱 (진입금액의 50%) => 재진입 : 5 이평을 다시 돌파/붕괴 후 해당 봉의 고점/저점 위/아래 3틱 (청산된 금액) - 2차 : 20 이평 붕괴/돌파 후 해당 봉의 저점/고점 아래/위 3틱 (진입금액의 50%) ~ 1차 진입과 반대 # 당일15:00 청산 # 진입은 위/아래 방향 각 1번씩 (한 방향의 재진입은 2번까지만 하고, 2차 청산이 완료되면 해당 방향으로는 다시 진입하지 않도록 했으면 합니다.) # 진입은 가능하면 해당 지정가격에서 크게 벗어나지 않았으면 좋겠고 (굳이 체결되지 않으면 넘어가도록 하고, 손절이나 청산은 벗어나더라도 꼭 체결되도록 하고 싶습니다. 이리 저리 해보는데 아직까지 실력이 부족한 탓에 수식으로 정리가 안되고 누더기가 되어 답답한 마음에 도움을 청합니다. 나름 정리한다고 해봤는데 만약 설명이 부족한 부분이 있으면 말씀해 주시고 시스템 상으로 구현이 안되는 부분이 있으면 아울러 말씀해 주시기 바랍니다. 감사합니다.
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2015-12-10 16:11:40

안녕하세요 예스스탁입니다. 1 아래 수식내용이 맞을지 모르겠습니다. 아래 주석 참고하셔서 수정보완해 사용하시기 바랍니다. 선물의 경우 금액으로 수량을 수식으로 정확히 계산할수 없습니다. 지정한 금액의 50%를 종가*50마원*0.15를 1계약으로 해서 계산했습니다. 2 수식은 신호가 발생하면 시스템 트레이딩 설정창의 매매탭에서 지정한 가격으로 주문만 집행합니다. 체결여부를 수식에서 알수가 없어 체결과 관련된 부분은 컨트롤이 되지 않습니다. 3 input : 금액(50000000); var : T(0),HH(0),LL(0),Vol1(0),vol2(0),mav1(0),mav2(0); var : BT(0),cnt(0),Bcount(0),Scount(0),Revol(0); mav1 = ma(C,20); mav2 = ma(C,20); #당일 매수와 매도 진입횟수 Bcount = 0; Scount = 0; for cnt = 1 to 20{ if sdate == EntryDate(cnt) and MarketPosition(cnt) == 1 Then Bcount = Bcount+1; if sdate == EntryDate(cnt) and MarketPosition(cnt) == -1 Then Scount = Scount+1; } #종가가 20이평을 상향돌파하면 1, 고가저장 if crossup(c,mav2) Then{ T = 1; HH = H; } #종가가 20이평을 하향이탈하면 -1, 저가저장 if CrossDown(c,mav2) Then{ T = -1; LL = L; } #금액의 50%에 대한 수량 vol1 = (금액*0.5)/(C*BigPointValue*0.15); vol2 = (금액*0.5)/(C*BigPointValue*0.15); #무포지션이고 당일 매수진입이 없었고 T는 1인 구간에서 if MarketPosition == 0 and Bcount == 0 and T == 1 Then #저장된 골드시 고가보다 3틱 상승하면 매수, 수량은 vol1 buy("b1",AtStop,HH+PriceScale*3,vol1); if MarketPosition == 1 Then{ #진입시점의 고가저장 if CurrentContracts > CurrentContracts[1] Then{ HH = H; } #첫진입후 첫진입봉의 고가보다 3틱 상승하면 매수, 수량은 vol2 #첫진입후 한번만 발생 if countif(LatestEntryName(0) =="b2",BarsSinceEntry) < 1 Then buy("b2",AtStop,HH+PriceScale*3,vol2); #첫진입후 손절 if MaxEntries == 1 Then exitlong("BL1",AtStop,(EntryPrice-((금액*0.5)*0.03)/PointValue)*PriceScale); #두번째 진입 후 손절 if MaxEntries == 2 Then{ #종가가 진입봉 고가보다 큰적이 있으면 true if C > HH Then Condition1 = true; #false일때 if Condition1 == false Then exitlong("BL2",AtStop,(EntryPrice-((금액)*0.03)/PointValue)*PriceScale); #true일때 if Condition1 == true Then exitlong("BL3",AtStop,AvgEntryPrice); } #진입후 첫 5이평 데드크로스가 발생 if BT == 0 and CrossDown(C,mav1) then{ BT = -1; var1 = H; } #5이평 데드이후 5이평 골드발생 if BT == -1 and CrossUp(C,mav1) then{ BT = 1; var1 = L; } #5이평 데드후 (진입수량의 50%) if BT == -1 Then exitlong("bx",AtStop,var1-PriceScale*3,"",(CurrentContracts*0.5),1); if LatestExitName(0) == "bx" and CurrentContracts < CurrentContracts[1] then Revol = CurrentContracts[1] - CurrentContracts; #5이평 골드후 골드봉 고가보다 3틱 상승하면 bx로 청산한 수량만큼 진입 if BT == -1 and countif(LatestEntryName(0) =="b3",BarsSinceEntry) < 1 Then buy("B3",AtStop,var1+PriceScale*3,Revol); } Else{#매수가 아니면 사용변수 초기화 Condition1 = false; BT = 0; } #무포지션이고 당일 매도진입이 없었고 T는 -1인 구간에서 if MarketPosition == 0 and Scount == 0 and T == -1 Then #저장된 데드시 저가보다 3틱 하락하면 매도, 수량은 vol1 sell("s1",AtStop,LL-PriceScale*3,vol1); if MarketPosition == -1 Then{ #진입시점의 저가저장 if CurrentContracts > CurrentContracts[1] Then{ LL = L; } #첫진입후 첫진입봉의 저가보다 3틱 하락하면 매도, 수량은 vol2 #첫진입후 한번만 발생 if countif(LatestEntryName(0) =="s2",BarsSinceEntry) < 1 Then sell("s2",AtStop,LL-PriceScale*3,vol2); #첫진입후 손절 if MaxEntries == 1 Then ExitShort("SL1",AtStop,(EntryPrice-((금액*0.5)*0.03)/PointValue)*PriceScale); #두번째 진입 후 손절 if MaxEntries == 2 Then{ #종가가 진입봉 저가보다 작은 봉이 발생하면 true if C < LL Then Condition2= true; #false일때 if Condition2 == false Then ExitShort("SL2",AtStop,(EntryPrice+((금액)*0.03)/PointValue)*PriceScale); #true일때 if Condition2 == true Then exitlong("SL3",AtStop,AvgEntryPrice); } #진입후 첫 5이평 골드크로스가 발생 if ST == 0 and CrossUp(C,mav1) then{ ST = 1; var2 = H; } #5이평 골드이후 5이평 데드발생 if ST == 1 and CrossDown(C,mav1) then{ ST = -1; var2 = L; } #5이평 데드후 (진입수량의 50%) if ST == 1 Then ExitShort("sx",AtStop,var2+PriceScale*3,"",(CurrentContracts*0.5),1); #최근 청산이 sx의 청산수량 저장 if LatestExitName(0) == "sx" and CurrentContracts < CurrentContracts[1] then Revol = CurrentContracts[1] - CurrentContracts; #5이평 데드후 골드봉 고가보다 3틱 상승하면 bx로 청산한 수량만큼 진입 if ST == -1 and countif(LatestEntryName(0) =="s3",BarsSinceEntry) < 1 Then Sell("S3",AtStop,var2-PriceScale*3,Revol); } Else{#매도 포지션이 아니면 사용변수 초기화 Condition2 = false; ST = 0; } SetStopEndofday(150000); 즐거운 하루되세요 > duke 님이 쓴 글입니다. > 제목 : 수식 작성 부탁드립니다. > 선물 거래 시 아래의 조건일 경우 수식작성 부탁드립니다. * 진입가격 - 1차 : 20 이평 돌파/붕괴 후 해당 봉의 고점/저점 위/아래 3틱 (매매금액의 50%) - 2차 : 1차 진입 해당 봉의 고점/저점 위/아래 3틱 (나머지 50%) * 손절가격 - 1차 진입 후 : 매매금액의 3% 가격 - 2차 진입 후 : 1차포함 매매금액의 3% 가격 - 2차 진입 봉의 고점 돌파 시 : 본전가격으로 조정 * 청산가격 - 1차 : 5 이평 붕괴/돌파 후 해당 봉의 저점/고점 아래/위 3틱 (진입금액의 50%) => 재진입 : 5 이평을 다시 돌파/붕괴 후 해당 봉의 고점/저점 위/아래 3틱 (청산된 금액) - 2차 : 20 이평 붕괴/돌파 후 해당 봉의 저점/고점 아래/위 3틱 (진입금액의 50%) ~ 1차 진입과 반대 # 당일15:00 청산 # 진입은 위/아래 방향 각 1번씩 (한 방향의 재진입은 2번까지만 하고, 2차 청산이 완료되면 해당 방향으로는 다시 진입하지 않도록 했으면 합니다.) # 진입은 가능하면 해당 지정가격에서 크게 벗어나지 않았으면 좋겠고 (굳이 체결되지 않으면 넘어가도록 하고, 손절이나 청산은 벗어나더라도 꼭 체결되도록 하고 싶습니다. 이리 저리 해보는데 아직까지 실력이 부족한 탓에 수식으로 정리가 안되고 누더기가 되어 답답한 마음에 도움을 청합니다. 나름 정리한다고 해봤는데 만약 설명이 부족한 부분이 있으면 말씀해 주시고 시스템 상으로 구현이 안되는 부분이 있으면 아울러 말씀해 주시기 바랍니다. 감사합니다.