커뮤니티

예스스팟 Q&A

팡팡 님에 의해서 삭제되었습니다.

프로필 이미지
팡팡
2017-12-14
0
글번호 224277
답변완료

예스스팟과 시뮬레이션차트 연결

안녕하세요. 예스스팟 차트연결 관련 문의 드립니다. 전략실행차트는 차트아이디를 설정해서 예스스팟의 차트객체와 연결이 가능한데요. 시뮬레이션차트는 이 기능이 없나요? 어떻게 연결할 수 있을까요?
프로필 이미지
유기농옵션
2017-12-13
2757
글번호 224276
답변완료

문의 드립니다.

아래의 국내선물 시스템수식을 사용하고 있는데 일단 매수, 매도는 체결이 잘 됩니다. 그런데 문제가 있습니다. 1) Account2.Balance.count < 3 를 사용해서 잔고가 3개 이상이면 매수나 매도를 안되어야 되는데 위의 첨부그림파일처럼 매도가 7개 이상 계속 체결이 되어 버립니다. 2) 그리고 더 큰 문제는 청산이 전혀 안되고 있는 것입니다. 가령 매수잔고가 있다면 4개 차트 중에 하나만 매도신호가 떠도 바로 청산을 해야 하는데 전혀 안되고 그 밑의 익절청산과 손절청산 수식도 역시나 작동이 안됩니다. 3) 그리고 사운드도 안됩니다. 모두 alert.wav 소리로 대체되어 나옵니다. 도움을 좀 부탁드립니다. ===================== var SK1; var SK2; var SK3; function Main_OnStart() { SK1 = 0; SK2 = 0; SK3 = 0; SK4 = 0; } function Chart1_OnRiseSignal(Signal) { SK1 = Signal.signalKind; //현재차트1에서 매도신호 발생하고 차트2,3,4에서 매도신호 발생중이면 매도 && 매수 잔고 수량은 3개 미만 if (SK1 == 3 && ( SK2 == 3 || SK3 == 3 || SK4 == 3) && Account2.Balance.count < 3 ) { //1계약 신호가격으로 매도주문 Account2.OrderSell(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SingalSell.wav"); } //잔고가 매도포지션이고 수량이 있을&#46468;만 if (Account2.Balance.position == 1 && Account2.Balance.count > 0) { //네 차트 중 하나라도 매도청산신호 발생하면 매도포지션 청산 if ( SK1 == 4 || SK2 == 4 || SK3 == 4 || SK4 == 4 ) { Account2.OrderBuy(Main.GetOrderCode(Signal.code), Account2.Balance.count, 0, 1); //시장가 청산 // Account2.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SingalClearSell.wav"); } //현재가가 잔고평단가 대비 -0.25 이하이면 익절청산 if (MarketData1.current <= Account2.Balance.avgUnitCost - 0.25) //if (MarketData1.current <= Account2.Balance.avgUnitCost - MarketData1.GetTickSize()*5 ) //5틱이상 하락하면 { Account2.OrderBuy(Account2.Balance.code, Account2.Balance.count, 0, 1); // Account2.OrderBuy(Account2.Balance.code, Account2.Balance.count, MarketData1.Ask(1), 0); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SingalClearSell.wav"); } //현재가가 잔고평단가 대비 +0.3 이상이면 손절청산 if (MarketData1.current >= Account2.Balance.avgUnitCost + 0.3) { Account2.OrderBuy(Account2.Balance.code,Account2.Balance.count, 0, 1); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SingalClearSell.wav"); } } //현재차트1에서 매수신호 발생하고 차트2,3,4에서 매수신호 발생이면 매도 if (SK1 == 1 && ( SK2 == 1 || SK3 == 1 || SK4 == 1 ) && Account2.Balance.count < 3 ) { //1계약 신호가격으로 매수주문 Account2.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SingalBuy.wav"); } //잔고가 매수포지션이고 매수잔고 수량이 있을&#46468; if (Account2.Balance.position == 2 && Account2.Balance.count > 0) { //네 차트 중 하나라도 매수청산신호 발생하면 매수포지션 청산 if ( SK1 == 2 || SK2 == 2 || SK3 == 2 || SK4 == 2 ) { Account2.OrderSell(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SignalClearBuy.wav"); } //현재가가 잔고평단가 대비 +0.25 이상이면 익절청산 if (MarketData1.current >= Account2.Balance.avgUnitCost + 0.25) { Account2.OrderSell(Account2.Balance.code,Account2.Balance.count, 0, 1); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SignalClearBuy.wav"); } //현재가가 잔고평단가 대비 -0.3 이하이면 손절청산 if (MarketData1.current <= Account2.Balance.avgUnitCost - 0.3) { Account2.OrderSell(Account2.Balance.code,Account2.Balance.count, 0, 1); Main.PlaySound("C:₩예스트레이더₩data₩Sound₩SignalClearBuy.wav"); } } }
프로필 이미지
이심전심
2017-12-15
2862
글번호 224275
답변완료

수식 요청드립니다.

안녕하세요. 다음과 같은 전략을 실행시키기 위해 예스스팟 파일을 작성해 보았습니다. 이상은 없는지 한 번 검토해 주시면 감사드리겠습니다. [전략 내용] 1. 해외 선물 데이트레이딩 전략으로 뉴욕 시각 기준으로 18시부터 진입을 하고 다음날 16시 40분에 모든 포지션을 청산함 2. 일 목표 수익액은 50만원이고, 일 최대 손실액도 50만원 임. 위 수익액 또는 손실액에 도달하면 모든 매매를 종료함 3. Chart1에서 신호가 발생하면 최초로 진입을 하되, 일단 최초 진입을 한 이후부터는 Chart2의 신호에 따라서 계속 스위칭을 하게 됨 1) Chart1에서 매수 신호가 발생하면, MarketData1 종목을 1개 매수하고, 동시에 MarketData2 종목도 1개 매수함 1-1) 이후 Chart1에서 발생하는 신호는 무시되며, Chart2의 스위칭 신호에 따라서 스위칭을 반복하게 됨 1-2) 이후 Chart2에서 매수 신호가 발생하면, 이미 매수 진입을 했으므로 추가 진입은 없음 1-3) 이후 Chart3에서 매도 신호가 발생하면, 진입된 매수 포지션을 모두 청산하고, MarketData1 종목을 1개 매도하고, 동시에 MarketData2 종목도 1개 매도함 1-4) 일 목표 수익/손실액을 달성할 때까지, 1-2) 및 1-3) 과정을 반복함 2) Chart1에서 매도 신호가 발생하면, MarketData1 종목을 1개 매수하고, 동시에 MarketData2 종목도 1개 매수함 2-1) 이후 Chart1에서 발생하는 신호는 무시되며, Chart2의 스위칭 신호에 따라서 스위칭을 반복하게 됨 2-2) 이후 Chart2에서 매도 신호가 발생하면, 이미 매도 진입을 했으므로 추가 진입은 없음 2-3) 이후 Chart3에서 매수 신호가 발생하면, 진입된 매도 포지션을 모두 청산하고, MarketData1 종목을 1개 매수하고, 동시에 MarketData2 종목도 1개 매수함 2-4) 일 목표 수익/손실액을 달성할 때까지, 2-2) 및 2-3) 과정을 반복함 [HTS 환경] - 현대선물 [예스스팟 코드] var N=0; var IsChart1on=0; var X; var i1; function Main_OnStart() { Main.MessageList("스팟 시작"); //i1에 예수금/예탁총액 저장 i1 = Account1.GetBalanceETCinfo(4); X = 0; Main.SetTimer(1, 1000); //5초 타이머 셋팅 Main.MessageList("예수금", Account1.GetBalanceETCinfo(4)); } function Chart1_OnRiseSignal(Signal) { if (IsChart1on == 0 && Signal.signalKind == 1) // 매수 신호 발생시 { Main.MessageList("최초 진입신호!!! Chart1 매수 신호 발생"); Account1.Orderbuy(Main.GetOrderCode(MarketData1.code), 1, 0, 1); Account1.Orderbuy(Main.GetOrderCode(MarketData2.code), 1, 0, 1); IsChart1on = 1; // IsChart1on의 값을 1로 변경하여 더 이상 Chart1에서 발생하는 신호에는 진입하지 않도록 함 N = 1; } if (IsChart1on == 0 && Signal.signalKind == 3)// 매도 신호 발생시 { Main.MessageList("최초 진입신호!!! Chart1 매도 신호 발생"); Account1.Ordersell(Main.GetOrderCode(MarketData1.code), 1, 0, 1); Account1.Ordersell(Main.GetOrderCode(MarketData2.code), 1, 0, 1); IsChart1on = 1; // IsChart1on의 값을 1로 변경하여 더 이상 Chart1에서 발생하는 신호에는 진입하지 않도록 함 N = -1; } } // 일단 Chart1에서 진입 신호가 발생한 이후에는 Chart2에서 발생하는 스위칭 신호에 따라서만 스위칭 함 function Chart2_OnRiseSignal(Signal) { if (N == 1 && Signal.signalKind == 2) // 매수청산 신호 발생시 { Main.MessageList("Chart2 매수청산 신호 발생"); Account1.Ordersell(Main.GetOrderCode(MarketData1.code), 1, 0, 1); Account1.Ordersell(Main.GetOrderCode(MarketData2.code), 1, 0, 1); N = 0; } if (N == 0 && Signal.signalKind == 1) // 매수 신호 발생시 // Chart1에 의해서 매수신호가 발생해서 이미 진입된 상태에서 Chart2에서 또 매수 신호가 나오더라도 추가 진입을 // 시키지 않기 위해 N이 1이면 추가 진입하지 않음 { Main.MessageList("Chart2 매수 신호 발생"); Account1.Orderbuy(Main.GetOrderCode(MarketData1.code), 1, 0, 1); Account1.Orderbuy(Main.GetOrderCode(MarketData2.code), 1, 0, 1); N = 1; } if (N == -1 && Signal.signalKind == 4) // 매도청산 신호 발생시 { Main.MessageList("Chart2 매도청산 신호 발생"); Account1.Orderbuy(Main.GetOrderCode(MarketData1.code), 1, 0, 1); Account1.Orderbuy(Main.GetOrderCode(MarketData2.code), 1, 0, 1); N = 0; } if (N == 0 && Signal.signalKind == 3) // 매도 신호 발생 // Chart1에 의해서 매도신호가 발생해서 이미 진입된 상태에서 Chart2에서 또 매도 신호가 나오더라도 추가 진입을 // 시키지 않기 위해 N이 -1이면 추가 진입하지 않음 { Main.MessageList("Chart2 매도 신호 발생"); Account1.Ordersell(Main.GetOrderCode(MarketData1.code), 1, 0, 1); Account1.Ordersell(Main.GetOrderCode(MarketData2.code), 1, 0, 1); N = -1; } } // 일(daily) 수익 목표 및 손실 한도액(각 50만원)에 도달할 경우 당일 매매는 중지함 // 뉴욕 현지 시각 기준으로 16시 40분에 모든 포지션 청산함 function Main_OnTimer(nEventID) { //현재 예수금이 스팟 시작시값보다 50만원 이상 감소하면 진입 금지 if (nEventID == 1 && Account1.GetBalanceETCinfo(4) <= i1-500000) { //미체결주문 전체 취소 var num1 = Account1.GetTheNumberOfUnfills(); for(i = 0; i < num1; i++) { Account1.SetUnfillIndex(i) Account1.OrderCancel(Account1.Unfill.orderNum); } //잔고 전체 종목 청산 var num2 = Account1.GetTheNumberOfBalances(); for(i = 0; i < num2; i++) { Account1.SetBalanceIndex(i); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); } X = 1; Main.MessageList("당일 손실 한도액 초과! 진입 금지!"); } //현재 예수금이 스팟 시작시값보다 50만원 이상 증가하면 진입 금지 if (nEventID == 1 && Account1.GetBalanceETCinfo(4) >= i1+500000) { //미체결주문 전체 취소 var num1 = Account1.GetTheNumberOfUnfills(); for(i = 0; i < num1; i++) { Account1.SetUnfillIndex(i) Account1.OrderCancel(Account1.Unfill.orderNum); } //잔고 전체 종목 청산 var num2 = Account1.GetTheNumberOfBalances(); for(i = 0; i < num2; i++) { Account1.SetBalanceIndex(i); if (Account1.Balance.count > 0 && Account1.Balance.position == 2) Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); if (Account1.Balance.count > 0 && Account1.Balance.position == 1) Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); } X = 1; Main.MessageList("당일 수익 달성! 진입 금지!"); } //뉴욕 현지 시각 기준 16시 40분 모두 청산 var d = new Date(); var HHMMSS = d.getHours()*10000+d.getMinutes()*100+d.getSeconds(); if (nEventID == 1 && HHMMSS <= 170000 && HHMMSS >= 164000) //16시 40분에 계좌 잔고 모두 시장가로 청산주문 { Main.KillTimer(1); num = Account1.GetTheNumberOfBalances(); for(var i = 0; i < num; i++) { Account1.SetBalanceIndex(i); if (Account1.Balance.position == 1) Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count,0,1); if (Account1.Balance.position == 2) Account1.OrderSell(Account1.Balance.code,Account1.Balance.count,0,1); } Main.MessageList("장마감 청산"); IsChart1on = 0; //IsChart1on의 값을 0으로 변경하고 18시 뉴욕 장 시작 이후 chart1의 진입 신호를 기다림 } }
프로필 이미지
zenirvan
2017-12-03
2683
글번호 224268
답변완료

기간별수익률

항상 수고 많으십니다 예스트레이더 화면 1209의 누적손익을 구하는 식을 알고 싶습니다 감사합니다
프로필 이미지
재령
2017-11-30
2589
글번호 224267
답변완료

어떻게 공부하면될까요

어떻게 공부하면될까요 예스차트로 수식을 만들고 싶습니다. 어떻게 접근하면 빠르게 습득할수있을까요? 책이나 동영상 자료있나요? 있으면 어떻게 받아볼수있을까요
프로필 이미지
fx트레이더
2017-11-29
2676
글번호 224266

영원한자유 님에 의해서 삭제되었습니다.

프로필 이미지
영원한자유
2017-11-27
10
글번호 224263
답변완료

질문입니다.

주가지수선물을 거래하기 위해서, 예스랭귀지로 시스템을 작성하였고,(1계약을 거래하는 시스템) 예스스팟으로 주문을 컨트롤 할려고 합니다. 질문1. 예스랭귀지에서 나온 신호를 채결시키되, 만약 채결이 이루어지지 않은 경우 10초 간격으로 채결이 이루어질때까지 현재가로 주문정정을 넣는 것입니다. 질문2. 만약, 현재 시스템의 시그널이 매수(혹은 매도)이고, 손매매로 매수(혹은 매도)로 진입해 주었다면, 다음 시그널인 매수청산(혹은 매도청산)부터 작동하도록 예스스팟을 구성하고, 만약, 현재 시스템의 시그널이 매수(혹은 매도)이지만, 실재로 포지션이 없다면 시스템의 다음 진입신호부터 작동하도록 예스스팟을 작성하고 싶습니다. 즉, 예스스팟 시작시 포지션에 진입해있다면 청산시그널부터 실행하고, 시작시 포지션이 없다면 다음 진입시그널부터 실행하도록 만들고 싶습니다. 질문1.과 질문2.를 요약하자면 다음과 같습니다. " 예스스팟 시작시 실제 포지션이 있다. -> 해당포지션의 청산부터 예스스팟 작동. 예스스팟 시작시 실제 포지션이 없다. -> 시스템의 다음 진입신호부터 예스스팟 작동. 미체결시에는 채결이 될때까지 10초마다 현재가로 주문을 정정한다. (단, 현재가가 10초전에 주문한가격과 다를때만 주문을 정정한다.) " 제가 스스로 만들고, 수정을 해본 코드입니다. 불편을 드려 죄송하지만, 제깐에는 간절하고 급해서 그럽니다. 살펴보시고 수정보완 부탁드립니다. 한가지 추가 요청사항은 체결이 완성된 경우, "매수(매도, 매수청산, 매도청산, 매수정정, 매도정정) 체결완료"라는 메세지를 띄우고 싶습니다. 부탁드립니다. 다시한번 감사합니다. var Position; var OrderCode; var BID; var BNum; var SID; var SNum; function Main_OnStart() { // 시작. "Start" 출력. Main.MessageLog("Start"); // 시스템을 연결선물에 적용. 따라서 주문용 종목코드를 리턴받아 OrderCode에 저장. OrderCode = Main.GetOrderCode(MarketData1.code); // 현재 포지션이 매도나 매수가 아니라면, if (Account1.Balance.position != 1 && Account1.Balance.position != 2) { // Position에 0 대입. Position = 0; // 포지션이 없으므로 "Current Zero" 출력. Main.MessageLog("Current Zero"); } // 현재 포지션이 매도라면, if (Account1.Balance.position == 1) { // Position에 -1 대입. Position = -1; // 포지션이 매도이므로 "Current Short" 출력. Main.MessageLog("Current Short"); } // 현재 포지션이 매수라면, if (Account1.Balance.position == 2) { // Position에 1 대입. Position = 1; // 포지션이 매수이므로 "Current Long" 출력. Main.MessageLog("Current Long"); } } function Chart1_OnRiseSignal(Signal) { // 완성된 시그널 출력. Main.MessageLog("Signal:"+Signal.signalKind); // 시그널 종류가 매수라면, if (Signal.signalKind == 1) { // Position에 1 대입. Position = 1; // 주문형 종목코드로, 시스템에서 지정한 수량만큼, 현재가로 Buy 주문. // BID에 주문식별번호 저장. BID = Account1.OrderBuy(OrderCode, Signal.count, 0, 1); // 매수진입 "Long" 출력 Main.MessageLog("Long"); } // 시그널 종류가 매수청산이라면, if (Position == 1 && Signal.signalKind == 2) { // Position에 0 대입. Position = 0; // 주문형 종목코드로, 시스템에서 지정한 수량만큼, 현재가로 Sell 주문. // SID에 주문식별번호 저장. SID = Account1.OrderSell(OrderCode, Signal.count, 0, 1); // 매수청산 "ExitLong" 출력 Main.MessageLog("ExitLong"); } // 시그널 종류가 매도라면, if (Signal.signalKind == 3) { // Position에 -1 대입. Position = -1; // 주문형 종목코드로, 시스템에서 지정한 수량만큼, 현재가로 Sell 주문. // SID에 주문식별번호 저장. SID = Account1.OrderSell(OrderCode, Signal.count, 0, 1); // 매도진입 "Short" 출력 Main.MessageLog("Short"); } // 시그널 종류가 매도청산이라면, if (Position == -1 && Signal.signalKind == 4) { // Position에 0 대입 Position = 0; // 주문형 종목코드로, 시스템에서 지정한 수량만큼, 현재가로 Buy 주문. // BID에 주문식별번호 저장. BID = Account1.OrderBuy(OrderCode, Signal.count, 0, 1); // 매도청산 "ExitShort" 출력 Main.MessageLog("ExigShort"); } } function Main_OnOrderResponse(OrderResponse) { // 해당 주문응답이 현재 전략에서 발생한 주문이라면, if (OrderResponse.orderID == BID) { // BNum에 주문응답객체의 주문번호를 저장하고, BNum = OrderResponse.orderID; // Timer1을 실행(10초 간격). Main.SetTimer(1, 10000); } // 해당 주문응답이 현재 전략에서 발생한 주문이라면, if (OrderResponse.orderID == SID) { // SNum에 주문응답객체의 주문번호를 저장하고, SNum = OrderResponse.orderID; // Timer2를 실행(10초 간격). Main.SetTimer(2, 10000); } } function Main_OnTimer(nEventID) { // 현재 실행된 Timer가 1이고, if (nEventID == 1) { // ??? Account1.SetUnfillOrderNumber(BNum); // 미체결수량이 존재하고, 미체결가격이 현재가와 다르다면, if (Account1.Unfill.count > 0 && Account1.Unfill.price != MarketData1.current) { // 가격을 현재가로 정정하여 정정주문. BID = Account1.OrderReplacePrice(BNum, MarketData1.current); // Timer1 종료. Main.KillTimer(1); } } // 현재 실행된 Timer가 2이고, if (nEventID == 2) { // ??? Account1.SetUnfillOrderNumber(SNum); // 미체결수량이 존재하고, 미체결가격이 현재가와 다르다면, if (Account1.Unfill.count > 0 && Account1.Unfill.price != MarketData1.current) { // 가격을 현재가로 정정하여 정정주문. SID = Account1.OrderReplacePrice(SNum, MarketData1.current); // Timer2 종료. Main.KillTimer(2); } } } function Main_OnNotifyFill(NotifyFill) { // 주문 체결되면, if (NotifyFill.orderNum == BNum) { // Timer1 종료. Main.KillTimer(1); // 미체결수량이 체결되면, "Long OrderReplacePrice" 출력 Main.MessageLog("Long OrderReplacePrice"); } // 추문 체결되면, if (NotifyFill.orderNum == SNum) { // Timer2 종료 Main.KillTimer(2); // 미체결수량이 체결되면, "Short OrderReplacePrice" 출력 Main.MessageLog("Short OrderReplacePrice"); } }
프로필 이미지
yanartas
2017-12-13
2779
글번호 224262
답변완료

예스스팟 모니터에 텍스트 출력 문의

매수, 매도, 청산 실행시에 예스스탁 모니터에 텍스트 출력을 하고 싶은데 출력이 되지 않습니다. 수식에 오류가 있는지 알고 싶습니다 챠트객체 아이디도 챠드아이디와 동일 하고 스팟 적용시 붉은 색으로 적용 표시도 됐는데 최근 메세지에 텍스트가 출력 되지 않네요. 예스글로벌을 사용하고 있습니다. function system1_OnRiseSignal(Signal) { //매수신호 발생 if(Signal.signalKind == 1) { Main.MessageLog("1buy") Main.OrderBuy(Account1.number, CME.code, 1, CME.Ask(5), 2); } //매수청산신호 발생 if(Signal.signalKind == 2) { Main.MessageLog("2exitlong") Main.OrderSell(Account1.number, CME.code, 1, CME.Bid(5), 2); } //매도신호 발생 if(Signal.signalKind == 3) { Main.MessageLog("3sell") Main.OrderSell(Account1.number, CME.code, 1, CME.Bid(5), 2); } //매도청산신호발생 if(Signal.signalKind== 4) { Main.MessageLog("4exitshort") Main.OrderBuy(Account1.number, CME.code, 1, CME.Ask(5), 2); } }
프로필 이미지
밀집모자
2017-11-26
2821
글번호 224261
답변완료

문의 드립니다.

아래와 같이 수식을 작성했는데 별첨한 그림에서처럼 "주문오류"가 발생하고 체결이 안됩니다. 그리고 체결시 소리가 나도록 설정된 부분도 그림에서처럼 에러가 발생합니다. 오류를 수정하지 못하고 있습니다. 도움을 좀 부탁드립니다. 차트 3개 중에서 매수신호가 2곳에서 발생하면 매수, 한 곳이라도 매도신호 발생하면 청산 그리고 10틱 이익이면 익절청산, 10틱손해면 손절청산을 하려고 합니다. 아래는 차트 1의 수식이고 차트2나 차트3도 같은 형태입니다. =================== var SK1; var SK2; var SK3; function Main_OnStart() { SK1 = 0; SK2 = 0; SK3 = 0; } function Chart1_OnRiseSignal(Signal) { SK1 = Signal.signalKind; //현재차트1에서 매도신호 발생하고 차트2 또는 차트3에서 매도신호 발생중이면 매도 if (SK1 == 3 &&( SK2 == 3 || SK3 == 3) ) { //1계약 신호가격으로 매도주문 Account1.OrderSell(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩sell.wav"); } //잔고가 매도포지션이고 수량이 있을&#46468;만 if (Account1.Balance.position == 1 && Account1.Balance.count > 0) { //세 차트 중 하나라도 매도청산신호 발생하면 매도포지션 청산 if ( SK1 == 4 || SK2 == 4 || SK3 == 4 ) { Account1.OrderBuy(Main.GetOrderCode(Signal.code), Account1.Balance.count, 0, 1); //시장가 청산 // Account1.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 -10틱 이하이면 익절청산 if (MarketData1.current <= Account1.Balance.avgUnitCost - MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 { Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, 0, 1); // Account1.OrderBuy(Account1.Balance.code, Account1.Balance.count, MarketData1.Ask(1), 0); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 +10틱 이상이면 손절청산 if (MarketData1.current >= Account1.Balance.avgUnitCost + MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 { Account1.OrderBuy(Account1.Balance.code,Account1.Balance.count, 0, 1); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } } //현재차트1에서 매수신호 발생하고 차트2 또는 차트3에서 매수신호 발생중이면 매수 if (SK1 == 1 && ( SK2 == 1 || SK3 == 1) ) { //1계약 신호가격으로 매수주문 Account1.OrderBuy(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩buy.wav"); } //잔고가 매수포지션이고 매수잔고 수량이 있을&#46468; if (Account1.Balance.position == 2 && Account1.Balance.count > 0) { //세 차트 중 하나라도 매수청산신호 발생하면 매수포지션 청산 if ( SK1 == 2 || SK2 == 2 || SK3 == 2 ) { Account1.OrderSell(Main.GetOrderCode(Signal.code), 1, Signal.price, 0); PlaySound("C:₩WRFutures₩YesGlobalPro₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 +10틱 이상이면 익절청산 if (MarketData1.current >= Account1.Balance.avgUnitCost + MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 // if (MarketData1.current >= Account1.Balance.avgUnitCost + 0.25) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0, 1); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } //현재가가 잔고평단가 대비 -10틱 이하이면 손절청산 if (MarketData1.current <= Account1.Balance.avgUnitCost - MarketData1.GetTickSize()*10 ) //10틱이상 하락하면 //if (MarketData1.current <= Account1.Balance.avgUnitCost - 0.3) { Account1.OrderSell(Account1.Balance.code,Account1.Balance.count, 0, 1); PlaySound("C:₩예스트레이더₩data₩Sound₩alert.wav"); } } }
프로필 이미지
이심전심
2017-11-24
2856
글번호 224260