예스스탁
예스스탁 답변
2024-11-21 13:15:06
안녕하세요
예스스탁입니다.
Input: P1(20),P2(60),P3(120),P4(200);
var : trade(False),mp(0),ep(0),xp(0);
var1 = ma(c,P1);
var2 = ma(c,P2);
var3 = ma(c,P3);
var4 = ma(c,P4);
var : tx(0);
If mp == 0 and var3 > var4 and CrossUP(var1,var2) Then
{
ep = c;
mp = 1;
if trade == true Then
Buy("b");
}
If mp == 0 and var3 < var4 and CrossDown(var1,var2) Then
{
ep = c;
mp = -1;
if trade == true Then
Sell("s");
}
If mp == 1 and CrossDown(var1,var2) Then
{
if MarketPosition == 1 Then
ExitLong("bx");
mp = 0;
xp = c;
if xp < ep Then
trade = true;
Else
trade = False;
}
If mp == -1 and CrossUp(var1,var2) Then
{
if MarketPosition == -1 Then
ExitShort("sx");
mp = 0;
xp = c;
if xp > ep Then
trade = true;
Else
trade = False;
}
즐거운 하루되세요
> penfold 님이 쓴 글입니다.
> 제목 : 수식 작성 도움 부탁드립니다
> 안녕하세요, 수식 작성에 늘 도움주셔서 감사합니다.
이동평균 크로스 전략에 직전거래손실 확인 필터(가상으로 진입, 청산)를 추가하고자 합니다.
기본 로직은 이평선 4개 (20, 60, 120, 200)을 활용해서
a) 120ma > 200ma 일 때, 20ma가 60ma를 상향돌파 시 매수 진입(청산은 20ma가 60ma 하향돌파)
b) 120ma < 200ma 일 때, 20ma가 60ma를 하향돌파 시 매도 진입(청산은 20ma가 60ma 하향돌파)
하는 간단한 로직입니다.
다만 여기서, 가상으로 진입 후 청산한 뒤, 직전 가상거래가 손실일 경우에만 진입하는 방식의 수식을 구현 부탁드리겠습니다.
(아래는 손실필터를 검색하던 중, 다른 전략에서 손실필터가 적용된 사례가 있어 첨부합니다. 해당 로직의 필터 방식을 위의 이평 전략에 적용만 부탁드리겠습니다.직접해보려했으나 아직 어려움이 많아 부득이하게 부탁드려봅니다...)
[ 필터 참고 수식 ]
Input: shortPeriod(20),exitperiod(10);
var : trade(true),mp(0),ep(0),xp(0);
Value1 = Highest(high, shortPeriod);
Value2 = Lowest(Low, shortPeriod);
Value3 = Lowest(Low, exitperiod);
Value4 = Highest(High, exitperiod);
if TotalTrades > TotalTrades[1] Then
{
if PositionProfit(1) < 0 Then
trade = true;
Else
{
trade = False;
mp = 0;
}
}
if MarketPosition == 0 and trade == False Then
{
If mp == 0 and CrossUP(Close, Value1[1]) Then
{
ep = c;
mp = 1;
}
If mp == 0 and CrossDown(Close, Value2[1]) Then
{
ep = c;
mp = -1;
}
If mp == 1 and CrossDown(Close, Value3[1]) Then
{
mp = 0;
xp = c;
if xp < ep Then
trade = true;
}
If mp == -1 and CrossUp(Close, Value4[1]) Then
{
mp = 0;
xp = c;
if xp > ep Then
trade = true;
}
}
if trade == true Then
{
If MarketPosition == 0 and CrossUP(Close, Value1[1]) Then
Buy("LE1");
If MarketPosition ==0 and CrossDown(Close, Value2[1]) Then
Sell("SE1");
}
If entryname=="LE1" and CrossDown(Close, Value3[1]) Then
Exitlong("Lx");
If entryname == "SE1" and CrossUp(Close, Value4[1]) Then
ExitShort("Sx");
감사합니다.