답변완료
종목의 현재금액, 누적거래량을 가져올때
안녕하세요
특정 종목의 현재금액, 누적 거래량을 계속 업데이트 받고자 하는데요,
예를 들어, 아래와 같이 호출하면,
Main.ReqMarketData(308100); //종목코드
이런식으로 정보를 받아오는것으로 아는데요.
function Main_OnRcvMarketData(MarketData)
{
MD = MarketData;
}
이후 언제든 원하는 시점에 MD.current, MD.volumeTotal 통해 원하는 값을 가져올수 있나요?
아니면, Main_OnU*pdateMarket(sItemCode, U*pdateID)
event 수신을 통해 업데이트를 해줘야 할까요?
아니면, 매번 원하는 시점에 Main.ReqMarketData(308100); 을 다시 호출해서
현재가격, 누적거래량을 새로 받아와야 하는지요?
감사합니다.
즐거운 한주 되세요~
답변완료
수식 변경부탁드려요
종목 20개 설정해서 예수금/종목수로 매수 금액 설정하고 싶어요
그리고 주문이 들어가 있고 사지지 않으면 매수 금지 설정 부탁드려요( 예로 VI 걸렸을때 계속 주문이 들어가는 현상을 막고 싶어요)
//스팟 첫 실행시
function Main_OnStart()
{
//1번 타이머, 60초
Main.SetTimer(1, 10000);
}
function Main_OnTimer(nEventID)
{
//1번 타이머 동작
if (nEventID == 1)
{
//종목검색 수행
Main.ReqPowerSearch("1")
}
}
//종목검색 완료
function Main_OnRcvItemList(aItemList, nCount)
{
//1종목 이상 검색되면
if (nCount >= 1)
{
//리스트 첫종목부터 마지막종목까지 순차적으로
for (var i = 0; i < nCount; i++)
{
//잔고를 셋팅
account1.SetBalance(aItemList[i],0);
//보유수량이 없으면
if (account1.Balance.count == 0)
{
//매수주문
account1.OrderBuy(aItemList[i], 1,0,1);
}
}
}
}
답변완료
청산수식 부탁 드려요.
안녕하세요.
매뉴얼이나 게시판을 봐도 이해하기 어렵고, 답답해서 도움 부탁드립니다.
수동진입후 청산하는 수식인데
유로달러 선물 기준으로
1. 수동진입후 0.001 포인후 이익이면 매수, 매도 포지션 청산
2. 수동진입후 0.003 포인트 손해면 매수 매도 포지션 청산
3. 트레일링 스탑 - 0.001포인트 상승후 0.001포인트 하락하면 매수 매도 포인트 청산
이 세가지입니다.
도움주시면 감사하겠습니다.
아래 수식 게시판 보고 작성해봤습니다.
var Rcv = 0;
var Item = [];
var EP = [];
function Main_OnStart()
{
Rcv = 0;
}
//계좌에 변동이 생김
function Main_OnUp*dateAccount(sAccntNum, sItemCode, lUp*dateID)
{AccountAccount
//잔고에 새로운 종목편입
if (sAccntNum ==Account1.number && lUp*dateID == 30001)
{
//편입된 종목의 진입가와 최고가를 구할 기초값 저장 후 종목객체 요청
Account1.SetBalance(sItemCode, 0);
if (Account1.Balance.count)
{
EP[Rcv] = Account1.Balance.avgUnitCost;
HH[Rcv] = Account1.Balance.avgUnitCost;
Main.ReqMarketData(sItemCode, 0,0);
}
}
}
//종목객체 수신
function Main_OnRcvMarketData(MarketData)
{
Item[Rcv] = MarketData;
Rcv = Rcv+1;
}
//시세변
function Main_OnU*pdateMarket(sItemCode, lUp*dateID)
{
if (lUp*dateID == 20001)
{
for(var i = 0; i < Item.length ; i++)
{
if (Item[i].code == sItemCode)
{
if (Account1.Balance.position == 2)
{
//잔고편입 이후의 최고가 계산
if (Item[i].current > HH)
{
HH = Item[i].current;
}
//최고가가 진입단가 대비 0.001 이상이고
//현재가가 진입단대 대비 0.001 이하이면 매도
if (HH >= EP[i]+0.001 && Item[i].current <= HH[i]+0.001)
{
Account1.SetBalance(Item[i].code, 0);
if (Account1.Balance.count > 0)
{
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,Item[i].Ask(5),0);
Main.RemoveMarketData(Item[i]);
}
}
//현재가가 진입단대 대비 0.001 이상이면 매도 청산
if (Item[i].current >= HH[i]+0.001)
{
Account1.SetBalance(Item[i].code, 0);
if (Account1.Balance.count > 0)
{
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,Item[i].Ask(5),0);
Main.RemoveMarketData(Item[i]);
}
}
//현재가가 진입단대 대비 0.003 이하이면 매도
if (Item[i].current <= HH[i]+0.003)
{
Account1.SetBalance(Item[i].code, 0);
if (Account1.Balance.count > 0)
{
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,Item[i].Ask(5),0);
Main.RemoveMarketData(Item[i]);
}
}
}
if (Account1.Balance.position == 1)
{
//잔고편입 이후의 최고가 계산
if (Item[i].current < LL)
{
LL = Item[i].current;
}
//최고가가 진입단가 대비 + 0.001이하이고
//현재가가 진입단대 대비 + 0.001 이상이면 매도
if (LL <= EP[i]+0.001 && Item[i].current >= LL[i]+0.001)
{
Account1.SetBalance(Item[i].code, 0);
if (Account1.Balance.count > 0)
{
Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,Item[i].Ask(5),0);
Main.RemoveMarketData(Item[i]);
}
}
//현재가가 진입단대 대비 + 0.001 이상이면 매도 청산
if (Item[i].current >= LL[i]+0.001)
{
Account1.SetBalance(Item[i].code, 0);
if (Account1.Balance.count > 0)
{
Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,Item[i].Ask(5),0);
Main.RemoveMarketData(Item[i]);
}
}
//최고가가 진입단가 대비 + 0.003이하이면 매도 청산
if (LL <= EP[i]+0.003 )
{
Account1.SetBalance(Item[i].code, 0);
if (Account1.Balance.count > 0)
{
Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,Item[i].Ask(5),0);
Main.RemoveMarketData(Item[i]);
}
}
}
}
}
}
}