#공통, 전략
[설명]
마틴게일 전략은 손실을 보면 두 배를 다시 베팅하는 전략 중 하나로,
니콜라 베르누이가 제시한 상트페테르부르크의 역설을 실제 전략으로 구사한 것이다.
기본수량은 1계약이고 손실이 발생하면 다음진입은 2배의 수량으로 진입하고
수익이 발생하면 기본수량으로 셋팅됩니다.
다만 아래식에서는 최대수량을 지정해 지정한 최대수량 이상으로 진입수량이 늘어나지 않습니다.
조건에 따라 수량을 증감하는 내용을 구현할 때 참고하시기 바랍니다.
//진입이 OnClose타입인 경우
input : 기본수량(1),최대수량(16);
var : mav1(0),mav2(0),EntryVol(0);
mav1 = ma(C,20);
mav2 = ma(C,60);
//매수진입조건
if MarketPosition <= 0 and CrossUp(mav1,mav2) Then
{
//현재 무포지션
if MarketPosition == 0 Then
{
//전체 첫진입이면 진입수량은 기본수량
if TotalTrades == 0 Then
EntryVol = 기본수량;
Else //첫진입이 아니면
{
if PositionProfit(1) < 0 Then
EntryVol = MaxContracts(1)*2; //직전거래가 손실이면 직전거래수량의 2배
Else
EntryVol = 기본수량; //직전거래가 손실이 아니면 기본수량
}
}
Else //무포지션이 아니면(매도포지션)
{
if MarketPosition == -1 Then
{
if PositionProfit < 0 Then
EntryVol = MaxContracts*2; //현재거래가 손실이면 현재진입수량의 2배
Else
EntryVol = 기본수량;//현재거래가 손실이 아니면 기본수량
}
}
EntryVol = min(EntryVol,최대수량);
Buy("b",OnClose,Def,EntryVol);
}
//매도진입조건
if MarketPosition >= 0 and CrossDown(ma(c,5),ma(c,20)) Then
{
//현재 무포지션
if MarketPosition == 0 Then
{
//전체 첫진입이면 수량은 기본수량
if TotalTrades == 0 Then
EntryVol = 기본수량;
Else //첫진입이 아니면
{
if PositionProfit(1) < 0 Then
EntryVol = MaxContracts(1)*2; //직전거래가 손실이면 직전거래수량의 2배
Else
EntryVol = 기본수량; //직전거래가 손실이 아니면 기본수량
}
}
Else //무포지션이 아니고(매수포지션)
{
if PositionProfit < 0 Then
EntryVol = MaxContracts*2; //현재거래가 손실이면 현재진입수량*2
Else
EntryVol = 기본수량; //현재거래가 손실이 아니면 기본수량
}
EntryVol = min(EntryVol,최대수량);
Sell("S",OnClose,Def,EntryVol);
}
JavaScript
복사
