2
fokus pada
319
Pengikut

Alur Kerja dalam Praktik: Kelola Order Persentase Ekuitas dan Order Take-Profit dan Stop-Loss Otomatis dengan Mudah

Dibuat di: 2025-11-12 10:58:07, diperbarui pada: 2025-11-15 12:45:08
comments   0
hits   219

Alur Kerja dalam Praktik: Kelola Order Persentase Ekuitas dan Order Take-Profit dan Stop-Loss Otomatis dengan Mudah

1. Pendahuluan

Halo semuanya, baru-baru ini saya menerima banyak masukan dari teman-teman tentang penggunaan alur kerja, dan pertanyaan yang paling sering diajukan adalah…Persentase hak dan kewajibanDanStop Stop LossMengenai masalah pengaturan, banyak orang bertanya: “Saya tahu saya perlu mengendalikan risiko, tetapi bagaimana tepatnya cara menghitung jumlah pesanan berdasarkan dana akun? Selain itu, bagaimana cara saya secara otomatis menetapkan pesanan stop-loss dan take-profit setelah membuka posisi sehingga sistem dapat mengelola risiko untuk kami?”

Hari ini, kami akan membahas kebutuhan praktis ini dan, menggunakan kode aktual dari Inventors Quantification Platform, menjelaskan secara rinci cara menerapkan kedua fungsi inti ini.


II. Penjelasan Detail Penempatan Order Berdasarkan Persentase Ekuitas

Alur Kerja dalam Praktik: Kelola Order Persentase Ekuitas dan Order Take-Profit dan Stop-Loss Otomatis dengan Mudah

2.1 Apa itu penempatan pesanan persentase ekuitas?

Persentase hak dan kewajibanArtinya, jumlah pesanan tidak tetap, tetapi dihitung berdasarkan persentase tetap dari total dana di akun.

Misalnya

  • Akun memiliki 10.000 USDT
  • Tetapkan rasio risiko menjadi 5% (riskRatio = 0,05).
  • Sistem akan menggunakan kuota 500 USDT untuk membuka posisi.

Keunggulan inti

  1. Risiko yang Dapat DikendalikanRisikonya adalah persentase tetap untuk setiap transaksi, berapa pun saldo akunnya.
  2. Tingkat pemanfaatan modal yang tinggiJika dana akun berubah, jumlah pesanan akan disesuaikan secara otomatis—jumlah pesanan akan meningkat jika dana bertambah, dan akan menurun jika dana berkurang.
  3. Sangat mudah beradaptasiAkun yang cocok untuk berbagai ukuran modal

2.2 Logika Perhitungan Lengkap dan Implementasi Kode

Langkah 1: Dapatkan Informasi Akun

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

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

Poin-poin pentingBalanceKolom ini menunjukkan saldo yang tersedia, yang menjadi dasar perhitungan.


Langkah Kedua: Memperoleh Informasi Pasar

// 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}` 
        } 
    }];
}

Deskripsi Parameter Inti

  • CtValNilai nominal kontrak (misalnya, nilai nominal kontrak abadi ETH adalah 0,01 ETH)
  • MinQtyJumlah pesanan minimum
  • MaxQtyJumlah pesanan maksimum
  • AmountPrecisionPresisi kuantitas
  • PricePrecisionAkurasi harga

Perhatian khususPastikan untuk memeriksa apakah mata uang yang ingin Anda perdagangkan tersedia di bursa.


Langkah 3: Dapatkan harga saat ini

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

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

Langkah 4: Hitung jumlah kontrak

// 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);

Ringkasan rumus perhitungan

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

Langkah 5: Periksa batasannya

// 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);

Kesalahan umum yang dilakukan oleh pemula

  • ❌ Kegagalan memeriksa jumlah pesanan minimum mengakibatkan kegagalan pesanan.
  • ❌ Penanganan presisi yang tidak tepat menyebabkan penolakan pesanan oleh bursa.
  • ❌ Nilai nominal kontrak tidak dipertimbangkan, kesalahan perhitungan.

Jika pengaturan di atas salah, notifikasi kegagalan pesanan akan muncul. Hal ini perlu diperhatikan secara khusus oleh pemula.


III. Penjelasan Detail Pengaturan Profit Taking dan Stop Loss

Alur Kerja dalam Praktik: Kelola Order Persentase Ekuitas dan Order Take-Profit dan Stop-Loss Otomatis dengan Mudah

3.1 Logika inti dari pengambilan untung dan stop-loss

Banyak orang bingung tentang arah profit taking dan stop loss. Mari kita perjelas:

Jenis kepemilikan Operasi pengambilan untung Operasi hentikan kerugian
Beberapa pesanan Jual untuk menutup posisi saat harga naik Jual untuk menutup posisi saat harga turun.
Posisi Pendek Beli untuk menutup posisi saat harga turun Beli untuk menutup posisi saat harga naik

Poin-poin pentingBaik profit taking maupun stop loss adalahOperasi penutupanArahnya harus berlawanan dengan arah posisi.


3.2 Penjelasan Detail Parameter Tunggal Bersyarat

Pada platform penemu, gunakanCreateConditionOrderFungsi untuk mengatur level stop-loss dan take-profit:

Saat ini, platform FMZ mendukung pesanan bersyarat CreateConditionOrder dalam perdagangan langsung, tetapi pengujian ulang belum mendukungnya.

  • 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             // 执行价格
    },
    "止损单"          // 订单备注
);

Deskripsi Parameter

  • Jenis operasi(closeDirection):

    • Digunakan untuk menutup posisi panjangclosebuy
    • Digunakan untuk menutup posisi shortclosesell
  • ConditionType

    • ORDER_CONDITION_TYPE_SLHentikan Kerugian
    • ORDER_CONDITION_TYPE_TPAmbil Untung
  • Harga PemicuAktifkan pesanan ketika harga ini tercapai.

  • OrderPrice (Harga Eksekusi)Transaksi akan diselesaikan pada harga ini setelah aktivasi.

Melihat:Saat ini, perintah bersyarat hanya didukung dalam perdagangan langsung, dan kustodian perlu diperbarui.


3.3 Perhitungan Harga Stop-Loss dan Take-Profit

Dalam kode, kami menghitung secara dinamis berdasarkan arah pembukaan:

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 Manajemen dan Pemantauan Pernyataan Bersyarat

Setelah menyiapkan pernyataan kondisional, kita juga perlu mengelola dan memantaunya:

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

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

Logika penanganan negara

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("⏳ 止盈止损单都活跃,继续监控");
}

Fungsi utama

  • Platform penemu menyediakanGetConditionOrderFungsi ini memungkinkan Anda untuk melihat status terkini dari semua pesanan bersyarat.
  • Jika perintah take-profit atau stop-loss dipicu pada satu sisi, perintah bersyarat pada arah yang berlawanan harus segera dibatalkan.
  • Itu bisa digunakanCancelConditionOrderFungsi ini hanya memerlukan nomor pesanan sebagai input.

Perhatian

  • Disarankan untuk memeriksa status perintah bersyarat secara berkala untuk memastikan perintah tersebut berfungsi dengan benar.
  • Terkadang fluktuasi pasar terlalu cepat, dan perintah bersyarat mungkin tidak dieksekusi tepat waktu, sehingga pemrosesan manual diperlukan.

IV. Integrasi Alur Kerja Lengkap

4.1 Manajemen Status Transaksi

Dalam alur kerja demonstrasi, kami menggunakan mesin status untuk mengelola seluruh siklus transaksi:

const savestatus = _G('status');

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

Tiga negara bagian

  1. unfinishedBelum ada posisi yang dibuka; proses pembukaan posisi perlu diselesaikan.
  2. monitorPosisi telah dibuka dan perintah stop-loss dan take-profit telah ditetapkan; sekarang dalam fase pemantauan.
  3. finishedTransaksi selesai, bersiap untuk mengatur ulang status.

4.2 Proses Transaksi Lengkap

Dengan mengintegrasikan order persentase ekuitas dengan order stop-loss dan take-profit, kami memiliki alur kerja perdagangan yang lengkap:

flow chart

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

Implementasi Kode

// 状态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'); // 重置状态,准备下次交易
}

Keuntungan dari keseluruhan proses

  • Ini mengendalikan risiko transaksi individual (melalui persentase ekuitas).
  • Lebih jauh lagi, perintah stop-loss dan take-profit otomatis digunakan untuk melindungi keuntungan dan membatasi kerugian.
  • Seluruh proses dijalankan secara terprogram, mengurangi campur tangan manusia dan meningkatkan konsistensi transaksi.

V. Praktik Terbaik untuk Pengendalian Risiko

5.1 Rekomendasi Pengaturan Parameter

Rasio risiko

  • Saran untuk pemula: 2-3%
  • Berpengalaman: 5-10%
  • Jangan serakah dan menetapkan target terlalu tinggi.Tetapkan sesuai toleransi risiko Anda sendiri

Rasio pengambilan untung dan stop-loss

  • Stop loss: 1-3% (sesuaikan dengan volatilitas mata uang)
  • Ambil untung: 2-6% (biasanya 1,5-2 kali stop loss).
  • Perlu mengaturnya secara tepat sesuai dengan karakteristik mata uang yang berbeda-beda.

5.2 Pengujian dan Verifikasi

Daftar tes lengkap

  • ✅ Apakah jumlah yang dihitung benar?
  • ✅ Apakah harga stop-loss dan take-profit masuk akal?
  • ✅ Apakah perintah bersyarat dipicu dengan benar?
  • ✅ Apakah peralihan statusnya sudah benar?
  • ✅ Apakah penanganan situasi abnormal memadai?

Proses pengujian

  1. Pertama, verifikasi semua logika di lingkungan pengujian.
  2. Melakukan uji perdagangan langsung menggunakan sejumlah kecil modal.
  3. Hanya investasikan dana formal setelah memastikan tidak ada masalah.

Ingat:Hanya setelah pengujian menyeluruh, barulah dapat dimasukkan ke dalam perdagangan langsung; ini adalah prinsip dasar perdagangan kuantitatif.


VI. Kesimpulan

Baiklah, diskusi hari ini tentang penempatan order persentase ekuitas dan pengaturan stop-loss/take-profit telah selesai. Alur kerja ini menggabungkan pengendalian risiko dengan eksekusi otomatis, sehingga perdagangan kita menjadi lebih terstandarisasi. Namun, gaya perdagangan dan toleransi risiko setiap orang berbeda-beda, jadi ingatlah untuk menyesuaikan parameternya dengan keadaan Anda. Jika Anda mengalami masalah selama penggunaan, atau memiliki pertanyaan lain tentang perdagangan kuantitatif, jangan ragu untuk menghubungi kami untuk konsultasi dan diskusi. Mari kita jelajahi dan tingkatkan bersama.

Referensi kode sumber: https://www.fmz.com/strategy/516459