커뮤니티

수식문의드립니다

프로필 이미지
jshwang2
2022-05-13 12:26:50
1065
글번호 158838
답변완료
안녕하세요~ 오전에 답변주신것 바탕으로 array 사용해 수식을 줄였는데 줄인건 진입이 일어나지 않는데 원인을 못찾겠습니다... 1. 원래수식 input : ML(20), L01(12083), L02(12043), L03(12003), L04(11963), L05(11923), L06(11883), L07(11843), L08(11803), L09(11763), L10(11723); var : Bsystem(true), Ssystem(true); // 매수진입 조건 if Bsystem == true Then { if MarketPosition == 0 && condition11 == true Then buy("b01", AtLimit, L01); if MarketPosition == 0 && condition12 == true Then buy("b02", AtLimit, L02); if MarketPosition == 0 && condition13 == true Then buy("b03", AtLimit, L03); if MarketPosition == 0 && condition14 == true Then buy("b04", AtLimit, L04); if MarketPosition == 0 && condition15 == true Then buy("b05", AtLimit, L05); if MarketPosition == 0 && condition16 == true Then buy("b06", AtLimit, L06); if MarketPosition == 0 && condition17 == true Then buy("b07", AtLimit, L07); if MarketPosition == 0 && condition18 == true Then buy("b08", AtLimit, L08); if MarketPosition == 0 && condition19 == true Then buy("b09", AtLimit, L09); if MarketPosition == 0 && condition10 == true Then buy("b10", AtLimit, L10); if MarketPosition == 0 && CrossDown(C, L01+ML) Then condition11 = true; if MarketPosition == 0 && CrossDown(C, L02+ML) Then condition12 = true; if MarketPosition == 0 && CrossDown(C, L03+ML) Then condition13 = true; if MarketPosition == 0 && CrossDown(C, L04+ML) Then condition14 = true; if MarketPosition == 0 && CrossDown(C, L05+ML) Then condition15 = true; if MarketPosition == 0 && CrossDown(C, L06+ML) Then condition16 = true; if MarketPosition == 0 && CrossDown(C, L07+ML) Then condition17 = true; if MarketPosition == 0 && CrossDown(C, L08+ML) Then condition18 = true; if MarketPosition == 0 && CrossDown(C, L09+ML) Then condition19 = true; if MarketPosition == 0 && CrossDown(C, L10+ML) Then condition10 = true; if CrossDown(L, L01) Then condition11 = False; if CrossDown(L, L02) Then condition12 = False; if CrossDown(L, L03) Then condition13 = False; if CrossDown(L, L04) Then condition14 = False; if CrossDown(L, L05) Then condition15 = False; if CrossDown(L, L06) Then condition16 = False; if CrossDown(L, L07) Then condition17 = False; if CrossDown(L, L08) Then condition18 = False; if CrossDown(L, L09) Then condition19 = False; if CrossDown(L, L10) Then condition10 = False; } //매도진입 조건 if Ssystem == true Then { if MarketPosition == 0 && Condition21 == true Then Sell("s01",AtLimit,L01); if MarketPosition == 0 && Condition22 == true Then Sell("s02",AtLimit,L02); if MarketPosition == 0 && Condition23 == true Then Sell("s03",AtLimit,L03); if MarketPosition == 0 && Condition24 == true Then Sell("s04",AtLimit,L04); if MarketPosition == 0 && Condition25 == true Then Sell("s05",AtLimit,L05); if MarketPosition == 0 && Condition26 == true Then Sell("s06",AtLimit,L06); if MarketPosition == 0 && Condition27 == true Then Sell("s07",AtLimit,L07); if MarketPosition == 0 && Condition28 == true Then Sell("s08",AtLimit,L08); if MarketPosition == 0 && Condition29 == true Then Sell("s09",AtLimit,L09); if MarketPosition == 0 && Condition20 == true Then Sell("s10",AtLimit,L10); if MarketPosition == 0 && CrossUp(C, L01-ML) Then condition21 = true; if MarketPosition == 0 && CrossUp(C, L02-ML) Then condition22 = true; if MarketPosition == 0 && CrossUp(C, L03-ML) Then condition23 = true; if MarketPosition == 0 && CrossUp(C, L04-ML) Then condition24 = true; if MarketPosition == 0 && CrossUp(C, L05-ML) Then condition25 = true; if MarketPosition == 0 && CrossUp(C, L06-ML) Then condition26 = true; if MarketPosition == 0 && CrossUp(C, L07-ML) Then condition27 = true; if MarketPosition == 0 && CrossUp(C, L08-ML) Then condition28 = true; if MarketPosition == 0 && CrossUp(C, L09-ML) Then condition29 = true; if MarketPosition == 0 && CrossUp(C, L10-ML) Then condition20 = true; if CrossUp(H, L01) Then Condition21 = False; if CrossUp(H, L02) Then Condition22 = False; if CrossUp(H, L03) Then Condition23 = False; if CrossUp(H, L04) Then Condition24 = False; if CrossUp(H, L05) Then Condition25 = False; if CrossUp(H, L06) Then Condition26 = False; if CrossUp(H, L07) Then Condition27 = False; if CrossUp(H, L08) Then Condition28 = False; if CrossUp(H, L09) Then Condition29 = False; if CrossUp(H, L10) Then Condition20 = False; } // 청산 if marketposition == 1 Then { ExitLong("exitL1",AtLimit,EntryPrice+ML); ExitLong("exitL2",AtStop,EntryPrice-ML); } if marketposition == -1 Then { ExitShort("exitS1",AtLimit,EntryPrice-ML); ExitShort("exitS2",AtStop,EntryPrice+ML); } 2. array 사용한 수식 input : ML(20); var : Bsystem(true), Ssystem(true), i(0); array : LL[9](0), BC[9](False), SC[99](False); LL[5] = 11923; For i = 0 to 4 {LL[4-i] = LL[5-i] + 2*ML;} For i = 5 to 9 {LL[i+1] = LL[i] - 2*ML;} MessageLog("L1 %.2f, L2 %.2f, L3 %.2f, L4 %.2f, L5 %.2f", LL[2] , LL[4], LL[5], LL[6], LL[7]); // 매수진입 조건 if Bsystem == true Then { For i = 0 to 9 { if MarketPosition == 0 && BC[i] == true Then buy("b", AtLimit, LL[i]); if MarketPosition == 0 && CrossDown(C,LL[i]+ML) Then BC[i] = true; if CrossDown(L, LL[i])then BC[i] = False; } } //매도진입 조건 if Ssystem == true Then { For i = 0 to 9 { if MarketPosition == 0 && SC[i] == true Then Sell("s", AtLimit, LL[i]); if MarketPosition == 0 && CrossUp(C,LL[i]-ML) Then SC[i] = true; if Crossup(H, LL[i])then SC[i] = False; } } // 청산 if marketposition == 1 Then { ExitLong("exitL1",AtLimit,EntryPrice+ML); ExitLong("exitL2",AtStop,EntryPrice-ML); } if marketposition == -1 Then { ExitShort("exitS1",AtLimit,EntryPrice-ML); ExitShort("exitS2",AtStop,EntryPrice+ML); } ----------------------------------------------------- 확인해보면 1.은 진입이 정상적으로 일어나는데 줄이기만한 2.는 진입이 아얘 일어나지 않는데 원인을 못찾겠습니다ㅠ 확인해주시면 감사하겠습니다!
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2022-05-13 14:40:40

안녕하세요 예스스탁입니다. 1 변경하신 수식을 적용한 결과 첨부된 그림과 같이 신호가 발생하고 있습니다. 위가 원식이고 아래가 수정하신 수식입니다. 2 보시면 원식과 수정식은 신호가 발생하는 횟수에서 차이가 있습니다. 진입에 사용하는 atlimit은 봉완성시에 조건이 충족되면 지정한 가격을 셋팅하고 다음봉에서 셋팅되가격 이하나 이상의 시세가 발생하면 매수나 매도신호가 발생합니다. 원식에서는 각각 buy나 sell을 조건별로 나열해서 작성했으므로 하나의 봉에서 if 조건이 여러개가 만족하면 atlimit값도 여러개 셋팅이 되고 다음봉에서 여러개 셋팅된 값들 중 하나라도 가격조건이 충족되면 신호가 발생하게 됩니다. 하지만 for문에서는 한개만 셋팅이 되므로 셋팅된 한개값에 대해서 다음봉에서 가격충족을 하지 못하면 신호 발생이 없습니다. 즉 구현하시는 내용은 조건별로 각각 buy나 sell이 사용되게 작성하셔야 하는 내용입니다. for문으로 줄이시면 원식에서 여러개 값을 셋팅해서 감시하는 효과가 없어지게 됩니다. 3 아래는 추가로 답변드리는 부분입니다. 원식에서는 L01~L10까지 지정한 값이 10개 인데 수정된 식에서는 LL[0]~LL[10]까지 총 11개의 값을 사용하고 있습니다. L05를 기준으로 원식과 같이 갯수를 맞추신다면 아래와 같이 작성해서 사용하시면 됩니다. LL[5] = 11923; For i = 4 downto 1 { LL[i] = LL[i+1] + 2*ML; } For i = 6 to 10 { LL[i] = LL[i-1] - 2*ML; } 즐거운 하루되세요 > jshwang2 님이 쓴 글입니다. > 제목 : 수식문의드립니다 > 안녕하세요~ 오전에 답변주신것 바탕으로 array 사용해 수식을 줄였는데 줄인건 진입이 일어나지 않는데 원인을 못찾겠습니다... 1. 원래수식 input : ML(20), L01(12083), L02(12043), L03(12003), L04(11963), L05(11923), L06(11883), L07(11843), L08(11803), L09(11763), L10(11723); var : Bsystem(true), Ssystem(true); // 매수진입 조건 if Bsystem == true Then { if MarketPosition == 0 && condition11 == true Then buy("b01", AtLimit, L01); if MarketPosition == 0 && condition12 == true Then buy("b02", AtLimit, L02); if MarketPosition == 0 && condition13 == true Then buy("b03", AtLimit, L03); if MarketPosition == 0 && condition14 == true Then buy("b04", AtLimit, L04); if MarketPosition == 0 && condition15 == true Then buy("b05", AtLimit, L05); if MarketPosition == 0 && condition16 == true Then buy("b06", AtLimit, L06); if MarketPosition == 0 && condition17 == true Then buy("b07", AtLimit, L07); if MarketPosition == 0 && condition18 == true Then buy("b08", AtLimit, L08); if MarketPosition == 0 && condition19 == true Then buy("b09", AtLimit, L09); if MarketPosition == 0 && condition10 == true Then buy("b10", AtLimit, L10); if MarketPosition == 0 && CrossDown(C, L01+ML) Then condition11 = true; if MarketPosition == 0 && CrossDown(C, L02+ML) Then condition12 = true; if MarketPosition == 0 && CrossDown(C, L03+ML) Then condition13 = true; if MarketPosition == 0 && CrossDown(C, L04+ML) Then condition14 = true; if MarketPosition == 0 && CrossDown(C, L05+ML) Then condition15 = true; if MarketPosition == 0 && CrossDown(C, L06+ML) Then condition16 = true; if MarketPosition == 0 && CrossDown(C, L07+ML) Then condition17 = true; if MarketPosition == 0 && CrossDown(C, L08+ML) Then condition18 = true; if MarketPosition == 0 && CrossDown(C, L09+ML) Then condition19 = true; if MarketPosition == 0 && CrossDown(C, L10+ML) Then condition10 = true; if CrossDown(L, L01) Then condition11 = False; if CrossDown(L, L02) Then condition12 = False; if CrossDown(L, L03) Then condition13 = False; if CrossDown(L, L04) Then condition14 = False; if CrossDown(L, L05) Then condition15 = False; if CrossDown(L, L06) Then condition16 = False; if CrossDown(L, L07) Then condition17 = False; if CrossDown(L, L08) Then condition18 = False; if CrossDown(L, L09) Then condition19 = False; if CrossDown(L, L10) Then condition10 = False; } //매도진입 조건 if Ssystem == true Then { if MarketPosition == 0 && Condition21 == true Then Sell("s01",AtLimit,L01); if MarketPosition == 0 && Condition22 == true Then Sell("s02",AtLimit,L02); if MarketPosition == 0 && Condition23 == true Then Sell("s03",AtLimit,L03); if MarketPosition == 0 && Condition24 == true Then Sell("s04",AtLimit,L04); if MarketPosition == 0 && Condition25 == true Then Sell("s05",AtLimit,L05); if MarketPosition == 0 && Condition26 == true Then Sell("s06",AtLimit,L06); if MarketPosition == 0 && Condition27 == true Then Sell("s07",AtLimit,L07); if MarketPosition == 0 && Condition28 == true Then Sell("s08",AtLimit,L08); if MarketPosition == 0 && Condition29 == true Then Sell("s09",AtLimit,L09); if MarketPosition == 0 && Condition20 == true Then Sell("s10",AtLimit,L10); if MarketPosition == 0 && CrossUp(C, L01-ML) Then condition21 = true; if MarketPosition == 0 && CrossUp(C, L02-ML) Then condition22 = true; if MarketPosition == 0 && CrossUp(C, L03-ML) Then condition23 = true; if MarketPosition == 0 && CrossUp(C, L04-ML) Then condition24 = true; if MarketPosition == 0 && CrossUp(C, L05-ML) Then condition25 = true; if MarketPosition == 0 && CrossUp(C, L06-ML) Then condition26 = true; if MarketPosition == 0 && CrossUp(C, L07-ML) Then condition27 = true; if MarketPosition == 0 && CrossUp(C, L08-ML) Then condition28 = true; if MarketPosition == 0 && CrossUp(C, L09-ML) Then condition29 = true; if MarketPosition == 0 && CrossUp(C, L10-ML) Then condition20 = true; if CrossUp(H, L01) Then Condition21 = False; if CrossUp(H, L02) Then Condition22 = False; if CrossUp(H, L03) Then Condition23 = False; if CrossUp(H, L04) Then Condition24 = False; if CrossUp(H, L05) Then Condition25 = False; if CrossUp(H, L06) Then Condition26 = False; if CrossUp(H, L07) Then Condition27 = False; if CrossUp(H, L08) Then Condition28 = False; if CrossUp(H, L09) Then Condition29 = False; if CrossUp(H, L10) Then Condition20 = False; } // 청산 if marketposition == 1 Then { ExitLong("exitL1",AtLimit,EntryPrice+ML); ExitLong("exitL2",AtStop,EntryPrice-ML); } if marketposition == -1 Then { ExitShort("exitS1",AtLimit,EntryPrice-ML); ExitShort("exitS2",AtStop,EntryPrice+ML); } 2. array 사용한 수식 input : ML(20); var : Bsystem(true), Ssystem(true), i(0); array : LL[9](0), BC[9](False), SC[99](False); LL[5] = 11923; For i = 0 to 4 {LL[4-i] = LL[5-i] + 2*ML;} For i = 5 to 9 {LL[i+1] = LL[i] - 2*ML;} MessageLog("L1 %.2f, L2 %.2f, L3 %.2f, L4 %.2f, L5 %.2f", LL[2] , LL[4], LL[5], LL[6], LL[7]); // 매수진입 조건 if Bsystem == true Then { For i = 0 to 9 { if MarketPosition == 0 && BC[i] == true Then buy("b", AtLimit, LL[i]); if MarketPosition == 0 && CrossDown(C,LL[i]+ML) Then BC[i] = true; if CrossDown(L, LL[i])then BC[i] = False; } } //매도진입 조건 if Ssystem == true Then { For i = 0 to 9 { if MarketPosition == 0 && SC[i] == true Then Sell("s", AtLimit, LL[i]); if MarketPosition == 0 && CrossUp(C,LL[i]-ML) Then SC[i] = true; if Crossup(H, LL[i])then SC[i] = False; } } // 청산 if marketposition == 1 Then { ExitLong("exitL1",AtLimit,EntryPrice+ML); ExitLong("exitL2",AtStop,EntryPrice-ML); } if marketposition == -1 Then { ExitShort("exitS1",AtLimit,EntryPrice-ML); ExitShort("exitS2",AtStop,EntryPrice+ML); } ----------------------------------------------------- 확인해보면 1.은 진입이 정상적으로 일어나는데 줄이기만한 2.는 진입이 아얘 일어나지 않는데 원인을 못찾겠습니다ㅠ 확인해주시면 감사하겠습니다!