커뮤니티

예스랭귀지 Q&A

글쓰기
답변완료

수식 문의 드립니다.

안녕하세요. 매번 큰 도움 받고 있습니다. 각 분봉 마다 고가끼리의 연결선 / 저가끼리의 연결선을 차트상에 표현할 수 있는지요?
프로필 이미지
부활
2021-11-30
890
글번호 154052
지표
답변완료

함수

안녕하세요 함수 dayOi 가 무슨뜻인가요? 수고하세요
프로필 이미지
달마7
2021-11-30
652
글번호 154051
사용자 함수
답변완료

연속 음봉에 대한 종목검색에 대해 문의 드립니다.

연속으로 N일간 음봉이면서 하지만 종가는 항상 전날에 비해 상승하는 패턴의 종목을 검색하고자 합니다. 예를 들어 N=2일 경우, A종목의 이틀전(-2)의 종가가 1000일 때 하루전의 캔들은 음봉을 띠지만, 종가는 1100원 그리고 오늘도 캔들차트상 음봉을 띠지만, 종가는 전날 종가1100원보다 상승한 1300원을 보이는 종목들을 검색하고자 합니다. 수식 부탁드립니다. 항상 감사합니다.
프로필 이미지
바브로
2021-11-30
663
글번호 154050
검색
답변완료

문의 드립니다.

아래 로직에서 시가를 기준으로 주가가 시가가 위에 있을 때에만 매수 신호 진입과 청산 가능하도록 추가 부탁드립니다. Input : Period(10), MultiD(2); var : BBmd(0),BBup(0),BBdn(0); BBmd = ma(C,Period); BBup = BollBandUp(Period,MultiD); BBdn = BollBandDown(Period,MultiD); if C > BBmd and crossup(C[1],BBmd[1]) Then buy(); input : P(10); var1 = ma(C,P); if CrossDown(c,var1) Then ExitLong();
프로필 이미지
선물대장
2021-11-30
841
글번호 154048
시스템
답변완료

수식문의 드립니다

Input : Period(3),ntime(110000); var : value1(0,data2),value2(0,data3),Value3(0),Value5(0); value1 = ma(data2("c"),Period); value2 = ma(data3("C"),Period); value3 = value1 - value2; // 차 Value5 = data2("C")/data3("C")*100; // 비율 if Data2(Bdate != Bdate[1]) Then Condition1 = False; if Value5 < 110 Then Condition1 = true; if Condition1 == False and ((sdate != sdate[1] and stime >= ntime) or (sdate == sdate[1] and stime >= ntime and stime[1] < ntime)) Then Buy(); value5 값이 10분봉에서 첫봉부터 현재봉까지 계속 모든봉에서 100 이상일경우 11시에 매수하고 value5 값이 10분봉에서 첫봉부터 현재봉까지 계속 모든봉에서 100 이하일경우 11시에 매도하려 합니다 수식부탁 드립니다 감사합니다
프로필 이미지
비상8
2021-11-30
799
글번호 154042
시스템
답변완료

청산 후 재진입1

국내선물 데이트레이딩 손절로 청산된 경우 당일 저점을 3회 갱신하면 sell trailingstop으로 청산된 경우 당일 저점을 2회 갱신하면 sell 최소가격변화로 청산된 경우 당일 저점을 1회 갱시하면 sell 위 조건을 아래 수식에 추가하여 주십시요. ******************************************************************************* input : 이평1(12),이평2(13); input: loss(0.3),trail(1.5); input : 최소가격(99999),봉갯수(99999); Var :v1(0),v2(0); v1 = ma(downvol,이평1); v2 = ma(downvol,이평2); if CrossUp(v1,v2) Then Sell(); SetStopLoss(loss,PercentStop); SetStopTrailing(trail,0,PercentStop,1); SetStopInactivity(최소가격,봉갯수,PercentStop);
프로필 이미지
목마와숙녀
2021-12-16
764
글번호 154041
시스템
답변완료

지표 수식 부탁드립니다.

당일고점대비 -5, -10, -15, -20, -25, -30 수식 부탁드립니다. 감사합니다.
프로필 이미지
after512
2021-11-30
798
글번호 154040
지표
답변완료

수식 문의드립니다.

수고하십니다. 저번 수식에 수정을 조금 하고 싶습니다. 매수조건은 볼린저밴드 하단에 있을때, rsi지표가 30이하, 주가이동평균선이 5일선이 120일 이하일때, macd선이 macd시그널선 아래에 있을때 분할매수하고 매도조건은 볼린저밴드 상단에 있을때, rsi지표가 70이상, 주가이동평균선이 5일선이 120일 이상일때, macd선이 macd시그널선 위에 있을때 분할매도하는 input : BBPeriod(20),dv(5),RSIPeriod(10),maPeriod1(5),maPeriod2(20),short(12),long(26),sig(9); input : 매수금액(100000),매도금액(100000); var : BBup(0),BBdn(0),RSIV(0),mav1(0),mav2(0),macdv(0),macds(0);; BBup = BollBandUp(BBPeriod,dv); BBdn = BollBandDown(BBPeriod,dv); RSIV = RSI(RSIPeriod); mav1 = ma(C,maPeriod1); mav2 = ma(C,maPeriod2); macdv = macd(short,long); macds = Ema(macdv,sig); if C < bbdn and RSIV <= 30 and mav1 < mav2 and macdv < macds Then Buy("b",OnClose,DEF,Floor(매수금액/C)); if MarketPosition == 1 and C > AvgEntryPrice and C > bbup and RSIV >= 70 and mav1 > mav2 and macdv > macds Then ExitLong("bx",OnClose,DEF,"",Floor(매도금액/C),2); 이렇게 작성해주셨는데 1시간봉으로 볼때 볼린저밴드랑 주가이평선은 일봉기준으로 하고 rsi, macd는 1시간봉기준으로요. 그리고 당일 거래 횟수를 제한하고 싶은데 하루 3번만 거래하는식이 가능할까요? 감사합니다.
프로필 이미지
필명이요
2021-11-30
727
글번호 154039
시스템
답변완료

예스스팟의 주문체결통보 객체가 이상합니다.

안녕하세요. 언제나 친절한 답변에 감사드립니다. 파이선 등의 외부 프로그램에서 데이터베이스에 명령값 등을 수출하고, 그걸 예스스팟의 데이터베이스 객체로 읽어 예스스팟의 매매를 실행하는 전략을 만들었습니다. 그런데 이 전략을 오일, 골드 종목별로 여러개 띄울때 문제가 생깁니다. 종목별로 데이터베이스 테이블 명과 Chart1 의 종목 등을 변경 적용했을때, 주문체결통보객체(Main_OnNotifyFill)에서 반환값이 전략간 구분이 안가고 모든게 global 변수 처리돼 섞이는 것 같습니다. 주문접수응답 객체(Main_OnOrderResponse)는 종목별 전략 간에 섞이지 않는 것같습니다. 그런데 주문체결통보객체는 종목별 전략 간에 섞입니다. 이게 원래 그런건지 봐주십시오. 감사합니다. 첨부파일의 전략을 오일용으로 하나, 데이터베이스 테이블명과 Chart1 객체 설정을 바꿔서 골드용으로 또 하나 이렇게 전략 2개를 만들고 실행했을때 Main.MessageList 출력을 보면 jumunJunCode 가 종목별로 달라야 하는데 같은것으로 설정되는 문제를 첨부 파일 그림에서 볼 수 있습니다. ##################### 예스스팟 전략 ######################### var tableEreum="YESSPOT_IMSI_OIL"; // 마리아디비 테이블 이름 - 종목별. // 골드 종목시 "YESSPOT_IMSI_GOLD" var sqlSel*ct="0"; var fieldCountVV=0; var sql_rra_positionGo=new Array(); var jnibSuryang=2; var hhPythonPositionBalryung=0; var positionGoSeHengOn=0; var hhDocDoinpositionGoAnneBun=0; var position=0; var hhJnibga=0; var jumunJunCode="0"; var choKkuenHurum=1; var sql_rra=0; var hhGejwaBun=0; var isNormalVV=0; var orderNumVV=0; var orderCountVV=0; function Main_OnStart() { Main.MessageList("계좌번호=",hhGejwaBun); } ////////////////////////// Chart1==AD_position 2틱인. function Chart1_OnBarAppended(nData) { if (nData==1){ if (choKkuenHurum==1){ sqlSel*ct="count(ANNE) from "; sqlSel*ct+=tableEreum; sqlSel*ct+=";"; // Main.MessageList("sqlSel*ct=",sqlSel*ct); DataBase1.Sel*ct(sqlSel*ct,"AD"); sql_rra=DataBase1.GetFieldValue(0); if (sql_rra>=1){ ////////////// 포지션 데이터베이스 읽기 sqlSel*ct="* from "; sqlSel*ct+=tableEreum; sqlSel*ct+=" ORDER BY ANNE DESC LIMIT 1;"; // Main.MessageList("sqlSel*ct=",sqlSel*ct); DataBase1.Sel*ct(sqlSel*ct,"AD"); fieldCountVV=DataBase1.GetFieldCount(); for (var i=0; i<=fieldCountVV-1; i++){ sql_rra_positionGo[i]=DataBase1.GetFieldValue(i); } if (Math.abs(sql_rra_positionGo[4])==1){ choKkuenHurum=2; // 실시간 포지션 수출이 시작됐으면 흐름 2 영구 부여. } } } ////////////// 포지션 데이터베이스 읽기 if (choKkuenHurum==2){ sqlSel*ct="* from "; sqlSel*ct+=tableEreum; sqlSel*ct+=" ORDER BY ANNE DESC LIMIT 1;"; // Main.MessageList("sqlSel*ct=",sqlSel*ct); DataBase1.Sel*ct(sqlSel*ct,"AD"); fieldCountVV=DataBase1.GetFieldCount(); for (var i=0; i<=fieldCountVV-1; i++){ sql_rra_positionGo[i]=DataBase1.GetFieldValue(i); // 결. 배열에 마지막 행 배치한. } hhPythonPositionBalryung=0; hhPythonPositionBalryung=sql_rra_positionGo[4]; ////////////// 포지션 데이터베이스 새행 온 변수 발령 positionGoSeHengOn=0; if (sql_rra_positionGo[0]>hhDocDoinpositionGoAnneBun){ positionGoSeHengOn=1; // 파이썬 포지션 새 포지션 발령 1 부여 hhDocDoinpositionGoAnneBun=sql_rra_positionGo[0]; } Main.MessageList("파이썬 포지션고 새행 온 positionGoSeHengOn=",positionGoSeHengOn); } //////////////////////////// 포지션 진입 if (positionGoSeHengOn==1){ if (position==0){ // 포지션 없을 시 if (hhPythonPositionBalryung==1){ position=1; // 상방 1 hhJnibga=Chart1.GetClose(nData,0); jumunJunCode=Chart1.GetCode(1); Main.MessageList("상방 진입 주문하는"); Account1.OrderBuy(jumunJunCode,jnibSuryang,hhJnibga,2); } else if (hhPythonPositionBalryung==-1){ position=-1; // 하방 -1 hhJnibga=Chart1.GetClose(nData,0); jumunJunCode=Chart1.GetCode(1); Main.MessageList("하방 진입 주문하는"); Account1.OrderSell(jumunJunCode,jnibSuryang,hhJnibga,2); } } else if (position==1){ // 포지션 상방시 if (hhPythonPositionBalryung==10){ position=0; hhJnibga=Chart1.GetClose(nData,0); Main.MessageList("상방 청산 주문하는"); Account1.OrderSell(jumunJunCode,jnibSuryang,hhJnibga,2); } } else if (position==-1){ // 포지션 하방시 if (hhPythonPositionBalryung==-10){ position=0; hhJnibga=Chart1.GetClose(nData,0); Main.MessageList("하방 청산 주문하는"); Account1.OrderBuy(jumunJunCode,jnibSuryang,hhJnibga,2); } } } Main.MessageList("현재 position=",position," hhPythonPositionBalryung=",hhPythonPositionBalryung," jumunJunCode=",jumunJunCode," orderNumVV=",orderNumVV," orderCountVV=",orderCountVV," hhDocDoinpositionGoAnneBun=",hhDocDoinpositionGoAnneBun); } } function Main_OnOrderResponse(OrderResponse) { isNormalVV=OrderResponse.isNormal; orderNumVV=OrderResponse.orderNum; orderCountVV=OrderResponse.orderCount; Account1.SetUnfillOrderNumber(orderNumVV); // 미체결 } function Main_OnNotifyFill(NotifyFill) { jumunJunCode=NotifyFill.code; // 주문 응답시 코드 재부여 } ###################### 데이터베이스 쿼리 ######################### sql="CREATE TABLE yesspot_imsi_oil (ID INT, SDATE INT, STIME BIGINT, C INT, POSITIONBALRYUNG INT, POSITION INT, JANGJUN_GESU INT);" ############# 설명 1. ID 는 행별로 반드시 1증씩 하는 값이 입력돼야 합니다. 2. SDATE, STIME 은 아무 값이 입력돼도 됩니다. 3. POSITIONBALRYUNG 컬럼엔 포지션이 1(매수 진입)이 날시는 1이, 매수 포지션 청산시는 10 이 입력돼야 합니다. 매도 진입시는 -1이 매도 포지션 청산시는 -10 이 입력돼야 합니다. 4. 매수 포지션을 가질 때는 1, 매도 포지션은 -1, 포지션이 없을시는 0 이 입력돼야 합니다. 5. JANGJUN_GESU 는 매번 0 이 입력되면 됩니다. ############# 예시 파이선에서 매수 포지션 진입 명령을 수출할 시. sql="ins*rt into yesspot_imsi_oil values (1, 1234, 1234, 77.02, 1, 1);" 파이선에서 매수 포지션 청산 명령을 수출할 시. sql="ins*rt into yesspot_imsi_oil values (2, 1234, 1234, 77.12, 10, 0);"
프로필 이미지
로봇짱
2021-11-30
901
글번호 154035
시스템
답변완료

문의드립니다.

안녕하세요. var : HV(0),HC(0),HL(0),HCT(0),HCI(0); # 기준봉 if v[1]==HV[1] && c[1]>c[2]*1.015 then # 전봉이 당일최고거래량.. +1.5% 이상 양봉 { value1 = c[1]/c[2]; value2 = v[1]; value3 = h; # 기준봉 고점 - 빨강점선으로 출력 value9 = index; } var1 = (c/c[1]) / value1; # 당봉폭 / 기준봉폭 var2 = v / Value2; if Bdate != Bdate[1] Then { HV = 0; HC = 0; HCT = 0; HCI = 0; } Else { if HV == 0 or (HV > 0 and V > HV) Then HV = V; if var1 > 1 and Var2 > 1 Then # 당봉폭이 기준봉폭 보다 크다 - 이 조건이 충족되지 않습니다 { HC = C; HL = L; HCT = sTime; HCI = Index; } Else { if HC > 0 and C > HC Then { HC = C; HL = L; HCT = sTime; HCI = Index; } } } if HCI > 0 and Index < HCI+7 Then plot1(HC,"HC"); #검정점선 plot2(value3*1.003,"기준봉"); # 빨강점선 74836 답변 받은 종목검색된 종목이 좀 이상해서 위그림의 지표로 출력하였습니다. 기준봉의 양봉크기를 3%에서 1.5%로 수정하였습니다. 위 그림과 같이 (제이시스 메디칼 오늘 1분봉) 기준봉은 양봉조건인데 노랑동그라미의 음봉 고점에서 출력되었고 HC 조건의 var1 > 1(기준봉의 양봉 크기 보다 더 크다 조건도 지키지 않습니다. 수식 수정 부탁드립니다. ================================================ 안녕하세요 예스스탁입니다. 문의하신 내용에서는 var11,var12변수는 필요가 없습니다. var1,var2값을 이용하시면 됩니다. var1>1 && var2>0.8 조건을 만족하면 새로 지정하므로 해당 조건이 만족하면 해당봉의 고가로 초기화하고 이후 var11>1 && var12>0.8 조건이 만족하지 않을떄만 갱신하게 작성해 드립니다. var : HV(0),HC(0),HL(0),HCT(0),HCI(0); # 기준봉 if v[1]==HV[1] && c[1]>c[2]*1.03 then # 전봉이 당일최고거래량.. +3% 이상 양봉 { value1 = c[1]/c[2]; value2 = v[1]; value9 = index; } var1 = (c/c[1]) / value1; # 당봉폭 / 기준봉 폭 var2 = v / Value2; # 당봉거래량 / 기준봉거래량 if Bdate != Bdate[1] Then { HV = 0; # 당일최고거래량 HC = 0; # 최고종가양봉 HCT = 0; # 최고종가양봉의 시간 HCI = 0; } Else { if HV == 0 or (HV > 0 and V > HV) Then HV = V; if var1 > 1 and Var2 > 0.8 Then { HC = C; # 최고종가양봉의 종가 HL = L; # 최고종가양봉의 저가 HCT = sTime; # 최고종가양봉의 시간 HCI = Index; } Else { if HC > 0 and C > HC Then { HC = C; # 최고종가양봉의 종가 HL = L; # 최고종가양봉의 저가 HCT = sTime; # 최고종가양봉의 시간 HCI = Index; } } } if HCI > 0 and Index < HCI+7 Then Find(1); 즐거운 하루되세요 > land22 님이 쓴 글입니다. > 제목 : 문의드립니다. > 안녕하세요. var : HV(0),HC(0),HL(0),HCT(0); if Bdate != Bdate[1] Then { HV = 0; # 당일최고거래량 HC = 0; # 최고종가양봉 HCT = 0; # 최고종가양봉의 시간 Condition1 = False; } Else { if HV == 0 or (HV > 0 and V > HV) Then HV = V; if HC == 0 or (HC > 0 and C > HC) Then # 당일최고종가양봉 { HC = C; # 최고종가양봉의 종가 HL = L; # 최고종가양봉의 저가 HCT = sTime; # 최고종가양봉의 시간 } } # 기준봉 if v[1]==HV[1] && c[1]>c[2]*1.03 then # 전봉이 당일최고거래량.. +3% 이상 양봉 { value1 = c[1]/c[2]; value2 = v[1]; value9 = index; } var1 = (c/c[1]) / value1; # 당봉폭 / 기준봉 폭 var2 = v / Value2; # 당봉거래량 / 기준봉거래량 If C==HC && L== HL then # 당봉종가가 최고종가이면 { var11 = var1; # 최고종가봉의 폭비율 var12 = var2; # 최고종가봉의 거래량비율 } if index >= value9 && #기준봉 이후부터 HCT >= 091000 && # 최고종가봉 시간이 9시10분 후부터 HC>DayClose(1)*1.05 && HC<DayClose(1)*1.25 && # 당일최고종가가 5%~25% 사이 var11>1 && var12>0.8 Then Condition1 = true; if Condition1 == true Then Find(1); 위 수식은 분봉에서 위 조건 만족한 적이 있는 모든 종목을 검색하는 검색식입니다. 만들고 싶은 종목검색식은 최고종가봉 HC에서 var11>1 && var12>0.8를 만족하면 이 HC는 지정하고 이후 HC가 갱신되어도 var11>1 && var12>0.8 조건을 만족하지 않으면 (HC가 갱신되고 var11>1 && var12>0.8 조건을 만족하면 새로 지정함) 조건만족한 HC 발생봉부터 7봉 내에 있는 종목을 검색하는 수식을 알려주세요. 분봉이라서 HC봉만 검색하면 바로 사라지기 때문입니다. 수고하세요.
프로필 이미지
land22
2021-12-02
721
글번호 154032
종목검색