커뮤니티

수식 문의 합니다.

프로필 이미지
경호오빠
2015-08-26 17:46:27
1990
글번호 223638
답변완료
차트객체 ---> FX 종목객체 ---> MarketDataFX ( 마이크로 FX 최근월물 ) Vol --------> 거래량(변수) function Main_OnStart() { Main.MessageList("Start") Start = 0; } function FX_OnRiseSignal(Signal) { if (Signal.signalKind == 1) { Start = 1; Account1.OrderBuy( Main.MarketDataFX , Vol , GetAsk(MarketDataFX,2), 0); } if (Start == 1 && Signal.signalKind == 2) { Account1.OrderSell( Main.MarketDataFX , Vol, GetBid(MarketDataFX,2), 0); } if (Signal.signalKind == 3) { Start = -1; Account1.OrderSell( Main.MarketDataFX , Vol, GetBid(MarketDataFX,2), 0); } if (Start == -1 && Signal.signalKind == 4) { Account1.OrderBuy( Main.MarketDataFX , Vol, GetAsk(MarketDataFX,2), 0); } } //---------------------------------------------------------------------------------- 이렇게 FX차트에서 신호가 나오면 마이크로 FX 주문을 넣도록 하려고 했습니다. 그런데 실행하면 종목코드 확인하라는 스크립트 메시지가 나옵니다. 뭐가 잘못되었나요 ?
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2015-08-27 16:19:40

안녕하세요 예스스탁입니다. 작성하신 식에 몇가지 잘못된 부분이 있습니다. 1. 종목객체의 종목코드는 해당 종목객체에 함수로 제공됩니다. 그러므로 Main.MarketDataFX은 존재하지 않는 값입니다. Main 객체에 MarketDataFX라는 함수는 없습니다. 첨부된 그림과 같이 종목객체나 FX종목객체에는 code라는 함수로 리턴받아 사용해야 합니다. MarketData1.code MarketDataFX.code 2 매도호가를 가져오는 부분도 함수가 잘못되어 있습니다. GetAsk는 옵션객체에 제공되는 함수입니다. Option.GetAsk(sItemCode, nAskLevel) 종목객체에는 매수나 매도호가는 따로 함수가 제공되어 MarketData1.Ask(nLevel) MarketData1.Bid(nLevel) 와 같이 제공됩니다. 하지만 지금 거래하는 종목은 FX입니다. FX는 매수호가, 매도호가만 제공되지 몇단계 호가는 제공되지 않습니다. FX종목의 종목객체에는 첨부된 그림과 같이 매수호가/매도호가를 제공하는 함수가 따로 있습니다. MarketDataFX.buy MarketDataFX.sell 3. 해외선물이나 FX에서는 가격구분값이 다릅니다. 1이 시장가, 2가 지정가 순입니다. 그러므로 아래와 같이 가격구분을 2로 주셔야 합니다. Account1.OrderBuy(MarketDataFX.code , Vol , MarketDataFX.sell, 2); Account1.OrderSell(MarketDataFX.cod , Vol , MarketDataFX.buy, 2); 4 FX는 선물과 다르게 청산은 청산함수로 하셔야 합니다. 계좌객체에 보시면 OrderExit이라는 함수가 있습니다. FX에서 청산할때 사용하는 함수입니다. FX는 잔고종목을 청산할때 포지션번호를 지정해 주어야 합니다. 청산시 잔고를 셋팅하고 잔고객체에서 포지션번호를 가져와 지정해 주셔야 합니다. 또한 FX는 잔고와 반대방향으로 주문이 되지 않습니다. 즉 매수잔고가 있는 상태에서 매도주문은 불가하고 매도잔고가 있는 상태에서 매수주문은 불가합니다. 차트에 스위칭신호가 발생하는 것에 대해 따로 처리로직을 만드셔야 합니다. FX거래전에 해당 선물사에서 주문제도를 확인하시기 바랍니다. 5 아래는 작성하신 식에서 주문함수와 청산부분을 수정했습니다. 진입도 잔고에 포지션이 없을때만 우선 발생하게 했습니다. 차트에 적용하는 시스템에서 스위칭신호가 있을 경우에 대한 부분은 사용자분이 고민하셔서 규칙을 만드셔서 수식에 처리하셔야 합니다. 전화로 설명 못드린부분이 있는데 저희프로그램에서는 현대예스트레이더(현대선물)에서만 FX거래가 가능합니다. 한국투자는 해외선물만 거래가 가능합니다. function Main_OnStart() { Main.MessageList("Start") Start = 0; } function FX_OnRiseSignal(Signal) { if (Signal.signalKind == 1) { Account1.SetBalanceItem(MarketDataFX.code, 0); if (Account1.Balance.count == 0 ) { Start = 1; Account1.OrderBuy(MarketDataFX.code , Vol , MarketDataFX.sell, 2); } } if (Start == 1 && Signal.signalKind == 2) { Account1.SetBalanceItem(MarketDataFX.code, 0); if (Account1.Balance.count > 0) { Account1.OrderExit(Account1.Balance.positionNum); } } if (Signal.signalKind == 3) { Account1.SetBalanceItem(MarketDataFX.code, 0); if (Account1.Balance.count == 0 ) { Start = -1; Account1.OrderSell( Main.MarketDataFX , Vol , MarketDataFX.buy, 2); } } if (Start == -1 && Signal.signalKind == 4) { Account1.SetBalanceItem(MarketDataFX.code, 0); if (Account1.Balance.count > 0) { Account1.OrderExit(Account1.Balance.positionNum); } } } 즐거운 하루되세요 > 경호오빠 님이 쓴 글입니다. > 제목 : 수식 문의 합니다. > 차트객체 ---> FX 종목객체 ---> MarketDataFX ( 마이크로 FX 최근월물 ) Vol --------> 거래량(변수) function Main_OnStart() { Main.MessageList("Start") Start = 0; } function FX_OnRiseSignal(Signal) { if (Signal.signalKind == 1) { Start = 1; Account1.OrderBuy( Main.MarketDataFX , Vol , GetAsk(MarketDataFX,2), 0); } if (Start == 1 && Signal.signalKind == 2) { Account1.OrderSell( Main.MarketDataFX , Vol, GetBid(MarketDataFX,2), 0); } if (Signal.signalKind == 3) { Start = -1; Account1.OrderSell( Main.MarketDataFX , Vol, GetBid(MarketDataFX,2), 0); } if (Start == -1 && Signal.signalKind == 4) { Account1.OrderBuy( Main.MarketDataFX , Vol, GetAsk(MarketDataFX,2), 0); } } //---------------------------------------------------------------------------------- 이렇게 FX차트에서 신호가 나오면 마이크로 FX 주문을 넣도록 하려고 했습니다. 그런데 실행하면 종목코드 확인하라는 스크립트 메시지가 나옵니다. 뭐가 잘못되었나요 ?