커뮤니티
문의
2013-05-22 02:43:31
423
글번호 63342
잘 안되네요..^^;
1) 여전히 exitShort 에서 오류가 납니다.
'12년 5월 28일 오전 7시에 모든 계약을 청산했는데(그림에도 신호가 나타납니다)
로그를 찍어보면 여전히 8시에 계약을 1개 가지고 있습니다.
2) 그림에서 보면 eS9 / eS11 등이 두번씩 발생합니다.
3) 진입과 청산이 무수히 발생함에도 불구하고, 수익차트에는 반영이 안됩니다..
번거롭게 죄송합니다 ^^
부탁드릴께요.
input: period(90);
var: ii(0),avr(0), vari(0), sum(0), cnt(0), bet(0), flag(0), k(0), p(0), buy_cnt(0), sell_cnt(0);
MessageLog("Cntrct %.f", CurrentContracts*MarketPosition);
MessageLog("profit %.3f", NetProfit);
MessageLog("sell %.f // buy %.f", sell_cnt, buy_cnt);
sum = 0;
for ii = 0 to period-1
{
sum = sum + (C[ii]-C[ii+1])/(C[ii]);
}
avr = sum/period;
sum = 0;
for ii=0 to period-1
{
sum = sum + ((C[ii]-C[ii+1])/(C[ii])-avr)^2;
}
vari = sum/period; //수익률 평균
k = avr/vari;
p = k / abs(k);
if abs(k)/20 >= 1 then
{
bet = int((50+netProfit)/(C/20));
}
else
bet = int(((50+netProfit)/(C/20))*(abs(k)/20));
if MarketPosition == 1 and MarketPosition != MarketPosition[1] Then
buy_cnt = 0;
if MarketPosition == -1 and MarketPosition != MarketPosition[1] Then
sell_cnt = 0;
if bet*p == CurrentContracts*MarketPosition then
{
// MessageLog("변동없음.%.f",int(-0.5));
}
else if MarketPosition == 0 Then
{
if p > 0 then
{
buy("L", AtMarket, DEF, bet);
}
else if p <= 0 then
{
Sell("S", AtMarket, DEF, bet);
}
}
else if MarketPosition > 0 Then
{
if CurrentContracts < CurrentContracts[1] Then
buy_cnt = buy_cnt + 1;
if p > 0 then
{
if bet > CurrentContracts then
{
buy("Ladd", AtMarket, DEF, bet-CurrentContracts);
}
else if bet < CurrentContracts && buy_cnt == 0 then
{
ExitLong("eL1", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 1 then
{
exitlong("eL2", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 2 then
{
exitlong("eL3", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 3 then
{
exitlong("eL4", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 4 then
{
exitlong("eL5", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 5 then
{
exitlong("eL6", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 6 then
{
exitlong("eL7", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 7 then
{
exitlong("eL8", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 8 then
{
exitlong("eL9", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 9 then
{
exitlong("eL10", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 10 then
{
exitlong("eL11", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 11 then
{
exitlong("eL12", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 12 then
{
exitlong("eL13", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 13 then
{
exitlong("eL14", AtMarket, DEF,"",CurrentContracts-bet,1);
}
}
else if p <= 0 then
{
sell("change_S", AtMarket, DEF, bet);
}
}
else if MarketPosition < 0 Then
{
if CurrentContracts < CurrentContracts[1] Then
Sell_cnt = Sell_cnt + 1;
if p < 0 then
{
if bet > CurrentContracts then
{
Sell("Sadd", AtMarket, DEF, bet-CurrentContracts);
}
else if bet < CurrentContracts && sell_cnt == 0 then
{
exitShort("eS1", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 1 then
{
exitShort("eS2", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 2 then
{
exitShort("eS3", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 3 then
{
exitShort("eS4", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 4 then
{
exitShort("eS5", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 5 then
{
exitShort("eS6", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 6 then
{
exitShort("eS7", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 7 then
{
exitShort("eS8", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 8 then
{
exitShort("eS9", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 9 then
{
exitShort("eS10", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 10 then
{
exitShort("eS11", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 11 then
{
exitShort("eS12", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 12 then
{
exitShort("eS13", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 13 then
{
exitShort("eS14", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 14 then
{
exitShort("eS15", AtMarket, DEF,"", CurrentContracts-bet,1);
MessageLog("차이 %.f", CurrentContracts-bet);
}
else if bet < CurrentContracts && sell_cnt == 15 then
{
exitShort("eS16", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 16 then
{
exitShort("eS17", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 17 then
{
exitShort("eS18", AtMarket, DEF,"", CurrentContracts-bet,1);
}
}
else if p >= 0 then
{
Buy("change_B", AtMarket, DEF, bet);
}
}
MessageLog("BET %.f", bet);
- 1. 63866_CurrentChart.jpg (0.18 MB)
답변 3
예스스탁 예스스탁 답변
2013-05-20 16:29:12
안녕하세요
예스스탁입니다.
추가진입을 하기 위해서는 시스템 트레이딩 설정창에서
피라미딩을 설정하셔야 합니다.
올리신 경우에는 피라미딩을 다른진입신호허용으로 설정하셔야
추가진입을 하게 됩니다.
적용이 잘 안되시면 내일 편하신 시간에 전화주시기 바랍니다.
02-3453-1060
즐거운 하루되세요
> 데몬 님이 쓴 글입니다.
> 제목 : 청산문의
> 안녕하세요 ^^; 수고 많으십니다.
아래 내용으로 시스템을 돌려보면
계약진행이 (-3 / -2 / -3 / -1) 으로 진행될거라 예상되었으나
실제로는 (-3 / -2 / -2 / 0) 으로 진행됩니다.
정상적인 매매가 진행되려면 어떻게 수정해야 하는지요..?
var: cnt(0);
MessageLog("현재계약%.2f", CurrentContracts*MarketPosition);
if cnt == 0 then
{
Sell("S", AtMarket, DEF, 3);
cnt = cnt + 1;
}
else if cnt == 1 then
{
exitShort("eS1", AtMarket, DEF,"", 1,1);
cnt = cnt + 1;
}
else if cnt == 2 then
{
Sell("Sadd", AtMarket, DEF, 1);
cnt = cnt + 1;
}
else if cnt == 3 then
{
exitShort("eS2", AtMarket, DEF,"", 2,1);
cnt = cnt + 1;
}
==============================================
원래 로직은 아래와 같습니다.
"일부 삽니다" 및 "일부 팝니다" 주문이 정상적으로 작동하지 않습니다.
예를들어 일부삽니다 3계약이 주문되어도 1계약만 청산되는 등의 문제가 있습니다 ^^
번거로우시겠지만 검토부탁드립니다-
감사합니다 ^^
var: i(0),avr(0), vari(0), sum(0), cnt(0), bet(0), flag(0), k(0), p(0), buy_cnt(0), sell_cnt(0);
input: period(90);
MessageLog("현재계약%.2f", CurrentContracts*MarketPosition);
sum = 0;
for i=0 to period-1
{
sum = sum + (C[i]-C[i+1])/(C[i]);
}
avr = sum/period;
sum = 0;
for i=0 to period-1
{
sum = sum + ((C[i]-C[i+1])/(C[i])-avr)^2;
}
vari = sum/period; //수익률 평균
k = avr/vari;
p = k / abs(k);
if abs(k)/15 >= 1 then {
bet = int((20+netProfit)/(C/15));
}
else bet = int(((20+netProfit)/(C/15))*(abs(k)/15));
MessageLog("BET%.2f",bet);
MessageLog("차이%.2f",bet - CurrentContracts);
if bet*p == CurrentContracts*MarketPosition then {
MessageLog("변동없음.%.f",int(-0.5));
}
else if MarketPosition == 0 Then
{
if p > 0 then
{
MessageLog("삽니다%.f",bet );
buy("L", AtMarket, DEF, bet);
buy_cnt = buy_cnt + 1;
sell_cnt = 0;
}
else if p <= 0 then
{
MessageLog("팝니다%.f", bet);
Sell("S", AtMarket, DEF, bet);
sell_cnt = sell_cnt + 1;
buy_cnt = 0;
}
}
else if MarketPosition > 0 Then
{
if p > 0 then
{
if bet > CurrentContracts then
{
MessageLog("추가로삽니다%.f",bet - CurrentContracts);
buy("Ladd", AtMarket, DEF, bet-CurrentContracts);
buy_cnt = buy_cnt + 1;
}
else if bet < CurrentContracts && buy_cnt > 0 then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL1", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
else if bet < CurrentContracts && buy_cnt == 0 then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL2", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
else if bet < CurrentContracts && buy_cnt == -1 then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL3", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
else if bet < CurrentContracts && buy_cnt == -2 then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL4", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
else if bet < CurrentContracts && buy_cnt == -3then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL5", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
else if bet < CurrentContracts && buy_cnt == -4 then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL6", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
else if bet < CurrentContracts && buy_cnt == -5 then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL7", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
else if bet < CurrentContracts && buy_cnt == -6 then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL8", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
}
else if p <= 0 then
{
MessageLog("포지션을 바꿔 팝니다%.f",bet);
sell("change_S", AtMarket, DEF, bet);
sell_cnt = sell_cnt + 1;
buy_cnt = 0;
}
}
else if MarketPosition < 0 Then
{
if p < 0 then
{
if bet > CurrentContracts then
{
MessageLog("추가로팝니다%.f",bet - CurrentContracts);
Sell("Sadd", AtMarket, DEF, bet-CurrentContracts);
sell_cnt = sell_cnt + 1;
}
else if bet < CurrentContracts && sell_cnt > 0 then
{
MessageLog("일부삽니다1%.f",bet - CurrentContracts);
exitShort("eS1", AtMarket, DEF,"", CurrentContracts-bet,1);
sell_cnt = sell_cnt -1;
}
else if bet < CurrentContracts && sell_cnt == 0 then
{
MessageLog("일부삽니다2%.f",bet - CurrentContracts);
exitShort("eS2", AtMarket, DEF,"", CurrentContracts-bet,1);
sell_cnt = sell_cnt -1;
}
else if bet < CurrentContracts && sell_cnt == -1 then
{
MessageLog("일부삽니다3%.f",bet - CurrentContracts);
exitShort("eS3", AtMarket, DEF,"", CurrentContracts-bet,1);
sell_cnt = sell_cnt -1;
}
else if bet < CurrentContracts && sell_cnt == -2 then
{
MessageLog("일부삽니다4%.f",bet - CurrentContracts);
exitShort("eS4", AtMarket, DEF,"", CurrentContracts-bet,1);
sell_cnt = sell_cnt -1;
}
else if bet < CurrentContracts && sell_cnt == -3 then
{
MessageLog("일부삽니다%.f",bet - CurrentContracts);
exitShort("eS5", AtMarket, DEF,"", CurrentContracts-bet,1);
sell_cnt = sell_cnt -1;
}
else if bet < CurrentContracts && sell_cnt == -4 then
{
MessageLog("일부삽니다%.f",bet - CurrentContracts);
exitShort("eS6", AtMarket, DEF,"", CurrentContracts-bet,1);
sell_cnt = sell_cnt -1;
}
else if bet < CurrentContracts && sell_cnt == -5 then
{
MessageLog("일부삽니다%.f",bet - CurrentContracts);
exitShort("eS7", AtMarket, DEF,"", CurrentContracts-bet,1);
sell_cnt = sell_cnt -1;
}
}
else if p >= 0 then
{
MessageLog("포지션을 바꿔 삽니다%.f",bet);
Buy("change_B", AtMarket, DEF, bet);
buy_cnt = buy_cnt + 1;
sell_cnt = 0;
}
}
MessageLog("셀카운트%.f",sell_cnt);
MessageLog("바이카운트%.f",buy_cnt);
예스스탁 예스스탁 답변
2013-05-21 15:34:00
안녕하세요
input: period(90);
var: ii(0),avr(0), vari(0), sum(0), cnt(0), bet(0), flag(0), k(0), p(0), buy_cnt(0), sell_cnt(0);
sum = 0;
for ii = 0 to period-1
{
sum = sum + (C[ii]-C[ii+1])/(C[ii]);
}
avr = sum/period;
sum = 0;
for ii=0 to period-1
{
sum = sum + ((C[ii]-C[ii+1])/(C[ii])-avr)^2;
}
vari = sum/period; //수익률 평균
k = avr/vari;
p = k / abs(k);
if abs(k)/15 >= 1 then
{
bet = int((20+netProfit)/(C/15));
}
else
bet = int(((20+netProfit)/(C/15))*(abs(k)/15));
if MarketPosition == 1 and MarketPosition != MarketPosition[1] Then
buy_cnt = 0;
if MarketPosition == -1 and MarketPosition != MarketPosition[1] Then
sell_cnt = 0;
if bet*p == CurrentContracts*MarketPosition then
{
// MessageLog("변동없음.%.f",int(-0.5));
}
else if MarketPosition == 0 Then
{
if p > 0 then
{
buy("L", AtMarket, DEF, bet);
}
else if p <= 0 then
{
Sell("S", AtMarket, DEF, bet);
}
}
else if MarketPosition > 0 Then
{
if CurrentContracts < CurrentContracts[1] Then
buy_cnt = buy_cnt + 1;
if p > 0 then
{
if bet > CurrentContracts then
{
buy("Ladd", AtMarket, DEF, bet-CurrentContracts);
}
else if bet < CurrentContracts && buy_cnt == 0 then
{
ExitLong("eL1", AtMarket, DEF,"",bet-CurrentContracts,1);
}
else if bet < CurrentContracts && buy_cnt == 1 then
{
exitlong("eL2", AtMarket, DEF,"",bet-CurrentContracts,1);
}
else if bet < CurrentContracts && buy_cnt == 2 then
{
exitlong("eL3", AtMarket, DEF,"",bet-CurrentContracts,1);
}
else if bet < CurrentContracts && buy_cnt == 3 then
{
exitlong("eL4", AtMarket, DEF,"",bet-CurrentContracts,1);
}
else if bet < CurrentContracts && buy_cnt == 4 then
{
exitlong("eL5", AtMarket, DEF,"",bet-CurrentContracts,1);
}
else if bet < CurrentContracts && buy_cnt == 5 then
{
exitlong("eL6", AtMarket, DEF,"",bet-CurrentContracts,1);
}
else if bet < CurrentContracts && buy_cnt == 6 then
{
exitlong("eL7", AtMarket, DEF,"",bet-CurrentContracts,1);
}
else if bet < CurrentContracts && buy_cnt == 7 then
{
exitlong("eL8", AtMarket, DEF,"",bet-CurrentContracts,1);
}
}
else if p <= 0 then
{
sell("change_S", AtMarket, DEF, bet);
}
}
else if MarketPosition < 0 Then
{
if CurrentContracts < CurrentContracts[1] Then
Sell_cnt = Sell_cnt + 1;
if p < 0 then
{
if bet > CurrentContracts then
{
Sell("Sadd", AtMarket, DEF, bet-CurrentContracts);
}
else if bet < CurrentContracts && sell_cnt == 0 then
{
exitShort("eS1", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 1 then
{
exitShort("eS2", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 2 then
{
exitShort("eS3", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 3 then
{
exitShort("eS4", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 4 then
{
exitShort("eS5", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 5 then
{
exitShort("eS6", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 6 then
{
exitShort("eS7", AtMarket, DEF,"", CurrentContracts-bet,1);
}
}
else if p >= 0 then
{
Buy("change_B", AtMarket, DEF, bet);
}
}
즐거운 하루되세요
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 청산문의
>
안녕하세요
예스스탁입니다.
추가진입을 하기 위해서는 시스템 트레이딩 설정창에서
피라미딩을 설정하셔야 합니다.
올리신 경우에는 피라미딩을 다른진입신호허용으로 설정하셔야
추가진입을 하게 됩니다.
적용이 잘 안되시면 내일 편하신 시간에 전화주시기 바랍니다.
02-3453-1060
즐거운 하루되세요
> 데몬 님이 쓴 글입니다.
> 제목 : 청산문의
> 안녕하세요 ^^; 수고 많으십니다.
아래 내용으로 시스템을 돌려보면
계약진행이 (-3 / -2 / -3 / -1) 으로 진행될거라 예상되었으나
실제로는 (-3 / -2 / -2 / 0) 으로 진행됩니다.
정상적인 매매가 진행되려면 어떻게 수정해야 하는지요..?
var: cnt(0);
MessageLog("현재계약%.2f", CurrentContracts*MarketPosition);
if cnt == 0 then
{
Sell("S", AtMarket, DEF, 3);
cnt = cnt + 1;
}
else if cnt == 1 then
{
exitShort("eS1", AtMarket, DEF,"", 1,1);
cnt = cnt + 1;
}
else if cnt == 2 then
{
Sell("Sadd", AtMarket, DEF, 1);
cnt = cnt + 1;
}
else if cnt == 3 then
{
exitShort("eS2", AtMarket, DEF,"", 2,1);
cnt = cnt + 1;
}
==============================================
원래 로직은 아래와 같습니다.
"일부 삽니다" 및 "일부 팝니다" 주문이 정상적으로 작동하지 않습니다.
예를들어 일부삽니다 3계약이 주문되어도 1계약만 청산되는 등의 문제가 있습니다 ^^
번거로우시겠지만 검토부탁드립니다-
감사합니다 ^^
var: i(0),avr(0), vari(0), sum(0), cnt(0), bet(0), flag(0), k(0), p(0), buy_cnt(0), sell_cnt(0);
input: period(90);
MessageLog("현재계약%.2f", CurrentContracts*MarketPosition);
sum = 0;
for i=0 to period-1
{
sum = sum + (C[i]-C[i+1])/(C[i]);
}
avr = sum/period;
sum = 0;
for i=0 to period-1
{
sum = sum + ((C[i]-C[i+1])/(C[i])-avr)^2;
}
vari = sum/period; //수익률 평균
k = avr/vari;
p = k / abs(k);
if abs(k)/15 >= 1 then {
bet = int((20+netProfit)/(C/15));
}
else bet = int(((20+netProfit)/(C/15))*(abs(k)/15));
MessageLog("BET%.2f",bet);
MessageLog("차이%.2f",bet - CurrentContracts);
if bet*p == CurrentContracts*MarketPosition then {
MessageLog("변동없음.%.f",int(-0.5));
}
else if MarketPosition == 0 Then
{
if p > 0 then
{
MessageLog("삽니다%.f",bet );
buy("L", AtMarket, DEF, bet);
buy_cnt = buy_cnt + 1;
sell_cnt = 0;
}
else if p <= 0 then
{
MessageLog("팝니다%.f", bet);
Sell("S", AtMarket, DEF, bet);
sell_cnt = sell_cnt + 1;
buy_cnt = 0;
}
}
else if MarketPosition > 0 Then
{
if p > 0 then
{
if bet > CurrentContracts then
{
MessageLog("추가로삽니다%.f",bet - CurrentContracts);
buy("Ladd", AtMarket, DEF, bet-CurrentContracts);
buy_cnt = buy_cnt + 1;
}
else if bet < CurrentContracts && buy_cnt > 0 then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL1", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
else if bet < CurrentContracts && buy_cnt == 0 then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL2", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
else if bet < CurrentContracts && buy_cnt == -1 then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL3", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
else if bet < CurrentContracts && buy_cnt == -2 then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL4", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
else if bet < CurrentContracts && buy_cnt == -3then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL5", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
else if bet < CurrentContracts && buy_cnt == -4 then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL6", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
else if bet < CurrentContracts && buy_cnt == -5 then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL7", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
else if bet < CurrentContracts && buy_cnt == -6 then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL8", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
}
else if p <= 0 then
{
MessageLog("포지션을 바꿔 팝니다%.f",bet);
sell("change_S", AtMarket, DEF, bet);
sell_cnt = sell_cnt + 1;
buy_cnt = 0;
}
}
else if MarketPosition < 0 Then
{
if p < 0 then
{
if bet > CurrentContracts then
{
MessageLog("추가로팝니다%.f",bet - CurrentContracts);
Sell("Sadd", AtMarket, DEF, bet-CurrentContracts);
sell_cnt = sell_cnt + 1;
}
else if bet < CurrentContracts && sell_cnt > 0 then
{
MessageLog("일부삽니다1%.f",bet - CurrentContracts);
exitShort("eS1", AtMarket, DEF,"", CurrentContracts-bet,1);
sell_cnt = sell_cnt -1;
}
else if bet < CurrentContracts && sell_cnt == 0 then
{
MessageLog("일부삽니다2%.f",bet - CurrentContracts);
exitShort("eS2", AtMarket, DEF,"", CurrentContracts-bet,1);
sell_cnt = sell_cnt -1;
}
else if bet < CurrentContracts && sell_cnt == -1 then
{
MessageLog("일부삽니다3%.f",bet - CurrentContracts);
exitShort("eS3", AtMarket, DEF,"", CurrentContracts-bet,1);
sell_cnt = sell_cnt -1;
}
else if bet < CurrentContracts && sell_cnt == -2 then
{
MessageLog("일부삽니다4%.f",bet - CurrentContracts);
exitShort("eS4", AtMarket, DEF,"", CurrentContracts-bet,1);
sell_cnt = sell_cnt -1;
}
else if bet < CurrentContracts && sell_cnt == -3 then
{
MessageLog("일부삽니다%.f",bet - CurrentContracts);
exitShort("eS5", AtMarket, DEF,"", CurrentContracts-bet,1);
sell_cnt = sell_cnt -1;
}
else if bet < CurrentContracts && sell_cnt == -4 then
{
MessageLog("일부삽니다%.f",bet - CurrentContracts);
exitShort("eS6", AtMarket, DEF,"", CurrentContracts-bet,1);
sell_cnt = sell_cnt -1;
}
else if bet < CurrentContracts && sell_cnt == -5 then
{
MessageLog("일부삽니다%.f",bet - CurrentContracts);
exitShort("eS7", AtMarket, DEF,"", CurrentContracts-bet,1);
sell_cnt = sell_cnt -1;
}
}
else if p >= 0 then
{
MessageLog("포지션을 바꿔 삽니다%.f",bet);
Buy("change_B", AtMarket, DEF, bet);
buy_cnt = buy_cnt + 1;
sell_cnt = 0;
}
}
MessageLog("셀카운트%.f",sell_cnt);
MessageLog("바이카운트%.f",buy_cnt);
예스스탁 예스스탁 답변
2013-05-22 14:01:52
안녕하세요
예스스탁입니다.
input: period(90);
var: ii(0),avr(0), vari(0), sum(0), cnt(0), bet(0), flag(0), k(0), p(0), buy_cnt(0), sell_cnt(0);
MessageLog("BET %.f CurrentContracts %.2f", bet, CurrentContracts);
sum = 0;
for ii = 0 to period-1
{
sum = sum + (C[ii]-C[ii+1])/(C[ii]);
}
avr = sum/period;
sum = 0;
for ii=0 to period-1
{
sum = sum + ((C[ii]-C[ii+1])/(C[ii])-avr)^2;
}
vari = sum/period; //수익률 평균
k = avr/vari;
p = k / abs(k);
if abs(k)/20 >= 1 then
{
bet = int((50+netProfit)/(C/20));
}
else
bet = int(((50+netProfit)/(C/20))*(abs(k)/20));
if MarketPosition == 1 and MarketPosition != MarketPosition[1] Then
buy_cnt = 0;
if MarketPosition == -1 and MarketPosition != MarketPosition[1] Then
sell_cnt = 0;
if bet*p == CurrentContracts*MarketPosition then
{
// MessageLog("변동없음.%.f",int(-0.5));
}
else if MarketPosition == 0 Then
{
if p > 0 then
{
buy("L", AtMarket, DEF, bet);
}
else if p <= 0 then
{
Sell("S", AtMarket, DEF, bet);
}
}
else if MarketPosition > 0 Then
{
if CurrentContracts < CurrentContracts[1] Then
buy_cnt = buy_cnt + 1;
if bet == 0 Then
exitlong("매수마감청산");
if p > 0 then
{
if bet > CurrentContracts then
{
buy("Ladd", AtMarket, DEF, bet-CurrentContracts);
}
else if bet < CurrentContracts && buy_cnt == 0 then
{
ExitLong("eL1", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 1 then
{
exitlong("eL2", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 2 then
{
exitlong("eL3", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 3 then
{
exitlong("eL4", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 4 then
{
exitlong("eL5", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 5 then
{
exitlong("eL6", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 6 then
{
exitlong("eL7", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 7 then
{
exitlong("eL8", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 8 then
{
exitlong("eL9", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 9 then
{
exitlong("eL10", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 10 then
{
exitlong("eL11", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 11 then
{
exitlong("eL12", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 12 then
{
exitlong("eL13", AtMarket, DEF,"",CurrentContracts-bet,1);
}
else if bet < CurrentContracts && buy_cnt == 13 then
{
exitlong("eL14", AtMarket, DEF,"",CurrentContracts-bet,1);
}
}
else if p <= 0 then
{
sell("change_S", AtMarket, DEF, bet);
}
}
else if MarketPosition < 0 Then
{
if CurrentContracts < CurrentContracts[1] Then
Sell_cnt = Sell_cnt + 1;
if bet == 0 Then
ExitShort("매도마감청산");
if p < 0 then
{
if bet > CurrentContracts then
{
Sell("Sadd", AtMarket, DEF, bet-CurrentContracts);
}
else if bet < CurrentContracts && sell_cnt == 0 then
{
exitShort("eS1", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 1 then
{
exitShort("eS2", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 2 then
{
exitShort("eS3", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 3 then
{
exitShort("eS4", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 4 then
{
exitShort("eS5", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 5 then
{
exitShort("eS6", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 6 then
{
exitShort("eS7", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 7 then
{
exitShort("eS8", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 8 then
{
exitShort("eS9", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 9 then
{
exitShort("eS10", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 10 then
{
exitShort("eS11", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 11 then
{
exitShort("eS12", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 12 then
{
exitShort("eS13", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 13 then
{
exitShort("eS14", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 14 then
{
exitShort("eS15", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 15 then
{
exitShort("eS16", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 16 then
{
exitShort("eS17", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 17 then
{
exitShort("eS18", AtMarket, DEF,"", CurrentContracts-bet,1);
}
}
else if p >= 0 then
{
Buy("change_B", AtMarket, DEF, bet);
}
}
즐거운 하루되세요
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : Re : 청산문의
> 안녕하세요
input: period(90);
var: ii(0),avr(0), vari(0), sum(0), cnt(0), bet(0), flag(0), k(0), p(0), buy_cnt(0), sell_cnt(0);
sum = 0;
for ii = 0 to period-1
{
sum = sum + (C[ii]-C[ii+1])/(C[ii]);
}
avr = sum/period;
sum = 0;
for ii=0 to period-1
{
sum = sum + ((C[ii]-C[ii+1])/(C[ii])-avr)^2;
}
vari = sum/period; //수익률 평균
k = avr/vari;
p = k / abs(k);
if abs(k)/15 >= 1 then
{
bet = int((20+netProfit)/(C/15));
}
else
bet = int(((20+netProfit)/(C/15))*(abs(k)/15));
if MarketPosition == 1 and MarketPosition != MarketPosition[1] Then
buy_cnt = 0;
if MarketPosition == -1 and MarketPosition != MarketPosition[1] Then
sell_cnt = 0;
if bet*p == CurrentContracts*MarketPosition then
{
// MessageLog("변동없음.%.f",int(-0.5));
}
else if MarketPosition == 0 Then
{
if p > 0 then
{
buy("L", AtMarket, DEF, bet);
}
else if p <= 0 then
{
Sell("S", AtMarket, DEF, bet);
}
}
else if MarketPosition > 0 Then
{
if CurrentContracts < CurrentContracts[1] Then
buy_cnt = buy_cnt + 1;
if p > 0 then
{
if bet > CurrentContracts then
{
buy("Ladd", AtMarket, DEF, bet-CurrentContracts);
}
else if bet < CurrentContracts && buy_cnt == 0 then
{
ExitLong("eL1", AtMarket, DEF,"",bet-CurrentContracts,1);
}
else if bet < CurrentContracts && buy_cnt == 1 then
{
exitlong("eL2", AtMarket, DEF,"",bet-CurrentContracts,1);
}
else if bet < CurrentContracts && buy_cnt == 2 then
{
exitlong("eL3", AtMarket, DEF,"",bet-CurrentContracts,1);
}
else if bet < CurrentContracts && buy_cnt == 3 then
{
exitlong("eL4", AtMarket, DEF,"",bet-CurrentContracts,1);
}
else if bet < CurrentContracts && buy_cnt == 4 then
{
exitlong("eL5", AtMarket, DEF,"",bet-CurrentContracts,1);
}
else if bet < CurrentContracts && buy_cnt == 5 then
{
exitlong("eL6", AtMarket, DEF,"",bet-CurrentContracts,1);
}
else if bet < CurrentContracts && buy_cnt == 6 then
{
exitlong("eL7", AtMarket, DEF,"",bet-CurrentContracts,1);
}
else if bet < CurrentContracts && buy_cnt == 7 then
{
exitlong("eL8", AtMarket, DEF,"",bet-CurrentContracts,1);
}
}
else if p <= 0 then
{
sell("change_S", AtMarket, DEF, bet);
}
}
else if MarketPosition < 0 Then
{
if CurrentContracts < CurrentContracts[1] Then
Sell_cnt = Sell_cnt + 1;
if p < 0 then
{
if bet > CurrentContracts then
{
Sell("Sadd", AtMarket, DEF, bet-CurrentContracts);
}
else if bet < CurrentContracts && sell_cnt == 0 then
{
exitShort("eS1", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 1 then
{
exitShort("eS2", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 2 then
{
exitShort("eS3", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 3 then
{
exitShort("eS4", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 4 then
{
exitShort("eS5", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 5 then
{
exitShort("eS6", AtMarket, DEF,"", CurrentContracts-bet,1);
}
else if bet < CurrentContracts && sell_cnt == 6 then
{
exitShort("eS7", AtMarket, DEF,"", CurrentContracts-bet,1);
}
}
else if p >= 0 then
{
Buy("change_B", AtMarket, DEF, bet);
}
}
즐거운 하루되세요
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 청산문의
>
안녕하세요
예스스탁입니다.
추가진입을 하기 위해서는 시스템 트레이딩 설정창에서
피라미딩을 설정하셔야 합니다.
올리신 경우에는 피라미딩을 다른진입신호허용으로 설정하셔야
추가진입을 하게 됩니다.
적용이 잘 안되시면 내일 편하신 시간에 전화주시기 바랍니다.
02-3453-1060
즐거운 하루되세요
> 데몬 님이 쓴 글입니다.
> 제목 : 청산문의
> 안녕하세요 ^^; 수고 많으십니다.
아래 내용으로 시스템을 돌려보면
계약진행이 (-3 / -2 / -3 / -1) 으로 진행될거라 예상되었으나
실제로는 (-3 / -2 / -2 / 0) 으로 진행됩니다.
정상적인 매매가 진행되려면 어떻게 수정해야 하는지요..?
var: cnt(0);
MessageLog("현재계약%.2f", CurrentContracts*MarketPosition);
if cnt == 0 then
{
Sell("S", AtMarket, DEF, 3);
cnt = cnt + 1;
}
else if cnt == 1 then
{
exitShort("eS1", AtMarket, DEF,"", 1,1);
cnt = cnt + 1;
}
else if cnt == 2 then
{
Sell("Sadd", AtMarket, DEF, 1);
cnt = cnt + 1;
}
else if cnt == 3 then
{
exitShort("eS2", AtMarket, DEF,"", 2,1);
cnt = cnt + 1;
}
==============================================
원래 로직은 아래와 같습니다.
"일부 삽니다" 및 "일부 팝니다" 주문이 정상적으로 작동하지 않습니다.
예를들어 일부삽니다 3계약이 주문되어도 1계약만 청산되는 등의 문제가 있습니다 ^^
번거로우시겠지만 검토부탁드립니다-
감사합니다 ^^
var: i(0),avr(0), vari(0), sum(0), cnt(0), bet(0), flag(0), k(0), p(0), buy_cnt(0), sell_cnt(0);
input: period(90);
MessageLog("현재계약%.2f", CurrentContracts*MarketPosition);
sum = 0;
for i=0 to period-1
{
sum = sum + (C[i]-C[i+1])/(C[i]);
}
avr = sum/period;
sum = 0;
for i=0 to period-1
{
sum = sum + ((C[i]-C[i+1])/(C[i])-avr)^2;
}
vari = sum/period; //수익률 평균
k = avr/vari;
p = k / abs(k);
if abs(k)/15 >= 1 then {
bet = int((20+netProfit)/(C/15));
}
else bet = int(((20+netProfit)/(C/15))*(abs(k)/15));
MessageLog("BET%.2f",bet);
MessageLog("차이%.2f",bet - CurrentContracts);
if bet*p == CurrentContracts*MarketPosition then {
MessageLog("변동없음.%.f",int(-0.5));
}
else if MarketPosition == 0 Then
{
if p > 0 then
{
MessageLog("삽니다%.f",bet );
buy("L", AtMarket, DEF, bet);
buy_cnt = buy_cnt + 1;
sell_cnt = 0;
}
else if p <= 0 then
{
MessageLog("팝니다%.f", bet);
Sell("S", AtMarket, DEF, bet);
sell_cnt = sell_cnt + 1;
buy_cnt = 0;
}
}
else if MarketPosition > 0 Then
{
if p > 0 then
{
if bet > CurrentContracts then
{
MessageLog("추가로삽니다%.f",bet - CurrentContracts);
buy("Ladd", AtMarket, DEF, bet-CurrentContracts);
buy_cnt = buy_cnt + 1;
}
else if bet < CurrentContracts && buy_cnt > 0 then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL1", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
else if bet < CurrentContracts && buy_cnt == 0 then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL2", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
else if bet < CurrentContracts && buy_cnt == -1 then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL3", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
else if bet < CurrentContracts && buy_cnt == -2 then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL4", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
else if bet < CurrentContracts && buy_cnt == -3then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL5", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
else if bet < CurrentContracts && buy_cnt == -4 then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL6", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
else if bet < CurrentContracts && buy_cnt == -5 then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL7", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
else if bet < CurrentContracts && buy_cnt == -6 then
{
MessageLog("일부팝니다1%.f",bet - CurrentContracts);
exitlong("eL8", AtMarket, DEF,"",bet-CurrentContracts,1);
buy_cnt = buy_cnt - 1;
}
}
else if p <= 0 then
{
MessageLog("포지션을 바꿔 팝니다%.f",bet);
sell("change_S", AtMarket, DEF, bet);
sell_cnt = sell_cnt + 1;
buy_cnt = 0;
}
}
else if MarketPosition < 0 Then
{
if p < 0 then
{
if bet > CurrentContracts then
{
MessageLog("추가로팝니다%.f",bet - CurrentContracts);
Sell("Sadd", AtMarket, DEF, bet-CurrentContracts);
sell_cnt = sell_cnt + 1;
}
else if bet < CurrentContracts && sell_cnt > 0 then
{
MessageLog("일부삽니다1%.f",bet - CurrentContracts);
exitShort("eS1", AtMarket, DEF,"", CurrentContracts-bet,1);
sell_cnt = sell_cnt -1;
}
else if bet < CurrentContracts && sell_cnt == 0 then
{
MessageLog("일부삽니다2%.f",bet - CurrentContracts);
exitShort("eS2", AtMarket, DEF,"", CurrentContracts-bet,1);
sell_cnt = sell_cnt -1;
}
else if bet < CurrentContracts && sell_cnt == -1 then
{
MessageLog("일부삽니다3%.f",bet - CurrentContracts);
exitShort("eS3", AtMarket, DEF,"", CurrentContracts-bet,1);
sell_cnt = sell_cnt -1;
}
else if bet < CurrentContracts && sell_cnt == -2 then
{
MessageLog("일부삽니다4%.f",bet - CurrentContracts);
exitShort("eS4", AtMarket, DEF,"", CurrentContracts-bet,1);
sell_cnt = sell_cnt -1;
}
else if bet < CurrentContracts && sell_cnt == -3 then
{
MessageLog("일부삽니다%.f",bet - CurrentContracts);
exitShort("eS5", AtMarket, DEF,"", CurrentContracts-bet,1);
sell_cnt = sell_cnt -1;
}
else if bet < CurrentContracts && sell_cnt == -4 then
{
MessageLog("일부삽니다%.f",bet - CurrentContracts);
exitShort("eS6", AtMarket, DEF,"", CurrentContracts-bet,1);
sell_cnt = sell_cnt -1;
}
else if bet < CurrentContracts && sell_cnt == -5 then
{
MessageLog("일부삽니다%.f",bet - CurrentContracts);
exitShort("eS7", AtMarket, DEF,"", CurrentContracts-bet,1);
sell_cnt = sell_cnt -1;
}
}
else if p >= 0 then
{
MessageLog("포지션을 바꿔 삽니다%.f",bet);
Buy("change_B", AtMarket, DEF, bet);
buy_cnt = buy_cnt + 1;
sell_cnt = 0;
}
}
MessageLog("셀카운트%.f",sell_cnt);
MessageLog("바이카운트%.f",buy_cnt);