커뮤니티
문의 (YS)
2014-03-19 09:29:15
231
글번호 73590
1. 3분봉에서 2번째 전봉과 전봉이 모두 음봉이고, 현재봉이 상승장악형이며 크기는 0.5포인트 이상이어야 한다라는 표현식 부탁드립니다.
2. 분봉에 아래 코드를 적용중입니다. 분봉완성시마다 동그라미친 부분과 같이 일봉이평선도 민감하게 움직이는데 이를 고정시키는 방법은 없는지 궁금합니다. (첨부그림)
예전에는 MAv5D = DATA2( (DAYCLOSE(4) + DAYCLOSE(3) + DAYCLOSE(2) + DAYCLOSE(1) + DAYOPEN(0) ) / 5); 으로 하여 금일오픈값을 기준으로 계산했던 기억이 납니다.
VARS: M5DP(5), M13DP(13), M20DP(20), M33DP(33), M60DP(60);
VARS: M5D(0, DATA2), M13D(0, DATA2), M20D(0, DATA2), M33D(0, DATA2), M60D(0, DATA2);
VARS: M5D.SUM(0, DATA2), M13D.SUM(0, DATA2), M20D.SUM(0, DATA2), M33D.SUM(0, DATA2), M60D.SUM(0, DATA2), CNT(0);
ARRAY: CC[100](0, DATA2);
//----------------------------------------------------------------------------------------------------------------------------------------------------------
if ( DATA2(Date <> Date[1]) ) Then
{
for CNT = 0 to 99
{
CC[CNT] = CC[CNT - 1][1];
}
}
CC[0] = DATA2(C);
M5D.SUM = 0; M13D.SUM = 0; M20D.SUM = 0; M33D.SUM = 0; M60D.SUM = 0;
for CNT = 0 to M33DP - 1
{
if ( (CNT < M5DP) AND (CC[M5DP - 1] > 0) ) Then M5D.SUM = M5D.SUM + CC[CNT];
if ( (CNT < M13DP) AND (CC[M13DP - 1] > 0) ) Then M13D.SUM = M13D.SUM + CC[CNT];
if ( (CNT < M20DP) AND (CC[M20DP - 1] > 0) ) Then M20D.SUM = M20D.SUM + CC[CNT];
if ( (CNT < M33DP) AND (CC[M33DP - 1] > 0) ) Then M33D.SUM = M33D.SUM + CC[CNT];
// if ( (CNT < M60DP) AND (CC[M60DP - 1] > 0) ) Then M60D.SUM = M60D.SUM + CC[CNT];
}
M5D = (M5D.SUM / M5DP); M13D = (M13D.SUM / M13DP); M20D = (M20D.SUM / M20DP); M33D = (M33D.SUM / M33DP);// M60D = (M60D.SUM / M60DP);
3. 아래와 같은 코드가 있고, 취소주문이 안되는 것을 체크하는 중에
ordernumber가 undefined라고 메시지가 표시됨을 발견했습니다.
원인이 무엇인지 파악해주시면 감사하겠습니다.
디버그창에는 다음과 같이 메시지가 뿌려집니다.
결과 메시지: #EXCUTE TYPE[BUY], CHECK N1 ORDER NUMER[undefined]
관련 변수는 모두 전역변수처리
var gEBxID1;
var gEBxID2;
var gEBxID3;
var gEBxOrderNum1;
var gEBxOrderNum2;
var gEBxOrderNum3;
...
function CC_OnRiseSignal(Signal)
{
....
if (gSignalKind == SIG_BUY)
{
.....
gEBxOrderPrice1 = Option.GetCurrentByCode(gCallOrderCode);
gEBxID1 = CA.OrderBuy(gCallOrderCode, gEBxOrderContracts1, gEBxOrderPrice1, 0);
// 여기서 메시지로그로 gEBxID1를 찍으면 0으로 표시되더군요. 고유의 값이 들어가야 하는 것이 아닌지...
.....
}
function Main_OnOrderResponse(OrderResponse)
{
// BUY
if (OrderResponse.orderID == gEBxID1)
{
gEBxOrderNum1 = OrderResponse.OrderNum;
Main.MessageLog("----------------------------------------------------------------------------------------");
Main.MessageLog("#EXCUTE TYPE[BUY], CHECK N1 ORDER NUMER[" + gEBxOrderNum1 + "]");
Main.MessageLog("----------------------------------------------------------------------------------------");
}
..............
}
- 1. 74072_5일선.jpg (0.01 MB)
답변 1
예스스탁 예스스탁 답변
2014-03-19 14:47:30
안녕하세요
예스스탁입니다.
1.
Variables: Body(0),Highbody(0),Lowbody(0),value(0);
Body = Abs(C-O);
Highbody = MaxList(Open,Close);
Lowbody = MinList(Open,Close);
if C[2] < O[2] And
C[1] < O[1] And
C[1] < Ma(c,10)[1] and
C >= O+0.5 and
Body > Ma(Body,10)*2 and
Highbody > Highbody[1] and Lowbody < Lowbody[1] Then
2.
if ( DATA2(Date <> Date[1]) ) Then
{
for CNT = 0 to 99
{
CC[CNT] = CC[CNT - 1][1];
}
}
위 내용에서 for문의 시작값이 잘못되었습니다.
cnt가 0이면 CC[0] = CC[-1][1]과 같이 됩니다
배열방에 -1은 업으므로 for문의 시작값을 1부터 지정하셔야 합니다.
if ( DATA2(Date <> Date[1]) ) Then
{
for CNT = 1 to 99
{
CC[CNT] = CC[CNT - 1][1];
}
}
3.
gEBxOrderNum1 = OrderResponse.OrderNum;
함수나 프로퍼티의 대소문자에 유의하시기 바랍니다
OrderNum --> orderNum으로 변경하시면 됩니다.
즐거운 하루되세요
> TRF 님이 쓴 글입니다.
> 제목 : 문의 (YS)
> 1. 3분봉에서 2번째 전봉과 전봉이 모두 음봉이고, 현재봉이 상승장악형이며 크기는 0.5포인트 이상이어야 한다라는 표현식 부탁드립니다.
2. 분봉에 아래 코드를 적용중입니다. 분봉완성시마다 동그라미친 부분과 같이 일봉이평선도 민감하게 움직이는데 이를 고정시키는 방법은 없는지 궁금합니다. (첨부그림)
예전에는 MAv5D = DATA2( (DAYCLOSE(4) + DAYCLOSE(3) + DAYCLOSE(2) + DAYCLOSE(1) + DAYOPEN(0) ) / 5); 으로 하여 금일오픈값을 기준으로 계산했던 기억이 납니다.
VARS: M5DP(5), M13DP(13), M20DP(20), M33DP(33), M60DP(60);
VARS: M5D(0, DATA2), M13D(0, DATA2), M20D(0, DATA2), M33D(0, DATA2), M60D(0, DATA2);
VARS: M5D.SUM(0, DATA2), M13D.SUM(0, DATA2), M20D.SUM(0, DATA2), M33D.SUM(0, DATA2), M60D.SUM(0, DATA2), CNT(0);
ARRAY: CC[100](0, DATA2);
//----------------------------------------------------------------------------------------------------------------------------------------------------------
if ( DATA2(Date <> Date[1]) ) Then
{
for CNT = 0 to 99
{
CC[CNT] = CC[CNT - 1][1];
}
}
CC[0] = DATA2(C);
M5D.SUM = 0; M13D.SUM = 0; M20D.SUM = 0; M33D.SUM = 0; M60D.SUM = 0;
for CNT = 0 to M33DP - 1
{
if ( (CNT < M5DP) AND (CC[M5DP - 1] > 0) ) Then M5D.SUM = M5D.SUM + CC[CNT];
if ( (CNT < M13DP) AND (CC[M13DP - 1] > 0) ) Then M13D.SUM = M13D.SUM + CC[CNT];
if ( (CNT < M20DP) AND (CC[M20DP - 1] > 0) ) Then M20D.SUM = M20D.SUM + CC[CNT];
if ( (CNT < M33DP) AND (CC[M33DP - 1] > 0) ) Then M33D.SUM = M33D.SUM + CC[CNT];
// if ( (CNT < M60DP) AND (CC[M60DP - 1] > 0) ) Then M60D.SUM = M60D.SUM + CC[CNT];
}
M5D = (M5D.SUM / M5DP); M13D = (M13D.SUM / M13DP); M20D = (M20D.SUM / M20DP); M33D = (M33D.SUM / M33DP);// M60D = (M60D.SUM / M60DP);
3. 아래와 같은 코드가 있고, 취소주문이 안되는 것을 체크하는 중에
ordernumber가 undefined라고 메시지가 표시됨을 발견했습니다.
원인이 무엇인지 파악해주시면 감사하겠습니다.
디버그창에는 다음과 같이 메시지가 뿌려집니다.
결과 메시지: #EXCUTE TYPE[BUY], CHECK N1 ORDER NUMER[undefined]
관련 변수는 모두 전역변수처리
var gEBxID1;
var gEBxID2;
var gEBxID3;
var gEBxOrderNum1;
var gEBxOrderNum2;
var gEBxOrderNum3;
...
function CC_OnRiseSignal(Signal)
{
....
if (gSignalKind == SIG_BUY)
{
.....
gEBxOrderPrice1 = Option.GetCurrentByCode(gCallOrderCode);
gEBxID1 = CA.OrderBuy(gCallOrderCode, gEBxOrderContracts1, gEBxOrderPrice1, 0);
// 여기서 메시지로그로 gEBxID1를 찍으면 0으로 표시되더군요. 고유의 값이 들어가야 하는 것이 아닌지...
.....
}
function Main_OnOrderResponse(OrderResponse)
{
// BUY
if (OrderResponse.orderID == gEBxID1)
{
gEBxOrderNum1 = OrderResponse.OrderNum;
Main.MessageLog("----------------------------------------------------------------------------------------");
Main.MessageLog("#EXCUTE TYPE[BUY], CHECK N1 ORDER NUMER[" + gEBxOrderNum1 + "]");
Main.MessageLog("----------------------------------------------------------------------------------------");
}
..............
}