function getboll() { //信号捕捉模块
var records = exchange.GetRecords(14400); //获取K线周期为4小时的K线数据
if (records && records.length > 20) {
var boll = TA.BOLL(records, 20, 3) //将K线数据转换为boll带数据
var upLine = boll[0]
var midLine = boll[1]
var downLine = boll[2]
var price = exchange.GetTicker().Last
if (price > upLine[upLine.length - 1]) { // 对比成交价与boll上轨线
//注释邮件通 sendtomail("卖出信号", "价格:" + price + "大于BOLL上轨线:" + upLine[upLine.length - 1]) //发送邮件
Log("卖出信号:" + "价格:" + price + "大于BOLL上轨线:" + upLine[upLine.length - 1] + "@") //打印信号信息
return -1; //返回-1 等于返回一个卖出信号
} else if (price < downLine[downLine.length - 1]) {
//注释邮件通知 sendtomail("买入信号", "价格:" + price + "小于BOLL下轨线:" + downLine[downLine.length - 1])
Log("买入信号:" + "价格:" + price + "小于BOLL下轨线:" + downLine[downLine.length - 1] + "@")
return 1 //返回-1 等于返回一个卖出信号
}
}
return 0;
}
let trader = { //初始化
direction: 0, //买卖方向标记
tip: 10, //下单数量
order: 0, //下单确认开关
lever: 20, ////杠杆倍数
period: "quarter", ////合约类型,这儿设置为季度合约
long: 35, //止盈点设置,均已usd都是简单计算
close: -50 //止损点设置
};
function fox(trader) { //执行主模块
var id;
var aount = exchange.GetAccount(); //获取账户信息
if (trader.order == 1) { //再次确认下单信号
if (trader.direction == 1) { //判断下单方向
price = getprice("buy", 1); //获取执行价格,这儿是买二价格,
if (aount.Stocks > trader.tip / trader.lever) {
exchange.SetDirection("buy");
id = exchange.Buy(price, trader.tip);
if (id != null) {
trader.price = price;
trader.direction = 0;
}
}
} else if (trader.direction == -1) {
price = getprice("sell", 1);
if (aount.Stocks >= trader.tip / trader.lever) {
exchange.SetDirection("sell")
id = exchange.Sell(price, trader.tip)
trader.price = price;
trader.direction = 0;
}
}
}
return trader;
}
while (true) {
if (tm == 60) { //1分钟执行一次
if(trader.order==0){ //确认无订单状态
let signal=getboll(trader); //获取入市信号
if(signal!=0){ //确认入市信号
trader.order=1 //改变交易下单信息
trader.direction=signal;//设置买卖方向
trader = fox(trader); //进入执行模块
}
}
tm = 0;
}
trader = riskcode(trader); //执行风险控制代码
Sleep(1000); //1秒执行一次
tm++;
}
}
/*backtest
start: 2022-01-01 00:00:00
end: 2023-03-09 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_HuobiDM","currency":"BTC_USD"}]
*/
当然也可以通过系统提供来设置
/*backtest
start: 2022-01-01 00:00:00
end: 2023-03-09 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_HuobiDM","currency":"BTC_USD"}]
*/
function main() { //主程序入口
let tm = 0; //初始化次数
let trader = { //初始化
direction: 0, //买卖方向标记
tip: 10, //下单数量
order: 0, //下单确认开关
lever: 20, ////杠杆倍数
period: "quarter", ////合约类型,这儿设置为季度合约
long: 35, //止盈点设置,均已usd都是简单计算
close: -50 //止损点设置
};
exchange.SetContractType(trader.period); //设置合约类型
exchange.SetMarginLevel(trader.lever); //设置杠杆倍数
while (true) {
if (tm == 60) { //1分钟执行一次
if (trader.order == 0) {
let signal = getboll(trader);
if (signal != 0) {
trader.order = 1
trader.direction = signal;
trader = fox(trader);
}
}
tm = 0;
}
trader = riskcode(trader); //执行风险控制代码
Sleep(1000); //1秒执行一次
tm++;
}
}
function getboll() { //信号捕捉模块
let records = exchange.GetRecords(14400); //获取K线周期为4小时的K线数据
if (records && records.length > 20) {
var boll = TA.BOLL(records, 20, 3) //将K线数据转换为boll带数据
var upLine = boll[0]
var midLine = boll[1]
var downLine = boll[2]
var price = exchange.GetTicker().Last
if (price > upLine[upLine.length - 1]) { // 对比成交价与boll上轨线
//注释邮件通 sendtomail("卖出信号", "价格:" + price + "大于BOLL上轨线:" + upLine[upLine.length - 1]) //发送邮件
Log("卖出信号:" + "价格:" + price + "大于BOLL上轨线:" + upLine[upLine.length - 1] + "@") //打印信号信息
return -1; //返回-1 等于返回一个卖出信号
} else if (price < downLine[downLine.length - 1]) {
//注释邮件通知 sendtomail("买入信号", "价格:" + price + "小于BOLL下轨线:" + downLine[downLine.length - 1])
Log("买入信号:" + "价格:" + price + "小于BOLL下轨线:" + downLine[downLine.length - 1] + "@")
return 1 //返回-1 等于返回一个卖出信号
}
}
return 0;
}
function getprice(type, i) { //获取买卖二价
var price = 0;
var depth = exchange.GetDepth();
if (type == "buy") {
price = depth.Asks[i].Price;
} else if (type == 'sell') {
price = depth.Bids[i].Price;
} else {
Log('不交易');
}
return price;
}
function fox(trader) { //执行主模块
var id;
var aount = exchange.GetAccount();
if (trader.order == 1) {
if (trader.direction == 1) {
price = getprice("buy", 1);
if (aount.Stocks > trader.tip / trader.lever) {
exchange.SetDirection("buy");
id = exchange.Buy(price, trader.tip);
if (id != null) {
trader.price = price;
trader.direction = 0;
}
}
} else if (trader.direction == -1) {
price = getprice("sell", 1);
if (aount.Stocks >= trader.tip / trader.lever) {
exchange.SetDirection("sell")
id = exchange.Sell(price, trader.tip)
trader.price = price;
trader.direction = 0;
}
}
}
return trader;
}
function usdt(trader) { //usdt转换
pricedata = {
long: 0,
close: 0
}
price = getprice("sell", 0);
pricedata.long = trader.long / price;
pricedata.close = trader.close / price;
return pricedata;
}
function closeorder(direction, trader) {
var id;
var pricedata = usdt(trader);
if (direction.Profit > pricedata.long || direction.Profit < pricedata.close) {
if (direction.Type == 0) {
price = getprice("sell", 0);
exchange.SetDirection("closebuy");
id = exchange.Sell(price, trader.tip);
if (id != null) {
trader.order = 0;
} else {
price = getprice("sell", 0);
id = exchange.Sell(price, trader.tip);
}
} else if (direction.Type == 1) {
price = getprice("buy", 0);
exchange.SetDirection("closesell");
id = exchange.Buy(price, trader.tip);
if (id != null) {
trader.order = 0;
} else {
price = getprice("buy", 0);
id = exchange.Buy(price, trader.tip);
}
}
Log(direction.Profit);
}
}
function riskcode(trader) {
var position = exchange.GetPosition();
if (position.length >= 1) {
for (var i = 0; i < position.length; i++) {
closeorder(position[i], trader);
}
}
return trader;
}
页面更新:2024-04-22
本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828
© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号