예스스탁
예스스탁 답변
2015-12-01 13:14:37
안녕하세요
예스스탁입니다.
예스스팟 답변은 단순 가이드입니다.
아래내용 참고하셔서 수정보완해 사용하시기 바랍니다.
차트2개 결합까지만 작성해 드립니다.
내용 보시고 추가해 가셔야 합니다.
var Profit = 5;//포인트 미니선물 1포인트에 백만원
var sumPL;
var BVol1,BxVol1,BuyID1, BxID1,SVol1,SxVol1,SellID1,SxID1;
var BuyNum1, BxNum1, SellNum1,SxNum1;
var BVol1,BxVol1,BuyID2, BxID2, SellID2,SxID2;
var BuyNum2, BxNum2, SellNum2,SxNum2;
var BuyAvg1,SellAvg1,T1;
var BuyAvg2,SellAvg2,T2;
var sumPL,DayProft;
function Main_OnStart()
{
sumPL = 0;
T1 = 0;
T2 = 0;
DayProft = false;
Main.SetTimer(1, 5000);
}
//차트1에서 신호나오면 MarketData1 종목에 대해 주문
function Chart1_OnRiseSignal(Signal)
{
//매수진입신호 발생
if (Signal.signalKind == 1 && DayProft == false)
{
Bvol1 = 1;
BuyID1 = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), BVol1,MarketData1.Ask(5), 0);
T1 = 1;
BF1 = false;
}
//매수청산신호 발생
if (T1 == 1 && Signal.signalKind == 2)
{
//매수진입 미체결 있으면 취소
BxVol1 = 0;
Account1.SetUnfill(BuyNum1);
if (Account1.Unfill.count > 0)
{
BxVol1 = Account1.Unfill.count;
Account1.OrderCancel(BuyNum1);
}
//잔고셋팅해 매수포지션 있으면 잔고수량만큼만 청산
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
if (BVol1-BxVol1 >= 1 && Account1.Balance.count >= 1 && Account1.Balance.position == 2)
{
//매수포지션 잔고 평단가 저장
BuyAvg1 = Account1.Balance.avgUnitCost;
BxID1 = Account1.OrderSell(Account1.Balance.code,BVol1-BxVol1,MarketData1.Bid(5), 0);
}
T1 = 0;
}
//매도진입신호 발생
if (Signal.signalKind == 3 && DayProft == false )
{
T1 = -1
SVol1 = 1;
SellID1 = Account1.OrderSell(Main.GetOrderCode(MarketData1.code), SVol1,MarketData1.Bid(5), 0);
SF1 = false;
}
//매도청산신호 발생
if (T1 == -1 && Signal.signalKind == 4)
{
//매수진입 미체결 있으면 취소
SxVol1 = 0;
Account1.SetUnfill(SellNum1);
if (Account1.Unfill.count > 0)
{
SxVol1 = Account1.Unfill.count;
Account1.OrderCancel(SellNum1);
}
//잔고셋팅해 매도포지션 있으면 잔고수량만큼만 청산
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
if (SVol1-SxVol1 >= 1 && Account1.Balance.count >= 1 && Account1.Balance.position == 1)
{
//매도포지션 잔고 평단가 저장
SellAvg1 = Account1.Balance.avgUnitCost;
SxID1 = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), Signal.count,MarketData1.Ask(5), 0);
}
T1 = 0;
}
}
//차트1에서 신호나오면 MarketData1 종목에 대해 주문
function Chart2_OnRiseSignal(Signal)
{
//매수진입신호 발생
if (Signal.signalKind == 1 && DayProft == false)
{
Bvol2 = 1;
BuyID2 = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), BVol2,MarketData1.Ask(5), 0);
T2 = 1;
}
//매수청산신호 발생
if (T2 == 1 && Signal.signalKind == 2)
{
//매수진입 미체결 있으면 취소
BxVol2 = 0;
Account1.SetUnfill(BuyNum2);
if (Account1.Unfill.count > 0)
{
BxVol2 = Account1.Unfill.count;
Account1.OrderCancel(BuyNum2);
}
//잔고셋팅해 매수포지션 있으면 잔고수량만큼만 청산
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
if (BVol2-BxVol2 >= 1 && Account1.Balance.count >= 1 && Account1.Balance.position == 2)
{
//매수포지션 잔고 평단가 저장
BuyAvg2 = Account1.Balance.avgUnitCost;
BxID2 = Account1.OrderSell(Account1.Balance.code,BVol2-BxVol2,MarketData1.Bid(5), 0);
}
T2 = 0;
}
//매도진입신호 발생
if (Signal.signalKind == 3 && DayProft == false)
{
SVol2 = 1;
SellID2 = Account1.OrderSell(Main.GetOrderCode(MarketData1.code), SVol2,MarketData1.Bid(5), 0);
T2 = -1;
}
//매도청산신호 발생
if (T2 == -1 && Signal.signalKind == 4)
{
//매수진입 미체결 있으면 취소
SxVol2 = 0;
Account1.SetUnfill(SellNum2);
if (Account1.Unfill.count > 0)
{
SxVol2 = Account1.Unfill.count;
Account1.OrderCancel(SellNum2);
}
//잔고셋팅해 매도포지션 있으면 잔고수량만큼만 청산
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
if (SVol2-SxVol2 >= 1 && Account1.Balance.count >= 1 && Account1.Balance.position == 1)
{
//매도포지션 잔고 평단가 저장
SellAvg2 = Account1.Balance.avgUnitCost;
SxID2 = Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), SVol2-SxVol2,MarketData1.Ask(5), 0);
}
T2 = 0;
}
}
function Main_OnOrderResponse(OrderResponse)
{
if (OrderResponse.orderID == BuyID1)
BuyNum1 = OrderResponse.orderNum;
if (OrderResponse.orderID == BxID1)
BxNum1 = OrderResponse.orderNum;
if (OrderResponse.orderID == SellID1)
SellNum1 = OrderResponse.orderNum;
if (OrderResponse.orderID == SxID1)
SxNum1 = OrderResponse.orderNum;
}
function Main_OnNotifyFill(NotifyFill)
{
if (NotifyFill.orderNum == BuyNum1)
{
BF1 = true;
}
if (NotifyFill.orderNum == SellNum1)
{
SF1 = true;
}
if (NotifyFill.orderNum == BuyNum2)
{
BF2 = true;
}
if (NotifyFill.orderNum == SellNum2)
{
SF2 = true;
}
//매수청산신호의 체결이 수신되면
if (NotifyFill.orderNum == BxNum1)
{
sumPL = sumPL +(NotifyFill.fillPrice - BuyAvg1)* NotifyFill.fillCount;
if (sumPL >= Profit)
{
DayProft = true;
}
}
//매도청산신호의 체결이 수신되면
if (NotifyFill.orderNum == SxNum1)
{
sumPL = sumPL +(SellAvg1 - NotifyFill.fillPrice)* NotifyFill.fillCount;
if (sumPL >= Profit)
{
DayProft = true;
}
}
}
function Main_OnTimer(nEventID)
{
if (T == 1 && BF1 == true)
{
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 2)
{
tempPL = sumPL+(Account1.Balance.current-Account1.Balance.avgUnitCost)*Account1.Balance.count;
if (tempPL >= 목표수익)
{
Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,MarketData1.Bid(5), 0);
DayProft = true;
}
}
}
if (T == -1 && SF1 == true)
{
Account1.SetBalance(Main.GetOrderCode(MarketData1.code), 0);
if (Account1.Balance.count > 0 && Account1.Balance.position == 1)
{
tempPL = sumPL+(Account1.Balance.avgUnitCost-Account1.Balance.current)*Account1.Balance.count;
if (tempPL >= Profit)
{
Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,MarketData1.Ask(5), 0);
DayProft= true;
}
}
}
}
즐거운 하루되세요
> dandy 님이 쓴 글입니다.
> 제목 : 수식 변경 요청 드립니다.
> 안녕하세요
아래 코스피 200 연결선물 다수(5개이상)의 시스템을 예스스팟을 이용 미니선물로
운용 진입 청산하는 수식에, 동일계좌내 다수의 손익의 합이 목표수익 50만원 달성시
일괄청산 당일 매매종료 수식 추가, 내용 설명 요청 드립니다.
감사합니다.
-------------------------------------------------------------------------------------
//차트에서 신호발생
function Chart1_OnRiseSignal(Signal)
{
//매수진입신호 발생
if (Signal.signalKind == 1)
{
//MarketData1종목을 매도5호가로 1계약 매수주문
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 0);
}
//매수포지션 청산신호 발생
if (Signal.signalKind == 2)
{
//MarketData1종목을 매수5호가로 1계약 매도주문
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 0);
}
//매도 진입신호 발생
if (Signal.signalKind == 3)
{
//MarketData1종목을 매수5호가로 1계약 매도주문
Account1.OrderSell(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Bid(5), 0);
}
//매도 포지션 청산신호 발생
if (Signal.signalKind == 4)
{
//MarketData1종목을 매도5호가로 1계약 매수주문
Account1.OrderBuy(Main.GetOrderCode(MarketData1.code), 1, MarketData1.Ask(5), 0);
}
}