답변완료
Yes Global Spot 에서 계좌 객체에서 잔고 수량 0 인 이유 질의
계좌 객체에서 사용하는 함수, 메써드 등은 spot에서 주문된 것만 관련 정보가 반환되는 것인지요?
예를들면 nh선물 hts에서 주문 체결된 후 잔고, 미체결 등 정보는 spot의 TheNumberOfBalances() 등을 활용해서 잔고 정보를 불러올 때도 있고 불러오지 못할 때도 있습니다. 이유가 무엇인지요?!
계좌번호, 종목, 포지션 등은 잘 불러오는데 잔고 수량(count),단가 등이 0으로 불러오는 경우는 왜 그러는 걸까요?!
spot수식
A1 계좌 객체 설정 완료
function Main_OnStart()
{
var d = new Date();
var HHMMDD = d.getHours()*10000+d.getMinutes()*100+d.getSeconds();
Main.MessageLog(HHMMDD+":"+"전략 시작");
Main.MessageLog("계좌번호:"+A1.number +", 계좌명:"+A1.name);
OrderCode = Main.GetOrderCode(F1.code); //F1 종목 객체에서 종목코드를 주문용 코드로 변환
Main.MessageLog("단축코드:" + F1.code + "주문용 종목코드:"+OrderCode+", 종목명:"+F1.name +" ,잔존일수:"+F1.remainDay);
//잔고 정보 조회
A1.SetBalanceItem(F1.code, 0); //잔고객체를 사용하기위해 종목 설정
A1.Refresh();//가원장 새로 고침
Main.RefreshAccount(A1.number);//Main에서 A1 계좌번호로 가원장 새로 고침
Bal = A1.GetTheNumberOfBalances(); //잔고 리스트 개수 반환 현재 계좌에 1종목 1개 존재
A1.SetBalanceIndex(0);//잔고 인덱스 0 설정(1종목 1수량 존재하므로)
Main.MessageLog("잔고 리스트 개수:" + Bal);
Main.MessageLog("잔고 code:"+A1.Balance.code);
Main.MessageLog("잔고 포지션(S:1,L:2)):"+ A1.Balance.position);
Main.MessageLog("잔고 count:"+ A1.Balance.count);
Main.MessageLog("잔고 평균단가:"+ A1.Balance.avgUnitCost);
Main.MessageLog("잔고 평가금액:"+ A1.Balance.assessedAmount);
Main.MessageLog("잔고 current:"+ A1.Balance.current);
}
잔고 리스트 개수 : 정상
포지션 : 정상
current : 정상 표시
그러나
A1.Balance.count
A1.Balance.avgUnitCost
A1.Balance.assessedAmount
등은 모두 0으로 표시되는 이유는 무엇인가요?!
감사합니다.
2021-06-24
1386
글번호 150262
시스템
답변완료
stoploss
안녕하세요? 고견 부탁드립니다~~
1. 메뉴얼 내용중 문의 드립니다
A와 B가 동일한데 어떻게 사용하는지요?
A
2 포인트 손실 청산
SetStopLoss(2,PointStop);
B
10000원 손실 시 청산
SetStopLoss(10000,PointStop)
메뉴얼-----------------
SetStopLoss
설명 : 손절매
함수 : SetStopLoss(손절매값,Method);
손절매값
손절매값, 이 값이 0이면 목표수익 설정이 해지 된다.
Method
PercentStop → % 설정
PointStop → 포인트(원) 설정
생략하면 % 설정
예제 : 10% 손실시 청산
SetStopLoss(10);
SetStopLoss(10,PercentStop);
2 포인트 손실 청산
SetStopLoss(2,PointStop);
10000원 손실 시 청산
SetStopLoss(10000,PointStop);
손절매 청산 해제
SetStopLoss(0);
2. 나스닥 1분봉에서 손익절값 동일하게 30포인트 설정하여 시뮬레이션 하였는데
손절은 약57포인트. 익절은 약2.7포인트 발생합니다. 하기 전략에서 어디가 잘못되었는지요?
input : 매수(30),매수손절(30),매수익절(30),매도(30),매도손절(30),매도익절(30);
var : entry(0);
if Bdate != bdate[1] Then
entry = 0;
if (MarketPosition != 0 and MarketPosition != MarketPosition[1]) or
(MarketPosition == MarketPosition[1] and TotalTrades > TotalTrades[1]) Then
entry = entry+1;
if MarketPosition == 0 and entry < 1 and c < dayopen-매수 Then
Buy();
if MarketPosition == 0 and entry < 1 and c > dayopen+매도 Then
sell();
if MarketPosition == 1 Then
{
SetStopLoss(매수손절,PointStop);
SetStopProfittarget(매수익절,PointStop);
}
if MarketPosition == -1 Then
{
SetStopLoss(매도손절,PointStop);
SetStopProfittarget(매도익절,PointStop);
}
2021-06-24
1156
글번호 150240
시스템
답변완료
Yes Global Spot 에서 잔고 함수 정상 작동 확인 요청드립니다.
Yes spot에서 잔고함수를 사용해서 잔고 종목, 수량 등이 0 으로 나오네요.
스크립트 객체설정
차트객체추가 --> 속성에서 객체명 Chart1, 차트와 아이디 연결
종목객체추가 --> 속성에서 객체명 MarketData1, 차트와 동일종목으로 설정
계좌객체추가 --> 속성에서 객체명 Account1, 계좌번호 지정
var Score;
function Main_OnStart()
{
    Main.MessageList("start")
}
//차트에서 신호발생
function Chart1_OnRiseSignal(Signal)
{
      //매수진입신호이면
    if (Signal.signalKind == 1)
      {
            //수량계산
            var vol = Account1.GetBalanceETCinfo(0)*0.6*Score/ MarketData1.Ask(3);
            //계산된 수량으로 매도3호가로 매수주문
            Account1.OrderBuy(MarketData1.code, vol, MarketData1.Ask(3), 0);
      }
      //매수청산신호이면
    if (Signal.signalKind == 2)
      {
            //미체결 중 해당종목의 미체결은 모두 취소
            var num = Account1.GetTheNumberOfUnfills();
            if (num > 0)
            {
                  for (var i = 0;i < num;i++)
                  {
                        Account1.SetUnfill(i)
                        if (Account1.Unfill.count > 0 && Account1.Unfill.code == MarketData1.code)      
                        {
                              Account1.OrderCancel(Account1.Unfill.orderNum);      
                        }
                  }
            }
            //잔고셋팅
            Account1.SetBalance(MarketData1.code, 0);
            //잔고보유수량 전량 매수3호가로 매도주문
            if (Account1.Balance.count > 0)
            {
                  Account1.OrderSell(MarketData1.code,Account1.Balance.count, MarketData1.Bid(3), 0);
            }
      }
}
2021-06-24
1100
글번호 150239
시스템
답변완료
함수변환요청
안녕하세요?
아래는 키움(시그널메이커)에서 적용되는 스크립트입니다.
한투에서 사용될 수 있도록 예스로 변환 요청드립니다.
감사합니다.
Params : cnt(3);
If SignalPosition = 0 Then
Begin
If O > Highest(H[1] of data2,cnt) Then Sell("S1", AtMarket);
If O < Lowest(L[1] of data2,cnt) Then Buy("B1", AtMarket);
If O > Highest(C[1] of data2,cnt) Then Sell("S2", AtMarket);
If O < Lowest(C[1] of data2,cnt) Then Buy("B2", AtMarket);
End;
If CrossDown(O, Ma(C of data2, 5)) Or CrossDown(C, Ma(C of data2, 5)) Then ExitLong("EXB");
If CrossUp(O, Ma(C of data2, 5)) Or CrossUp(C, Ma(C of data2, 5)) Then ExitShort("EXS");
2021-06-24
1125
글번호 150236
시스템