커뮤니티

문의 드립니다.

프로필 이미지
이심전심
2017-12-15 01:34:00
2850
글번호 224275
답변완료

첨부 이미지

아래의 국내선물 시스템수식을 사용하고 있는데 일단 매수, 매도는 체결이 잘 됩니다. 그런데 문제가 있습니다. 1) Account2.Balance.count < 3 를 사용해서 잔고가 3개 이상이면 매수나 매도를 안되어야 되는데 위의 첨부그림파일처럼 매도가 7개 이상 계속 체결이 되어 버립니다. 2) 그리고 더 큰 문제는 청산이 전혀 안되고 있는 것입니다. 가령 매수잔고가 있다면 4개 차트 중에 하나만 매도신호가 떠도 바로 청산을 해야 하는데 전혀 안되고 그 밑의 익절청산과 손절청산 수식도 역시나 작동이 안됩니다. 3) 그리고 사운드도 안됩니다. 모두 alert.wav 소리로 대체되어 나옵니다. 도움을 좀 부탁드립니다. ===================== var SK1; var SK2; var SK3; function Main_OnStart() { SK1 = 0; SK2 = 0; SK3 = 0; SK4 = 0; } function Chart1_OnRiseSignal(Signal) { SK1 = Signal.signalKind; //현재차트1에서 매도신호 발생하고 차트2,3,4에서 매도신호 발생중이면 매도 && 매수 잔고 수량은 3개 미만 if (SK1 == 3 && ( SK2 == 3 || SK3 == 3 || SK4 == 3) && Account2.Balance.count < 3 ) { //1계약 신호가격으로 매도주문 Account2.OrderSell(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SingalSell.wav"); } //잔고가 매도포지션이고 수량이 있을&#46468;만 if (Account2.Balance.position == 1 && Account2.Balance.count > 0) { //네 차트 중 하나라도 매도청산신호 발생하면 매도포지션 청산 if ( SK1 == 4 || SK2 == 4 || SK3 == 4 || SK4 == 4 ) { Account2.OrderBuy(Main.GetOrderCode(Signal.code), Account2.Balance.count, 0, 1); //시장가 청산 // Account2.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SingalClearSell.wav"); } //현재가가 잔고평단가 대비 -0.25 이하이면 익절청산 if (MarketData1.current <= Account2.Balance.avgUnitCost - 0.25) //if (MarketData1.current <= Account2.Balance.avgUnitCost - MarketData1.GetTickSize()*5 ) //5틱이상 하락하면 { Account2.OrderBuy(Account2.Balance.code, Account2.Balance.count, 0, 1); // Account2.OrderBuy(Account2.Balance.code, Account2.Balance.count, MarketData1.Ask(1), 0); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SingalClearSell.wav"); } //현재가가 잔고평단가 대비 +0.3 이상이면 손절청산 if (MarketData1.current >= Account2.Balance.avgUnitCost + 0.3) { Account2.OrderBuy(Account2.Balance.code,Account2.Balance.count, 0, 1); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SingalClearSell.wav"); } } //현재차트1에서 매수신호 발생하고 차트2,3,4에서 매수신호 발생이면 매도 if (SK1 == 1 && ( SK2 == 1 || SK3 == 1 || SK4 == 1 ) && Account2.Balance.count < 3 ) { //1계약 신호가격으로 매수주문 Account2.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SingalBuy.wav"); } //잔고가 매수포지션이고 매수잔고 수량이 있을&#46468; if (Account2.Balance.position == 2 && Account2.Balance.count > 0) { //네 차트 중 하나라도 매수청산신호 발생하면 매수포지션 청산 if ( SK1 == 2 || SK2 == 2 || SK3 == 2 || SK4 == 2 ) { Account2.OrderSell(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SignalClearBuy.wav"); } //현재가가 잔고평단가 대비 +0.25 이상이면 익절청산 if (MarketData1.current >= Account2.Balance.avgUnitCost + 0.25) { Account2.OrderSell(Account2.Balance.code,Account2.Balance.count, 0, 1); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SignalClearBuy.wav"); } //현재가가 잔고평단가 대비 -0.3 이하이면 손절청산 if (MarketData1.current <= Account2.Balance.avgUnitCost - 0.3) { Account2.OrderSell(Account2.Balance.code,Account2.Balance.count, 0, 1); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SignalClearBuy.wav"); } } }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2017-12-22 15:55:54

안녕하세요 예스스탁입니다. 1.2 수식에 Account2.Balance.count와 같이 잔고객체를 사용하지만 수식에 잔고객체를 셋팅하는 내용이 없습니다. 예스스팟은 잔고객체를 종목코드 등으로 지정해서 셋팅을 하면 Balance객체에 해당 종목에 대한 잔고가 셋팅되고 이후에 값을 가져와 사용할수 없습니다. 아래와 같이 잔고객체가 필요한 시점전에 잔고객체를 셋팅하는 내용이 들어가야 합니다. function Chart1_OnRiseSignal(Signal) { SK1 = Signal.signalKind; Account1.SetBalanceItem(Main.GetOrderCode(Signal.code),0); //잔고객체셋팅 if (SK1 == 3 && ( SK2 == 3 || SK3 == 3 || SK4 == 3) && Account2.Balance.count < 3 ) { ~~~~ 3 Main.PlaySound("C:₩₩예스트레이더₩₩data₩₩Sound₩₩SingalClearSell.wav"); 경로명 사이의 ₩를 첨부된 그림과 같이 ₩₩2개로 지정해 주시면 됩니다. ₩₩는 반드시 직접 다시 타이핑해 주셔야 합니다. 즐거운 하루되세요 > 이심전심 님이 쓴 글입니다. > 제목 : 문의 드립니다. > 아래의 국내선물 시스템수식을 사용하고 있는데 일단 매수, 매도는 체결이 잘 됩니다. 그런데 문제가 있습니다. 1) Account2.Balance.count < 3 를 사용해서 잔고가 3개 이상이면 매수나 매도를 안되어야 되는데 위의 첨부그림파일처럼 매도가 7개 이상 계속 체결이 되어 버립니다. 2) 그리고 더 큰 문제는 청산이 전혀 안되고 있는 것입니다. 가령 매수잔고가 있다면 4개 차트 중에 하나만 매도신호가 떠도 바로 청산을 해야 하는데 전혀 안되고 그 밑의 익절청산과 손절청산 수식도 역시나 작동이 안됩니다. 3) 그리고 사운드도 안됩니다. 모두 alert.wav 소리로 대체되어 나옵니다. 도움을 좀 부탁드립니다. ===================== var SK1; var SK2; var SK3; function Main_OnStart() { SK1 = 0; SK2 = 0; SK3 = 0; SK4 = 0; } function Chart1_OnRiseSignal(Signal) { SK1 = Signal.signalKind; //현재차트1에서 매도신호 발생하고 차트2,3,4에서 매도신호 발생중이면 매도 && 매수 잔고 수량은 3개 미만 if (SK1 == 3 && ( SK2 == 3 || SK3 == 3 || SK4 == 3) && Account2.Balance.count < 3 ) { //1계약 신호가격으로 매도주문 Account2.OrderSell(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SingalSell.wav"); } //잔고가 매도포지션이고 수량이 있을&#46468;만 if (Account2.Balance.position == 1 && Account2.Balance.count > 0) { //네 차트 중 하나라도 매도청산신호 발생하면 매도포지션 청산 if ( SK1 == 4 || SK2 == 4 || SK3 == 4 || SK4 == 4 ) { Account2.OrderBuy(Main.GetOrderCode(Signal.code), Account2.Balance.count, 0, 1); //시장가 청산 // Account2.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SingalClearSell.wav"); } //현재가가 잔고평단가 대비 -0.25 이하이면 익절청산 if (MarketData1.current <= Account2.Balance.avgUnitCost - 0.25) //if (MarketData1.current <= Account2.Balance.avgUnitCost - MarketData1.GetTickSize()*5 ) //5틱이상 하락하면 { Account2.OrderBuy(Account2.Balance.code, Account2.Balance.count, 0, 1); // Account2.OrderBuy(Account2.Balance.code, Account2.Balance.count, MarketData1.Ask(1), 0); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SingalClearSell.wav"); } //현재가가 잔고평단가 대비 +0.3 이상이면 손절청산 if (MarketData1.current >= Account2.Balance.avgUnitCost + 0.3) { Account2.OrderBuy(Account2.Balance.code,Account2.Balance.count, 0, 1); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SingalClearSell.wav"); } } //현재차트1에서 매수신호 발생하고 차트2,3,4에서 매수신호 발생이면 매도 if (SK1 == 1 && ( SK2 == 1 || SK3 == 1 || SK4 == 1 ) && Account2.Balance.count < 3 ) { //1계약 신호가격으로 매수주문 Account2.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SingalBuy.wav"); } //잔고가 매수포지션이고 매수잔고 수량이 있을&#46468; if (Account2.Balance.position == 2 && Account2.Balance.count > 0) { //네 차트 중 하나라도 매수청산신호 발생하면 매수포지션 청산 if ( SK1 == 2 || SK2 == 2 || SK3 == 2 || SK4 == 2 ) { Account2.OrderSell(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SignalClearBuy.wav"); } //현재가가 잔고평단가 대비 +0.25 이상이면 익절청산 if (MarketData1.current >= Account2.Balance.avgUnitCost + 0.25) { Account2.OrderSell(Account2.Balance.code,Account2.Balance.count, 0, 1); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SignalClearBuy.wav"); } //현재가가 잔고평단가 대비 -0.3 이하이면 손절청산 if (MarketData1.current <= Account2.Balance.avgUnitCost - 0.3) { Account2.OrderSell(Account2.Balance.code,Account2.Balance.count, 0, 1); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SignalClearBuy.wav"); } } }