답변완료
엑셀 연동 및 주문관련
수고하십니다.
다음과 같이 구현하려고 합니다.
1. MACD Signal 중 날짜와 시간, 종가, 시그널 수치를 각 180분 종가를 바로 엑셀로 받고 싶습니다.(9시, 11시, 14시, 17시, 20시, 23시, 02시, 05시, 8시)
2. 엑셀작업을 통해 특정 셀에 매수 또는 매도 결과 값이 나오게 합니다.
3. 특정 셀 값을 180분 간격으로 yes global로 발신하여 주문을 합니다. 아래는 11시에 매수할 경우의 예입니다.
if sTime == 110000 Then
Buy();
if MarketPosition == 1 Then
ExitLong("bx",AtStop,EntryPrice-PriceScale*10);
if sTime == 140000 Then
{
ExitLong();
ExitShort();
}
4. 위의 동작을 완전자동으로 구현할 수 있는지 궁금하고 관련 수식을 부탁드립니다.
2018-11-12
2757
글번호 224661
답변완료
종목관계 없이 몇일 후 잔고 청산
1.앞에 주신 1797번 답변은 매수는 되나 청산이 안되어
2.종목 선택하여 저장했다 청산 되는 수식이나 또는 청산 신호시 종목 관계없이 잔고 있으면 5계약식 5초 간격으로 청산되는 수식 원합니다.
var CallOrderCode, PutOrderCode;
var Direction,Code,BEcnt,BXcnt,SEcnt,SXcnt;
var MaxEntryVol = 5;
var MaxExitVol;
function Main_OnStart()
{
Main.MessageList("시작");
}
function C1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1 )
{
Main.MessageList("매수진입신호발생");
//내부파일에서 DD와 CC라는 이름으로 저장된 값을 가져와 Direction,Code변수에 저장
Direction = Main.GetUserValue("DD");
Code = Main.GetUserValue("CC");
//Direction이 1이나 -1이 아닐때 수행
if (Direction != 1 || Direction != -1)
{
Direction = 1;
Code = Option.GetATMCallRecent(0);
//방향과 종목코드를 내부파일에 DD,CC라는 이름으로 저장
Main.SetUserValue("DD", Direction);
Main.SetUserValue("CC", Code);
//매수주문
var UNum = Option.uppersATM;
var LNum = Option.lowersATM;
//콜옵션중 1.0에 가장 가까운 종목
//콜옵션 모든 종목을 현재가-1.0을 해서 절대값을 취해 저장
var CallCode = new Array(UNum+LNum+1);
var CallPrice = new Array(UNum+LNum+1);
for (var i = -LNum; i <= UNum; i++)
{
CallPrice[i+LNum] = Math.abs(Option.GetCurrent(0, i)-1.0);
CallCode[i+LNum] = Option.GetATMCallRecent(i);
}
//저장된 절대값중 가장 작은 종목의 값과 종목코드 계산
var AA = 99999999;
CallOrderCode = "";
for (var i = -LNum; i <= UNum; i++)
{
if (CallPrice[i+LNum] < AA)
{
AA = CallPrice[i+LNum];
CallOrderCode = CallCode[i+LNum]
}
}
A1.OrderBuy(CallOrderCode, 1, Option.GetAskByCode(Code,2), 0);
BEcnt = 1;
//1번 타이머 5초 셋팅
Main.SetTimer(1,5000);
}
}
if (Signal.signalKind == 2 )
{
Main.MessageList("매수청산신호발생");
//내부파일에서 DD와 CC라는 이름으로 저장된 값을 가져와 Direction,Code변수에 저장
Direction = Main.GetUserValue("DD");
Code = Main.GetUserValue("CC");
//Direction이 1이면
if (Direction == 1)
{
//Direction을 0으로 초기화
Direction = 0;
//내부파일에 DD와 CC에 저장값도 초기화
Main.SetUserValue("DD", 0);
Main.SetUserValue("CC", " ");
//잔고를 세팅
A1.SetBalance(Code, 0);
//잔고수량이 있으면
if (A1.Balance.count > 0)
{
//보유수량 저장
MaxExitVol = A1.Balance.count;
//1계약 매도주문
A1.OrderSell(Code,1,Option.GetBidByCode(Code, 2), 0);
BXcnt = 1;
//보유수량이 2계약 이상이면
if (MaxExitVol >= 2)
{
//2번 타이머 5초 셋팅
Main.SetTimer(2,5000);
}
}
}
}
중략
2018-11-12
2685
글번호 224647