- 策略广场
- 商品期货计划委托工具
商品期货计划委托工具
Author:
扫地僧, Date: 2021-11-04 15:05:31
Tags:
商品期货工具JavaScript
// 全局变量
var _TaskQueue = []
var ENTRUST = 0
var STOPLOSS = 1
var STOPPROFIT = 2
var BACKHAND = 3
var dictTaskType = ["委托任务", "止损任务", "止盈任务", "反手任务"]
var q = $.NewTaskQueue()
function closeTask (taskType) {
for (var i = 0; i < _TaskQueue.length; i++) {
if (taskType == _TaskQueue[i].taskType) {
_TaskQueue[i].taskFinished = true
Log("关闭任务:", dictTaskType[taskType])
}
}
}
// 任务处理对象
function TaskQueueProcess () {
// 获取行情
exchange.SetContractType(_EntrustSymbol)
var ticker = _C(exchange.GetTicker)
for (var i = 0; i < _TaskQueue.length; i++) {
var task = _TaskQueue[i]
if (task.taskFinished == false && task.taskType == ENTRUST && task.taskTrigger * ticker.Last >= task.taskTrigger * task.taskPrice) {
q.pushTask(exchange, task.taskSymbol, task.taskDirection, task.taskAmount, function(tradeTask, ret) {
Log(tradeTask.desc, ret, "委托完成")
if (ret) {
// 回调,创建后续任务
if (_EntrustStopLossPrice != -1) { // 创建止损任务
var newTask = {
taskType : STOPLOSS,
taskSymbol : task.taskSymbol,
taskPrice : _EntrustStopLossPrice,
taskAmount : task.taskAmount,
taskDirection : task.taskDirection == "buy" ? "closebuy" : "closesell",
taskTrigger : task.taskDirection == "buy" ? -1 : 1, // 做多止损:低于价格触发,做空止损:高于价格触发
taskFinished : false
}
_TaskQueue.push(newTask)
Log("创建止损任务", newTask, "#FF0000")
}
if (_EntrustStopProfitPrice != -1) { // 创建止盈任务
var newTask = {
taskType : STOPPROFIT,
taskSymbol : task.taskSymbol,
taskPrice : _EntrustStopProfitPrice,
taskAmount : task.taskAmount,
taskDirection : task.taskDirection == "buy" ? "closebuy" : "closesell",
taskTrigger : task.taskDirection == "buy" ? 1 : -1, // 做多止盈:高于价格触发,做空止盈:低于价格触发
taskFinished : false
}
_TaskQueue.push(newTask)
Log("创建止盈任务", newTask, "#FF0000")
}
}
})
task.taskFinished = true
break
} else if (task.taskFinished == false && task.taskType == STOPLOSS && ticker.Last * task.taskTrigger >= task.taskPrice * task.taskTrigger) {
q.pushTask(exchange, task.taskSymbol, task.taskDirection, task.taskAmount, function(tradeTask, ret) {
Log(tradeTask.desc, ret, "止损完成")
// 关闭止盈任务
closeTask(STOPPROFIT)
if (ret) {
// 回调,创建后续任务
if (_EntrustStopLossBackhandPrice != -1) {
var newTask = {
taskType : BACKHAND,
taskSymbol : task.taskSymbol,
taskPrice : _EntrustStopLossBackhandPrice,
taskAmount : task.taskAmount,
taskDirection : task.taskDirection == "closebuy" ? "sell" : "buy",
taskTrigger : task.taskDirection == "closebuy" ? -1 : 1, // -1 小于时触发, 1大于时触发
taskFinished : false
}
_TaskQueue.push(newTask)
Log("创建反手任务", newTask, "#FF0000")
}
}
})
task.taskFinished = true
break
} else if (task.taskFinished == false && task.taskType == STOPPROFIT && ticker.Last * task.taskTrigger >= task.taskPrice * task.taskTrigger) {
q.pushTask(exchange, task.taskSymbol, task.taskDirection, task.taskAmount, function(tradeTask, ret) {
Log(tradeTask.desc, ret, "止盈完成")
// 关闭止损任务
closeTask(STOPLOSS)
})
task.taskFinished = true
break
} else if (task.taskFinished == false && task.taskType == BACKHAND && ticker.Last * task.taskTrigger >= task.taskPrice * task.taskTrigger) {
q.pushTask(exchange, task.taskSymbol, task.taskDirection, task.taskAmount, function(tradeTask, ret) {
Log(tradeTask.desc, ret, "反手完成")
})
task.taskFinished = true
break
}
}
q.poll()
}
function main() {
if (_IsRecovery) {
recoveryData = _G("_TaskQueue")
if (!recoveryData) {
_TaskQueue = recoveryData
} else {
Log("没有可用于恢复的数据")
}
}
// 根据参数生成任务
if (_EntrustSymbol == "null" || _EntrustPrice <= 0 || _EntrustAmount <= 0) {
throw "没有设置委托合约或者委托价格无效或者委托数量无效"
} else {
var task = {
taskType : ENTRUST,
taskSymbol : _EntrustSymbol,
taskPrice : _EntrustPrice,
taskAmount : _EntrustAmount,
taskDirection : _EntrustMode == 0 ? "buy" : "sell",
taskTrigger : _EntrustTriggerType == 0 ? 1 : -1,
taskFinished : false
}
Log("请注意,创建委托任务", task, "#FF0000")
_TaskQueue.push(task)
}
while (true) {
if (exchange.IO("status")) {
TaskQueueProcess()
// 状态栏显示
LogStatus(_D(), "已连接")
} else {
LogStatus(_D(), "未连接")
}
Sleep(500)
}
}
// 扫尾取消所有挂单
function onexit(){
Log("策略停止,保存数据:", _TaskQueue)
_G("_TaskQueue", _TaskQueue)
}
function onerror(){
Log("策略异常停止,保存数据:", _TaskQueue)
_G("_TaskQueue", _TaskQueue)
}
相关内容
更多内容