커뮤니티
수정부탁드립니다
수고 많으십니다.
1계약으로 시작해서 수익나면 2계약으로 늘리고 또수익나면 3계으로 늘리고, 4번재 수익나면 다시 1계약으로 돌아오고 5번쨰 수익나면 2계약으로 느릴고 6번쨰 수익나면 3계약으로 늘리고..이렇게 반복하고 손실나면 바로 1계약으로 돌아오고.. 이런 전략을 쓰려고 하는데 코딩에 오류가 많네요..
올바로 수정부탁드립니다. 감사드립니다.
//-------------------------------------------------------------------------
// [1] 입력 변수 (INPUTS)
//-------------------------------------------------------------------------
Input : Period(5), Period1(3), Period2(3);
Input : InitialContracts(1); // 최초 베팅 계약 수 (1)
//-------------------------------------------------------------------------
// **[2] 초기화 로직 (오류 방지 필수)**
//-------------------------------------------------------------------------
If InitialEntry Then
Begin
G_Contracts = InitialContracts; // **Global Variable 창에 등록 필수**
G_WinStreak = 0; // **Global Variable 창에 등록 필수**
End;
//-------------------------------------------------------------------------
// [3] 배열 및 변수 선언
//-------------------------------------------------------------------------
Array : MonthO[99](0), MonthC[99](0); // 월봉 추적용
Var : Cnt(0), StoK(0), StoD(0);
Var : TicksToPoints(0);
//-------------------------------------------------------------------------
// [4] 지표 계산 (Stochastics)
//-------------------------------------------------------------------------
StoK = StochasticsK(Period, Period1);
StoD = StochasticsD(Period, Period1, Period2);
// TicksToPoints = 1 / MinTick; // MinTick 오류 방지를 위해 계산 줄 주석 처리
//-------------------------------------------------------------------------
// [5] 월간 캔들 추적 로직 (추세 필터) - **Begin/End 및 Month() 함수 사용으로 오류 해결**
//-------------------------------------------------------------------------
// 월이 바뀌었을 때 (정확한 월 변경 감지)
if Month() <> Month()[1] Then
Begin // Begin 블록 시작
For cnt = 99 DownTo 1
Begin
MonthO[cnt] = MonthO[cnt-1];
MonthC[cnt] = MonthC[cnt-1];
End;
MonthO[0] = O; // 새로운 월봉 시가 저장
End; // End 블록 끝
MonthC[0] = C; // 현재 월봉 종가 업데이트
//-------------------------------------------------------------------------
// [6] 계약 수 결정 함수 정의 (자금 관리) - **Begin/End 사용으로 오류 해결**
//-------------------------------------------------------------------------
Function GetContractSize()
Begin // Begin 블록 시작
// 전역 변수에 저장된 현재 계약 수를 반환
return G_Contracts;
End; // End 블록 끝
//-------------------------------------------------------------------------
// [7] 자금 관리 로직 (역마틴게일 업데이트) - **Begin/End 사용으로 오류 해결**
//-------------------------------------------------------------------------
If (MarketPosition == 0) Then // 포지션이 청산된 상태에서만 작동
Begin // Begin 블록 시작
// 1. 승리 시 (직전 손익이 0 초과)
if (MP_LossProfit(1) > 0) Then
Begin
G_WinStreak = G_WinStreak + 1; // 연속 승리 횟수 증가
// 3단계 역마틴게일 로직
if (G_WinStreak == 1) Then
G_Contracts = 2; // 1단계 승리 후 2계약
else if (G_WinStreak == 2) Then
G_Contracts = 3; // 2단계 승리 후 3계약
else if (G_WinStreak >= 3) Then // 3단계 승리 도달 시 초기화
Begin
G_Contracts = InitialContracts;
G_WinStreak = 0;
End;
End
// 2. 패배 시 (직전 손익이 0 이하)
else if (MP_LossProfit(1) <= 0) Then
Begin
G_Contracts = InitialContracts;
G_WinStreak = 0;
End;
End; // End 블록 끝
//-------------------------------------------------------------------------
// [8] 진입 및 청산 신호 (수량 적용) - **Begin/End 사용으로 오류 해결**
//-------------------------------------------------------------------------
If (MarketPosition == 0) Then
Begin // 진입 로직 시작
// 매수 진입 조건 (월봉 양봉 & StoK > StoD 상향 돌파)
If (MonthC[0] > MonthO[0] and CrossUp(StoK, StoD)) Then
Begin
Buy("LE", NextBar, Market, GetContractSize());
End;
// 매도 진입 조건 (월봉 음봉 & StoK < StoD 하향 돌파)
If (MonthC[0] < MonthO[0] and CrossDown(StoK, StoD)) Then
Begin
Sell("SE", NextBar, Market, GetContractSize());
End;
End; // 진입 로직 끝
// 청산 로직 (익절/손절) - **MinTick 오류 우회를 위해 포인트 값 그대로 사용**
If (MarketPosition <> 0) Then
Begin // 청산 로직 시작
// 익절 청산 (Profit Target: 15포인트로 가정)
SetProfitTarget(15);
// 손절 청산 (Stop Loss: 10포인트로 가정)
SetStopLoss(10);
End; // 청산 로직 끝
답변 1
예스스탁 예스스탁 답변
2025-11-10 12:30:19