تجارتی حکمت عملیوں کو ڈیزائن کرنے والے تاجر اکثر مجھ سے پوچھتے ہیں کہ حکمت عملیوں کے لئے ٹائمنگ افعال کو کس طرح ڈیزائن کیا جائے تاکہ حکمت عملی مخصوص اوقات میں کچھ کاموں کو سنبھال سکے۔ مثال کے طور پر ، کچھ انٹرا ڈے حکمت عملیوں کو تجارتی دن میں پہلے حصے کے اختتام سے پہلے ہی پوزیشنوں کو بند کرنے کی ضرورت ہوتی ہے۔ تجارتی حکمت عملی میں ایسی ضروریات کو کس طرح ڈیزائن کیا جائے؟ ایک حکمت عملی بہت زیادہ وقت کنٹرول کا استعمال کرسکتی ہے۔ اس طرح ، ہم وقت کنٹرول فنکشن کو وقت کنٹرول کوڈ اور حکمت عملی کے مابین جوڑ کو کم سے کم کرنے کے لئے جوڑ سکتے ہیں ، تاکہ ٹائم کنٹرول ماڈیول کو دوبارہ استعمال کیا جاسکے اور استعمال میں جامع ہو۔
// triggerTime: 14:58:00
function CreateAlarmClock(triggerHour, triggerMinute) {
var self = {} // constructed object
// Set members and functions to the constructed object below
self.isTrigger = false // Has it been triggered that day
self.triggerHour = triggerHour // The planned trigger hour
self.triggerMinute = triggerMinute // The planned trigger minute
self.nowDay = new Date().getDay() // what day is the current time
self.Check = function() { // Check function, check trigger, return true when triggered, return false if not triggered
var t = new Date() // Get the current time object
var hour = t.getHours() // Get the current decimal: 0~23
var minute = t.getMinutes() // Get the current minute: 0~59
var day = t.getDay() // Get the current number of days
if (day != self.nowDay) { // Judge, if the current day is not equal to the day of the record, reset the trigger flag as not triggered and update the number of days for the record
self.isTrigger = false
self.nowDay = day
}
if (self.isTrigger == false && hour == self.triggerHour && minute >= self.triggerMinute) {
// Determine whether the time is triggered, if it meets the conditions, set the flag isTrigger to true to indicate that it has been triggered
self.isTrigger = true
return true
}
return false // does not meet the trigger condition, that is, it is not triggered
}
return self // return the constructed object
}
ہم نے ایک الارم کلاک آبجیکٹ (ایک کنسٹرکٹر کے طور پر سمجھا جا سکتا ہے) بنانے کے لئے ایک فنکشن ڈیزائن اور لاگو کیا ہے، اور دیگر زبانوں کو براہ راست ایک الارم کلاک کلاس ڈیزائن کر سکتے ہیں (مثال کے طور پر، پطرون کا استعمال کرتے ہوئے، ہم بعد میں پطرون میں ایک لاگو کریں گے).
var t = CreateAlarmClock(14, 58)
مثال کے طور پر، ایک اعتراض t تخلیق کریں اور اسے ہر روز 14:58 پر چالو کریں. آپ ایک اور اعتراض t1 تشکیل دے سکتے ہیں، جو ہر روز 9 بجے ٹرگر ہوتا ہے۔
var t1 = CreateAlarmClock(9, 0)
ہم ایک ٹیسٹ حکمت عملی لکھتے ہیں۔ حکمت عملی سب سے آسان چلتی اوسط نظام کا استعمال کرتی ہے۔ حکمت عملی صرف جانچ کے لئے ہے اور منافع کی پرواہ نہیں کرتی ہے۔ حکمت عملی کا منصوبہ روزانہ 9:00 بجے مارکیٹ کھولنے پر روزانہ کی اوسط حرکت پذیر گولڈن کراس اور مردہ کراس پر مبنی پوزیشن (لانگ ، شارٹ ، کوئی تجارت نہیں) کھولنا ہے ، اور دوپہر 14:58 بجے پوزیشن بند کرنا ہے۔
function CreateAlarmClock(triggerHour, triggerMinute) {
var self = {} // constructed object
// Set members and functions to the constructed object below
self.isTrigger = false // Has it been triggered that day
self.triggerHour = triggerHour // The planned trigger hour
self.triggerMinute = triggerMinute // The planned trigger minute
self.nowDay = new Date().getDay() // what day is the current time
self.Check = function() {// Check function, check trigger, return true when triggered, return false if not triggered
var t = new Date() // Get the current time object
var hour = t.getHours() // Get the current decimal: 0~23
var minute = t.getMinutes() // Get the current minute: 0~59
var day = t.getDay() // Get the current number of days
if (day != self.nowDay) {// Judge, if the current day is not equal to the day of the record, reset the trigger flag as not triggered and update the number of days for the record
self.isTrigger = false
self.nowDay = day
}
if (self.isTrigger == false && hour == self.triggerHour && minute >= self.triggerMinute) {
// Determine whether the time is triggered, if it meets the conditions, set the flag isTrigger to true to indicate that it has been triggered
self.isTrigger = true
return true
}
return false // does not meet the trigger condition, that is, it is not triggered
}
return self // return the constructed object
}
function main() {
var q = $.NewTaskQueue()
var p = $.NewPositionManager()
// You can write: var t = CreateAlarmClock(14, 58)
// You can write: var t1 = CreateAlarmClock(9, 0)
var symbol = "i2009"
while (true) {
if (exchange.IO("status")) {
exchange.SetContractType(symbol)
var r = exchange.GetRecords()
if(!r || r.length <20) {
Sleep(500)
continue
}
if (/*Judging the conditions for opening a position at 9:00*/) {// You can write: t1.Check()
var fast = TA.MA(r, 2)
var slow = TA.MA(r, 5)
var direction = ""
if (_Cross(fast, slow) == 1) {
direction = "buy"
} else if(_Cross(fast, slow) == -1) {
direction = "sell"
}
if(direction != "") {
q.pushTask(exchange, symbol, direction, 1, function(task, ret) {
Log(task.desc, ret)
})
}
}
if (/*Judging 14:58 conditions for closing the position near the market close*/) {// You can write: t.Check()
p.CoverAll()
}
q.poll()
LogStatus(_D())
} else {
LogStatus(_D())
}
Sleep(500)
}
}
ڈالیںCreateAlarmClock
فنکشن ہم حکمت عملی میں لاگو کیا ہے، اور اہم فنکشن کے آغاز میں دو Check
تقریب، جیسے کوڈ کے تبصرہ حصہ.
آپ بیک ٹیسٹ دیکھ سکتے ہیں، صبح 9 بجے کے بعد پوزیشن کھولنا اور شام 14:58 بجے پوزیشن بند کرنا۔
یہ ملٹی قسم کی حکمت عملیوں کے لئے بھی استعمال کیا جاسکتا ہے۔ ایک دوسرے کو متاثر کیے بغیر متعدد اقسام کے وقت کو کنٹرول کرنے کے لئے ملٹی قسم کی حکمت عملیوں میں متعدد ایسی
نفاذ اور ٹیسٹ کا کوڈ:
import time
class AlarmClock:
def __init__(self, triggerHour, triggerMinute):
self.isTrigger = False
self.triggerHour = triggerHour
self.triggerMinute = triggerMinute
self.nowDay = time.localtime(time.time()).tm_wday
def Check(self):
t = time.localtime(time.time())
hour = t.tm_hour
minute = t.tm_min
day = t.tm_wday
if day != self.nowDay:
self.isTrigger = False
self.nowDay = day
if self.isTrigger == False and hour == self.triggerHour and minute >= self.triggerMinute:
self.isTrigger = True
return True
return False
def main():
t1 = AlarmClock(14,58)
t2 = AlarmClock(9, 0)
while True:
if exchange.IO("status"):
LogStatus(_D(), "Already connected!")
exchange.SetContractType("rb2010")
ticker = exchange.GetTicker()
if t1.Check():
Log("Market Close", "#FF0000")
if t2.Check():
Log("Market Open", "#CD32CD")
else :
LogStatus(_D(), "not connected!")
Sleep(500)
بیک ٹیسٹ ٹیسٹ رن:
یہ نوٹ کیا جانا چاہئے کہ بیک ٹسٹ کے لئے، نیچے کی پرت کے K لائن سائیکل کو بہت بڑا نہیں کیا جاسکتا ہے، دوسری صورت میں وقت کا پتہ لگانے کا نقطہ براہ راست چھوڑا جا سکتا ہے اور کوئی ٹرگر نہیں ہوگا.