커뮤니티
수식 부탁드립니다.
2013-09-25 22:34:54
121
글번호 67837
Input : ma1(5), ma2(60), ma3(200), shortPeriod(12), longPeriod(36), Period(12),
LossCut(60), StopCut(20);
Var : MACDv(0), MACDsig(0),macdosc(0) ;
var1 = ema(C,ma1);
var2 = ema(C,ma2);
var3 = ema(C,ma3);
MACDv = MACD(shortPeriod, longPeriod);
MACDsig = ema(MACDv,Period);
macdosc = MACDv-ma(MACDv,Period);
If MarketPosition == 0 Then {
if crossup(macdosc,0) and var1 > var2 and var2 >= var3 Then
buy("B1",AtMarket);
if CrossDown(macdosc,0) and var1 < var2 and var2 <= var3 Then
sell("S1",AtMarket);
}
If MarketPosition == 1 Then {
if CrossDown(macdosc,0) Then
ExitLong("ExL1", AtMarket);
ExitLong("콜손절", AtStop, EntryPrice-(Losscut*PriceScale)); #SetStopLoss(StopCut*PriceScale,PointStop);
Exitlong("콜목표이익", AtLimit, EntryPrice+(StopCut*PriceScale));
}
If MarketPosition == -1 Then {
if CrossUp(macdosc,0) Then
ExitShort("ExS1", AtMarket);
ExitShort("풋손절", AtStop, EntryPrice+(Losscut*PriceScale)); #SetStopLoss(StopCut*PriceScale,PointStop);
ExitShort("풋목표이익", AtLimit, EntryPrice-(StopCut*PriceScale));
--------------------------------------------------------------------------------
위 식에 포함하고 싶은게 있습니다.
1. 마틴게일 식으로 손절을 하면 배수로 계약수를 늘려주세요. ( 1 - 2 - 4 - 8 ...)
2. 당일 손절 5번(input변수를 이용해서 수치를 쉽게 변경할 수 있게 해주세요)을 하게 되면 일중 매매 중단.
3. 당일 목표수익이 나오면 일중 매매 중단.
(4. 시장가가 아닌 지정가 주문을 넣고 싶습니다. 식으로 표현되지 않는다면 다른 방법을 소개부탁드립니다.)
--------------------------------------------------------------------------------
또 다른 부탁은, 데이매매가 아니라 다음날까지 손절 횟수를 카운트하고 싶습니다.
1. 마틴게일 식으로 손절을 하면 배수로~
2. 손절이 10번(input변수를 이용해서 수치를 쉽게 변경할 수 있게 해주세요)을 하게 되면 손절 10번째 되는 날 매매 중단.
3. 당일 목표수익이 나오면 목표수익이 나온 날은 매매 중단.
(4. 시장가가 아닌 지정가 주문을 넣고 싶습니다.)
이렇게 두가지로 수식 요청드립니다.
답변 1
예스스탁 예스스탁 답변
2013-09-26 19:43:41
안녕하세요
예스스탁입니다.
1.
Input : ma1(5), ma2(60), ma3(200), shortPeriod(12), longPeriod(36), Period(12),LossCut(60), StopCut(20),losscntcount(5);
Var : MACDv(0), MACDsig(0),macdosc(0) ;
var : cnt(0),count(0),losscount(0),cond(false);
count = 0;
losscount = 0;
for cnt = 0 to 20{
if sdate ==EntryDate(cnt) Then
count = count+1;
if cnt >= 1 and (IsExitName("콜손절",cnt) == true or IsExitName("풋손절",cnt) == true) Then
losscount = losscount+1;
}
var1 = ema(C,ma1);
var2 = ema(C,ma2);
var3 = ema(C,ma3);
MACDv = MACD(shortPeriod, longPeriod);
MACDsig = ema(MACDv,Period);
macdosc = MACDv-ma(MACDv,Period);
Cond = ExitDate(1) == sdate and (IsExitName("콜목표이익",1) == true or IsExitName("풋목표이익",1) == true);
If MarketPosition == 0 and losscount < losscntcount and cond == false Then {
if crossup(macdosc,0) and var1 > var2 and var2 >= var3 Then {
if count == 0 Then
buy("B1",AtMarket,def,1);
if count >= 1 and (IsExitName("콜손절",1) == true or IsExitName("풋손절",1) == true) Then
buy("B2",AtMarket,def,CurrentContracts[BarsSinceExit(1)+1]*2);
if count >= 1 and (IsExitName("콜손절",1) == false and IsExitName("풋손절",1) == false) Then
buy("B3",AtMarket,def,1);
}
if CrossDown(macdosc,0) and var1 < var2 and var2 <= var3 Then {
if count == 0 Then
Sell("S1",AtMarket,def,1);
if count >= 1 and (IsExitName("콜손절",1) == true or IsExitName("풋손절",1) == true) Then
Sell("S2",AtMarket,def,CurrentContracts[BarsSinceExit(1)+1]*2);
if count >= 1 and (IsExitName("콜손절",1) == false and IsExitName("풋손절",1) == false) Then
Sell("S3",AtMarket,def,1);
}
}
If MarketPosition == 1 Then {
if CrossDown(macdosc,0) Then
ExitLong("ExL1", AtMarket);
ExitLong("콜손절", AtStop, EntryPrice-(Losscut*PriceScale));
Exitlong("콜목표이익", AtLimit, EntryPrice+(StopCut*PriceScale));
}
If MarketPosition == -1 Then {
if CrossUp(macdosc,0) Then
ExitShort("ExS1", AtMarket);
ExitShort("풋손절", AtStop, EntryPrice+(Losscut*PriceScale));
ExitShort("풋목표이익", AtLimit, EntryPrice-(StopCut*PriceScale));
}
2.
Input : ma1(5), ma2(60), ma3(200), shortPeriod(12), longPeriod(36), Period(12),LossCut(60), StopCut(20),losscntcount(10);
Var : MACDv(0), MACDsig(0),macdosc(0) ;
var : losscount(0),Cond(false);
var1 = ema(C,ma1);
var2 = ema(C,ma2);
var3 = ema(C,ma3);
MACDv = MACD(shortPeriod, longPeriod);
MACDsig = ema(MACDv,Period);
macdosc = MACDv-ma(MACDv,Period);
Cond = ExitDate(1) == sdate and (IsExitName("콜목표이익",1) == true or IsExitName("풋목표이익",1) == true);
IF BarsSinceExit(1) == 1 and (IsExitName("콜손절",1) == true or IsExitName("풋손절",1) == true) Then
losscount = losscount+1;
If MarketPosition == 0 and losscount < losscntcount and Cond == false Then {
if crossup(macdosc,0) and var1 > var2 and var2 >= var3 Then {
if TotalTrades == 0 Then
buy("B1",AtMarket,def,1);
if TotalTrades >= 1 and (IsExitName("콜손절",1) == true or IsExitName("풋손절",1) == true) Then
buy("B2",AtMarket,def,CurrentContracts[BarsSinceExit(1)+1]*2);
if TotalTrades >= 1 and (IsExitName("콜손절",1) == false and IsExitName("풋손절",1) == false) Then
buy("B3",AtMarket,def,1);
}
if CrossDown(macdosc,0) and var1 < var2 and var2 <= var3 Then {
if TotalTrades == 0 Then
Sell("S1",AtMarket,def,1);
if TotalTrades >= 1 and (IsExitName("콜손절",1) == true or IsExitName("풋손절",1) == true) Then
Sell("S2",AtMarket,def,CurrentContracts[BarsSinceExit(1)+1]*2);
if TotalTrades >= 1 and (IsExitName("콜손절",1) == false and IsExitName("풋손절",1) == false) Then
Sell("S3",AtMarket,def,1);
}
}
If MarketPosition == 1 Then {
if CrossDown(macdosc,0) Then
ExitLong("ExL1", AtMarket);
ExitLong("콜손절", AtStop, EntryPrice-(Losscut*PriceScale));
Exitlong("콜목표이익", AtLimit, EntryPrice+(StopCut*PriceScale));
}
If MarketPosition == -1 Then {
if CrossUp(macdosc,0) Then
ExitShort("ExS1", AtMarket);
ExitShort("풋손절", AtStop, EntryPrice+(Losscut*PriceScale));
ExitShort("풋목표이익", AtLimit, EntryPrice-(StopCut*PriceScale));
}
3.
수식에서는 주문가격을 지정할수 있는 부분이 없습니다.
수식에서 신호가 발생하면 시스템 트레이딩 설정창의 매매탭의
매매가격에서 지정한 가격으로 주문이 발생합니다.
수식에서 AtMarket은 신호타입입니다. 시장가등으로 주문가격을 지정하는 부분이 아닙니ㅏ.
AtMarket은 if조건 만족하면 다음봉 시가에 신호를 표시하고
리포트의 진입청산가격으로 해당 시가를 적어주는 타입일 뿐입니다.
즐거운 하루되세요
> gaintoga 님이 쓴 글입니다.
> 제목 : 수식 부탁드립니다.
> Input : ma1(5), ma2(60), ma3(200), shortPeriod(12), longPeriod(36), Period(12),
LossCut(60), StopCut(20);
Var : MACDv(0), MACDsig(0),macdosc(0) ;
var1 = ema(C,ma1);
var2 = ema(C,ma2);
var3 = ema(C,ma3);
MACDv = MACD(shortPeriod, longPeriod);
MACDsig = ema(MACDv,Period);
macdosc = MACDv-ma(MACDv,Period);
If MarketPosition == 0 Then {
if crossup(macdosc,0) and var1 > var2 and var2 >= var3 Then
buy("B1",AtMarket);
if CrossDown(macdosc,0) and var1 < var2 and var2 <= var3 Then
sell("S1",AtMarket);
}
If MarketPosition == 1 Then {
if CrossDown(macdosc,0) Then
ExitLong("ExL1", AtMarket);
ExitLong("콜손절", AtStop, EntryPrice-(Losscut*PriceScale)); #SetStopLoss(StopCut*PriceScale,PointStop);
Exitlong("콜목표이익", AtLimit, EntryPrice+(StopCut*PriceScale));
}
If MarketPosition == -1 Then {
if CrossUp(macdosc,0) Then
ExitShort("ExS1", AtMarket);
ExitShort("풋손절", AtStop, EntryPrice+(Losscut*PriceScale)); #SetStopLoss(StopCut*PriceScale,PointStop);
ExitShort("풋목표이익", AtLimit, EntryPrice-(StopCut*PriceScale));
--------------------------------------------------------------------------------
위 식에 포함하고 싶은게 있습니다.
1. 마틴게일 식으로 손절을 하면 배수로 계약수를 늘려주세요. ( 1 - 2 - 4 - 8 ...)
2. 당일 손절 5번(input변수를 이용해서 수치를 쉽게 변경할 수 있게 해주세요)을 하게 되면 일중 매매 중단.
3. 당일 목표수익이 나오면 일중 매매 중단.
(4. 시장가가 아닌 지정가 주문을 넣고 싶습니다. 식으로 표현되지 않는다면 다른 방법을 소개부탁드립니다.)
--------------------------------------------------------------------------------
또 다른 부탁은, 데이매매가 아니라 다음날까지 손절 횟수를 카운트하고 싶습니다.
1. 마틴게일 식으로 손절을 하면 배수로~
2. 손절이 10번(input변수를 이용해서 수치를 쉽게 변경할 수 있게 해주세요)을 하게 되면 손절 10번째 되는 날 매매 중단.
3. 당일 목표수익이 나오면 목표수익이 나온 날은 매매 중단.
(4. 시장가가 아닌 지정가 주문을 넣고 싶습니다.)
이렇게 두가지로 수식 요청드립니다.