커뮤니티

실제 매수/매도 시점 파악

프로필 이미지
산본드래곤
2022-02-06 14:04:55
992
글번호 156031
답변완료
안녕하세요. [문제현상] Buy() 함수를 실행한 시점 이후에 MarketPosition이 바로 1로 변하지 않는 문제. 아래 코드를 실행 시 MarketPosition이 1로 변하지 않아 같은 조건의 코드가 여러번 실행되어 Count가 비정상적으로 이루어집니다. 원하는 동작은 매수할 때 Count를 1개 올리는 것인데 랜덤(예:5) 하게 값이 올라갑니다. 1. 문제 현상의 이유와 함께 실제로 매수/매도 되는 시점을 파악할 수 있는 이벤트가 있는지 궁금합니다. 2. Buy() 함수 실행 후 언제 실제로 매수가 되는지 궁금합니다. [문제 로그 예시] 2022-02-02 13:14:01 매수: 0, 1, 1 2022-02-02 13:14:01 매수: 0, 2, 1 2022-02-02 13:14:01 매수: 0, 3, 1 2022-02-02 13:14:01 매수: 0, 4, 1 2022-02-02 13:14:01 매수: 0, 5, 1 => 같은 시간에 Buy함수를 5번 실행시킵니다. 이유가 무엇인가요? [문제 코드] if MarketPosition != 1 Then { If Condition3 or Condition6 then { If Condition8 Then { If Condition9 Then { Count = Count + 1; State = 1; Buy("매수",OnClose,DEf,2); MessageLog("매수 : %2.0f, %2.0f, %2.0f", MarketPosition, Count, State); } } } }
시스템
답변 1
프로필 이미지

예스스탁 예스스탁 답변

2022-02-07 14:37:05

안녕하세요 예스스탁입니다. 1 랭귀지는 봉완성이 기본체계이고 봉완성은 다음봉시가가 수신될때입니다. 모든 값과 if문은 완성봉의 값만 사용이 가능하고 미완성봉의 값은 사용하지 않습니다. buy에 사용한 OnClose는 봉완성시 신호가 발생하고 완성봉의 종가를 리포트의 진입/청산가격으로 사용하는 타입니다. MarketPosition이 실제로는 신호가 발생하면 변경이 되지만 if문이 봉완성시에 최근 완성봉의 값만 보므로 실시간으로 사용이 되지 않습니다. 2 if 조건 then { count = count+1; Buy("매수",OnClose,DEf,2); } Count는 buy와 관계없이 if문에 종속되는 부분입니다. count는 지정한 조건만 만족하면 1씩 증가하게 됩니다. 즉 작성하신 내용에서 count는 buy를 카운트 하는 부분이 아닌 지정한 조건이 만족하는 횟수를 카운트하는 내용입니다. 당일청산등이 설정되어 있으면 당일청산은 지정한 시간이후에 진입을 막기 때문에 당일청산으로 지정한 시간이후에는 if조건이 만족하면 buy는 동작을 하지 못하지만 count와 같은 변수에 값할당하는 내용은 값이 할당이 됩니다. 3 올리신 로그에서 동일시간에 Count변수값이 증가하는 것으로 보면 비슷한 동일식이 여러개 나열되어 있으신거 같습니다. 수식은 위에서 아래로 읽어내려가므로 여러 buy가 동시에 한봉에서 만족하면 신호는 가장 위에 내용으로 buy신호가 발생하게 됩니다. 하지만 count는 조건만족횟수만큼 늘어나게 됩니다 if CrossUp(c,ma(C,5)) Then { count = count+1; Buy("b1"); } if C > O Then { count = count+1; Buy("b2"); } 예를 들어 한봉에서 이평돌파와 양봉인 조건이 동시충족되면 신호는 b1으로 발생하지만 count는 2가 됩니다. count가 if조건을 카운트 하기 때문입니다. 4 작성하시는 내용이 매수 이후에 추가매수를 하는 내용은 아니므로 아래와 같이 작성하시면 매수횟수를 카운트 할수 있습니다. if MarketPosition != 1 Then { If Condition3 or Condition6 then { If Condition8 Then { If Condition9 Then { State = 1; Buy("매수",OnClose,DEf,2); MessageLog("매수 : %2.0f, %2.0f, %2.0f", MarketPosition, Count, State); } } } } #매수횟수 if MarketPosition == 1 and MarketPosition != MarketPosition[1] Then count = count+1; 즐거운 하루되세요 > 산본드래곤 님이 쓴 글입니다. > 제목 : 실제 매수/매도 시점 파악 > 안녕하세요. [문제현상] Buy() 함수를 실행한 시점 이후에 MarketPosition이 바로 1로 변하지 않는 문제. 아래 코드를 실행 시 MarketPosition이 1로 변하지 않아 같은 조건의 코드가 여러번 실행되어 Count가 비정상적으로 이루어집니다. 원하는 동작은 매수할 때 Count를 1개 올리는 것인데 랜덤(예:5) 하게 값이 올라갑니다. 1. 문제 현상의 이유와 함께 실제로 매수/매도 되는 시점을 파악할 수 있는 이벤트가 있는지 궁금합니다. 2. Buy() 함수 실행 후 언제 실제로 매수가 되는지 궁금합니다. [문제 로그 예시] 2022-02-02 13:14:01 매수: 0, 1, 1 2022-02-02 13:14:01 매수: 0, 2, 1 2022-02-02 13:14:01 매수: 0, 3, 1 2022-02-02 13:14:01 매수: 0, 4, 1 2022-02-02 13:14:01 매수: 0, 5, 1 => 같은 시간에 Buy함수를 5번 실행시킵니다. 이유가 무엇인가요? [문제 코드] if MarketPosition != 1 Then { If Condition3 or Condition6 then { If Condition8 Then { If Condition9 Then { Count = Count + 1; State = 1; Buy("매수",OnClose,DEf,2); MessageLog("매수 : %2.0f, %2.0f, %2.0f", MarketPosition, Count, State); } } } }