커뮤니티

문의 드립니다.

프로필 이미지
이심전심
2017-11-24 12:58:59
2848
글번호 224260
답변완료

첨부 이미지

아래와 같이 수식을 작성했는데 별첨한 그림에서처럼 "주문오류"가 발생하고 체결이 안됩니다. 그리고 체결시 소리가 나도록 설정된 부분도 그림에서처럼 에러가 발생합니다. 오류를 수정하지 못하고 있습니다. 도움을 좀 부탁드립니다. 차트 3개 중에서 매수신호가 2곳에서 발생하면 매수, 한 곳이라도 매도신호 발생하면 청산 그리고 10틱 이익이면 익절청산, 10틱손해면 손절청산을 하려고 합니다. 아래는 차트 1의 수식이고 차트2나 차트3도 같은 형태입니다. =================== var SK1; var SK2; var SK3; function Main_OnStart() { SK1 = 0; SK2 = 0; SK3 = 0; } function Chart1_OnRiseSignal(Signal) { SK1 = Signal.signalKind; //현재차트1에서 매도신호 발생하고 차트2 또는 차트3에서 매도신호 발생중이면 매도 if (SK1 == 3 &&( SK2 == 3 || SK3 == 3) ) { //1계약 신호가격으로 매도주문 Account1.OrderSell(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩sell.wav"); } //잔고가 매도포지션이고 수량이 있을&#46468;만 if (Account1.Balance.position == 1 && Account1.Balance.count > 0) { //세 차트 중 하나라도 매도청산신호 발생하면 매도포지션 청산 if ( SK1 == 4 || SK2 == 4 || SK3 == 4 ) { Account1.OrderBuy(Main.GetOrderCode(Signal.code), Account1.Balance.count, 0, 1); //시장가 청산 // Account1.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 -10틱 이하이면 익절청산 if (MarketData1.current <= Account1.Balance.avgUnitCost - MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 { Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0, 1); // Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, MarketData1.Ask(1), 0); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 +10틱 이상이면 손절청산 if (MarketData1.current >= Account1.Balance.avgUnitCost + MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count, 0, 1); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } } //현재차트1에서 매수신호 발생하고 차트2 또는 차트3에서 매수신호 발생중이면 매수 if (SK1 == 1 && ( SK2 == 1 || SK3 == 1) ) { //1계약 신호가격으로 매수주문 Account1.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩buy.wav"); } //잔고가 매수포지션이고 매수잔고 수량이 있을&#46468; if (Account1.Balance.position == 2 && Account1.Balance.count > 0) { //세 차트 중 하나라도 매수청산신호 발생하면 매수포지션 청산 if ( SK1 == 2 || SK2 == 2 || SK3 == 2 ) { Account1.OrderSell(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 +10틱 이상이면 익절청산 if (MarketData1.current >= Account1.Balance.avgUnitCost + MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 // if (MarketData1.current >= Account1.Balance.avgUnitCost + 0.25) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0, 1); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 -10틱 이하이면 손절청산 if (MarketData1.current <= Account1.Balance.avgUnitCost - MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 //if (MarketData1.current <= Account1.Balance.avgUnitCost - 0.3) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0, 1); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } } }
답변 3
프로필 이미지

예스스탁 예스스탁 답변

2017-12-06 15:41:25

안녕하세요 예스스탁입니다. 1 작성하신 수식의 주문함수의 매매구분이 국내종목용입니다. 해외선물과 국내종목은 주문함수의 매개변수가 다릅니다. 해외선물은 가격구준이 시장가가 1, 지정가가 2 입니다. 0이 없습니다. Account1.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); 와 같이 지정가의 가격구분이 0인 부분들이 있습니다. 지정가는 2입니다. 2 예스스팟은 자바스크립트 언어입니다. 모든 함수는 객체.함수로 지정되어야 합니다. PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩sell.wav"); 는 아래와 같이 객체명이 지정되어야 합니다. Main.PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩sell.wav"); 즐거운 하루되세요 > 이심전심 님이 쓴 글입니다. > 제목 : 문의 드립니다. > 아래와 같이 수식을 작성했는데 별첨한 그림에서처럼 "주문오류"가 발생하고 체결이 안됩니다. 그리고 체결시 소리가 나도록 설정된 부분도 그림에서처럼 에러가 발생합니다. 오류를 수정하지 못하고 있습니다. 도움을 좀 부탁드립니다. 차트 3개 중에서 매수신호가 2곳에서 발생하면 매수, 한 곳이라도 매도신호 발생하면 청산 그리고 10틱 이익이면 익절청산, 10틱손해면 손절청산을 하려고 합니다. 아래는 차트 1의 수식이고 차트2나 차트3도 같은 형태입니다. =================== var SK1; var SK2; var SK3; function Main_OnStart() { SK1 = 0; SK2 = 0; SK3 = 0; } function Chart1_OnRiseSignal(Signal) { SK1 = Signal.signalKind; //현재차트1에서 매도신호 발생하고 차트2 또는 차트3에서 매도신호 발생중이면 매도 if (SK1 == 3 &&( SK2 == 3 || SK3 == 3) ) { //1계약 신호가격으로 매도주문 Account1.OrderSell(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩sell.wav"); } //잔고가 매도포지션이고 수량이 있을&#46468;만 if (Account1.Balance.position == 1 && Account1.Balance.count > 0) { //세 차트 중 하나라도 매도청산신호 발생하면 매도포지션 청산 if ( SK1 == 4 || SK2 == 4 || SK3 == 4 ) { Account1.OrderBuy(Main.GetOrderCode(Signal.code), Account1.Balance.count, 0, 1); //시장가 청산 // Account1.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 -10틱 이하이면 익절청산 if (MarketData1.current <= Account1.Balance.avgUnitCost - MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 { Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0, 1); // Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, MarketData1.Ask(1), 0); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 +10틱 이상이면 손절청산 if (MarketData1.current >= Account1.Balance.avgUnitCost + MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count, 0, 1); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } } //현재차트1에서 매수신호 발생하고 차트2 또는 차트3에서 매수신호 발생중이면 매수 if (SK1 == 1 && ( SK2 == 1 || SK3 == 1) ) { //1계약 신호가격으로 매수주문 Account1.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩buy.wav"); } //잔고가 매수포지션이고 매수잔고 수량이 있을&#46468; if (Account1.Balance.position == 2 && Account1.Balance.count > 0) { //세 차트 중 하나라도 매수청산신호 발생하면 매수포지션 청산 if ( SK1 == 2 || SK2 == 2 || SK3 == 2 ) { Account1.OrderSell(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 +10틱 이상이면 익절청산 if (MarketData1.current >= Account1.Balance.avgUnitCost + MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 // if (MarketData1.current >= Account1.Balance.avgUnitCost + 0.25) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0, 1); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 -10틱 이하이면 손절청산 if (MarketData1.current <= Account1.Balance.avgUnitCost - MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 //if (MarketData1.current <= Account1.Balance.avgUnitCost - 0.3) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0, 1); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } } }
프로필 이미지

이심전심

2017-12-19 20:21:13

아래와 같이 수정했는데 매수, 매도는 잘 되는데 청산이 안 됩니다. 가령 매수잔고가 있는 경우 세 차트 중 하나라도 매도신호가 뜨면 청산이 되어야 하는데 그게 안되고 그 밑에 손절청산이나 익절청산도 안됩니다. 사운드는 여전히 안되고 있습니다. 메시지는 아래와 같습니다. TypeError: Cannot call method 'PlaySound' of undefined 제가 지정한 wav소리는 나지 않고 모두 alert.wav 소리로 대체되어 나옵니다. var SK1; var SK2; var SK3; function Main_OnStart() { SK1 = 0; //oil500t SK2 = 0; //oil700t SK3 = 0; //oil900t } function Chart1_OnRiseSignal(Signal) { SK1 = Signal.signalKind; //현재차트1에서 매도신호 발생하고 차트2와 차트3에서 매도신호 발생중이면 매도 if (SK1 == 3 && ( SK2 == 3 || SK3 == 3 ) && Account1.Balance.count < 3 ) { //1계약 신호가격으로 매도주문 Account1.OrderSell(Main.GetOrderCode(Signal.code), 1, Signal.price, 2); Main.PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩.3signal_오일 매도.wav"); } //잔고가 매도포지션이고 수량이 있을&#46468;만 if (Account1.Balance.position == 1 && Account1.Balance.count > 0) { //세 차트 중 하나라도 매도청산신호 발생하면 매도포지션 청산 if ( SK1 == 4 || SK2 == 4 || SK3 == 4 ) { Account1.OrderBuy(Main.GetOrderCode(Signal.code), Account1.Balance.count, 0, 1); //시장가 청산 // Account1.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 2); Main.PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 -10t 이하이면 익절청산 // if (MarketData1.current <= Account1.Balance.avgUnitCost - 0.25) if (MarketData1.current <= Account1.Balance.avgUnitCost - MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 { Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0, 1); // Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, MarketData1.Ask(1), 0); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SingalClearSell.wav"); } //현재가가 잔고평단가 대비 +10t 이상이면 손절청산 //if (MarketData1.current >= Account1.Balance.avgUnitCost + 0.3) if (MarketData1.current >= Account1.Balance.avgUnitCost + MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count, 0, 1); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SingalClearSell.wav"); } } //현재차트1에서 매수신호 발생하고 차트2와 차트3에서 매수신호 발생중이면 매수 if (SK1 == 1 && ( SK2 == 1 || SK3 == 1) && Account1.Balance.count < 3 ) { //1계약 신호가격으로 매수주문 Account1.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 2); Main.PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩.3signal_오일 매수.wav"); } //잔고가 매수포지션이고 매수잔고 수량이 있을&#46468; if (Account1.Balance.position == 2 && Account1.Balance.count > 0) { //세 차트 중 하나라도 매수청산신호 발생하면 매수포지션 청산 if ( SK1 == 2 || SK2 == 2 || SK3 == 2 ) { Account1.OrderSell(Main.GetOrderCode(Signal.code), 1, Signal.price, 2); Main.PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 +10t 이상이면 익절청산 if (MarketData1.current >= Account1.Balance.avgUnitCost + MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 // if (MarketData1.current >= Account1.Balance.avgUnitCost + 0.25) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0, 1); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SignalClearBuy.wav"); } //현재가가 잔고평단가 대비 -10t 이하이면 손절청산 if (MarketData1.current <= Account1.Balance.avgUnitCost - MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 //if (MarketData1.current <= Account1.Balance.avgUnitCost - 0.3) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0, 1); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SignalClearBuy.wav"); } } } ========================== > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 문의 드립니다. > 안녕하세요 예스스탁입니다. 1 작성하신 수식의 주문함수의 매매구분이 국내종목용입니다. 해외선물과 국내종목은 주문함수의 매개변수가 다릅니다. 해외선물은 가격구준이 시장가가 1, 지정가가 2 입니다. 0이 없습니다. Account1.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); 와 같이 지정가의 가격구분이 0인 부분들이 있습니다. 지정가는 2입니다. 2 예스스팟은 자바스크립트 언어입니다. 모든 함수는 객체.함수로 지정되어야 합니다. PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩sell.wav"); 는 아래와 같이 객체명이 지정되어야 합니다. Main.PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩sell.wav"); 즐거운 하루되세요 > 이심전심 님이 쓴 글입니다. > 제목 : 문의 드립니다. > 아래와 같이 수식을 작성했는데 별첨한 그림에서처럼 "주문오류"가 발생하고 체결이 안됩니다. 그리고 체결시 소리가 나도록 설정된 부분도 그림에서처럼 에러가 발생합니다. 오류를 수정하지 못하고 있습니다. 도움을 좀 부탁드립니다. 차트 3개 중에서 매수신호가 2곳에서 발생하면 매수, 한 곳이라도 매도신호 발생하면 청산 그리고 10틱 이익이면 익절청산, 10틱손해면 손절청산을 하려고 합니다. 아래는 차트 1의 수식이고 차트2나 차트3도 같은 형태입니다. =================== var SK1; var SK2; var SK3; function Main_OnStart() { SK1 = 0; SK2 = 0; SK3 = 0; } function Chart1_OnRiseSignal(Signal) { SK1 = Signal.signalKind; //현재차트1에서 매도신호 발생하고 차트2 또는 차트3에서 매도신호 발생중이면 매도 if (SK1 == 3 &&( SK2 == 3 || SK3 == 3) ) { //1계약 신호가격으로 매도주문 Account1.OrderSell(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩sell.wav"); } //잔고가 매도포지션이고 수량이 있을&#46468;만 if (Account1.Balance.position == 1 && Account1.Balance.count > 0) { //세 차트 중 하나라도 매도청산신호 발생하면 매도포지션 청산 if ( SK1 == 4 || SK2 == 4 || SK3 == 4 ) { Account1.OrderBuy(Main.GetOrderCode(Signal.code), Account1.Balance.count, 0, 1); //시장가 청산 // Account1.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 -10틱 이하이면 익절청산 if (MarketData1.current <= Account1.Balance.avgUnitCost - MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 { Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0, 1); // Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, MarketData1.Ask(1), 0); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 +10틱 이상이면 손절청산 if (MarketData1.current >= Account1.Balance.avgUnitCost + MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count, 0, 1); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } } //현재차트1에서 매수신호 발생하고 차트2 또는 차트3에서 매수신호 발생중이면 매수 if (SK1 == 1 && ( SK2 == 1 || SK3 == 1) ) { //1계약 신호가격으로 매수주문 Account1.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩buy.wav"); } //잔고가 매수포지션이고 매수잔고 수량이 있을&#46468; if (Account1.Balance.position == 2 && Account1.Balance.count > 0) { //세 차트 중 하나라도 매수청산신호 발생하면 매수포지션 청산 if ( SK1 == 2 || SK2 == 2 || SK3 == 2 ) { Account1.OrderSell(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 +10틱 이상이면 익절청산 if (MarketData1.current >= Account1.Balance.avgUnitCost + MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 // if (MarketData1.current >= Account1.Balance.avgUnitCost + 0.25) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0, 1); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 -10틱 이하이면 손절청산 if (MarketData1.current <= Account1.Balance.avgUnitCost - MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 //if (MarketData1.current <= Account1.Balance.avgUnitCost - 0.3) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0, 1); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } } }
프로필 이미지

예스스탁 예스스탁 답변

2017-12-22 15:47:55

> 이심전심 님이 쓴 글입니다. > 제목 : Re : Re : [추가질문]수정했는데 다른 문제가 > 아래와 같이 수정했는데 매수, 매도는 잘 되는데 청산이 안 됩니다. 가령 매수잔고가 있는 경우 세 차트 중 하나라도 매도신호가 뜨면 청산이 되어야 하는데 그게 안되고 그 밑에 손절청산이나 익절청산도 안됩니다. 사운드는 여전히 안되고 있습니다. 메시지는 아래와 같습니다. TypeError: Cannot call method 'PlaySound' of undefined 제가 지정한 wav소리는 나지 않고 모두 alert.wav 소리로 대체되어 나옵니다. var SK1; var SK2; var SK3; function Main_OnStart() { SK1 = 0; //oil500t SK2 = 0; //oil700t SK3 = 0; //oil900t } function Chart1_OnRiseSignal(Signal) { SK1 = Signal.signalKind; //현재차트1에서 매도신호 발생하고 차트2와 차트3에서 매도신호 발생중이면 매도 if (SK1 == 3 && ( SK2 == 3 || SK3 == 3 ) && Account1.Balance.count < 3 ) { //1계약 신호가격으로 매도주문 Account1.OrderSell(Main.GetOrderCode(Signal.code), 1, Signal.price, 2); Main.PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩.3signal_오일 매도.wav"); } //잔고가 매도포지션이고 수량이 있을&#46468;만 if (Account1.Balance.position == 1 && Account1.Balance.count > 0) { //세 차트 중 하나라도 매도청산신호 발생하면 매도포지션 청산 if ( SK1 == 4 || SK2 == 4 || SK3 == 4 ) { Account1.OrderBuy(Main.GetOrderCode(Signal.code), Account1.Balance.count, 0, 1); //시장가 청산 // Account1.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 2); Main.PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 -10t 이하이면 익절청산 // if (MarketData1.current <= Account1.Balance.avgUnitCost - 0.25) if (MarketData1.current <= Account1.Balance.avgUnitCost - MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 { Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0, 1); // Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, MarketData1.Ask(1), 0); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SingalClearSell.wav"); } //현재가가 잔고평단가 대비 +10t 이상이면 손절청산 //if (MarketData1.current >= Account1.Balance.avgUnitCost + 0.3) if (MarketData1.current >= Account1.Balance.avgUnitCost + MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count, 0, 1); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SingalClearSell.wav"); } } //현재차트1에서 매수신호 발생하고 차트2와 차트3에서 매수신호 발생중이면 매수 if (SK1 == 1 && ( SK2 == 1 || SK3 == 1) && Account1.Balance.count < 3 ) { //1계약 신호가격으로 매수주문 Account1.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 2); Main.PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩.3signal_오일 매수.wav"); } //잔고가 매수포지션이고 매수잔고 수량이 있을&#46468; if (Account1.Balance.position == 2 && Account1.Balance.count > 0) { //세 차트 중 하나라도 매수청산신호 발생하면 매수포지션 청산 if ( SK1 == 2 || SK2 == 2 || SK3 == 2 ) { Account1.OrderSell(Main.GetOrderCode(Signal.code), 1, Signal.price, 2); Main.PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 +10t 이상이면 익절청산 if (MarketData1.current >= Account1.Balance.avgUnitCost + MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 // if (MarketData1.current >= Account1.Balance.avgUnitCost + 0.25) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0, 1); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SignalClearBuy.wav"); } //현재가가 잔고평단가 대비 -10t 이하이면 손절청산 if (MarketData1.current <= Account1.Balance.avgUnitCost - MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 //if (MarketData1.current <= Account1.Balance.avgUnitCost - 0.3) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0, 1); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SignalClearBuy.wav"); } } } ========================== > 예스스탁 님이 쓴 글입니다. > 제목 : Re : 문의 드립니다. > 안녕하세요 예스스탁입니다. 1 작성하신 수식의 주문함수의 매매구분이 국내종목용입니다. 해외선물과 국내종목은 주문함수의 매개변수가 다릅니다. 해외선물은 가격구준이 시장가가 1, 지정가가 2 입니다. 0이 없습니다. Account1.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); 와 같이 지정가의 가격구분이 0인 부분들이 있습니다. 지정가는 2입니다. 2 예스스팟은 자바스크립트 언어입니다. 모든 함수는 객체.함수로 지정되어야 합니다. PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩sell.wav"); 는 아래와 같이 객체명이 지정되어야 합니다. Main.PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩sell.wav"); 즐거운 하루되세요 > 이심전심 님이 쓴 글입니다. > 제목 : 문의 드립니다. > 아래와 같이 수식을 작성했는데 별첨한 그림에서처럼 "주문오류"가 발생하고 체결이 안됩니다. 그리고 체결시 소리가 나도록 설정된 부분도 그림에서처럼 에러가 발생합니다. 오류를 수정하지 못하고 있습니다. 도움을 좀 부탁드립니다. 차트 3개 중에서 매수신호가 2곳에서 발생하면 매수, 한 곳이라도 매도신호 발생하면 청산 그리고 10틱 이익이면 익절청산, 10틱손해면 손절청산을 하려고 합니다. 아래는 차트 1의 수식이고 차트2나 차트3도 같은 형태입니다. =================== var SK1; var SK2; var SK3; function Main_OnStart() { SK1 = 0; SK2 = 0; SK3 = 0; } function Chart1_OnRiseSignal(Signal) { SK1 = Signal.signalKind; //현재차트1에서 매도신호 발생하고 차트2 또는 차트3에서 매도신호 발생중이면 매도 if (SK1 == 3 &&( SK2 == 3 || SK3 == 3) ) { //1계약 신호가격으로 매도주문 Account1.OrderSell(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩sell.wav"); } //잔고가 매도포지션이고 수량이 있을&#46468;만 if (Account1.Balance.position == 1 && Account1.Balance.count > 0) { //세 차트 중 하나라도 매도청산신호 발생하면 매도포지션 청산 if ( SK1 == 4 || SK2 == 4 || SK3 == 4 ) { Account1.OrderBuy(Main.GetOrderCode(Signal.code), Account1.Balance.count, 0, 1); //시장가 청산 // Account1.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 -10틱 이하이면 익절청산 if (MarketData1.current <= Account1.Balance.avgUnitCost - MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 { Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0, 1); // Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, MarketData1.Ask(1), 0); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 +10틱 이상이면 손절청산 if (MarketData1.current >= Account1.Balance.avgUnitCost + MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count, 0, 1); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } } //현재차트1에서 매수신호 발생하고 차트2 또는 차트3에서 매수신호 발생중이면 매수 if (SK1 == 1 && ( SK2 == 1 || SK3 == 1) ) { //1계약 신호가격으로 매수주문 Account1.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩buy.wav"); } //잔고가 매수포지션이고 매수잔고 수량이 있을&#46468; if (Account1.Balance.position == 2 && Account1.Balance.count > 0) { //세 차트 중 하나라도 매수청산신호 발생하면 매수포지션 청산 if ( SK1 == 2 || SK2 == 2 || SK3 == 2 ) { Account1.OrderSell(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 +10틱 이상이면 익절청산 if (MarketData1.current >= Account1.Balance.avgUnitCost + MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 // if (MarketData1.current >= Account1.Balance.avgUnitCost + 0.25) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0, 1); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 -10틱 이하이면 손절청산 if (MarketData1.current <= Account1.Balance.avgUnitCost - MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 //if (MarketData1.current <= Account1.Balance.avgUnitCost - 0.3) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0, 1); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } } }