커뮤니티
제가 작성한 수식좀 봐주시겠어요?
2009-01-12 16:27:06
876
글번호 19426
한 봉에 진입과 청산이 반복되는 이유를 정확히 모르겠습니다..
혹시 한 봉의 고가저가가 만들어지는 순서를 알수없기 때문에 생기는
일인지...
이해하시기 쉽게 그림파일과 로직을 함께 올려봅니다.
진입과 청산이 제대로 되게 만들어주세요.
///////////////////////////////////////////////////////////////////////
Inputs: Length(18),ATRs(2),peirod(18),Pval(0.0001);
Variables: KUpper(0), KEXUpper(0),KEXGUpper(0), BuySetup(False), ExitlongSetup(False),ExitlongGSetup(False), BuyBase(0);
Variables: KLower(0), KEXLower(0), KEXGLower(0), SellSetup(False), ExitShortSetup(False), ExitShortGSetup(False), SellBase(0);
var : AvgTrueRange(0),AvgtrueRange2(0),AvgtrueRange3(0);
variables: CENTLINE(0);
INPUTS: LENGTH1(18);//, babo1(2), babo2(5), babo3(10);
VARS: TEMA1(0);
AvgTrueRange = (2 * std(TEMA1, peirod));
If MarketPosition() == 1 and PositionProfit() < -0.5 Then //매수진입후 손해를볼때
AvgTrueRange2 = (1 * std(TEMA1, peirod));
If MarketPosition() == 1 and PositionProfit() > -0.5 Then //매수진입후 이익을볼때
AvgTrueRange3 = (4 * std(TEMA1, peirod));
If MarketPosition() == -1 and PositionProfit() < -0.5 Then //매도진입후 손해를볼때
AvgTrueRange2 = (1 * std(TEMA1, peirod));
If MarketPosition() == -1 and PositionProfit() > -0.5 Then //매도진입후 이익을볼때
AvgTrueRange3 = (4 * std(TEMA1, peirod));
TEMA1 = (3 * Ema(c,LENGTH1)) - (3 * Ema(Ema(c,LENGTH1),LENGTH1)) +
(Ema(Ema(Ema(c,LENGTH1),LENGTH1),LENGTH1));
KUpper = KeltnerChannel(TEMA1, Length, AvgTrueRange);
KLower = KeltnerChannel(TEMA1, Length, -AvgTrueRange);
CENTLINE =KeltnerChannel(TEMA1, Length, pval);
KEXUpper = KeltnerChannel(TEMA1, Length, AvgTrueRange2); //진입손해청산 상단
KEXLower = KeltnerChannel(TEMA1, Length, -AvgTrueRange2); //진입손해청산 하단
KEXGUpper = KeltnerChannel(TEMA1, Length, AvgTrueRange3); //진입이익청산 상단
KEXGLower = KeltnerChannel(TEMA1, Length, -AvgTrueRange3); //진입이익청산 하단
Condition1 = Crossup (C, KUpper); //매수진입
Condition3 = CrossDown (C, KEXUpper); //손해매수청산
Condition5 = CrossDown (C, KEXGUpper); //이익매수청산
Condition2 = CrossDown (C , KLower); //매도진입
Condition4 = CrossUp (C , KEXLower); //손해매도청산
Condition6 = CrossUp (C , KEXGLower); //이익매도청산
////////////////// B U Y B A S E //////////////
/*
If Crossdown (TEMA1,CENTLINE) Then
BuySetup = False;
Else
*/
/////////매수진입//////////////////
If Condition1 Then Begin
BuySetup = True;
buybase = high;
End;
/////////이익매수청산//////////////////
If Condition5 Then Begin
ExitlongGSetup = True;
buybase = high;
End;
/////////손해매수청산//////////////////
If Condition3 Then Begin
ExitlongSetup = True;
buybase = high;
End;
////////////////// S E L L B A S E //////////////
/*
If Crossup (TEMA1, CENTLINE) Then
SellSetup = False;
Else
*/
/////////매도진입//////////////////
If Condition2 Then Begin
SellSetup = True;
Sellbase = low;
End;
//////////이익매도청산/////////////////
If Condition6 Then Begin
ExitShortGSetup = True;
Sellbase = low;
End;
//////////손해매도청산/////////////////
If Condition4 Then Begin
ExitShortSetup = True;
Sellbase = low;
End;
////////////////// T R A D E T R I G G E R //////////////
//Description : Keltner Channel Long Entry
//if stime > 100000 then {
If BuySetup Then
{
Buy ("매수진입", AtStop, Buybase + pval);
};
If ExitlongGSetup Then
{
EXITlong("이익매수청산",Atstop,Buybase - pval);
BuySetup = False;
};
If ExitlongSetup Then
{
EXITlong("손해매수청산",Atstop,Buybase - pval);
BuySetup = False;
};
//Description : Keltner Channel Short Entry
If SellSetup Then
{
Sell ("매도진입", AtStop,Sellbase - pval);
};
If ExitShortGSetup Then
{
EXITShort ("이익매도청산",Atstop,Sellbase + pval);
SellSetup = False;
};
If ExitShortSetup Then
{
EXITShort ("손해매도청산",Atstop,Sellbase + pval);
SellSetup = False;
};
//};
/////////////////////////////////////////////////////
- 1. 19630_test1.jpg (0.34 MB)
답변 1
예스스탁 예스스탁 답변
2009-01-13 13:28:05
안녕하세요
예스스탁입니다.
진입하자 마자 동일봉에서 청산신호가 발생하는이유는
청산시 사용하는 가격조건인 Buybase이 전봉의 가격을 사용하기 때문입니다.
이는 매수가 발생하는 시점에 Buybase가 저장되는 것이 아니라
특정조건이 만족하는 시점에 ExitlongSetup이 True가 되기 때문입니다.
즉 매수전봉이 ExitlongSetup이 True이므로
매수하자 마자 전봉의 Buybase를 사용하여 신호가 발생하기 때문입니다.
청산을 진입이후의 가격으로 사용하실 의도 시라면
청산식과 진입식에 marketposition을 이용하여 포지션을 확인하고
진입과 청산을 하게 하셔야 합니다.
청산식에 신호의 이름은 이익청산인데 식 자체는 손절과 같습니다.
exitlong의 atstop은 atstop가격조건이하의 시세가 발생하면 청산한다는 의미이며
exitshort의 atstop은 atstop가격조건이상의 시세가 발생하면 청산한다는 의미입니다.
수정한 식입니다.
///////////////////////////////////////////////////////////////////////
Inputs: Length(18),ATRs(2),peirod(18),Pval(0.0001);
Variables: KUpper(0), KEXUpper(0),KEXGUpper(0), BuySetup(False), ExitlongSetup(False),ExitlongGSetup(False), BuyBase(0);
Variables: KLower(0), KEXLower(0), KEXGLower(0), SellSetup(False), ExitShortSetup(False), ExitShortGSetup(False), SellBase(0);
var : AvgTrueRange(0),AvgtrueRange2(0),AvgtrueRange3(0);
variables: CENTLINE(0);
INPUTS: LENGTH1(18);//, babo1(2), babo2(5), babo3(10);
VARS: TEMA1(0);
AvgTrueRange = (2 * std(TEMA1, peirod));
If MarketPosition() == 1 and PositionProfit() < -0.5 Then //매수진입후 손해를볼때
AvgTrueRange2 = (1 * std(TEMA1, peirod));
If MarketPosition() == 1 and PositionProfit() > -0.5 Then //매수진입후 이익을볼때
AvgTrueRange3 = (4 * std(TEMA1, peirod));
If MarketPosition() == -1 and PositionProfit() < -0.5 Then //매도진입후 손해를볼때
AvgTrueRange2 = (1 * std(TEMA1, peirod));
If MarketPosition() == -1 and PositionProfit() > -0.5 Then //매도진입후 이익을볼때
AvgTrueRange3 = (4 * std(TEMA1, peirod));
TEMA1 = (3 * Ema(c,LENGTH1)) - (3 * Ema(Ema(c,LENGTH1),LENGTH1)) +
(Ema(Ema(Ema(c,LENGTH1),LENGTH1),LENGTH1));
KUpper = KeltnerChannel(TEMA1, Length, AvgTrueRange);
KLower = KeltnerChannel(TEMA1, Length, -AvgTrueRange);
CENTLINE =KeltnerChannel(TEMA1, Length, pval);
KEXUpper = KeltnerChannel(TEMA1, Length, AvgTrueRange2); //진입손해청산 상단
KEXLower = KeltnerChannel(TEMA1, Length, -AvgTrueRange2); //진입손해청산 하단
KEXGUpper = KeltnerChannel(TEMA1, Length, AvgTrueRange3); //진입이익청산 상단
KEXGLower = KeltnerChannel(TEMA1, Length, -AvgTrueRange3); //진입이익청산 하단
Condition1 = Crossup (C, KUpper); //매수진입
Condition3 = CrossDown (C, KEXUpper); //손해매수청산
Condition5 = CrossDown (C, KEXGUpper); //이익매수청산
Condition2 = CrossDown (C , KLower); //매도진입
Condition4 = CrossUp (C , KEXLower); //손해매도청산
Condition6 = CrossUp (C , KEXGLower); //이익매도청산
////////////////// B U Y B A S E //////////////
/*
If Crossdown (TEMA1,CENTLINE) Then
BuySetup = False;
Else
*/
/////////매수진입//////////////////
If Condition1 Then Begin
BuySetup = True;
buybase = high;
End;
/////////이익매수청산//////////////////
If Condition5 Then Begin
ExitlongGSetup = True;
buybase = high;
End;
/////////손해매수청산//////////////////
If Condition3 Then Begin
ExitlongSetup = True;
buybase = high;
End;
////////////////// S E L L B A S E //////////////
/*
If Crossup (TEMA1, CENTLINE) Then
SellSetup = False;
Else
*/
/////////매도진입//////////////////
If Condition2 Then Begin
SellSetup = True;
Sellbase = low;
End;
//////////이익매도청산/////////////////
If Condition6 Then Begin
ExitShortGSetup = True;
Sellbase = low;
End;
//////////손해매도청산/////////////////
If Condition4 Then Begin
ExitShortSetup = True;
Sellbase = low;
End;
////////////////// T R A D E T R I G G E R //////////////
//Description : Keltner Channel Long Entry
//if stime > 100000 then {
If BuySetup and MarketPosition() == 0 Then
{
Buy ("매수진입", AtStop, Buybase + pval);
};
If ExitlongGSetup and MarketPosition == 1 Then
{
EXITlong("이익매수청산",Atstop,Buybase - pval);
BuySetup = False;
};
If ExitlongSetup and MarketPosition == 1 Then
{
EXITlong("손해매수청산",Atstop,Buybase - pval);
BuySetup = False;
};
//Description : Keltner Channel Short Entry
If SellSetup and MarketPosition() == 0 Then
{
Sell ("매도진입", AtStop,Sellbase - pval);
};
If ExitShortGSetup and MarketPosition == -1 Then
{
EXITShort ("이익매도청산",Atstop,Sellbase + pval);
SellSetup = False;
};
If ExitShortSetup and MarketPosition == -1 Then
{
EXITShort ("손해매도청산",Atstop,Sellbase + pval);
SellSetup = False;
};
//};
/////////////////////////////////////////////////////
즐거운 하루되세요
> kmp 님이 쓴 글입니다.
> 제목 : 제가 작성한 수식좀 봐주시겠어요?
>
한 봉에 진입과 청산이 반복되는 이유를 정확히 모르겠습니다..
혹시 한 봉의 고가저가가 만들어지는 순서를 알수없기 때문에 생기는
일인지...
이해하시기 쉽게 그림파일과 로직을 함께 올려봅니다.
진입과 청산이 제대로 되게 만들어주세요.
///////////////////////////////////////////////////////////////////////
Inputs: Length(18),ATRs(2),peirod(18),Pval(0.0001);
Variables: KUpper(0), KEXUpper(0),KEXGUpper(0), BuySetup(False), ExitlongSetup(False),ExitlongGSetup(False), BuyBase(0);
Variables: KLower(0), KEXLower(0), KEXGLower(0), SellSetup(False), ExitShortSetup(False), ExitShortGSetup(False), SellBase(0);
var : AvgTrueRange(0),AvgtrueRange2(0),AvgtrueRange3(0);
variables: CENTLINE(0);
INPUTS: LENGTH1(18);//, babo1(2), babo2(5), babo3(10);
VARS: TEMA1(0);
AvgTrueRange = (2 * std(TEMA1, peirod));
If MarketPosition() == 1 and PositionProfit() < -0.5 Then //매수진입후 손해를볼때
AvgTrueRange2 = (1 * std(TEMA1, peirod));
If MarketPosition() == 1 and PositionProfit() > -0.5 Then //매수진입후 이익을볼때
AvgTrueRange3 = (4 * std(TEMA1, peirod));
If MarketPosition() == -1 and PositionProfit() < -0.5 Then //매도진입후 손해를볼때
AvgTrueRange2 = (1 * std(TEMA1, peirod));
If MarketPosition() == -1 and PositionProfit() > -0.5 Then //매도진입후 이익을볼때
AvgTrueRange3 = (4 * std(TEMA1, peirod));
TEMA1 = (3 * Ema(c,LENGTH1)) - (3 * Ema(Ema(c,LENGTH1),LENGTH1)) +
(Ema(Ema(Ema(c,LENGTH1),LENGTH1),LENGTH1));
KUpper = KeltnerChannel(TEMA1, Length, AvgTrueRange);
KLower = KeltnerChannel(TEMA1, Length, -AvgTrueRange);
CENTLINE =KeltnerChannel(TEMA1, Length, pval);
KEXUpper = KeltnerChannel(TEMA1, Length, AvgTrueRange2); //진입손해청산 상단
KEXLower = KeltnerChannel(TEMA1, Length, -AvgTrueRange2); //진입손해청산 하단
KEXGUpper = KeltnerChannel(TEMA1, Length, AvgTrueRange3); //진입이익청산 상단
KEXGLower = KeltnerChannel(TEMA1, Length, -AvgTrueRange3); //진입이익청산 하단
Condition1 = Crossup (C, KUpper); //매수진입
Condition3 = CrossDown (C, KEXUpper); //손해매수청산
Condition5 = CrossDown (C, KEXGUpper); //이익매수청산
Condition2 = CrossDown (C , KLower); //매도진입
Condition4 = CrossUp (C , KEXLower); //손해매도청산
Condition6 = CrossUp (C , KEXGLower); //이익매도청산
////////////////// B U Y B A S E //////////////
/*
If Crossdown (TEMA1,CENTLINE) Then
BuySetup = False;
Else
*/
/////////매수진입//////////////////
If Condition1 Then Begin
BuySetup = True;
buybase = high;
End;
/////////이익매수청산//////////////////
If Condition5 Then Begin
ExitlongGSetup = True;
buybase = high;
End;
/////////손해매수청산//////////////////
If Condition3 Then Begin
ExitlongSetup = True;
buybase = high;
End;
////////////////// S E L L B A S E //////////////
/*
If Crossup (TEMA1, CENTLINE) Then
SellSetup = False;
Else
*/
/////////매도진입//////////////////
If Condition2 Then Begin
SellSetup = True;
Sellbase = low;
End;
//////////이익매도청산/////////////////
If Condition6 Then Begin
ExitShortGSetup = True;
Sellbase = low;
End;
//////////손해매도청산/////////////////
If Condition4 Then Begin
ExitShortSetup = True;
Sellbase = low;
End;
////////////////// T R A D E T R I G G E R //////////////
//Description : Keltner Channel Long Entry
//if stime > 100000 then {
If BuySetup Then
{
Buy ("매수진입", AtStop, Buybase + pval);
};
If ExitlongGSetup Then
{
EXITlong("이익매수청산",Atstop,Buybase - pval);
BuySetup = False;
};
If ExitlongSetup Then
{
EXITlong("손해매수청산",Atstop,Buybase - pval);
BuySetup = False;
};
//Description : Keltner Channel Short Entry
If SellSetup Then
{
Sell ("매도진입", AtStop,Sellbase - pval);
};
If ExitShortGSetup Then
{
EXITShort ("이익매도청산",Atstop,Sellbase + pval);
SellSetup = False;
};
If ExitShortSetup Then
{
EXITShort ("손해매도청산",Atstop,Sellbase + pval);
SellSetup = False;
};
//};
/////////////////////////////////////////////////////
다음글
이전글