예스스탁
예스스탁 답변
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 을 쓰시고 마지막에는 안쓰셨는데 그 이유를 알고싶습니다.