MartinGale Strategy1

Author: Zer3192, Date: 2023-06-09 17:20:23
Tags:


// 在FMZ平台上实现马丁格尔的例子
function main() {
  // 设置基本参数
  var initAsset = 1000000; // 初始资产
  var baseBet = 0.001; // 基础单价
  var profitRate = 0.2; // 盈利时加注比例
  var lossRate = 0.5; // 亏损时加注比例
  var maxBetTimes = 10; // 最大加注次数
  var maxLoseTimes = 4; // 连续亏损次数

  // 初始化参数
  var asset = initAsset; // 当前资产
  var bet = baseBet; // 当前单注
  var betTimes = 0; // 当前加注次数
  var loseTimes = 5; // 当前连续亏损次数
  var win = 0; // 当前连续胜利次数

  // 下单函数
  function placeOrder(direction) {
    var amount = bet; // 下单量
    if (direction == "buy") {
      // 买入
      exchange.Buy(-1,bet);
      Log("买入", bet);
    } else if (direction == "sell") {
      // 卖出
      exchange.Sell(-1,bet);
      Log("卖出", bet);
    }
  }

  // 交易循环
  while (true) {
    // 获取当前K线上的信息
    var records = exchange.GetRecords();
    var lastRecord = records[records.length - 1];
    var currPrice = lastRecord.Close;

    // 判断当前趋势
    var trend = "none";
    if (lastRecord.Open < lastRecord.Close) {
      trend = "up";
    } else if (lastRecord.Open > lastRecord.Close) {
      trend = "down";
    }

    // 根据趋势执行交易
    if (trend == "up") {
      // 如果上升
      if (loseTimes > 0) {
        // 如果之前有亏损,重置加注次数和连续亏损次数
        betTimes = 0;
        loseTimes = 0;
      }
      placeOrder("buy");
      
      win++;
      if (win == maxBetTimes) {
        // 如果连续胜利次数达到最大加注次数,重置
        betTimes = 0;
        win = 0;
      }
    } else if (trend == "down") {
      // 如果下降
      if (win > 0) {
        // 如果之前有胜利,重置加注次数
        betTimes = 0;
      }
      if (loseTimes == maxLoseTimes) {
        // 如果连续亏损次数达到最大次数,停止交易
        break;
      }
      if (betTimes == 0) {
        // 如果是第一次加注,计算加注量
        bet *= (1 + lossRate);
      } else {
        // 如果不是第一次加注,计算加注量
        bet *= 1.1;
      }
      placeOrder("sell");
      loseTimes++;
      betTimes++;
    }

    // 更新资产
    var currAsset = exchange.GetAccount().Balance;
    if (currAsset > asset) {
      // 盈利,加注
      bet *= (1 + profitRate);
    }
    asset = currAsset;

    // 等待下一次交易
    Sleep(1000);
  }
}


More