커뮤니티

진입 계약수와 스탑, 익절후 스탑 올리기.

프로필 이미지
차티스트박찬호
2020-12-14 17:00:47
1333
글번호 144671
답변완료
var : ma1(0), ma2(0), stop(0); ma1=ma(c,5); ma2=ma(c,20); stop = Lowest(L[1],5); if CrossUp(ma1,ma2) Then Buy(); 일단은 제가 표현하고 싶은 것을 차례로 써보겠습니다. 1. 5이평선이 20이평선을 골든크로스 하면 다음 봉 시가에서 3계약 매수하라. 2. 스탑로스는 Lowest(L[1],5)에 설정하라. 3. 10틱이 오르면 1계약을 청산하고 2계약에 대해서 스탑로스를 매수가로 올려라. 4. 매수가대비 20틱이 오르면 1계약을 더 청산하고, 남은 1계약의 스탑을 매수가+5틱 으로 올려라. 5. 매수가대비 30틱이 오르면 남아있는 1계약을 청산하라. 모든 주문은 시장가 주문으로 부탁드립니다. 또한 1차 목표틱수, 2차목표틱수, 3차목표틱수를 Input 변수로 지정하여 최적화시 이용할 수 있게 해주셨으면 합나디.
시스템
답변 3
프로필 이미지

예스스탁 예스스탁 답변

2020-12-15 11:29:30

안녕하세요 예스스탁입니다. 수식은 신호발생조건만 지정이 가능합니다. 신호발생시 실제 주문가격을 시스템 트레이딩 설정창에서 지정하셔야 합니다. 설정창에서 매매가격을 진입과 청산 모두 시장가로 지정하시면 됩니다. input : 목표틱1(10),목표틱2(20),목표틱3(30); var : ma1(0), ma2(0), stop(0); ma1=ma(c,5); ma2=ma(c,20); stop = Lowest(L[1],5); if MarketPosition == 0 and CrossUp(ma1,ma2) Then Buy("b",AtMarket,DEf,3); if MarketPosition == 1 Then { if CurrentContracts == 3 Then ExitLong("bl3",AtStop,Lowest(L,5)[BarsSinceEntry]); if CurrentContracts == 2 Then ExitLong("bl2",AtStop,EntryPrice); if CurrentContracts == 1 Then ExitLong("bl1",AtStop,EntryPrice+PriceScale*5); ExitLong("Bp1",AtLimit,EntryPrice+PriceScale*목표틱1,"",1,1); ExitLong("Bp2",AtLimit,EntryPrice+PriceScale*목표틱2,"",1,1); ExitLong("Bp3",AtLimit,EntryPrice+PriceScale*목표틱3); } 즐거운 하루되세요 > 차티스트박찬호 님이 쓴 글입니다. > 제목 : 진입 계약수와 스탑, 익절후 스탑 올리기. > var : ma1(0), ma2(0), stop(0); ma1=ma(c,5); ma2=ma(c,20); stop = Lowest(L[1],5); if CrossUp(ma1,ma2) Then Buy(); 일단은 제가 표현하고 싶은 것을 차례로 써보겠습니다. 1. 5이평선이 20이평선을 골든크로스 하면 다음 봉 시가에서 3계약 매수하라. 2. 스탑로스는 Lowest(L[1],5)에 설정하라. 3. 10틱이 오르면 1계약을 청산하고 2계약에 대해서 스탑로스를 매수가로 올려라. 4. 매수가대비 20틱이 오르면 1계약을 더 청산하고, 남은 1계약의 스탑을 매수가+5틱 으로 올려라. 5. 매수가대비 30틱이 오르면 남아있는 1계약을 청산하라. 모든 주문은 시장가 주문으로 부탁드립니다. 또한 1차 목표틱수, 2차목표틱수, 3차목표틱수를 Input 변수로 지정하여 최적화시 이용할 수 있게 해주셨으면 합나디.
프로필 이미지

차티스트박찬호

2020-12-15 13:54:35

input : 목표틱1(10),목표틱2(20),목표틱3(30); var : ma1(0), ma2(0), stop(0); ma1=ma(c,5); ma2=ma(c,20); stop = Lowest(L[1],5); if MarketPosition == 0 and CrossUp(ma1,ma2) Then Buy("b",AtMarket,DEf,3); if MarketPosition == 1 Then { if CurrentContracts == 3 Then ExitLong("bl3",AtStop,Lowest(L,5)[BarsSinceEntry]); if CurrentContracts == 2 Then ExitLong("bl2",AtStop,EntryPrice); if CurrentContracts == 1 Then ExitLong("bl1",AtStop,EntryPrice+PriceScale*5); ExitLong("Bp1",AtLimit,EntryPrice+PriceScale*목표틱1,"",1,1); ExitLong("Bp2",AtLimit,EntryPrice+PriceScale*목표틱2,"",1,1); ExitLong("Bp3",AtLimit,EntryPrice+PriceScale*목표틱3); } 답변해 주신 내용 감사합니다. 간단한 질문 하나만 더 하겠습니다. ExitLong("Bp1",AtLimit,EntryPrice+PriceScale*목표틱1,"",1,1); ExitLong("Bp2",AtLimit,EntryPrice+PriceScale*목표틱2,"",1,1); ExitLong("Bp3",AtLimit,EntryPrice+PriceScale*목표틱3); 이 함수들에서 ExitLong 안에 들어가는 값들이 각각 무엇인지, 특히 첫번째와 두번째는 마지막에 "",1,1 을 쓰시고 마지막에는 안쓰셨는데 그 이유를 알고싶습니다.
프로필 이미지

예스스탁 예스스탁 답변

2020-12-15 16:32:55

안녕하세요 예스스탁입니다. #진입가 대비 목표틱1(10틱) 상승하면 즉시 전체수량 중 1게약 청산 ExitLong("Bp1",AtLimit,EntryPrice+PriceScale*목표틱1,"",1,1); #진입가 대비 목표2(20틱) 상승하면 즉시 전체수량 중 1게약 청산 ExitLong("Bp2",AtLimit,EntryPrice+PriceScale*목표틱2,"",1,1); #진입가 대비 목표틱3(30틱) 상승하면 즉시 보유수량(나머지수량) 전량 청산 ExitLong("Bp3",AtLimit,EntryPrice+PriceScale*목표틱3); 청산식 내용은 위와 같습니다. 청산함수의 마지막 2개의 매개변수는 수량과 수량옵션입니다. 현재남은 수량에서 지정한 수량만 청산한다는 의미입니다. 마지막 청산(Bp3)은 1개만 남은 상황이므로 별도로 수량을 지정하지 않았습니다. 청산함수의 각 매개변수는 아래와 같습니다. ExitLong("명칭",신호타입,신호가격,"진입명",수량,수량옵션); "명칭" 신호명칭, 하나의 전략에서 동일한 명칭으로 중복사용 불가 신호타입 생략 가능, 기본값은 OnClose - OnClose : 기준 Bar 종가에 주문 - Atmarket : 다음 Bar 시가에 주문 - AtLimit : 매수 포지션 주문(Buy, ExitShort)인 경우에는 지정한 신호가격 이하의 시세발생 시 매도 포지션 주문(Sell, ExitLong)인 경우에는 지정한 신호가격 이상의 시세발생 시 주문이 발생. - AtStop : 매수 포지션 주문(Buy, ExitShort)인 경우에는 지정한 신호가격 이상의 시세발생 시 매도 포지션 주문(Sell, ExitLong)인 경우에는 지정한 신호가격 이하의 시세발생 시 주문이 발생. 신호가격 AtLimit, AtStop일 때 신호가격 지정. OnClose, AtMarket의 경우는 필요하지 않으며 수량을 적용할 경우 DEF로 입력하면 된다. "진입명" 진입명을 지정하면 해당진입이 있을 경우에만 발동한다. 진입명을 지정하지 않을 경우 " "로 표시하면 된다. 수량 주문수량 지정 여기에 주문 수량을 설정하면 트레이딩 설정창의 주문수량은 적용되지 않는다. 수량옵션 청산 시 청산 수량의 옵션 해당옵션을 생략할 경우 옵션의 적용은 0으로 한다. 0 : 현재 진입되어 있는 모든 진입 신호에서 일괄적으로 청산 수량 만큼 청산하게 된다 1 : 현재 진입되어 있는 진입 수량의 총합에서 정의된 청산수량만 청산하게 된다. 2 : 청산함수를 1개의 진입신호 당 여러 번 수행하도록 한다. (청산함수는 기본적으로 1개의 진입신호에 대해 한번씩만 발생한다. 그러므로 1개의 진입에 대해 여러 번 청산신호를 발생하게 해서 분할로 청산할 경우 분할되는 수 만큼 청산함수가 필요하게 된다. 옵션을 2로 하게 되면 하나의 청산 으로 동일조건으로 여러 번 청산을 수행하도록 식을 구현할 수가 있다) 즐거운 하루되세요 > 차티스트박찬호 님이 쓴 글입니다. > 제목 : Re : Re : 진입 계약수와 스탑, 익절후 스탑 올리기. > input : 목표틱1(10),목표틱2(20),목표틱3(30); var : ma1(0), ma2(0), stop(0); ma1=ma(c,5); ma2=ma(c,20); stop = Lowest(L[1],5); if MarketPosition == 0 and CrossUp(ma1,ma2) Then Buy("b",AtMarket,DEf,3); if MarketPosition == 1 Then { if CurrentContracts == 3 Then ExitLong("bl3",AtStop,Lowest(L,5)[BarsSinceEntry]); if CurrentContracts == 2 Then ExitLong("bl2",AtStop,EntryPrice); if CurrentContracts == 1 Then ExitLong("bl1",AtStop,EntryPrice+PriceScale*5); ExitLong("Bp1",AtLimit,EntryPrice+PriceScale*목표틱1,"",1,1); ExitLong("Bp2",AtLimit,EntryPrice+PriceScale*목표틱2,"",1,1); ExitLong("Bp3",AtLimit,EntryPrice+PriceScale*목표틱3); } 답변해 주신 내용 감사합니다. 간단한 질문 하나만 더 하겠습니다. ExitLong("Bp1",AtLimit,EntryPrice+PriceScale*목표틱1,"",1,1); ExitLong("Bp2",AtLimit,EntryPrice+PriceScale*목표틱2,"",1,1); ExitLong("Bp3",AtLimit,EntryPrice+PriceScale*목표틱3); 이 함수들에서 ExitLong 안에 들어가는 값들이 각각 무엇인지, 특히 첫번째와 두번째는 마지막에 "",1,1 을 쓰시고 마지막에는 안쓰셨는데 그 이유를 알고싶습니다.