일봉 차트 상입니다
if MarketPosition == 0 and c > highest(c, 20)[1] Then
{
Buy("진입", OnClose, Def );
}
의미1 : 오늘(16일 목요일) 장 종료 시점에서(봉완성시점) 오늘의 종가가 신고가를 달성 시
오늘(16일 목요일) 장 종료할때 진입 주문(주문 가격은 오늘 종가)
의미2 : 오늘(16일 목요일) 장 종료 시점에서(봉완성시점), 오늘의 종가가 신고가를 달성 시
내일(17일 금요일) 장 '시작'할때 진입 주문(주문 가격은 어제 종가)
의미3 : 오늘(16일 목요일) 장 종료 시점에서(봉완성시점), 오늘의 종가가 신고가를 달성 시
내일(17일 금요일) 장 '종료'할때 진입 주문(주문 가격은 어제 종가)
무엇이 맞는지요?
if 안의 내용이 참인지 거짓인지를 판단하는 기준이, 오늘 봉 완성된 이후니까....
실제 주문은 오늘 '못나가고' 내일 봉에 나가는게 맞는건가요..?
아니면
오늘 봉이 완성되는 순간
if 안의 내용이 참인지 거짓인지를 판단함과 동시에, 매수주문이 진행되는게 맞는건지..
----------------------------------------------------
if MarketPosition == 0 Then
{
Buy("진입", AtStop, highest(c, 20)[1] );
}
이렇게 되면 의미가 어떻게 될까요?
의미1번.
오늘(16일 목요일) 장 종료 시점에서 마켓포지션=0인지를 판단하고 나서,
내일(17일 금요일) 실시간으로 현재가가 지난 20일간 최고가보다 상승하면 그 즉시 매수주문.
이게 맞을까요?
아니면
의미2번.
오늘(16일 목요일) 장이 진행될때 실시간으로 마켓 포지션=0인지를 판단하면서,
오늘(16일 목요일) 장이 진행될때 실시간으로 현재가가 지난 20일간 최고가보다 상승하면 그 즉시 매수주문
이게 맞을까요?
헷갈리는 부분이라 ㅠ 답변 부탁드리겠습니다~
답변 1
예스스탁
예스스탁 답변
2023-03-16 16:57:41
안녕하세요? 예스스탁입니다.
문의하신 내용 답변드립니다.
일봉 차트 상입니다
if MarketPosition == 0 and c > highest(c, 20)[1] Then
{
Buy("진입", OnClose, Def );
}
=> 위에서 올려주신 식에서 목요일 종가 시점에 if문의 조건을 만족했다면 목요일 종가 시점에는 예비신호(테두리만 그려진)가 발생되어 있을 것입니다. 그리고 금요일 시초가 데이터가 들어오는 순간 목요일 종가에 그려진 예비신호가 확정신호(테두리 속이 채워진)로 바뀌면서 이 시점에 주문이 나갑니다. 이때의 주문 가격은 시스템트레이딩 설정창에서 지정해 놓은 매매가격을 기준으로 주문이 나갑니다. 현재가로 설정해 놓았다면 금요일의 시초가로 주문이 나갑니다. 매매가격 중 종가는 신호가격을 의미합니다. 종가로 설정해 놓았다면 목요일 종가의 가격으로 주문이 나가게 됩니다.(atmarket 타입에서 종가로 설정해 놓았다면 신호가격이 금요일 시가이므로 금요일 시가 가격으로 주문이 나가게 됩니다.
정리하면, onclose타입에서 신호가 발생되는 위치는 if문의 조건 만족 봉에서 발생되고
주문이 나가는 시점은 if문 조건만족 봉의 다음봉 시가 데이터가 들어올 때 이고,
주문이 나가는 가격은 시스템트레이딩 설정창의 매매가격에서 설정한 가격으로 주문이 나가게 됩니다.
이와 관련하여 조금더 부연 설명 드리겠습니다.
주문함수의 매개변수는 아래와 같습니다.
Buy("명칭",신호타입,신호가격,수량)
여기서 신호타입은 매매신호를 어느 위치에 표시해 줄지를 결정하는 내용입니다.
onclose 타입은 if문의 조건을 만족하는 봉에 신호를 표시합니다.
당일(목요일) 장중 시점이나 장마감 이후에 조건을 만족하고 있다면 화살표 테두리만 그려지는 예비신호로 매수신호를 보여줍니다.
그리고 다음날(금요일) 첫 시세 데이터가 들어오는 순간 봉완성을 인식하고 전일(목요일) 봉 시점에 발생했던 예비신호가 확정신호(테두리 속까지 채워진)로 바뀌고, 이 시점에 주문이 나가게 됩니다.
이때 주문 가격은 신호 타입과는 상관 없이 시스템트레이딩 설정창에서 설정한 매매가격으로 주문이 나갑니다. 시스템트레이딩 설정창에서 현재가로 설정해 놓았다면 금요일 시가의 가격으로 주문이 나가게 됩니다.
atmarket 타입은 if문 조건 만족 다음봉에 신호를 표시합니다.
당일(목요일) 장중이나 장마감 이후에 조건을 만족하더라도 예비신호는 보여주지 않습니다. 그리고 다음날(금요일) 첫 시세데이터가 들어오면 이 봉(금요일)에 확정된 매수신호를 보여줍니다.
주문이 나가는 시점은 onclose나 atmarket 모두 동일합니다.
이 둘의 차이는 매매신호가 if문의 조건 만족봉에서 발생되는지 또는 그 다음봉에서 발생되는지 차이가 있으며, 주문이 나가는 시점은 동일합니다.
실제 매매가 아닌 시스템리포트 상에서 거래내역(신호발생 가격)을 확인해 보면 onclose 타입은 if문 조건만족 봉의 종가 가격으로 거래된 것으로 나오고, atmarket 타입은 if문 조건만족 다음 봉의 시가 가격으로 거래된 것으로 나오는 차이가 있습니다.
----------------------------------------------------
if MarketPosition == 0 Then
{
Buy("진입", AtStop, highest(c, 20)[1] );
}
=> 목요일 봉의 종가 시점의 마켓포지션이 0인지 판단하여 그 조건을 만족한다면
금요일 봉에서 지난 20일 최고 종가보다 이상의 가격에 도달하면 그 즉시 매수하게 됩니다. 적어주신 내용 중에 의미 1번이 맞습니다.
한가지 더 확인해야 할 부분은 위의 주문함수 매개변수 안의 가격 부분인데,
highest(c, 20)[1] 로 작성하실 경우 수요일부터 그 이전 20일간의 최고 종가 가격을 의미하게 됩니다. 목요일부터 그 이전 20일로 사용하시려면 highest(c, 20) 로 작성하셔야 합니다.
다른 예로 목요일에 if문의 조건을 만족했고 주문함수 안에 H[1]으로 가격을 입력하셨다면 이 가격은 수요일의 고가를 의미하게 됩니다. if조건 만족일의 고가를 사용하시려면 H 로 작성하셔야 합니다. 이 경우, 목요일 장종료 시점에 if문의 조건을 만족하였다면 금요일 장중에 현재가가 목요일 고가 이상의 가격에 도달하게 되면 그 즉시 주문이 나갑니다.
감사합니다.