안녕하세요~
제가 매수 A라는 시스템 로직을 짰는데요 이게 처음 신호가 나왔을때 1계약 매수하고, 청산할때까지 추가 매수는 없었으면 좋겠는데 계속 추가 주문이 들어가는데 어떻게 해야할까요?
피라미딩 체크도 허용안함입니다.
예를들어 MACD가 우상향할때 매수해서 우하향할때 매도해라 라는 수식을 쓰면
IF
A=MACD(12,26,9)
A>A[1] THEN
Buy(s);
if MarketPosition == 1 Then
{
if A<A[1] Then
ExitLong();
}
이런 식으로 되어 있는데 현재 MACD가 우사향하고 다음봉도 우상향 3번째 봉도 우상향하면
2번째, 3번째 봉에서 계속 매수 신호가 나가나요?
#질문1.
그렇다면 최초 신호에 진입하고 매도할때까지 매수를 안하려면 어떻게 설정해야하나요?
#질문2.
현재 모의투자 계좌를 쓰고 있는데, A라는 매수요건에 해당해서 1계약이 체결 이후 매도 신호가 안나오는데 B라는 다른 차트에서 매수요건에 해당하여 1계약 추가 체결 이렇게 되면 제 계좌안에 2개의 매수 계약이 있는 상태라 평단가가 달라 지는데, 이게 싫다면 계좌를 여러개 개설해서 1계자당 1개의 시스템 매매만 돌리는 수밖에 없나요?
또한 이럴 경우 A의 청산로직이 발생하거나 B의 청산 로직이 A보다 먼저 발생할 경우 2계약 모두 매도가 나가게 하려면 어떤 수식을 사용해야 하나요? 그대로 두면 A의 청산 로직이 발생하면 1계약 매도 나가고, B가 발생하면 또 1계약 매도청산이 자동으로 되는게 맞죠~?
#질문3.
Buy(s); 와 Buy();의 차이가 무엇인가요?
var : d7mav(0,Data7) 여기서 선언할때 괄호안의 0은 왜 넣어주는 건가요? 아래처럼 변수를 쓰는데 선언 이렇게 하면 제대로 한건지요?
var : d1mav1(0,Data1),d1mav2(0,Data1),d1mav3(0,data1),d1mav4(0,data1),d1mav5(0,data1),d1atan(0,data1),d1macd(0,data1),d1stoK(0,data1),d1stoD(0,data1),d1CCI(0,data1);
var : d7mav(0,Data7),d7stoK(0,Data7),d7stoD(0,Data7);
d1mav1 = data1(ma(C,5));
d1mav2 = data1(ma(C,10));
d1mav3 = data1(ma(C,15));
d1mav4 = data1(ma(C,20));
d1mav5 = data1(ma(C,30));
d1atan = Atan((d1mav1 - d1mav1[1])/2);
d1macd = data1(macd(5,20));
d1stoK = data1(FastK(5));
d1stoD = data1(FastD(5,3));
d1CCI = CCI(9);
d7mav = data7(ma(C,5));
d7stoK = data7(FastK(5));
d7stoD = data7(FastD(5,3));
#질문4.
시뮬레이션차트는 장중에 작동이 안되나요?
#질문5.
수식이 오류가 나는데 질문입니다.
매도 청산 로직이 현재 이렇게 되어 있는데요
if MarketPosition == 1 Then
{
if (data1(H<C) and data1(C==O) and data1(C>C[1]) and data1(H-C) <= -0.3) Then
exitshort();
if (data1(C>C[1]) and d1CCI > d1CCI[1] and d1stok > d1stoD) Then
exitshort();
if (data2(C>C[1]) and d2stok > d2stok[1] and d1stok > d1stoD) Then
exitshort();
if (data14(H<C) and data14(C==O) and data14(C>C[1]) and data14(H-C) <= -0.3) Then
exitshort();
if (data14(C>C[1]) and d14CCI > d14CCI[1] and d14stok > d14stoD) Then
exitshort();
}
=================================================================================
위에 식을 괄호로 묶어서 OR로 연결하면 매도 신호가 안나가요? 오류가 뜨네요~
if MarketPosition == 1 Then
{
if ((data1(H<C) and data1(C==O) and data1(C>C[1]) and data1(H-C) <= -0.3) OR
(data1(C>C[1]) and d1CCI > d1CCI[1] and d1stok > d1stoD) OR
(data2(C>C[1]) and d2stok > d2stok[1] and d1stok > d1stoD OR
(data14(H<C) and data14(C==O) and data14(C>C[1]) and data14(H-C) <= -0.3) OR
(data14(C>C[1]) and d14CCI > d14CCI[1] and d14stok > d14stoD)) Then
exitshort();
}
질문6.
현재 하나의 시스템 랭귀지 안에 4개의 부분으로 나눠놨는데 매도 청산신호가 안나갑니다
1. 매수로직
2. 매수청산
3. 매도로직
4. 매도청산
이렇게 되어 있는데 4번만 발생이 안되는데 왜 그럴까요~?
답변 1
예스스탁
예스스탁 답변
2022-06-29 14:35:51
안녕하세요
예스스탁입니다.
1
차트에서 연속해서 매수신호가 발생하는지 확인하시기 바랍니다.
시스템은 기본설정이 1회진입 후 청산입니다.
설정창에서 피라미딩이 허용안함으로 되어 있으면
추가진입신호는 발생할 수 없습니다.
또한 자동매매는 신호가 발생하지 않으면 주문이 집행되지 않습니다.
2
시스템은 차트에서 신호가 뜨면 신호에서 지정한 수량으로 주문만 집행합니다.
다른 시스템의 내용을 알수 없고 실제 잔고의 평단가나 수량을 가져와 사용하지 않습니다.
각각 동작할 뿐이빈다.
2개시스템을 돌려 같은 계좌에 주문이 들어가
평단가등이 달라져 보시는데 혼동이 있으시면 계좌를 분리해서 운영하실수 밖에 없습니다.
실제계좌는 분리해서 보여주지 않습니다.
시스템에서 잔고전체 수량을 인지하지 못하므로
해당 내용을 청산하게 작성이 불가능합니다.
3
Buy(s); 와 Buy();
위 문의가 어떤 내용인 모르겠습니다.
신호의 이름을 지정한 부분이면 이름은 자유롭게 지정하시면 됩니다.
var : d7mav(0,Data7)
d7mav변수는 초기값은 0이고 data7기준으로 값을 저장하고 이전봉을 참조한다라는 뜻입니다.
4
시뮬레이션 차트는 과거일의 장기간 데이타를 조회해서 시뮬레이션해보는 차트입니다.
장중에 실시간 데이타를 받지 않으므로 장중에 동작하지 않습니다.
5
()괄호의 짝이 맞지 않습니다.
if MarketPosition == -1 Then
{
if (data1(H<C) and data1(C==O) and data1(C>C[1]) and data1(H-C) <= -0.3) or
(data1(C>C[1]) and d1CCI > d1CCI[1] and d1stok > d1stoD) or
(data2(C>C[1]) and d2stok > d2stok[1] and d1stok > d1stoD) or
(data14(H<C) and data14(C==O) and data14(C>C[1]) and data14(H-C) <= -0.3) or
(data14(C>C[1]) and d14CCI > d14CCI[1] and d14stok > d14stoD) Then
exitshort();
}
6
위 5번 문의 보시면 MarketPosition == 1은 현재 매수포지션 진입상태인데
청산은 매도포지션 청산으로 작성이 되어 있습니다.
매도청산식이므로 MarketPosition == -1로 지정이 되어 있어야 합니다.
즐거운 하루되세요
> 분당고래 님이 쓴 글입니다.
> 제목 : 매수 주문에 관한 질문
> 안녕하세요~
제가 매수 A라는 시스템 로직을 짰는데요 이게 처음 신호가 나왔을때 1계약 매수하고, 청산할때까지 추가 매수는 없었으면 좋겠는데 계속 추가 주문이 들어가는데 어떻게 해야할까요?
피라미딩 체크도 허용안함입니다.
예를들어 MACD가 우상향할때 매수해서 우하향할때 매도해라 라는 수식을 쓰면
IF
A=MACD(12,26,9)
A>A[1] THEN
Buy(s);
if MarketPosition == 1 Then
{
if A<A[1] Then
ExitLong();
}
이런 식으로 되어 있는데 현재 MACD가 우사향하고 다음봉도 우상향 3번째 봉도 우상향하면
2번째, 3번째 봉에서 계속 매수 신호가 나가나요?
#질문1.
그렇다면 최초 신호에 진입하고 매도할때까지 매수를 안하려면 어떻게 설정해야하나요?
#질문2.
현재 모의투자 계좌를 쓰고 있는데, A라는 매수요건에 해당해서 1계약이 체결 이후 매도 신호가 안나오는데 B라는 다른 차트에서 매수요건에 해당하여 1계약 추가 체결 이렇게 되면 제 계좌안에 2개의 매수 계약이 있는 상태라 평단가가 달라 지는데, 이게 싫다면 계좌를 여러개 개설해서 1계자당 1개의 시스템 매매만 돌리는 수밖에 없나요?
또한 이럴 경우 A의 청산로직이 발생하거나 B의 청산 로직이 A보다 먼저 발생할 경우 2계약 모두 매도가 나가게 하려면 어떤 수식을 사용해야 하나요? 그대로 두면 A의 청산 로직이 발생하면 1계약 매도 나가고, B가 발생하면 또 1계약 매도청산이 자동으로 되는게 맞죠~?
#질문3.
Buy(s); 와 Buy();의 차이가 무엇인가요?
var : d7mav(0,Data7) 여기서 선언할때 괄호안의 0은 왜 넣어주는 건가요? 아래처럼 변수를 쓰는데 선언 이렇게 하면 제대로 한건지요?
var : d1mav1(0,Data1),d1mav2(0,Data1),d1mav3(0,data1),d1mav4(0,data1),d1mav5(0,data1),d1atan(0,data1),d1macd(0,data1),d1stoK(0,data1),d1stoD(0,data1),d1CCI(0,data1);
var : d7mav(0,Data7),d7stoK(0,Data7),d7stoD(0,Data7);
d1mav1 = data1(ma(C,5));
d1mav2 = data1(ma(C,10));
d1mav3 = data1(ma(C,15));
d1mav4 = data1(ma(C,20));
d1mav5 = data1(ma(C,30));
d1atan = Atan((d1mav1 - d1mav1[1])/2);
d1macd = data1(macd(5,20));
d1stoK = data1(FastK(5));
d1stoD = data1(FastD(5,3));
d1CCI = CCI(9);
d7mav = data7(ma(C,5));
d7stoK = data7(FastK(5));
d7stoD = data7(FastD(5,3));
#질문4.
시뮬레이션차트는 장중에 작동이 안되나요?
#질문5.
수식이 오류가 나는데 질문입니다.
매도 청산 로직이 현재 이렇게 되어 있는데요
if MarketPosition == 1 Then
{
if (data1(H<C) and data1(C==O) and data1(C>C[1]) and data1(H-C) <= -0.3) Then
exitshort();
if (data1(C>C[1]) and d1CCI > d1CCI[1] and d1stok > d1stoD) Then
exitshort();
if (data2(C>C[1]) and d2stok > d2stok[1] and d1stok > d1stoD) Then
exitshort();
if (data14(H<C) and data14(C==O) and data14(C>C[1]) and data14(H-C) <= -0.3) Then
exitshort();
if (data14(C>C[1]) and d14CCI > d14CCI[1] and d14stok > d14stoD) Then
exitshort();
}
=================================================================================
위에 식을 괄호로 묶어서 OR로 연결하면 매도 신호가 안나가요? 오류가 뜨네요~
if MarketPosition == 1 Then
{
if ((data1(H<C) and data1(C==O) and data1(C>C[1]) and data1(H-C) <= -0.3) OR
(data1(C>C[1]) and d1CCI > d1CCI[1] and d1stok > d1stoD) OR
(data2(C>C[1]) and d2stok > d2stok[1] and d1stok > d1stoD OR
(data14(H<C) and data14(C==O) and data14(C>C[1]) and data14(H-C) <= -0.3) OR
(data14(C>C[1]) and d14CCI > d14CCI[1] and d14stok > d14stoD)) Then
exitshort();
}
질문6.
현재 하나의 시스템 랭귀지 안에 4개의 부분으로 나눠놨는데 매도 청산신호가 안나갑니다
1. 매수로직
2. 매수청산
3. 매도로직
4. 매도청산
이렇게 되어 있는데 4번만 발생이 안되는데 왜 그럴까요~?