avatar of ianzeng123 ianzeng123
집중하다 사신
2
집중하다
319
수행원

실무 워크플로: 주식 비율 주문 및 자동화된 이익 실현 및 손실 정지 측정을 쉽게 관리

만든 날짜: 2025-11-12 10:58:07, 업데이트 날짜: 2025-11-15 12:45:08
comments   0
hits   219

실무 워크플로: 주식 비율 주문 및 자동화된 이익 실현 및 손실 정지 측정을 쉽게 관리

1. 서론

안녕하세요 여러분, 최근 친구들로부터 워크플로우 사용에 대한 피드백을 많이 받았는데, 가장 자주 묻는 질문은 다음과 같습니다…지분 비율그리고정지 손실설정 문제와 관련하여 많은 분들이 이렇게 질문합니다. “위험을 관리해야 한다는 건 알지만, 계좌 잔액을 기준으로 주문 수량을 정확히 어떻게 계산하나요? 또한, 포지션을 개설한 후 시스템이 위험을 관리할 수 있도록 손절매 주문과 이익실현 주문을 자동으로 설정하려면 어떻게 해야 하나요?”

오늘은 이러한 실질적인 요구 사항을 해결하고 Inventors Quantification Platform의 실제 코드를 사용하여 이 두 가지 핵심 기능을 구현하는 방법을 자세히 설명하겠습니다.


II. 지분율 기반 주문에 대한 자세한 설명

실무 워크플로: 주식 비율 주문 및 자동화된 이익 실현 및 손실 정지 측정을 쉽게 관리

2.1 자본 비율 주문이란 무엇입니까?

지분 비율즉, 주문 수는 고정되어 있지 않고 계좌 총 자금의 고정된 비율을 기준으로 계산됩니다.

예를 들어

  • 계좌에 10,000 USDT가 있습니다.
  • 위험 비율을 5%로 설정합니다(riskRatio = 0.05).
  • 시스템은 포지션을 열기 위해 500 USDT의 할당량을 사용합니다.

핵심 장점

  1. 위험은 통제할 수 있습니다.각 거래에 대한 위험은 계좌 잔액에 관계없이 고정된 비율로 적용됩니다.
  2. 높은 자본 활용률계좌 자금이 변경되면 주문 수량이 자동으로 조정됩니다. 자금이 증가하면 주문 수량이 증가하고, 자금이 감소하면 주문 수량이 그에 따라 감소합니다.
  3. 매우 적응력이 좋다다양한 자본 규모에 적합한 계정

2.2 완전한 계산 논리 및 코드 구현

1단계: 계정 정보 얻기

// 1. 获取账户信息
const accountInfo = exchange.GetAccount();
if (!accountInfo) {
    return [{ 
        json: { 
            success: false, 
            error: "获取账户信息失败" 
        } 
    }];
}

const availBalance = accountInfo.Balance; // 可用余额
Log("账户可用余额:", availBalance);

핵심 포인트Balance이 필드는 계산의 기준이 되는 사용 가능한 잔액을 나타냅니다.


2단계: 시장 정보 얻기

// 2. 获取市场信息
const symbol = $vars.coin + '_USDT.swap' || 'ETH_USDT.swap';
const allMarkets = exchange.GetMarkets();
const marketsInfo = allMarkets[symbol];

if (!marketsInfo) {
    return [{ 
        json: { 
            success: false, 
            error: `未找到交易对信息: ${symbol}` 
        } 
    }];
}

핵심 매개변수 설명

  • CtVal계약 액면가(예: ETH 영구 계약의 액면가는 0.01 ETH)
  • MinQty최소 주문 수량
  • MaxQty최대 주문 수량
  • AmountPrecision수량 정밀도
  • PricePrecision가격 정확도

특별한 주의거래하고자 하는 통화가 거래소에서 사용 가능한지 확인하세요.


3단계: 현재 가격 얻기

// 3. 获取当前价格
const ticker = exchange.GetTicker(symbol);
if (!ticker) {
    return [{ 
        json: { 
            success: false, 
            error: "获取价格信息失败" 
        } 
    }];
}

const currentPrice = ticker.Last; // 最新成交价
Log("当前价格:", currentPrice);

4단계: 계약 수 계산

// 4. 计算合约张数
const riskRatio = $vars.riskRatio || 0.05; // 默认 5% 风险比例

// 步骤 1:计算风险金额
const riskAmount = availBalance * riskRatio;

// 步骤 2:计算币种数量
let coinQuantity = riskAmount / currentPrice;

// 步骤 3:转换为合约张数(因为期货交易用的是合约张数)
let contractQuantity = coinQuantity / marketsInfo.CtVal;

// 步骤 4:精度处理(确保下单数量符合交易所要求)
contractQuantity = _N(contractQuantity, marketsInfo.AmountPrecision);

Log("计算步骤:");
Log("- 风险金额:", riskAmount);
Log("- 币种数量:", coinQuantity);
Log("- 合约面值:", marketsInfo.CtVal);
Log("- 原始合约张数:", coinQuantity / marketsInfo.CtVal);
Log("- 精度处理后:", contractQuantity);

계산식 요약

合约张数 = (账户余额 × 风险比例 ÷ 当前价格) ÷ 合约面值

5단계: 제한 사항 확인

// 5. 检查限制
if (contractQuantity < marketsInfo.MinQty) {
    return [{ 
        json: { 
            success: false, 
            error: `计算数量${contractQuantity}小于最小要求${marketsInfo.MinQty}`,
            calculatedQuantity: contractQuantity,
            minQty: marketsInfo.MinQty
        } 
    }];
}

if (contractQuantity > marketsInfo.MaxQty) {
    Log("数量超过最大限制,使用最大值:", marketsInfo.MaxQty);
    contractQuantity = marketsInfo.MaxQty;
}

Log("最终下单数量:", contractQuantity);

초보자가 흔히 저지르는 실수

  • ❌ 최소 주문 수량을 확인하지 않아 주문이 실패했습니다.
  • ❌ 정밀한 처리가 부적절하면 거래소에서 주문이 거부될 수 있습니다.
  • ❌ 계약액면가가 고려되지 않아 계산오류가 발생했습니다.

위 설정이 올바르지 않을 경우 주문 실패 알림이 표시됩니다. 초보자는 이 부분에 특히 주의해야 합니다.


III. 이익실현 및 손절매 설정에 대한 자세한 설명

실무 워크플로: 주식 비율 주문 및 자동화된 이익 실현 및 손실 정지 측정을 쉽게 관리

3.1 이익실현과 손절매의 핵심 논리

많은 사람들이 이익실현과 손절매의 방향에 대해 혼란스러워합니다. 명확히 설명해 드리겠습니다.

보유 유형 이익 실현 활동 손절매 작업
다중 주문 가격이 상승하면 포지션을 정리하기 위해 매도하세요 가격이 하락하면 매도하여 포지션을 청산하세요.
단기 포지션 가격이 하락하면 포지션을 청산하기 위해 매수하세요 가격이 상승하면 포지션을 종료하려면 매수하세요

핵심 포인트이익 실현과 손절매는 모두마감 작업방향은 위치 방향과 반대여야 합니다.


3.2 조건부 단일 매개변수에 대한 자세한 설명

Inventor 플랫폼에서 사용하세요CreateConditionOrder손절매 및 이익실현 수준을 설정하는 기능:

현재 FMZ 플랫폼은 실시간 거래에서 CreateConditionOrder 조건부 주문을 지원하지만 백테스팅에서는 아직 지원하지 않습니다.

  • CreateConditionOrder(symbol, side, amount, condition)
  • GetConditionOrder(id)
  • GetConditionOrders(symbol)
  • CancelConditionOrder(id)
  • GetHistoryConditionOrders(symbol, since, limit)
exchange.CreateConditionOrder(
    symbol,           // 交易对
    closeDirection,   // 平仓方向:closebuy 或 closesell
    positionSize,     // 平仓数量
    {
        "ConditionType": ORDER_CONDITION_TYPE_SL,  // 止损类型
        "SlTriggerPrice": stopLossPrice,           // 触发价格
        "SlOrderPrice": executionPrice             // 执行价格
    },
    "止损单"          // 订单备注
);

매개변수 설명

  • 작업 유형(closeDirection):

    • 롱 포지션을 마감하는 데 사용됩니다.closebuy
    • 단기 포지션을 마감하는 데 사용됩니다.closesell
  • ConditionType

    • ORDER_CONDITION_TYPE_SL손절매
    • ORDER_CONDITION_TYPE_TP이익 실현
  • 트리거 가격이 가격에 도달하면 주문을 활성화합니다.

  • 주문 가격(실행 가격)활성화 후 이 가격으로 거래가 완료됩니다.

알아채다:현재 조건부 주문은 실시간 거래에서만 지원되며, 보관인을 업데이트해야 합니다.


3.3 손절매 및 이익실현 가격 계산

코드에서는 열리는 방향에 따라 동적으로 계산합니다.

const stopLossPercent = 0.02;   // 2% 止损
const takeProfitPercent = 0.04; // 4% 止盈

if (openSide == 'openShort') {
    // 空仓:止损价格上涨,止盈价格下跌
    stopLossPrice = _N(entryPrice * (1 + stopLossPercent), pricePrecision);
    takeProfitPrice = _N(entryPrice * (1 - takeProfitPercent), pricePrecision);
} else {
    // 多仓:止损价格下跌,止盈价格上涨
    stopLossPrice = _N(entryPrice * (1 - stopLossPercent), pricePrecision);
    takeProfitPrice = _N(entryPrice * (1 + takeProfitPercent), pricePrecision);
}

Log("入场价格:", entryPrice);
Log("止损价格:", stopLossPrice);
Log("止盈价格:", takeProfitPrice);

3.4 조건문의 관리 및 모니터링

조건문을 설정한 후에는 이를 관리하고 모니터링해야 합니다.

// 查询条件单状态
const slOrder = exchange.GetConditionOrder(stopLossOrderId);
const tpOrder = exchange.GetConditionOrder(takeProfitOrderId);

Log("止损单状态:", slOrder.Status);
Log("止盈单状态:", tpOrder.Status);
Log("状态说明: 0=活跃, 1=已触发, -1=不存在");

상태 처리 논리

if (slStatus == 1 && tpStatus == 0) {
    // 止损被触发,取消止盈单
    Log("🛑 止损单已触发,取消止盈单");
    exchange.CancelConditionOrder(takeProfitOrderId);
    _G('status', 'finished');
    
} else if (tpStatus == 1 && slStatus == 0) {
    // 止盈被触发,取消止损单
    Log("🎯 止盈单已触发,取消止损单");
    exchange.CancelConditionOrder(stopLossOrderId);
    _G('status', 'finished');
    
} else if (slStatus == 0 && tpStatus == 0) {
    // 两个单都还活跃,继续监控
    Log("⏳ 止盈止损单都活跃,继续监控");
}

핵심 기능

  • 발명가 플랫폼은 다음을 제공합니다.GetConditionOrder이 기능을 사용하면 모든 조건부 주문의 현재 상태를 볼 수 있습니다.
  • 한쪽에서 이익실현 주문이나 손절 주문이 발동되면 반대 방향의 조건부 주문은 즉시 취소되어야 합니다.
  • 사용할 수 있습니다CancelConditionOrder이 함수는 주문 번호만 입력하면 됩니다.

주의사항

  • 조건부 주문이 제대로 작동하는지 확인하려면 조건부 주문의 상태를 정기적으로 확인하는 것이 좋습니다.
  • 때로는 시장 변동이 너무 빨라 조건부 주문이 제때 실행되지 않을 수 있으며, 이런 경우 수동 처리가 필요합니다.

IV. 전체 워크플로 통합

4.1 거래 상태 관리

데모 워크플로에서는 상태 머신을 사용하여 전체 거래 주기를 관리합니다.

const savestatus = _G('status');

// 初始化状态
if (!savestatus) {
    _G('status', 'unfinished');
}

세 개의 주

  1. unfinished아직 공석이 없습니다. 공석 모집 절차를 완료해야 합니다.
  2. monitor포지션이 개설되었고 손절매 및 이익실현 주문이 설정되었습니다. 현재는 모니터링 단계입니다.
  3. finished거래가 완료되어 상태를 재설정할 준비가 되었습니다.

4.2 거래 완료 프로세스

주식 비율 주문을 손절매 주문과 이익실현 주문과 통합함으로써 우리는 완전한 거래 워크플로를 갖추게 되었습니다.

흐름도

计算下单数量 → 执行开仓 → 设置止盈止损 → 监控持仓 → 交易完成

코드 구현

// 状态1: 执行开仓
if (positionData.status == 'unfinished') {
    // 1. 开仓下单
    const openOrder = exchange.CreateOrder(symbol, dir, -1, positionSize);
    
    // 2. 等待订单成交
    Sleep(3000);
    const openOrderInfo = exchange.GetOrder(openOrder);
    
    // 3. 订单成交后设置止盈止损
    if (openOrderInfo.Status == ORDER_STATE_CLOSED) {
        const stopLossOrderId = exchange.CreateConditionOrder(...);
        const takeProfitOrderId = exchange.CreateConditionOrder(...);
        
        // 4. 保存订单ID并切换到监控状态
        _G('stopLossOrderId', stopLossOrderId);
        _G('takeProfitOrderId', takeProfitOrderId);
        _G('status', 'monitor');
    }
}

// 状态2: 监控止盈止损
if (positionData.status == 'monitor') {
    // 检查条件单状态,处理触发情况
    // ...
}

// 状态3: 交易完成
if (positionData.status == 'finished') {
    _G('status', 'unfinished'); // 重置状态,准备下次交易
}

전체 프로세스의 장점

  • 이는 개별 거래의 위험(자본 비율을 통해)을 통제합니다.
  • 또한, 자동 손절매 및 이익실현 주문은 수익을 보호하고 손실을 제한하는 데 사용됩니다.
  • 전체 프로세스가 프로그래밍 방식으로 실행되므로 인간의 개입이 줄어들고 거래의 일관성이 향상됩니다.

V. 위험 관리를 위한 모범 사례

5.1 매개변수 설정 권장 사항

위험 비율

  • 초보자 추천 : 2-3%
  • 경험자: 5-10%
  • 탐욕스러워서 너무 높게 책정하지 마세요.자신의 위험 허용도에 따라 설정하세요

이익 실현 비율과 손절매 비율

  • 손절매 : 1-3% (환율 변동성에 따라 조정)
  • 이익 실현: 2-6% (일반적으로 손절매 가격의 1.5-2배).
  • 다양한 통화의 특성에 맞게 적절히 설정하는 것이 필요합니다.

5.2 테스트 및 검증

전체 테스트 체크리스트

  • ✅ 계산된 수량이 맞나요?
  • ✅ 손절매 가격과 이익실현 가격이 합리적인가요?
  • ✅ 조건부 주문이 올바르게 실행되나요?
  • ✅ 상태 전환이 올바르나요?
  • ✅ 비정상 상황의 처리가 적절한가?

테스트 과정

  1. 먼저, 테스트 환경의 모든 논리를 검증합니다.
  2. 소액의 자본을 사용하여 실시간 거래 테스트를 실시합니다.
  3. 문제가 없는지 확인한 후에만 정식 자금을 투자하세요.

기억하다: 철저한 테스트를 거친 후에만 실제 거래에 적용해야 합니다. 이는 양적 거래의 기본 원칙입니다.


VI. 결론

자, 오늘의 주식 비율 주문 및 손절매/수익실현 설정에 대한 논의는 여기까지입니다. 이 워크플로는 위험 관리와 자동 실행을 결합하여 거래를 더욱 표준화합니다. 하지만 모든 사람의 거래 스타일과 위험 감수 성향은 다르므로, 각자의 상황에 맞게 매개변수를 조정하는 것을 잊지 마세요. 사용 중 문제가 발생하거나 퀀트 거래에 대해 궁금한 점이 있으시면 언제든지 문의해 주세요. 함께 고민하고 개선해 나가겠습니다.

소스 코드 참조: https://www.fmz.com/strategy/516459