예스스탁
예스스탁 답변
2021-08-24 16:49:50
안녕하세요
예스스탁입니다.
1
예 맞습니다. 주문함수에서 지정가는 네번째 매개변수가 2입니다. 시장가는 1입니다.
2
Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Ask(1),0)
수식에 지정가인데 0으로 지정된 부분이 있어 아래 수정했습니다.
3
해외선물의 스팟스튜디오의 객체정보에서 계좌객체의 함수 확인하시기 바랍니다.
해외선물 프로그램에는 Account1.SetUnfill, Account1.SetBalance 함수가 없으므로
Account1.SetUnfillOrderNumber, Account1.SetBalanceItem함수를 이용하셔야 합니다.
4
var BID,SID,BNum,SNum;
function Main_OnStart()
{
Main.MessageList("Start")
}
function Chart1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1)
{
BID = Account1.OrderBuy(Main.GetOrderCode(Signal.code),2,MarketData1.Bid(1),2);
Main.SetTimer(1,60000);
}
if (Signal.signalKind == 2)
{
Account1.SetUnfillOrderNumber(BNum);
if ( Account1.Unfill.count > 0 )
{
Account1.OrderCancel(Bnum);
}
Account1.SetBalanceItem(Main.GetOrderCode(Signal.code), 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Ask(1),2)
}
}
if (Signal.signalKind == 3)
{
SID = Account1.OrderSell(Main.GetOrderCode(Signal.code),2,MarketData1.Ask(2),2);
Main.SetTimer(2,60000);
}
if (Signal.signalKind == 4)
{
Account1.SetUnfillOrderNumber(SNum);
if ( Account1.Unfill.count > 0)
{
Account1.OrderCancel(Snum);
}
Account1.SetBalanceItem(Main.GetOrderCode(Signal.code), 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderBuy(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Bid(1),2)
}
}
}
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == BID)
{
BNum = OrderResponse.orderNum;
}
if (OrderResponse.orderID == SID)
{
SNum = OrderResponse.orderNum;
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
Main.KillTimer(1);
Account1.SetUnfillOrderNumber(BNum);
if (Account1.Unfill.count > 0)
{
BID = Account1.OrderReplacePrice(Bnum,MarketData1.Ask(4);
}
}
if (nEventID == 2)
{
Main.KillTimer(2);
Account1.SetUnfillOrderNumber(SNum);
if (Account1.Unfill.count > 0)
{
SID = Account1.OrderReplacePrice(Snum,MarketData1.Bid(4));
}
}
}
즐거운 하루되세요
> 후따오 님이 쓴 글입니다.
> 제목 : 매수매도 수량 확인후 청산
> 매수매도가 체결되었는지 확인후 매수매도 청산하기 위해서 아래 프로그램을 사용하고자 합니다.
해외선물에서 지정가,+/_2호가로 매수매도를 위해서
BID = Account1.OrderBuy(Main.GetOrderCode(Signal.code),2,MarketData1.Bid(2),2);
SID = Account1.OrderSell(Main.GetOrderCode(Signal.code),2,MarketData1.Ask(2),2);
로 하였는데 맞게 된 건가요?
====================== 예제 ===================
var BID,SID,BNum,SNum;
function Main_OnStart()
{
Main.MessageList("Start")
}
function Chart1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1)
{
BID = Account1.OrderBuy(Main.GetOrderCode(Signal.code),2,MarketData1.Bid(1),2);
Main.SetTimer(1,60000);
}
if (Signal.signalKind == 2)
{
Account1.SetUnfill(BNum);
if ( Account1.Unfill.count > 0 )
{
Account1.OrderCancel(Bnum);
}
Account1.SetBalance(Main.GetOrderCode(Signal.code), 2);
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Ask(1),0)
}
}
if (Signal.signalKind == 3)
{
SID = Account1.OrderSell(Main.GetOrderCode(Signal.code),2,MarketData1.Ask(2),2);
Main.SetTimer(2,60000);
}
if (Signal.signalKind == 4)
{
Account1.SetUnfill(SNum);
if ( Account1.Unfill.count > 0)
{
Account1.OrderCancel(Snum);
}
Account1.SetBalance(Main.GetOrderCode(Signal.code), 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderBuy(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Bid(1),2)
}
}
}
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == BID)
{
BNum = OrderResponse.orderNum;
}
if (OrderResponse.orderID == SID)
{
SNum = OrderResponse.orderNum;
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
Main.KillTimer(1);
Account1.SetUnfill(BNum);
if (Account1.Unfill.count > 0)
{
BID = Account1.OrderReplacePrice(Bnum,MarketData1.Ask(4);
}
}
if (nEventID == 2)
{
Main.KillTimer(2);
Account1.SetUnfill(SNum);
if (Account1.Unfill.count > 0)
{
SID = Account1.OrderReplacePrice(Snum,MarketData1.Bid(4));
}
}
}
계좌가 2개이고 계좌별로 2개의 신호를 적용하고자합니다. 종목은 2종목입니다.
아래와 같이 작성하였는데 올바로 적용된 것인지 확인 부탁드립니다.
var BID1,SID1,BNum1,SNum1;
var BID2,SID2,BNum2,SNum2;
var BID3,SID3,BNum3,SNum3;
var BID4,SID4,BNum4,SNum4;
function Main_OnStart()
{
Main.MessageList("Start")
}
function Chart1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1) //매수 신호
{
BID1 = Account1.OrderBuy(Main.GetOrderCode(Signal.code),1,MarketData1.Bid(2),2); //지정가,매수2호가 매수
Main.SetTimer(1,60000); // 60초
}
if (Signal.signalKind == 2) // 매수 청산
{
Account1.SetUnfillOrderNumber(BNum1) //
if ( Account1.Unfill.count > 0 ) // 미체결건수가 있으면
{
Account1.OrderCancel(Bnum1); //취소처리
}
Account1.SetBalanceItem(Main.GetOrderCode(Signal.code), 2);
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Ask(2),2)
}
}
if (Signal.signalKind == 3)
{
SID1 = Account1.OrderSell(Main.GetOrderCode(Signal.code),1,MarketData1.Ask(2),2);
Main.SetTimer(2,60000);
}
if (Signal.signalKind == 4)
{
Account1.SetUnfillOrderNumber(SNum1)
if ( Account1.Unfill.count > 0)
{
Account1.OrderCancel(Snum1);
}
Account1.SetBalanceItem(Main.GetOrderCode(Signal.code), 2);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderBuy(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Bid(2),2)
}
}
}
function Chart2_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1)
{
BID2 = Account2.OrderBuy(Main.GetOrderCode(Signal.code),2,MarketData1.Bid(2),2);
Main.SetTimer(1,120000);
}
if (Signal.signalKind == 2)
{
Account2.SetUnfillOrderNumber(BNum2)
if ( Account2.Unfill.count > 0 )
{
Account2.OrderCancel(Bnum2);
}
Account2.SetBalanceItem(Main.GetOrderCode(Signal.code), 2);
if (Account2.Balance.count > 0 && Account2.Balance.position == 2)
{
Account2.OrderSell(Main.GetOrderCode(Signal.code),Account2.Balance.count,MarketData1.Ask(2),2)
}
}
if (Signal.signalKind == 3)
{
SID2 = Account2.OrderSell(Main.GetOrderCode(Signal.code),2,MarketData1.Ask(2),2);
Main.SetTimer(2,120000);
}
if (Signal.signalKind == 4)
{
Account2.SetUnfillOrderNumber(SNum2)
if ( Account2.Unfill.count > 0)
{
Account2.OrderCancel(Snum2);
}
Account2.SetBalanceItem(Main.GetOrderCode(Signal.code), 0);
if (Account2.Balance.count > 0 && Account2.Balance.position == 1)
{
Account2.OrderBuy(Main.GetOrderCode(Signal.code),Account2.Balance.count,MarketData1.Bid(2),2)
}
}
}
function Chart3_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1) //매수 신호
{
BID3 = Account1.OrderBuy(Main.GetOrderCode(Signal.code),1,MarketData1.Bid(2),2); //지정가,매수2호가 매수
Main.SetTimer(1,60000); // 60초
}
if (Signal.signalKind == 2) // 매수 청산
{
Account1.SetUnfillOrderNumber(BNum3) //
if ( Account1.Unfill.count > 0 ) // 미체결건수가 있으면
{
Account1.OrderCancel(Bnum3); //취소처리
}
Account1.SetBalanceItem(Main.GetOrderCode(Signal.code), 2);
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Ask(2),2)
}
}
if (Signal.signalKind == 3)
{
SID3 = Account1.OrderSell(Main.GetOrderCode(Signal.code),1,MarketData1.Ask(2),2);
Main.SetTimer(2,60000);
}
if (Signal.signalKind == 4)
{
Account1.SetUnfillOrderNumber(SNum3)
if ( Account1.Unfill.count > 0)
{
Account1.OrderCancel(Snum3);
}
Account1.SetBalanceItem(Main.GetOrderCode(Signal.code), 2);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderBuy(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Bid(2),2)
}
}
}
function Chart4_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1)
{
BID4 = Account2.OrderBuy(Main.GetOrderCode(Signal.code),2,MarketData1.Bid(2),2);
Main.SetTimer(1,120000);
}
if (Signal.signalKind == 2)
{
Account2.SetUnfillOrderNumber(BNum4)
if ( Account2.Unfill.count > 0 )
{
Account2.OrderCancel(Bnum4);
}
Account2.SetBalanceItem(Main.GetOrderCode(Signal.code), 2);
if (Account2.Balance.count > 0 && Account2.Balance.position == 2)
{
Account2.OrderSell(Main.GetOrderCode(Signal.code),Account2.Balance.count,MarketData1.Ask(2),2)
}
}
if (Signal.signalKind == 3)
{
SID4 = Account2.OrderSell(Main.GetOrderCode(Signal.code),2,MarketData1.Ask(2),2);
Main.SetTimer(2,120000);
}
if (Signal.signalKind == 4)
{
Account2.SetUnfillOrderNumber(SNum4)
if ( Account2.Unfill.count > 0)
{
Account2.OrderCancel(Snum4);
}
Account2.SetBalanceItem(Main.GetOrderCode(Signal.code), 0);
if (Account2.Balance.count > 0 && Account2.Balance.position == 1)
{
Account2.OrderBuy(Main.GetOrderCode(Signal.code),Account2.Balance.count,MarketData1.Bid(2),2)
}
}
}
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == BID1)
{
BNum1 = OrderResponse.orderNum;
}
if (OrderResponse.orderID == SID1)
{
SNum1 = OrderResponse.orderNum;
}
if (OrderResponse.orderID == BID3)
{
BNum3 = OrderResponse.orderNum;
}
if (OrderResponse.orderID == SID4)
{
SNum4 = OrderResponse.orderNum;
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
Main.KillTimer(1);
Account1.SetUnfillOrderNumber(BNum1)
Account2.SetUnfillOrderNumber(BNum2)
Account1.SetUnfillOrderNumber(BNum3)
Account2.SetUnfillOrderNumber(BNum4)
if (Account1.Unfill.count > 0)
{
BID1 = Account1.OrderReplacePrice(Bnum1,MarketData1.Ask(2));
BID3 = Account1.OrderReplacePrice(Bnum3,MarketData1.Ask(2));
}
if (Account2.Unfill.count > 0)
{
BID2 = Account2.OrderReplacePrice(Bnum2,MarketData1.Ask(2));
BID4 = Account2.OrderReplacePrice(Bnum4,MarketData1.Ask(2));
}
}
if (nEventID == 2)
{
Main.KillTimer(2);
Account1.SetUnfillOrderNumber(SNum1)
Account2.SetUnfillOrderNumber(SNum2)
Account1.SetUnfillOrderNumber(SNum3)
Account2.SetUnfillOrderNumber(SNum4)
if (Account1.Unfill.count > 0)
{
SID1 = Account1.OrderReplacePrice(Snum1,MarketData1.Bid(2));
SID3 = Account1.OrderReplacePrice(Snum3,MarketData1.Bid(2));
}
if (Account2.Unfill.count > 0)
{
SID2 = Account2.OrderReplacePrice(Snum2,MarketData1.Bid(2));
SID4 = Account2.OrderReplacePrice(Snum4,MarketData1.Bid(2));
}
}
}
=================================================================================
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 매수매도 수량 확인후 청산
>
안녕하세요
예스스탁입니다.
1
예 맞습니다. 주문함수에서 지정가는 네번째 매개변수가 2입니다. 시장가는 1입니다.
2
Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Ask(1),0)
수식에 지정가인데 0으로 지정된 부분이 있어 아래 수정했습니다.
3
해외선물의 스팟스튜디오의 객체정보에서 계좌객체의 함수 확인하시기 바랍니다.
해외선물 프로그램에는 Account1.SetUnfill, Account1.SetBalance 함수가 없으므로
Account1.SetUnfillOrderNumber, Account1.SetBalanceItem함수를 이용하셔야 합니다.
4
var BID,SID,BNum,SNum;
function Main_OnStart()
{
Main.MessageList("Start")
}
function Chart1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1)
{
BID = Account1.OrderBuy(Main.GetOrderCode(Signal.code),2,MarketData1.Bid(1),2);
Main.SetTimer(1,60000);
}
if (Signal.signalKind == 2)
{
Account1.SetUnfillOrderNumber(BNum);
if ( Account1.Unfill.count > 0 )
{
Account1.OrderCancel(Bnum);
}
Account1.SetBalanceItem(Main.GetOrderCode(Signal.code), 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Ask(1),2)
}
}
if (Signal.signalKind == 3)
{
SID = Account1.OrderSell(Main.GetOrderCode(Signal.code),2,MarketData1.Ask(2),2);
Main.SetTimer(2,60000);
}
if (Signal.signalKind == 4)
{
Account1.SetUnfillOrderNumber(SNum);
if ( Account1.Unfill.count > 0)
{
Account1.OrderCancel(Snum);
}
Account1.SetBalanceItem(Main.GetOrderCode(Signal.code), 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderBuy(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Bid(1),2)
}
}
}
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == BID)
{
BNum = OrderResponse.orderNum;
}
if (OrderResponse.orderID == SID)
{
SNum = OrderResponse.orderNum;
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
Main.KillTimer(1);
Account1.SetUnfillOrderNumber(BNum);
if (Account1.Unfill.count > 0)
{
BID = Account1.OrderReplacePrice(Bnum,MarketData1.Ask(4);
}
}
if (nEventID == 2)
{
Main.KillTimer(2);
Account1.SetUnfillOrderNumber(SNum);
if (Account1.Unfill.count > 0)
{
SID = Account1.OrderReplacePrice(Snum,MarketData1.Bid(4));
}
}
}
즐거운 하루되세요
> 후따오 님이 쓴 글입니다.
> 제목 : 매수매도 수량 확인후 청산
> 매수매도가 체결되었는지 확인후 매수매도 청산하기 위해서 아래 프로그램을 사용하고자 합니다.
해외선물에서 지정가,+/_2호가로 매수매도를 위해서
BID = Account1.OrderBuy(Main.GetOrderCode(Signal.code),2,MarketData1.Bid(2),2);
SID = Account1.OrderSell(Main.GetOrderCode(Signal.code),2,MarketData1.Ask(2),2);
로 하였는데 맞게 된 건가요?
====================== 예제 ===================
var BID,SID,BNum,SNum;
function Main_OnStart()
{
Main.MessageList("Start")
}
function Chart1_OnRiseSignal(Signal)
{
if (Signal.signalKind == 1)
{
BID = Account1.OrderBuy(Main.GetOrderCode(Signal.code),2,MarketData1.Bid(1),2);
Main.SetTimer(1,60000);
}
if (Signal.signalKind == 2)
{
Account1.SetUnfill(BNum);
if ( Account1.Unfill.count > 0 )
{
Account1.OrderCancel(Bnum);
}
Account1.SetBalance(Main.GetOrderCode(Signal.code), 2);
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
Account1.OrderSell(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Ask(1),0)
}
}
if (Signal.signalKind == 3)
{
SID = Account1.OrderSell(Main.GetOrderCode(Signal.code),2,MarketData1.Ask(2),2);
Main.SetTimer(2,60000);
}
if (Signal.signalKind == 4)
{
Account1.SetUnfill(SNum);
if ( Account1.Unfill.count > 0)
{
Account1.OrderCancel(Snum);
}
Account1.SetBalance(Main.GetOrderCode(Signal.code), 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
Account1.OrderBuy(Main.GetOrderCode(Signal.code),Account1.Balance.count,MarketData1.Bid(1),2)
}
}
}
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == BID)
{
BNum = OrderResponse.orderNum;
}
if (OrderResponse.orderID == SID)
{
SNum = OrderResponse.orderNum;
}
}
function Main_OnTimer(nEventID)
{
if (nEventID == 1)
{
Main.KillTimer(1);
Account1.SetUnfill(BNum);
if (Account1.Unfill.count > 0)
{
BID = Account1.OrderReplacePrice(Bnum,MarketData1.Ask(4);
}
}
if (nEventID == 2)
{
Main.KillTimer(2);
Account1.SetUnfill(SNum);
if (Account1.Unfill.count > 0)
{
SID = Account1.OrderReplacePrice(Snum,MarketData1.Bid(4));
}
}
}