Name
MartinGale-Strategy1
Author
Zer3192
Source (javascript)
// 在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);
}
}
Detail
https://www.fmz.com/strategy/416875
Last Modified
2023-07-12 17:41:56