커뮤니티

문의드립니다.

프로필 이미지
종호
2022-05-30 11:43:58.0
1334
글번호 225666
답변완료
아래 수식은 예스 랭귀지에서 매수 또는 매도후 피라미딩 진입후에 손절하가나 익절하는 수식입니다. 차트에서 진입 신호가 나올 때 1차로 상대3호가로 매매하고 10초가 되어서도 거래가 안되면 2차로 상대3호가로 다시 10초 기다리고 그래고 안되면 3차로 시장가 매매를 하고요 청산시에는 피라미딩으로 여러개가 동시에 진입된 것들이 청산되어야 하는데요. 청산물량들이 많으므로 청산물량이 10개 이하일 때는 전량 시장가 청산하고요. 시장가로도 미체결 된 것이 있으면 확인하고 다시 청산합니다. 청산물량이10게 이상일 때부터는 5초 간격으로 10개씩 시장가 청산하고요. 마지막 잔량이 10개 이하일 때는 전부를 시장가 청산합니다. 마지막 시장가로도 미체결 된 것이 있으면 확인하고 다시 청산합니다. 예스스팟 수식들을 부탁드립니다. 그리고 별도로 예수트트레이더 매매 차트 신호를 안거치고 예스스팟 자체식으로 매매가 되도록 수식을 작성하면 buy("bb",AtStop,LatestEntryPrice(0)+PriceScale*매수간격); 처럼 예수랭귀지는 매수간격이 정확이 차이가 나는 지정가 매매를 할 수 없었습니다. 예스스팟수식은 매수간격을 정확히 지키는 지정가 매수 매도가 가능한 지요? 지정가로 매수간격을 지키는 수식이 가능하다면 스팟 수식을 부탁드립니다. if C > A Then{ t=1; if MarketPosition() == 0 and t==1 Then buy("매수"); } if C < B Then { t=-1 ; if MarketPosition() ==0 and t==-1 Then Sell("매도"); } if MarketPosition == 1 Then { buy("bb",AtStop,LatestEntryPrice(0)+PriceScale*매수간격); if MaxEntries == 1 Then ExitLong("매수1손절",AtStop,AAA-PriceScale*손절변수); if MaxEntries >= 2 Then ExitLong("bx",AtStop,BBB); ExitLong("매수이익x",AtLimit,BBB+PriceScale*이익변수 ); } if MarketPosition == -1 Then { Sell("ss",AtStop,LatestEntryPrice(0)-PriceScale*매도간격); if MaxEntries == 1 Then ExitShort("매도1손절",AtStop,CCC+PriceScale*손절변수 ); if MaxEntries >= 2 Then ExitShort("sx",AtStop,DDD); ExitShort("매도이익",AtLimit,DDD-PriceScale*이익변수); }
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2022-07-28 16:45:14.0

안녕하세요 예스스타입니다. 1 시간상 매수와 매수청산신호에 대해서만 작성해 드립니다. 아래식 참고하셔서 수정보완해 사용하시기 바랍니다. 스크립트 객체설정 : 차트객체 추가 --> 속성에서 객체명 Chart1, 아이디 연결 계좌객체 추가 --> 속성에서 객체명 Account1, 계좌번호 지정 var orderCode; var BID,SID,BNum,SNum; var timer1,BCID,BCV,timer2; var BXV; function Main_OnStart() { Main.MessageList("Start"); orderCode = Main.GetOrderCode(Chart1.GetCode(1)); Main.ReqMarketData(orderCode); } function Main_OnRcvMarketData(MarketData) { MK = MarketData; } function Chart1_OnRiseSignal(Signal) { if (Signal.signalKind == 1) { BID = Account1.OrderBuy(orderCode,Signal.count, MK.Ask(3),0); Main.SetTimer(1,10000); timer1 = 0; } if (Signal.signalKind == 1) { BXV = Signal.count; Account1.OrderSell(orderCode,Math.min(BXV,10), 1, 0); BXV = BXV-Math.min(BXV,10); if (BXV > 0) { Main.SetTimer(2, 5000); } } } //주문응답 function Main_OnOrderResponse(OrderResponse) { if (OrderResponse.orderID == BID) { BNum = OrderResponse.orderNum; } if (OrderResponse.orderID == BCID) { Account1.OrderBuy(orderCode, BCV, 0, 1); } if (OrderResponse.orderID == SID) { SNum = OrderResponse.orderNum; } } //타이머 동작 function Main_OnTimer(nEventID) { if (nEventID == 1) { timer1 = timer1+1; Account1.SetUnfill(BNum); if (timer1 == 1) { if (Account1.Unfill.count > 0) { var RP = MK.Ask(3); if (RP != Account1.Unfill.price) { BID = Account1.OrderReplacePrice(Bnum,RP); } } } if (timer1 == 2) { Main.KillTimer(1); if (Account1.Unfill.count > 0) { BCV = Account1.Unfill.count; BCID = Account1.OrderCancel(Bnum); } } } if (nEventID == 2) { Account1.OrderSell(orderCode,Math.min(BXV,10), 1, 0); BXV = BXV-Math.min(BXV,10); if (BXV == 0) { Main.KillTimer(2); } } } 2 buy("bb",AtStop,LatestEntryPrice(0)+PriceScale*매수간격); 는 최근진입가+지정한틱수보다 가격이 같거나 크면 매수하는 내용입니다. 위 조건으로 신호가 발생하면 설정에 지정한 매매가격으로 주문이 집행됩니다. 가격이 해당 값 아래였다가 갭으로 상승하면 해당값보다 큰 값에서 신호가 발생될수도 있습니다. 해당 부분은 스팟으로 코딩해도 마찬가지입니다. 현재가가 해당값하고 같다라고만 지정하면 체결시세에 갭이 있을때 신호가 발생하지 확률이 생기게 되고 같거나 크다라고 지정하면 위와 같이 갭이 있을때 지정한 가격보다 큰가격에 주문이 집행될수도 있습니다. 즐거운 하루되세요 > 종호 님이 쓴 글입니다. > 제목 : 문의드립니다. > 아래 수식은 예스 랭귀지에서 매수 또는 매도후 피라미딩 진입후에 손절하가나 익절하는 수식입니다. 차트에서 진입 신호가 나올 때 1차로 상대3호가로 매매하고 10초가 되어서도 거래가 안되면 2차로 상대3호가로 다시 10초 기다리고 그래고 안되면 3차로 시장가 매매를 하고요 청산시에는 피라미딩으로 여러개가 동시에 진입된 것들이 청산되어야 하는데요. 청산물량들이 많으므로 청산물량이 10개 이하일 때는 전량 시장가 청산하고요. 시장가로도 미체결 된 것이 있으면 확인하고 다시 청산합니다. 청산물량이10게 이상일 때부터는 5초 간격으로 10개씩 시장가 청산하고요. 마지막 잔량이 10개 이하일 때는 전부를 시장가 청산합니다. 마지막 시장가로도 미체결 된 것이 있으면 확인하고 다시 청산합니다. 예스스팟 수식들을 부탁드립니다. 그리고 별도로 예수트트레이더 매매 차트 신호를 안거치고 예스스팟 자체식으로 매매가 되도록 수식을 작성하면 buy("bb",AtStop,LatestEntryPrice(0)+PriceScale*매수간격); 처럼 예수랭귀지는 매수간격이 정확이 차이가 나는 지정가 매매를 할 수 없었습니다. 예스스팟수식은 매수간격을 정확히 지키는 지정가 매수 매도가 가능한 지요? 지정가로 매수간격을 지키는 수식이 가능하다면 스팟 수식을 부탁드립니다. if C > A Then{ t=1; if MarketPosition() == 0 and t==1 Then buy("매수"); } if C < B Then { t=-1 ; if MarketPosition() ==0 and t==-1 Then Sell("매도"); } if MarketPosition == 1 Then { buy("bb",AtStop,LatestEntryPrice(0)+PriceScale*매수간격); if MaxEntries == 1 Then ExitLong("매수1손절",AtStop,AAA-PriceScale*손절변수); if MaxEntries >= 2 Then ExitLong("bx",AtStop,BBB); ExitLong("매수이익x",AtLimit,BBB+PriceScale*이익변수 ); } if MarketPosition == -1 Then { Sell("ss",AtStop,LatestEntryPrice(0)-PriceScale*매도간격); if MaxEntries == 1 Then ExitShort("매도1손절",AtStop,CCC+PriceScale*손절변수 ); if MaxEntries >= 2 Then ExitShort("sx",AtStop,DDD); ExitShort("매도이익",AtLimit,DDD-PriceScale*이익변수); }