커뮤니티
안녕하세요.
2010-12-03 07:39:57
579
글번호 34048
안녕하세요?
수식이 너무 엉터리 같아서 창피하지만
수정 좀 부탁 드릴께요.
지난번 작성해주신 피라미딩 진입식에 조금더 보완하고 싶습니다.
부탁1. //진입조건1 or 2 or...중
1차 진입 이후에 다시 추가로 진입할 때 직전 진입가격을 기억해 두었다가
그 진입가격 이상에서만 진입이 가능하게 해 주세요. 예컨대 2차진입시는 1차진입가격 보다 클때만 ...3차진입시에는 2차진입가격 이상에서...4차는 > 3차 ...(물타기 금지)
2. 청산은 언제나 직전 진입가격 보다 -10 % 낮으면 전량 청산 예컨대 3차례 진입이 있었다면 3차 진입가격 보다 -10%이면 현재 보유량을 전부 청산...하고, 다시 진입신호 나오면 반복...
또는 직전매수가격 이후 C가 < lowest(L,5)하는 방법도 괜잖을 것 같네요. 두가지를 모두 구현해 보고 싶습니다 .
## 함수중에 EntryPrice(N)가 있지만 피라미딩에서는 적용이 안된다고 하여 변수를 대입해 보았지만 실패 했습니다.
Input : P1(5), p2(12), p3(24), p4(50), p5(80), openpositionprofit(0.1);
Input : 투자원금(5000000) ;
Var : value1(0), value2(0), value3(0);
var : 피봇(0), 저항1(0), 저항2(0),저항3(0),지지1(0),지지2(0),지지3(0);
피봇 = (dayhigh(1)+dayLow(1)+dayclose(1)) /3;
저항1 = 2* 피봇 - dayLow (1);
저항2 = 피봇 + dayhigh(1)-dayLow(1);
지지1 = 2* 피봇 -dayhigh(1);
지지2 = 피봇 - dayhigh(1)+dayLow(1);
var1 = ma(c, p1);
var2 = ma(c, p2);
var3 = ma(c, p3);
var4 = ma(c, p4);
var5 = ma(c, p5);
var6 = ma(H, p1);
var7 = ma(H, p2);
var8 = ma(H, p3);
var9 = ma(H, p4);
var10 = ma(H, p5);
value1 = Disparity(P1) ;
value2 = Disparity(P2) ;
value3 = Disparity(P3) ;
value4 = Disparity(P4) ;
value5 = Disparity(P5) ;
## 매수조건 1
IF
crossup(value2, 98) or crossup(value2, 97) OR crossup(value2, 96) or
crossup(value2, 95) OR crossup(value2, 94) or crossup(value2, 93) OR crossup(value2, 92) Or
crossup(value2, 91) OR crossup(value2, 90) or crossup(value2, 89) OR crossup(value2, 88) Or
crossup(value2, 87) OR crossup(value2, 86) or crossup(value2, 85) OR crossup(value2, 84) or
crossup(value2, 83) OR crossup(value2, 82) or crossup(value2, 81) OR crossup(value2, 80) or
##피봇 1.5
( ( crossup(c, 저항1) or crossup(c,피봇)) and crossup(value2, 95 ))
THEN {
// 피라미딩
if CurrentEntries >= 0 then {
if crossup(var6,var2) then
buy("처음", atlimit ,L, int(투자원금*0.1/C/100000)); }
if CurrentEntries >= 0 and openpositionprofit >= 0 then{
if crossup(value2, 92) Or crossup(value2, 91) OR crossup(value2, 90) or
crossup(value2, 89) OR value2 <= 80 then
buy("둘째", atlimit, L, int(투자원금*0.15/C/100000));}
if CurrentEntries >= 0 and openpositionprofit > 0 and var6 > var2 and var7>var3 and
(var2[1]<=var2[1] or var7[1] <= var3[1]) then {
buy("세째",atlimit , L, int(투자원금*0.15/C/100000)); }
if CurrentEntries >= 0 and openpositionprofit >= 0 and crossup(value3 , 88) and c > var1 //and var3 > var3[1]
then{
buy("계속",atlimit , c, int(투자원금*0.15/C/100000)); }}
// 청산조건
IF MARKETPOSITION ==1 then{
crossdown(value2 , 103) OR crossdown(value2 , 104) OR crossdown(value2 , 105) OR
crossdown(value2 , 106) OR crossdown(value2 , 107) OR crossdown(value2 , 108) OR
crossdown(value2 , 109) OR crossdown(value2 , 110) OR crossdown(value2 , 111) OR
crossdown(value2 , 112) OR crossdown(value2 , 113) OR crossdown(value2 , 114) OR
crossdown(value2 , 115) OR crossdown(value2 , 116) OR crossdown(value2 , 117) OR
crossdown(value2 , 118) OR crossdown(value2 , 119) OR crossdown(value2 , 120) OR
crossdown(value2 , 121) OR crossdown(value2 , 122) OR crossdown(value2 , 123) OR
crossdown(value2 , 124) OR crossdown(value2 , 125) OR crossdown(value2 , 126) ;
}
//분할청산
// THEN {
if MarketPosition == 1 Then{
if CurrentContracts > CurrentContracts[1] Then{ #진입에 의해 수량이 상승할때마다 청산비율 재계산
value11 = CurrentContracts;
value12 = int(value11*0.4);
value13 = int(value11*0.5);
value14 = value11-value12-value13;}
if CurrentContracts == value11 and var6 > var2 and
openpositionprofit > 0.5 and
crossdown(value2 , 106) OR crossdown(value2 , 107) OR crossdown(value2 , 108)
Then { #최초진입이나 추가진입이후 첫청산
ExitLong("bx1",onclose,def,"",value12,1);}
if CurrentContracts == value11-value12 and barssinceexit +2 and var6 < var2 and var7 < var3 and
(var2[1]>=var2[1] or var7[1] >= var3[1]) and
openpositionprofit > 0.9 and
crossdown(value2 , 106) OR crossdown(value2 , 107) OR crossdown(value2 , 108)
Then{ #최초진입이나 추가진입이후 두번째 청산
ExitLong("bx2",onclose,def,"",value13,1); }
if CurrentContracts == value14 and barssinceexit +2 and openpositionprofit > 0.9 and
crossdown(value2 , 110) OR crossdown(value2 , 111) OR
crossdown(value2 , 112) OR crossdown(value2 , 113) OR crossdown(value2 , 114) OR
crossdown(value2 , 115) OR crossdown(value2 , 116) OR crossdown(value2 , 117) OR
crossdown(value2 , 118) OR crossdown(value2 , 119) OR crossdown(value2 , 120) OR
crossdown(value2 , 121) OR crossdown(value2 , 122) OR crossdown(value2 , 123) OR
crossdown(value2 , 124) OR crossdown(value2 , 125) OR crossdown(value2 , 126)
Then{ ##최초진입이나 추가진입이후 세번째 청산
ExitLong("bx3");}}
if marketposition == 1 and barssinceentry + 2 And
crossdown( var1 , var8) Then
exitlong("손절", onclose,def,"세째");
setstopendofday(150000);
답변 1
예스스탁 예스스탁 답변
2010-12-03 14:58:23
안녕하세요
예스스탁입니다.
Input : P1(5), p2(12), p3(24), p4(50), p5(80), openpositionprofit(0.1);
Input : 투자원금(5000000) ;
Var : value1(0), value2(0), value3(0);
var : 피봇(0), 저항1(0), 저항2(0),저항3(0),지지1(0),지지2(0),지지3(0);
피봇 = (dayhigh(1)+dayLow(1)+dayclose(1)) /3;
저항1 = 2* 피봇 - dayLow (1);
저항2 = 피봇 + dayhigh(1)-dayLow(1);
지지1 = 2* 피봇 -dayhigh(1);
지지2 = 피봇 - dayhigh(1)+dayLow(1);
var1 = ma(c, p1);
var2 = ma(c, p2);
var3 = ma(c, p3);
var4 = ma(c, p4);
var5 = ma(c, p5);
var6 = ma(H, p1);
var7 = ma(H, p2);
var8 = ma(H, p3);
var9 = ma(H, p4);
var10 = ma(H, p5);
value1 = Disparity(P1) ;
value2 = Disparity(P2) ;
value3 = Disparity(P3) ;
value4 = Disparity(P4) ;
value5 = Disparity(P5) ;
if MarketPosition == 1 Then{
if CurrentContracts > CurrentContracts[1] then{
var91 = c[1];
var92 = lowest(L,5)[1];
}
}
## 매수조건 1
IF
crossup(value2, 98) or crossup(value2, 97) OR crossup(value2, 96) or
crossup(value2, 95) OR crossup(value2, 94) or crossup(value2, 93) OR crossup(value2, 92) Or
crossup(value2, 91) OR crossup(value2, 90) or crossup(value2, 89) OR crossup(value2, 88) Or
crossup(value2, 87) OR crossup(value2, 86) or crossup(value2, 85) OR crossup(value2, 84) or
crossup(value2, 83) OR crossup(value2, 82) or crossup(value2, 81) OR crossup(value2, 80) or
##피봇 1.5
( ( crossup(c, 저항1) or crossup(c,피봇)) and crossup(value2, 95 ))
THEN {
// 피라미딩
if CurrentEntries >= 0 and (MarketPosition == 0 or (MarketPosition == 1 and C > var91)) then {
if crossup(var6,var2) then
buy("처음", atlimit ,L, int(투자원금*0.1/C/100000)); }
if CurrentEntries >= 0 and openpositionprofit >= 0 then{
if crossup(value2, 92) Or crossup(value2, 91) OR crossup(value2, 90) or
crossup(value2, 89) OR value2 <= 80 then
buy("둘째", atlimit, L, int(투자원금*0.15/C/100000));}
if CurrentEntries >= 0 and openpositionprofit > 0 and var6 > var2 and var7>var3 and
(var2[1]<=var2[1] or var7[1] <= var3[1]) then {
buy("세째",atlimit , L, int(투자원금*0.15/C/100000)); }
if CurrentEntries >= 0 and openpositionprofit >= 0 and crossup(value3 , 88) and c > var1 //and var3 > var3[1]
then{
buy("계속",atlimit , c, int(투자원금*0.15/C/100000)); }}
// 청산조건
IF MARKETPOSITION ==1 then{
crossdown(value2 , 103) OR crossdown(value2 , 104) OR crossdown(value2 , 105) OR
crossdown(value2 , 106) OR crossdown(value2 , 107) OR crossdown(value2 , 108) OR
crossdown(value2 , 109) OR crossdown(value2 , 110) OR crossdown(value2 , 111) OR
crossdown(value2 , 112) OR crossdown(value2 , 113) OR crossdown(value2 , 114) OR
crossdown(value2 , 115) OR crossdown(value2 , 116) OR crossdown(value2 , 117) OR
crossdown(value2 , 118) OR crossdown(value2 , 119) OR crossdown(value2 , 120) OR
crossdown(value2 , 121) OR crossdown(value2 , 122) OR crossdown(value2 , 123) OR
crossdown(value2 , 124) OR crossdown(value2 , 125) OR crossdown(value2 , 126) ;
}
//분할청산
// THEN {
if MarketPosition == 1 Then{
if CurrentContracts > CurrentContracts[1] Then{ #진입에 의해 수량이 상승할때마다 청산비율 재계산
value11 = CurrentContracts;
value12 = int(value11*0.4);
value13 = int(value11*0.5);
value14 = value11-value12-value13;}
if CurrentContracts == value11 and var6 > var2 and
openpositionprofit > 0.5 and
crossdown(value2 , 106) OR crossdown(value2 , 107) OR crossdown(value2 , 108)
Then { #최초진입이나 추가진입이후 첫청산
ExitLong("bx1",onclose,def,"",value12,1);}
if CurrentContracts == value11-value12 and barssinceexit +2 and var6 < var2 and var7 < var3 and
(var2[1]>=var2[1] or var7[1] >= var3[1]) and
openpositionprofit > 0.9 and
crossdown(value2 , 106) OR crossdown(value2 , 107) OR crossdown(value2 , 108)
Then{ #최초진입이나 추가진입이후 두번째 청산
ExitLong("bx2",onclose,def,"",value13,1); }
if CurrentContracts == value14 and barssinceexit +2 and openpositionprofit > 0.9 and
crossdown(value2 , 110) OR crossdown(value2 , 111) OR
crossdown(value2 , 112) OR crossdown(value2 , 113) OR crossdown(value2 , 114) OR
crossdown(value2 , 115) OR crossdown(value2 , 116) OR crossdown(value2 , 117) OR
crossdown(value2 , 118) OR crossdown(value2 , 119) OR crossdown(value2 , 120) OR
crossdown(value2 , 121) OR crossdown(value2 , 122) OR crossdown(value2 , 123) OR
crossdown(value2 , 124) OR crossdown(value2 , 125) OR crossdown(value2 , 126)
Then{ ##최초진입이나 추가진입이후 세번째 청산
ExitLong("bx3");}}
if marketposition == 1 and barssinceentry + 2 And
crossdown( var1 , var8) Then
exitlong("손절", onclose,def,"세째");
if MarketPosition == 1 Then{
ExitLong("bxx1",AtStop,var91*0.9);#직전진입가
ExitLong("bxx2",AtStop,var92*0.9);#직전진입봉 기준 5개봉 최저가
}
setstopendofday(150000);
즐거운 하루되세요
> 희망벌 님이 쓴 글입니다.
> 제목 : 안녕하세요.
>
안녕하세요?
수식이 너무 엉터리 같아서 창피하지만
수정 좀 부탁 드릴께요.
지난번 작성해주신 피라미딩 진입식에 조금더 보완하고 싶습니다.
부탁1. //진입조건1 or 2 or...중
1차 진입 이후에 다시 추가로 진입할 때 직전 진입가격을 기억해 두었다가
그 진입가격 이상에서만 진입이 가능하게 해 주세요. 예컨대 2차진입시는 1차진입가격 보다 클때만 ...3차진입시에는 2차진입가격 이상에서...4차는 > 3차 ...(물타기 금지)
2. 청산은 언제나 직전 진입가격 보다 -10 % 낮으면 전량 청산 예컨대 3차례 진입이 있었다면 3차 진입가격 보다 -10%이면 현재 보유량을 전부 청산...하고, 다시 진입신호 나오면 반복...
또는 직전매수가격 이후 C가 < lowest(L,5)하는 방법도 괜잖을 것 같네요. 두가지를 모두 구현해 보고 싶습니다 .
## 함수중에 EntryPrice(N)가 있지만 피라미딩에서는 적용이 안된다고 하여 변수를 대입해 보았지만 실패 했습니다.
Input : P1(5), p2(12), p3(24), p4(50), p5(80), openpositionprofit(0.1);
Input : 투자원금(5000000) ;
Var : value1(0), value2(0), value3(0);
var : 피봇(0), 저항1(0), 저항2(0),저항3(0),지지1(0),지지2(0),지지3(0);
피봇 = (dayhigh(1)+dayLow(1)+dayclose(1)) /3;
저항1 = 2* 피봇 - dayLow (1);
저항2 = 피봇 + dayhigh(1)-dayLow(1);
지지1 = 2* 피봇 -dayhigh(1);
지지2 = 피봇 - dayhigh(1)+dayLow(1);
var1 = ma(c, p1);
var2 = ma(c, p2);
var3 = ma(c, p3);
var4 = ma(c, p4);
var5 = ma(c, p5);
var6 = ma(H, p1);
var7 = ma(H, p2);
var8 = ma(H, p3);
var9 = ma(H, p4);
var10 = ma(H, p5);
value1 = Disparity(P1) ;
value2 = Disparity(P2) ;
value3 = Disparity(P3) ;
value4 = Disparity(P4) ;
value5 = Disparity(P5) ;
## 매수조건 1
IF
crossup(value2, 98) or crossup(value2, 97) OR crossup(value2, 96) or
crossup(value2, 95) OR crossup(value2, 94) or crossup(value2, 93) OR crossup(value2, 92) Or
crossup(value2, 91) OR crossup(value2, 90) or crossup(value2, 89) OR crossup(value2, 88) Or
crossup(value2, 87) OR crossup(value2, 86) or crossup(value2, 85) OR crossup(value2, 84) or
crossup(value2, 83) OR crossup(value2, 82) or crossup(value2, 81) OR crossup(value2, 80) or
##피봇 1.5
( ( crossup(c, 저항1) or crossup(c,피봇)) and crossup(value2, 95 ))
THEN {
// 피라미딩
if CurrentEntries >= 0 then {
if crossup(var6,var2) then
buy("처음", atlimit ,L, int(투자원금*0.1/C/100000)); }
if CurrentEntries >= 0 and openpositionprofit >= 0 then{
if crossup(value2, 92) Or crossup(value2, 91) OR crossup(value2, 90) or
crossup(value2, 89) OR value2 <= 80 then
buy("둘째", atlimit, L, int(투자원금*0.15/C/100000));}
if CurrentEntries >= 0 and openpositionprofit > 0 and var6 > var2 and var7>var3 and
(var2[1]<=var2[1] or var7[1] <= var3[1]) then {
buy("세째",atlimit , L, int(투자원금*0.15/C/100000)); }
if CurrentEntries >= 0 and openpositionprofit >= 0 and crossup(value3 , 88) and c > var1 //and var3 > var3[1]
then{
buy("계속",atlimit , c, int(투자원금*0.15/C/100000)); }}
// 청산조건
IF MARKETPOSITION ==1 then{
crossdown(value2 , 103) OR crossdown(value2 , 104) OR crossdown(value2 , 105) OR
crossdown(value2 , 106) OR crossdown(value2 , 107) OR crossdown(value2 , 108) OR
crossdown(value2 , 109) OR crossdown(value2 , 110) OR crossdown(value2 , 111) OR
crossdown(value2 , 112) OR crossdown(value2 , 113) OR crossdown(value2 , 114) OR
crossdown(value2 , 115) OR crossdown(value2 , 116) OR crossdown(value2 , 117) OR
crossdown(value2 , 118) OR crossdown(value2 , 119) OR crossdown(value2 , 120) OR
crossdown(value2 , 121) OR crossdown(value2 , 122) OR crossdown(value2 , 123) OR
crossdown(value2 , 124) OR crossdown(value2 , 125) OR crossdown(value2 , 126) ;
}
//분할청산
// THEN {
if MarketPosition == 1 Then{
if CurrentContracts > CurrentContracts[1] Then{ #진입에 의해 수량이 상승할때마다 청산비율 재계산
value11 = CurrentContracts;
value12 = int(value11*0.4);
value13 = int(value11*0.5);
value14 = value11-value12-value13;}
if CurrentContracts == value11 and var6 > var2 and
openpositionprofit > 0.5 and
crossdown(value2 , 106) OR crossdown(value2 , 107) OR crossdown(value2 , 108)
Then { #최초진입이나 추가진입이후 첫청산
ExitLong("bx1",onclose,def,"",value12,1);}
if CurrentContracts == value11-value12 and barssinceexit +2 and var6 < var2 and var7 < var3 and
(var2[1]>=var2[1] or var7[1] >= var3[1]) and
openpositionprofit > 0.9 and
crossdown(value2 , 106) OR crossdown(value2 , 107) OR crossdown(value2 , 108)
Then{ #최초진입이나 추가진입이후 두번째 청산
ExitLong("bx2",onclose,def,"",value13,1); }
if CurrentContracts == value14 and barssinceexit +2 and openpositionprofit > 0.9 and
crossdown(value2 , 110) OR crossdown(value2 , 111) OR
crossdown(value2 , 112) OR crossdown(value2 , 113) OR crossdown(value2 , 114) OR
crossdown(value2 , 115) OR crossdown(value2 , 116) OR crossdown(value2 , 117) OR
crossdown(value2 , 118) OR crossdown(value2 , 119) OR crossdown(value2 , 120) OR
crossdown(value2 , 121) OR crossdown(value2 , 122) OR crossdown(value2 , 123) OR
crossdown(value2 , 124) OR crossdown(value2 , 125) OR crossdown(value2 , 126)
Then{ ##최초진입이나 추가진입이후 세번째 청산
ExitLong("bx3");}}
if marketposition == 1 and barssinceentry + 2 And
crossdown( var1 , var8) Then
exitlong("손절", onclose,def,"세째");
setstopendofday(150000);
다음글