예스스탁
예스스탁 답변
2023-03-30 09:24:16
안녕하세요
예스스탁입니다.
차트에서 주문은 기본차트 종목 하나에만 가능합니다.
2종목에 대해 주문을 내기 위해서는 차트가 2개 필요합니다.
차트1 : 기본종목 나스닥 , 참조데이터 다우
차트2 : 기본종목 다우 , 참조데이터 나스닥
차트 왼쪽 상당의 종목선택버튼 중 왼쪽버튼은 기본종목, 오른쪽은 참조데이타를 추가하는 버튼입니다.
차트1에는 1번식, 차트2에는 2번식을 적용하셔야 합니다.
1
input : spread_threshold(50);
var : nasdaq_price(0,Data1);
var : dow_price(0,Data2);
var : spread(0,Data1),spread_mean(0,Data1),spread_std(0,Data1);
var : z_score(0,Data1);
nasdaq_price = data1(close);
dow_price = data2(close);
spread = nasdaq_price - dow_price;
spread_mean = data1(ma(spread, 50));
spread_std = data1(Std(spread, 50));
z_score = (spread - spread_mean) / spread_std;
if MarketPosition <= 0 and z_score < -spread_threshold Then
Buy();
if MarketPosition >= 0 and z_score > spread_threshold Then
Sell();
if MarketPosition == 1 and z_score > 0 Then
ExitLong();
if MarketPosition == -1 and z_score < 0 Then
ExitShort();
2
input : spread_threshold(50);
var : nasdaq_price(0,Data1);
var : dow_price(0,Data2);
var : spread(0,Data1),spread_mean(0,Data1),spread_std(0,Data1);
var : z_score(0,Data1);
nasdaq_price = data1(close);
dow_price = data2(close);
spread = nasdaq_price - dow_price;
spread_mean = data1(ma(spread, 50));
spread_std = data1(Std(spread, 50));
z_score = (spread - spread_mean) / spread_std;
if MarketPosition >= 0 and z_score < -spread_threshold Then
Sell();
if MarketPosition <= 0 and z_score > spread_threshold Then
Buy();
if MarketPosition == -1 and z_score > 0 Then
ExitShort();
if MarketPosition == 1 and z_score < 0 Then
ExitLong();
즐거운 하루되세요
> 네온0609 님이 쓴 글입니다.
> 제목 : 수식 부탁드립니다
>
수고하십니다
아래수식은 챗gpt dpt에서 나스닥과 다우 페어트레이딩 전략을 추전해 달라고해서
생성된 코딩입니다 예스트레이더로 변환이 가능한지요
input nasdaq = NASDAQ();
input dow = INDU();
input spread_threshold = 50; // 이격 차이의 임계값
def nasdaq_price = close(nasdaq);
def dow_price = close(dow);
def spread = nasdaq_price - dow_price;
plot SpreadLine = spread;
SpreadLine.AssignValueColor(if spread > 0 then Color.GREEN else if spread < 0 then Color.RED else Color.GRAY);
SpreadLine.SetDefaultColor(Color.WHITE);
def spread_mean = SimpleMovingAvg(spread, 50);
def spread_std = StDev(spread, 50);
def z_score = (spread - spread_mean) / spread_std;
def enter_long = z_score < -spread_threshold;
def enter_short = z_score > spread_threshold;
def exit_long = z_score > 0;
def exit_short = z_score < 0;
Buy("Long", 1, if enter_long then 100 shares else if exit_long then 0 shares else 100 shares);
Sell("Short", 1, if enter_short then 100 shares else if exit_short then 0 shares else 100 shares);
설명
위 코드에서는 먼저 나스닥과 다우의 종가를 nasdaq_price와 dow_price 변수에 저장하고, 이를 뺀 이격 차이를 spread 변수에 저장합니다. 이격 차이의 평균과 표준 편차를 구한 후, Z-score를 계산하여 정규화합니다.
이격 차이의 Z-score가 일정 임계값보다 낮을 때는 나스닥을 매수하고 다우를 공매도, 일정 임계값보다 높을 때는 다우를 매수하고 나스닥을 공매도합니다. 매수 또는 공매도는 100주씩 거래하며, Z-score가 0에 근접하게 되면 포지션을 청산합니다.
위 코드를 참고하여 원하는 변수나 전략을 추가하면서 페어트레이딩 전략을 구현할 수 있습니다.