2
fokus pada
319
Pengikut

Aliran Kerja dalam Amalan: Mudah Mengurus Pesanan Peratusan Ekuiti dan Pesanan Ambil Untung dan Henti Rugi Automatik

Dicipta dalam: 2025-11-12 10:58:07, dikemas kini pada: 2025-11-15 12:45:08
comments   0
hits   219

Aliran Kerja dalam Amalan: Mudah Mengurus Pesanan Peratusan Ekuiti dan Pesanan Ambil Untung dan Henti Rugi Automatik

1. Pengenalan

Hello semua, baru-baru ini saya telah menerima banyak maklum balas daripada rakan tentang penggunaan aliran kerja, dan soalan yang paling kerap ditanya ialah…Peratusan hak dan kepentingandanStop Stop LossMengenai isu persediaan, ramai orang bertanya: “Saya tahu saya perlu mengawal risiko, tetapi bagaimana sebenarnya saya mengira kuantiti pesanan berdasarkan dana akaun? Selain itu, bagaimanakah cara saya menetapkan pesanan henti rugi dan ambil untung secara automatik selepas membuka kedudukan supaya sistem boleh menguruskan risiko untuk kita?”

Hari ini, kami akan menangani keperluan praktikal ini dan, menggunakan kod sebenar daripada Platform Kuantiti Pencipta, menerangkan secara terperinci cara melaksanakan kedua-dua fungsi teras ini.


II. Penjelasan Terperinci Penempatan Pesanan Berdasarkan Peratusan Ekuiti

Aliran Kerja dalam Amalan: Mudah Mengurus Pesanan Peratusan Ekuiti dan Pesanan Ambil Untung dan Henti Rugi Automatik

2.1 Apakah penempatan pesanan peratusan ekuiti?

Peratusan hak dan kepentinganIni bermakna bilangan pesanan tidak tetap, tetapi dikira berdasarkan peratusan tetap daripada jumlah dana dalam akaun.

Contohnya

  • Akaun mempunyai 10,000 USDT
  • Tetapkan nisbah risiko kepada 5% (Nisbah risiko = 0.05).
  • Sistem akan menggunakan kuota 500 USDT untuk membuka kedudukan.

Kelebihan teras

  1. Risiko yang boleh dikawalRisiko adalah peratusan tetap untuk setiap transaksi, tanpa mengira baki akaun.
  2. Kadar penggunaan modal yang tinggiApabila dana akaun berubah, kuantiti pesanan dilaraskan secara automatik—kuantiti pesanan meningkat apabila dana meningkat dan berkurangan dengan sewajarnya apabila dana berkurangan.
  3. Sangat boleh menyesuaikan diriAkaun yang sesuai untuk saiz modal yang berbeza

2.2 Logik Pengiraan Lengkap dan Pelaksanaan Kod

Langkah 1: Dapatkan Maklumat Akaun

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

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

Perkara utamaBalanceMedan mewakili baki yang tersedia, yang merupakan asas untuk pengiraan.


Langkah Kedua: Mendapatkan Maklumat Pasaran

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

Penerangan Parameter Teras

  • CtValNilai muka kontrak (cth., nilai muka kontrak kekal ETH ialah 0.01 ETH)
  • MinQtyKuantiti pesanan minimum
  • MaxQtyKuantiti pesanan maksimum
  • AmountPrecisionKetepatan kuantiti
  • PricePrecisionKetepatan harga

Perhatian khususPastikan anda menyemak sama ada mata wang yang anda ingin berdagang tersedia di bursa.


Langkah 3: Dapatkan harga semasa

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

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

Langkah 4: Kira bilangan 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 formula pengiraan

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

Langkah 5: Semak sekatan

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

Kesilapan biasa yang dilakukan oleh pemula

  • ❌ Kegagalan menyemak kuantiti pesanan minimum mengakibatkan pesanan gagal.
  • ❌ Pengendalian ketepatan yang tidak betul membawa kepada penolakan pesanan oleh pertukaran.
  • ❌ Nilai muka kontrak tidak dipertimbangkan, ralat pengiraan.

Jika tetapan di atas tidak betul, pemberitahuan kegagalan pesanan akan muncul. Ini adalah sesuatu yang perlu diberi perhatian khusus oleh pemula.


III. Penjelasan Terperinci tentang Tetapan Pengambilan Untung dan Henti Rugi

Aliran Kerja dalam Amalan: Mudah Mengurus Pesanan Peratusan Ekuiti dan Pesanan Ambil Untung dan Henti Rugi Automatik

3.1 Logik teras pengambilan untung dan henti rugi

Ramai orang keliru tentang arah pengambilan untung dan henti rugi. Mari kita jelaskan:

Jenis pegangan Operasi pengambilan untung Hentikan operasi kehilangan
Pelbagai tempahan Jual untuk menutup kedudukan apabila harga meningkat Jual untuk menutup kedudukan apabila harga jatuh.
Kedudukan Pendek Beli untuk menutup kedudukan apabila harga jatuh Beli untuk menutup kedudukan apabila harga meningkat

Perkara utamaKedua-dua pengambilan untung dan henti rugi adalahOperasi penutupanArahnya hendaklah bertentangan dengan arah kedudukan.


3.2 Penjelasan Terperinci Parameter Tunggal Bersyarat

Pada platform pencipta, gunakanCreateConditionOrderBerfungsi untuk menetapkan tahap henti rugi dan ambil untung:

Pada masa ini, platform FMZ menyokong pesanan bersyarat CreateConditionOrder dalam dagangan langsung, tetapi ujian belakang belum lagi menyokongnya.

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

Penerangan Parameter

  • Jenis operasi(closeDirection):

    • Digunakan untuk menutup kedudukan panjangclosebuy
    • Digunakan untuk menutup kedudukan pendekclosesell
  • ConditionType

    • ORDER_CONDITION_TYPE_SLHentikan Kehilangan
    • ORDER_CONDITION_TYPE_TPAmbil Untung
  • Harga PencetusAktifkan pesanan apabila harga ini dicapai.

  • Harga Pesanan (Harga Pelaksanaan)Urus niaga akan selesai pada harga ini selepas pengaktifan.

Notis:Pada masa ini, pesanan bersyarat hanya disokong dalam dagangan langsung dan penjaga perlu dikemas kini.


3.3 Pengiraan Harga Henti Rugi dan Ambil Untung

Dalam kod, kami mengira secara dinamik 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 Pengurusan dan Pemantauan Penyata Bersyarat

Selepas menyediakan pernyataan bersyarat, kami juga perlu mengurus dan memantaunya:

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

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

Logik pengendalian negeri

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 pencipta menyediakanGetConditionOrderFungsi ini membolehkan anda melihat status semasa semua pesanan bersyarat.
  • Jika pesanan ambil untung atau henti rugi dicetuskan pada satu pihak, pesanan bersyarat dalam arah yang bertentangan harus dibatalkan dengan segera.
  • Ia boleh digunakanCancelConditionOrderFungsi ini hanya memerlukan nombor pesanan sebagai input.

Perhatian

  • Adalah disyorkan untuk menyemak status pesanan bersyarat dengan kerap untuk memastikan ia berfungsi dengan betul.
  • Kadangkala turun naik pasaran terlalu cepat, dan pesanan bersyarat mungkin tidak dilaksanakan dalam masa, dalam hal ini pemprosesan manual diperlukan.

IV. Penyepaduan Aliran Kerja Lengkap

4.1 Pengurusan Status Transaksi

Dalam aliran kerja demonstrasi, kami menggunakan mesin keadaan untuk mengurus keseluruhan kitaran transaksi:

const savestatus = _G('status');

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

Tiga negeri

  1. unfinishedTiada jawatan dibuka lagi; proses pembukaan jawatan perlu diselesaikan.
  2. monitorJawatan telah dibuka dan pesanan henti rugi dan ambil untung telah ditetapkan; kini dalam fasa pemantauan.
  3. finishedUrus niaga selesai, bersedia untuk menetapkan semula status.

4.2 Proses Transaksi Lengkap

Dengan menyepadukan pesanan peratusan ekuiti dengan pesanan henti rugi dan ambil untung, kami mempunyai aliran kerja dagangan yang lengkap:

carta alir

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

Pelaksanaan Kod

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

Kelebihan keseluruhan proses

  • Ini mengawal risiko urus niaga individu (melalui peratusan ekuiti).
  • Tambahan pula, pesanan henti rugi dan ambil untung automatik digunakan untuk melindungi keuntungan dan mengehadkan kerugian.
  • Keseluruhan proses dilaksanakan secara pemrograman, mengurangkan campur tangan manusia dan meningkatkan konsistensi transaksi.

V. Amalan Terbaik untuk Kawalan Risiko

5.1 Syor Penetapan Parameter

Nisbah risiko

  • Cadangan pemula: 2-3%
  • Berpengalaman: 5-10%
  • Jangan tamak dan terlalu tinggi.Tetapkan mengikut toleransi risiko anda sendiri

Nisbah pengambilan untung dan henti rugi

  • Henti rugi: 1-3% (laraskan mengikut turun naik mata wang)
  • Ambil untung: 2-6% (biasanya 1.5-2 kali henti rugi).
  • Ia adalah perlu untuk menetapkannya dengan sewajarnya mengikut ciri-ciri mata wang yang berbeza.

5.2 Pengujian dan Pengesahan

Senarai ujian lengkap

  • ✅ Adakah kuantiti yang dikira betul?
  • ✅ Adakah harga henti rugi dan ambil untung berpatutan?
  • ✅ Adakah perintah bersyarat dicetuskan dengan betul?
  • ✅ Adakah pertukaran negeri betul?
  • ✅ Adakah pengendalian situasi tidak normal mencukupi?

Proses ujian

  1. Pertama, sahkan semua logik dalam persekitaran ujian.
  2. Menjalankan ujian dagangan secara langsung menggunakan sejumlah kecil modal.
  3. Hanya melabur dana rasmi selepas memastikan tiada masalah.

ingat: Hanya selepas ujian menyeluruh ia boleh dimasukkan ke dalam dagangan langsung; ini adalah prinsip asas perdagangan kuantitatif.


VI

Okey, itu menyimpulkan perbincangan hari ini mengenai penempatan pesanan peratusan ekuiti dan tetapan henti rugi/ambil untung. Aliran kerja ini menggabungkan kawalan risiko dengan pelaksanaan automatik, menjadikan dagangan kami lebih piawai. Walau bagaimanapun, gaya dagangan dan toleransi risiko setiap orang adalah berbeza, jadi ingat untuk melaraskan parameter mengikut keadaan anda sendiri. Jika anda menghadapi sebarang masalah semasa penggunaan, atau mempunyai sebarang soalan lain tentang perdagangan kuantitatif, sila hubungi kami untuk perundingan dan perbincangan. Mari kita terokai dan perbaiki bersama.

Rujukan kod sumber: https://www.fmz.com/strategy/516459