커뮤니티
문의드립니다.
2018-02-14 14:59:54
251
글번호 116648
도움주시는 덕분에 도전하고 있습니다. 매번 감사합니다.
1. 시스템
Strategy: Darvas by Guppy
inputs:
Periods( 100 ),
ExitNextDay( false ),
GhostBoxExit( false ),
BreakoutEntry (false ),
VolumeEntry( false ),
VolumeAvgLen( 10 ),
VolumeFactor( 1.5 ) ;
variables:
BarsSinceDH( 0 ),
BarsSinceDL( 0 ),
CriticalLow( 0 ),
TempD_Low( 0 ),
SearchForLow ( false ),
D_Low( 0 ),
D_High( 0 ),
BottomLineNum( 0 ),
TopLineNum( 0 ),
LeftSideNum( 0 ),
RightSideNum( 0 ),
CriticalHigh( 0 ),
TempD_High( 0 ),
DHighLowDiff( 0 ),
MyStop( 0 ),
MyTrigger( 0 ),
DownTrend( 0 ) ;
if CurrentBar > Periods then
begin
BarsSinceDH = BarsSinceDH + 1 ;
BarsSinceDL = BarsSinceDL + 1 ;
if Low[3] <= CriticalLow[4] and
Low[3] <= Low[2] and
Low[3] <= Low[1] and
Low[3] < Low
then
begin
TempD_Low = Low[3] ;
BarsSinceDL = 3 ;
end ;
if SearchForLow and BarsSinceDL < 6 and
BarsSinceDL <= BarsSinceDH then
begin
D_Low = Low[BarsSinceDL] ;
D_High = TempD_High ;
SearchForLow = false ;
BottomLineNum = TL_New( Date[BarsSinceDH],
Time[BarsSinceDH], D_Low, Date[3], Time[3],
D_Low ) ;
TopLineNum = TL_New( Date[BarsSinceDH],
Time[BarsSinceDH], D_High, Date[3], Time[3],
D_High ) ;
LeftSideNum = TL_New( Date[BarsSinceDH],
Time[BarsSinceDH], D_High, Date[BarsSinceDH],
Time[BarsSinceDH], D_Low ) ;
RightSideNum = TL_New( Date[3], Time[3], D_High,
Date[3], Time[3], D_Low ) ;
end ;
if High[3] >= CriticalHigh[4]
and High[3] >= High[2]
and High[3] >= High[1]
and High[3] > High
then
begin
BarsSinceDH = 3 ;
TempD_High = High[3] ;
SearchForLow = true ;
end ;
CriticalHigh = Highest( High, Periods ) ;
CriticalLow = Lowest( Low, BarsSinceDH ) ;
end ;
DHighLowDiff = D_High - D_Low ;
if GhostBoxExit and DHighLowDiff > 0 and Close >
D_High + DHighLowDiff then
begin
MyStop = ( IntPortion( ( Close - D_Low ) /
DHighLowdiff ) - 1 ) * DHighLowDiff + D_Low ;
MyTrigger = MyStop + DHighLowDiff ;
end
else
begin
MyStop = D_Low ;
MyTrigger = D_High ;
end ;
if Close crosses under D_Low then
DownTrend = 0
else if BreakoutEntry and Close crosses over D_High then
DownTrend = 1
else if BreakoutEntry and DownTrend = 1 and
BarsSinceDL = 3 then
DownTrend = 2 ;
if ( BreakoutEntry and DownTrend = 2 ) or
BreakoutEntry = false then
begin
if VolumeEntry then
begin
if Close crosses over MyTrigger and Volume >
Average( Volume, VolumeAvgLen ) * VolumeFactor
then
Buy next bar market ;
end
else if Close < MyTrigger then
Buy next bar MyTrigger stop ;
if ExitNextDay then
begin
if Low[1] >= MyStop and Low < MyStop then
Sell next bar at market ;
end
else
Sell next bar at MyStop stop ;
end ;
2. 기타
이전에 begin end는 중괄호라고 말씀해주셨던 것 같은데요. 트레이드스테이션 코드는 Sell next bar at market 이런 주문식 빼고 대부분 동일한가요?
답변 4
예스스탁 예스스탁 답변
2018-02-14 15:21:10
안녕하세요
예스스탁입니다.
1
inputs:
Periods( 100 ),
ExitNextDay( false ),
GhostBoxExit( false ),
BreakoutEntry (false ),
VolumeEntry( false ),
VolumeAvgLen( 10 ),
VolumeFactor( 1.5 ) ;
variables:
BarsSinceDH( 0 ),
BarsSinceDL( 0 ),
CriticalLow( 0 ),
TempD_Low( 0 ),
SearchForLow ( false ),
D_Low( 0 ),
D_High( 0 ),
BottomLineNum( 0 ),
TopLineNum( 0 ),
LeftSideNum( 0 ),
RightSideNum( 0 ),
CriticalHigh( 0 ),
TempD_High( 0 ),
DHighLowDiff( 0 ),
MyStop( 0 ),
MyTrigger( 0 ),
DownTrend( 0 ) ;
if CurrentBar > Periods then
begin
BarsSinceDH = BarsSinceDH + 1 ;
BarsSinceDL = BarsSinceDL + 1 ;
if Low[3] <= CriticalLow[4] and
Low[3] <= Low[2] and
Low[3] <= Low[1] and
Low[3] < Low then
begin
TempD_Low = Low[3] ;
BarsSinceDL = 3 ;
end ;
if SearchForLow and BarsSinceDL < 6 and
BarsSinceDL <= BarsSinceDH then
begin
D_Low = Low[BarsSinceDL] ;
D_High = TempD_High ;
SearchForLow = false ;
BottomLineNum = TL_New( Date[BarsSinceDH],Time[BarsSinceDH], D_Low, Date[3], Time[3],D_Low ) ;
TopLineNum = TL_New( Date[BarsSinceDH],Time[BarsSinceDH], D_High, Date[3], Time[3],D_High ) ;
LeftSideNum = TL_New( Date[BarsSinceDH],Time[BarsSinceDH], D_High, Date[BarsSinceDH],Time[BarsSinceDH], D_Low ) ;
RightSideNum = TL_New( Date[3], Time[3], D_High,Date[3], Time[3], D_Low ) ;
end ;
if High[3] >= CriticalHigh[4]
and High[3] >= High[2]
and High[3] >= High[1]
and High[3] > High then
begin
BarsSinceDH = 3 ;
TempD_High = High[3] ;
SearchForLow = true ;
end ;
CriticalHigh = Highest( High, Periods ) ;
CriticalLow = Lowest( Low, BarsSinceDH ) ;
end;
DHighLowDiff = D_High - D_Low ;
if GhostBoxExit and DHighLowDiff > 0 and Close > D_High + DHighLowDiff then
begin
MyStop = ( IntPortion( ( Close - D_Low ) /
DHighLowdiff ) - 1 ) * DHighLowDiff + D_Low ;
MyTrigger = MyStop + DHighLowDiff ;
end
else
begin
MyStop = D_Low ;
MyTrigger = D_High ;
end;
if CrossDown(Close,D_Low) then
DownTrend = 0 ;
else if BreakoutEntry and crossup(Close,D_High) then
DownTrend = 1 ;
else if BreakoutEntry and DownTrend == 1 and BarsSinceDL == 3 then
DownTrend = 2 ;
if (BreakoutEntry and DownTrend == 2 ) or BreakoutEntry == false then
begin
if VolumeEntry then
begin
if crossup(Close, MyTrigger) and Volume > ma( Volume, VolumeAvgLen ) * VolumeFactor then
Buy("b1",AtMarket);
end
else if Close < MyTrigger then
Buy("b2",AtStop,MyTrigger);
if ExitNextDay then
begin
if Low[1] >= MyStop and Low < MyStop then
Sell("s1",AtMarket);
end
else
Sell("s2",AtStop,MyStop);
end;
2
기본적인 골격은 비슷하지만 세부적으로 여러 가지 차이점이 있습니다.
문법적으로 보면 예스랭귀지에서는 같다라는 표현이 == 인데, EL에서는 = 이고
예스랭귀지에서는 문장 끝에 항상 ;를 표시하는데 EL은 표시하지 않는 부분도 있습니다.
동일내용의 함수인데 함수명이 다를수 있고
동일 이름이라도 매개변수 지정이 다른 경우들이 있습니다.
즐거운 하루되세요
> 잡다백수 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 도움주시는 덕분에 도전하고 있습니다. 매번 감사합니다.
1. 시스템
Strategy: Darvas by Guppy
inputs:
Periods( 100 ),
ExitNextDay( false ),
GhostBoxExit( false ),
BreakoutEntry (false ),
VolumeEntry( false ),
VolumeAvgLen( 10 ),
VolumeFactor( 1.5 ) ;
variables:
BarsSinceDH( 0 ),
BarsSinceDL( 0 ),
CriticalLow( 0 ),
TempD_Low( 0 ),
SearchForLow ( false ),
D_Low( 0 ),
D_High( 0 ),
BottomLineNum( 0 ),
TopLineNum( 0 ),
LeftSideNum( 0 ),
RightSideNum( 0 ),
CriticalHigh( 0 ),
TempD_High( 0 ),
DHighLowDiff( 0 ),
MyStop( 0 ),
MyTrigger( 0 ),
DownTrend( 0 ) ;
if CurrentBar > Periods then
begin
BarsSinceDH = BarsSinceDH + 1 ;
BarsSinceDL = BarsSinceDL + 1 ;
if Low[3] <= CriticalLow[4] and
Low[3] <= Low[2] and
Low[3] <= Low[1] and
Low[3] < Low
then
begin
TempD_Low = Low[3] ;
BarsSinceDL = 3 ;
end ;
if SearchForLow and BarsSinceDL < 6 and
BarsSinceDL <= BarsSinceDH then
begin
D_Low = Low[BarsSinceDL] ;
D_High = TempD_High ;
SearchForLow = false ;
BottomLineNum = TL_New( Date[BarsSinceDH],
Time[BarsSinceDH], D_Low, Date[3], Time[3],
D_Low ) ;
TopLineNum = TL_New( Date[BarsSinceDH],
Time[BarsSinceDH], D_High, Date[3], Time[3],
D_High ) ;
LeftSideNum = TL_New( Date[BarsSinceDH],
Time[BarsSinceDH], D_High, Date[BarsSinceDH],
Time[BarsSinceDH], D_Low ) ;
RightSideNum = TL_New( Date[3], Time[3], D_High,
Date[3], Time[3], D_Low ) ;
end ;
if High[3] >= CriticalHigh[4]
and High[3] >= High[2]
and High[3] >= High[1]
and High[3] > High
then
begin
BarsSinceDH = 3 ;
TempD_High = High[3] ;
SearchForLow = true ;
end ;
CriticalHigh = Highest( High, Periods ) ;
CriticalLow = Lowest( Low, BarsSinceDH ) ;
end ;
DHighLowDiff = D_High - D_Low ;
if GhostBoxExit and DHighLowDiff > 0 and Close >
D_High + DHighLowDiff then
begin
MyStop = ( IntPortion( ( Close - D_Low ) /
DHighLowdiff ) - 1 ) * DHighLowDiff + D_Low ;
MyTrigger = MyStop + DHighLowDiff ;
end
else
begin
MyStop = D_Low ;
MyTrigger = D_High ;
end ;
if Close crosses under D_Low then
DownTrend = 0
else if BreakoutEntry and Close crosses over D_High then
DownTrend = 1
else if BreakoutEntry and DownTrend = 1 and
BarsSinceDL = 3 then
DownTrend = 2 ;
if ( BreakoutEntry and DownTrend = 2 ) or
BreakoutEntry = false then
begin
if VolumeEntry then
begin
if Close crosses over MyTrigger and Volume >
Average( Volume, VolumeAvgLen ) * VolumeFactor
then
Buy next bar market ;
end
else if Close < MyTrigger then
Buy next bar MyTrigger stop ;
if ExitNextDay then
begin
if Low[1] >= MyStop and Low < MyStop then
Sell next bar at market ;
end
else
Sell next bar at MyStop stop ;
end ;
2. 기타
이전에 begin end는 중괄호라고 말씀해주셨던 것 같은데요. 트레이드스테이션 코드는 Sell next bar at market 이런 주문식 빼고 대부분 동일한가요?
잡다백수
2018-02-14 15:34:40
잡다백수 님에 의해 삭제된 답변입니다.
잡다백수
2018-02-14 15:34:40
코딩감사합니다. 실행해보니
'논리값(참/거짓)이나 논리표현식이 와야 합니다'라는 오류가 나왔습니다. 시뮬에 돌리려면 false 부분으로 된 것을 다 01로 바꾸어야 하나요?
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 문의드립니다.
> 안녕하세요
예스스탁입니다.
1
inputs:
Periods( 100 ),
ExitNextDay( false ),
GhostBoxExit( false ),
BreakoutEntry (false ),
VolumeEntry( false ),
VolumeAvgLen( 10 ),
VolumeFactor( 1.5 ) ;
variables:
BarsSinceDH( 0 ),
BarsSinceDL( 0 ),
CriticalLow( 0 ),
TempD_Low( 0 ),
SearchForLow ( false ),
D_Low( 0 ),
D_High( 0 ),
BottomLineNum( 0 ),
TopLineNum( 0 ),
LeftSideNum( 0 ),
RightSideNum( 0 ),
CriticalHigh( 0 ),
TempD_High( 0 ),
DHighLowDiff( 0 ),
MyStop( 0 ),
MyTrigger( 0 ),
DownTrend( 0 ) ;
if CurrentBar > Periods then
begin
BarsSinceDH = BarsSinceDH + 1 ;
BarsSinceDL = BarsSinceDL + 1 ;
if Low[3] <= CriticalLow[4] and
Low[3] <= Low[2] and
Low[3] <= Low[1] and
Low[3] < Low then
begin
TempD_Low = Low[3] ;
BarsSinceDL = 3 ;
end ;
if SearchForLow and BarsSinceDL < 6 and
BarsSinceDL <= BarsSinceDH then
begin
D_Low = Low[BarsSinceDL] ;
D_High = TempD_High ;
SearchForLow = false ;
BottomLineNum = TL_New( Date[BarsSinceDH],Time[BarsSinceDH], D_Low, Date[3], Time[3],D_Low ) ;
TopLineNum = TL_New( Date[BarsSinceDH],Time[BarsSinceDH], D_High, Date[3], Time[3],D_High ) ;
LeftSideNum = TL_New( Date[BarsSinceDH],Time[BarsSinceDH], D_High, Date[BarsSinceDH],Time[BarsSinceDH], D_Low ) ;
RightSideNum = TL_New( Date[3], Time[3], D_High,Date[3], Time[3], D_Low ) ;
end ;
if High[3] >= CriticalHigh[4]
and High[3] >= High[2]
and High[3] >= High[1]
and High[3] > High then
begin
BarsSinceDH = 3 ;
TempD_High = High[3] ;
SearchForLow = true ;
end ;
CriticalHigh = Highest( High, Periods ) ;
CriticalLow = Lowest( Low, BarsSinceDH ) ;
end;
DHighLowDiff = D_High - D_Low ;
if GhostBoxExit and DHighLowDiff > 0 and Close > D_High + DHighLowDiff then
begin
MyStop = ( IntPortion( ( Close - D_Low ) /
DHighLowdiff ) - 1 ) * DHighLowDiff + D_Low ;
MyTrigger = MyStop + DHighLowDiff ;
end
else
begin
MyStop = D_Low ;
MyTrigger = D_High ;
end;
if CrossDown(Close,D_Low) then
DownTrend = 0 ;
else if BreakoutEntry and crossup(Close,D_High) then
DownTrend = 1 ;
else if BreakoutEntry and DownTrend == 1 and BarsSinceDL == 3 then
DownTrend = 2 ;
if (BreakoutEntry and DownTrend == 2 ) or BreakoutEntry == false then
begin
if VolumeEntry then
begin
if crossup(Close, MyTrigger) and Volume > ma( Volume, VolumeAvgLen ) * VolumeFactor then
Buy("b1",AtMarket);
end
else if Close < MyTrigger then
Buy("b2",AtStop,MyTrigger);
if ExitNextDay then
begin
if Low[1] >= MyStop and Low < MyStop then
Sell("s1",AtMarket);
end
else
Sell("s2",AtStop,MyStop);
end;
2
기본적인 골격은 비슷하지만 세부적으로 여러 가지 차이점이 있습니다.
문법적으로 보면 예스랭귀지에서는 같다라는 표현이 == 인데, EL에서는 = 이고
예스랭귀지에서는 문장 끝에 항상 ;를 표시하는데 EL은 표시하지 않는 부분도 있습니다.
동일내용의 함수인데 함수명이 다를수 있고
동일 이름이라도 매개변수 지정이 다른 경우들이 있습니다.
즐거운 하루되세요
> 잡다백수 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 도움주시는 덕분에 도전하고 있습니다. 매번 감사합니다.
1. 시스템
Strategy: Darvas by Guppy
inputs:
Periods( 100 ),
ExitNextDay( false ),
GhostBoxExit( false ),
BreakoutEntry (false ),
VolumeEntry( false ),
VolumeAvgLen( 10 ),
VolumeFactor( 1.5 ) ;
variables:
BarsSinceDH( 0 ),
BarsSinceDL( 0 ),
CriticalLow( 0 ),
TempD_Low( 0 ),
SearchForLow ( false ),
D_Low( 0 ),
D_High( 0 ),
BottomLineNum( 0 ),
TopLineNum( 0 ),
LeftSideNum( 0 ),
RightSideNum( 0 ),
CriticalHigh( 0 ),
TempD_High( 0 ),
DHighLowDiff( 0 ),
MyStop( 0 ),
MyTrigger( 0 ),
DownTrend( 0 ) ;
if CurrentBar > Periods then
begin
BarsSinceDH = BarsSinceDH + 1 ;
BarsSinceDL = BarsSinceDL + 1 ;
if Low[3] <= CriticalLow[4] and
Low[3] <= Low[2] and
Low[3] <= Low[1] and
Low[3] < Low
then
begin
TempD_Low = Low[3] ;
BarsSinceDL = 3 ;
end ;
if SearchForLow and BarsSinceDL < 6 and
BarsSinceDL <= BarsSinceDH then
begin
D_Low = Low[BarsSinceDL] ;
D_High = TempD_High ;
SearchForLow = false ;
BottomLineNum = TL_New( Date[BarsSinceDH],
Time[BarsSinceDH], D_Low, Date[3], Time[3],
D_Low ) ;
TopLineNum = TL_New( Date[BarsSinceDH],
Time[BarsSinceDH], D_High, Date[3], Time[3],
D_High ) ;
LeftSideNum = TL_New( Date[BarsSinceDH],
Time[BarsSinceDH], D_High, Date[BarsSinceDH],
Time[BarsSinceDH], D_Low ) ;
RightSideNum = TL_New( Date[3], Time[3], D_High,
Date[3], Time[3], D_Low ) ;
end ;
if High[3] >= CriticalHigh[4]
and High[3] >= High[2]
and High[3] >= High[1]
and High[3] > High
then
begin
BarsSinceDH = 3 ;
TempD_High = High[3] ;
SearchForLow = true ;
end ;
CriticalHigh = Highest( High, Periods ) ;
CriticalLow = Lowest( Low, BarsSinceDH ) ;
end ;
DHighLowDiff = D_High - D_Low ;
if GhostBoxExit and DHighLowDiff > 0 and Close >
D_High + DHighLowDiff then
begin
MyStop = ( IntPortion( ( Close - D_Low ) /
DHighLowdiff ) - 1 ) * DHighLowDiff + D_Low ;
MyTrigger = MyStop + DHighLowDiff ;
end
else
begin
MyStop = D_Low ;
MyTrigger = D_High ;
end ;
if Close crosses under D_Low then
DownTrend = 0
else if BreakoutEntry and Close crosses over D_High then
DownTrend = 1
else if BreakoutEntry and DownTrend = 1 and
BarsSinceDL = 3 then
DownTrend = 2 ;
if ( BreakoutEntry and DownTrend = 2 ) or
BreakoutEntry = false then
begin
if VolumeEntry then
begin
if Close crosses over MyTrigger and Volume >
Average( Volume, VolumeAvgLen ) * VolumeFactor
then
Buy next bar market ;
end
else if Close < MyTrigger then
Buy next bar MyTrigger stop ;
if ExitNextDay then
begin
if Low[1] >= MyStop and Low < MyStop then
Sell next bar at market ;
end
else
Sell next bar at MyStop stop ;
end ;
2. 기타
이전에 begin end는 중괄호라고 말씀해주셨던 것 같은데요. 트레이드스테이션 코드는 Sell next bar at market 이런 주문식 빼고 대부분 동일한가요?
예스스탁 예스스탁 답변
2018-02-14 15:40:04
안녕하세요
예스스탁입니다.
외부변수 중에 false로 지정된 변수를 0으로 변경했습니다.
true는 1로 지정하고, false는 0으로 지정하시면 됩니다.
inputs:
Periods( 100 ),
ExitNextDay( 0 ),
GhostBoxExit( 0 ),
BreakoutEntry (0 ),
VolumeEntry( 0 ),
VolumeAvgLen( 10 ),
VolumeFactor( 1.5 ) ;
variables:
BarsSinceDH( 0 ),
BarsSinceDL( 0 ),
CriticalLow( 0 ),
TempD_Low( 0 ),
SearchForLow ( false ),
D_Low( 0 ),
D_High( 0 ),
BottomLineNum( 0 ),
TopLineNum( 0 ),
LeftSideNum( 0 ),
RightSideNum( 0 ),
CriticalHigh( 0 ),
TempD_High( 0 ),
DHighLowDiff( 0 ),
MyStop( 0 ),
MyTrigger( 0 ),
DownTrend( 0 ) ;
if CurrentBar > Periods then
begin
BarsSinceDH = BarsSinceDH + 1 ;
BarsSinceDL = BarsSinceDL + 1 ;
if Low[3] <= CriticalLow[4] and
Low[3] <= Low[2] and
Low[3] <= Low[1] and
Low[3] < Low then
begin
TempD_Low = Low[3] ;
BarsSinceDL = 3 ;
end ;
if SearchForLow and BarsSinceDL < 6 and
BarsSinceDL <= BarsSinceDH then
begin
D_Low = Low[BarsSinceDL] ;
D_High = TempD_High ;
SearchForLow = false ;
BottomLineNum = TL_New( Date[BarsSinceDH],Time[BarsSinceDH], D_Low, Date[3], Time[3],D_Low ) ;
TopLineNum = TL_New( Date[BarsSinceDH],Time[BarsSinceDH], D_High, Date[3], Time[3],D_High ) ;
LeftSideNum = TL_New( Date[BarsSinceDH],Time[BarsSinceDH], D_High, Date[BarsSinceDH],Time[BarsSinceDH], D_Low ) ;
RightSideNum = TL_New( Date[3], Time[3], D_High,Date[3], Time[3], D_Low ) ;
end ;
if High[3] >= CriticalHigh[4]
and High[3] >= High[2]
and High[3] >= High[1]
and High[3] > High then
begin
BarsSinceDH = 3 ;
TempD_High = High[3] ;
SearchForLow = true ;
end ;
CriticalHigh = Highest( High, Periods ) ;
CriticalLow = Lowest( Low, BarsSinceDH ) ;
end;
DHighLowDiff = D_High - D_Low ;
if GhostBoxExit == 1 and DHighLowDiff > 0 and Close > D_High + DHighLowDiff then
begin
MyStop = ( IntPortion( ( Close - D_Low ) /
DHighLowdiff ) - 1 ) * DHighLowDiff + D_Low ;
MyTrigger = MyStop + DHighLowDiff ;
end
else
begin
MyStop = D_Low ;
MyTrigger = D_High ;
end;
if CrossDown(Close,D_Low) then
DownTrend = 0 ;
else if BreakoutEntry == 1 and crossup(Close,D_High) then
DownTrend = 1 ;
else if BreakoutEntry == 1 and DownTrend == 1 and BarsSinceDL == 3 then
DownTrend = 2 ;
if (BreakoutEntry == 1 and DownTrend == 2 ) or BreakoutEntry == 0 then
begin
if VolumeEntry == 1 then
begin
if crossup(Close, MyTrigger) and Volume > ma( Volume, VolumeAvgLen ) * VolumeFactor then
Buy("b1",AtMarket);
end
else if Close < MyTrigger then
Buy("b2",AtStop,MyTrigger);
if ExitNextDay == 1 then
begin
if Low[1] >= MyStop and Low < MyStop then
Sell("s1",AtMarket);
end
else
Sell("s2",AtStop,MyStop);
end;
즐거운 하루되세요
> 잡다백수 님이 쓴 글입니다.
> 제목 : Re : Re : 문의드립니다.
> 코딩감사합니다. 실행해보니
'논리값(참/거짓)이나 논리표현식이 와야 합니다'라는 오류가 나왔습니다. 시뮬에 돌리려면 false 부분으로 된 것을 다 01로 바꾸어야 하나요?
> 예스스탁 님이 쓴 글입니다.
> 제목 : Re : 문의드립니다.
> 안녕하세요
예스스탁입니다.
1
inputs:
Periods( 100 ),
ExitNextDay( false ),
GhostBoxExit( false ),
BreakoutEntry (false ),
VolumeEntry( false ),
VolumeAvgLen( 10 ),
VolumeFactor( 1.5 ) ;
variables:
BarsSinceDH( 0 ),
BarsSinceDL( 0 ),
CriticalLow( 0 ),
TempD_Low( 0 ),
SearchForLow ( false ),
D_Low( 0 ),
D_High( 0 ),
BottomLineNum( 0 ),
TopLineNum( 0 ),
LeftSideNum( 0 ),
RightSideNum( 0 ),
CriticalHigh( 0 ),
TempD_High( 0 ),
DHighLowDiff( 0 ),
MyStop( 0 ),
MyTrigger( 0 ),
DownTrend( 0 ) ;
if CurrentBar > Periods then
begin
BarsSinceDH = BarsSinceDH + 1 ;
BarsSinceDL = BarsSinceDL + 1 ;
if Low[3] <= CriticalLow[4] and
Low[3] <= Low[2] and
Low[3] <= Low[1] and
Low[3] < Low then
begin
TempD_Low = Low[3] ;
BarsSinceDL = 3 ;
end ;
if SearchForLow and BarsSinceDL < 6 and
BarsSinceDL <= BarsSinceDH then
begin
D_Low = Low[BarsSinceDL] ;
D_High = TempD_High ;
SearchForLow = false ;
BottomLineNum = TL_New( Date[BarsSinceDH],Time[BarsSinceDH], D_Low, Date[3], Time[3],D_Low ) ;
TopLineNum = TL_New( Date[BarsSinceDH],Time[BarsSinceDH], D_High, Date[3], Time[3],D_High ) ;
LeftSideNum = TL_New( Date[BarsSinceDH],Time[BarsSinceDH], D_High, Date[BarsSinceDH],Time[BarsSinceDH], D_Low ) ;
RightSideNum = TL_New( Date[3], Time[3], D_High,Date[3], Time[3], D_Low ) ;
end ;
if High[3] >= CriticalHigh[4]
and High[3] >= High[2]
and High[3] >= High[1]
and High[3] > High then
begin
BarsSinceDH = 3 ;
TempD_High = High[3] ;
SearchForLow = true ;
end ;
CriticalHigh = Highest( High, Periods ) ;
CriticalLow = Lowest( Low, BarsSinceDH ) ;
end;
DHighLowDiff = D_High - D_Low ;
if GhostBoxExit and DHighLowDiff > 0 and Close > D_High + DHighLowDiff then
begin
MyStop = ( IntPortion( ( Close - D_Low ) /
DHighLowdiff ) - 1 ) * DHighLowDiff + D_Low ;
MyTrigger = MyStop + DHighLowDiff ;
end
else
begin
MyStop = D_Low ;
MyTrigger = D_High ;
end;
if CrossDown(Close,D_Low) then
DownTrend = 0 ;
else if BreakoutEntry and crossup(Close,D_High) then
DownTrend = 1 ;
else if BreakoutEntry and DownTrend == 1 and BarsSinceDL == 3 then
DownTrend = 2 ;
if (BreakoutEntry and DownTrend == 2 ) or BreakoutEntry == false then
begin
if VolumeEntry then
begin
if crossup(Close, MyTrigger) and Volume > ma( Volume, VolumeAvgLen ) * VolumeFactor then
Buy("b1",AtMarket);
end
else if Close < MyTrigger then
Buy("b2",AtStop,MyTrigger);
if ExitNextDay then
begin
if Low[1] >= MyStop and Low < MyStop then
Sell("s1",AtMarket);
end
else
Sell("s2",AtStop,MyStop);
end;
2
기본적인 골격은 비슷하지만 세부적으로 여러 가지 차이점이 있습니다.
문법적으로 보면 예스랭귀지에서는 같다라는 표현이 == 인데, EL에서는 = 이고
예스랭귀지에서는 문장 끝에 항상 ;를 표시하는데 EL은 표시하지 않는 부분도 있습니다.
동일내용의 함수인데 함수명이 다를수 있고
동일 이름이라도 매개변수 지정이 다른 경우들이 있습니다.
즐거운 하루되세요
> 잡다백수 님이 쓴 글입니다.
> 제목 : 문의드립니다.
> 도움주시는 덕분에 도전하고 있습니다. 매번 감사합니다.
1. 시스템
Strategy: Darvas by Guppy
inputs:
Periods( 100 ),
ExitNextDay( false ),
GhostBoxExit( false ),
BreakoutEntry (false ),
VolumeEntry( false ),
VolumeAvgLen( 10 ),
VolumeFactor( 1.5 ) ;
variables:
BarsSinceDH( 0 ),
BarsSinceDL( 0 ),
CriticalLow( 0 ),
TempD_Low( 0 ),
SearchForLow ( false ),
D_Low( 0 ),
D_High( 0 ),
BottomLineNum( 0 ),
TopLineNum( 0 ),
LeftSideNum( 0 ),
RightSideNum( 0 ),
CriticalHigh( 0 ),
TempD_High( 0 ),
DHighLowDiff( 0 ),
MyStop( 0 ),
MyTrigger( 0 ),
DownTrend( 0 ) ;
if CurrentBar > Periods then
begin
BarsSinceDH = BarsSinceDH + 1 ;
BarsSinceDL = BarsSinceDL + 1 ;
if Low[3] <= CriticalLow[4] and
Low[3] <= Low[2] and
Low[3] <= Low[1] and
Low[3] < Low
then
begin
TempD_Low = Low[3] ;
BarsSinceDL = 3 ;
end ;
if SearchForLow and BarsSinceDL < 6 and
BarsSinceDL <= BarsSinceDH then
begin
D_Low = Low[BarsSinceDL] ;
D_High = TempD_High ;
SearchForLow = false ;
BottomLineNum = TL_New( Date[BarsSinceDH],
Time[BarsSinceDH], D_Low, Date[3], Time[3],
D_Low ) ;
TopLineNum = TL_New( Date[BarsSinceDH],
Time[BarsSinceDH], D_High, Date[3], Time[3],
D_High ) ;
LeftSideNum = TL_New( Date[BarsSinceDH],
Time[BarsSinceDH], D_High, Date[BarsSinceDH],
Time[BarsSinceDH], D_Low ) ;
RightSideNum = TL_New( Date[3], Time[3], D_High,
Date[3], Time[3], D_Low ) ;
end ;
if High[3] >= CriticalHigh[4]
and High[3] >= High[2]
and High[3] >= High[1]
and High[3] > High
then
begin
BarsSinceDH = 3 ;
TempD_High = High[3] ;
SearchForLow = true ;
end ;
CriticalHigh = Highest( High, Periods ) ;
CriticalLow = Lowest( Low, BarsSinceDH ) ;
end ;
DHighLowDiff = D_High - D_Low ;
if GhostBoxExit and DHighLowDiff > 0 and Close >
D_High + DHighLowDiff then
begin
MyStop = ( IntPortion( ( Close - D_Low ) /
DHighLowdiff ) - 1 ) * DHighLowDiff + D_Low ;
MyTrigger = MyStop + DHighLowDiff ;
end
else
begin
MyStop = D_Low ;
MyTrigger = D_High ;
end ;
if Close crosses under D_Low then
DownTrend = 0
else if BreakoutEntry and Close crosses over D_High then
DownTrend = 1
else if BreakoutEntry and DownTrend = 1 and
BarsSinceDL = 3 then
DownTrend = 2 ;
if ( BreakoutEntry and DownTrend = 2 ) or
BreakoutEntry = false then
begin
if VolumeEntry then
begin
if Close crosses over MyTrigger and Volume >
Average( Volume, VolumeAvgLen ) * VolumeFactor
then
Buy next bar market ;
end
else if Close < MyTrigger then
Buy next bar MyTrigger stop ;
if ExitNextDay then
begin
if Low[1] >= MyStop and Low < MyStop then
Sell next bar at market ;
end
else
Sell next bar at MyStop stop ;
end ;
2. 기타
이전에 begin end는 중괄호라고 말씀해주셨던 것 같은데요. 트레이드스테이션 코드는 Sell next bar at market 이런 주문식 빼고 대부분 동일한가요?
다음글
이전글