تجارتی حکمت عملی میں الارم گھڑی شامل کریں

مصنف:نیکی, تخلیق: 2020-08-06 11:15:28, تازہ کاری: 2023-10-10 21:14:31

img

تجارتی حکمت عملیوں کو ڈیزائن کرنے والے تاجر اکثر مجھ سے پوچھتے ہیں کہ حکمت عملیوں کے لئے ٹائمنگ افعال کو کس طرح ڈیزائن کیا جائے تاکہ حکمت عملی مخصوص اوقات میں کچھ کاموں کو سنبھال سکے۔ مثال کے طور پر ، کچھ انٹرا ڈے حکمت عملیوں کو تجارتی دن میں پہلے حصے کے اختتام سے پہلے ہی پوزیشنوں کو بند کرنے کی ضرورت ہوتی ہے۔ تجارتی حکمت عملی میں ایسی ضروریات کو کس طرح ڈیزائن کیا جائے؟ ایک حکمت عملی بہت زیادہ وقت کنٹرول کا استعمال کرسکتی ہے۔ اس طرح ، ہم وقت کنٹرول فنکشن کو وقت کنٹرول کوڈ اور حکمت عملی کے مابین جوڑ کو کم سے کم کرنے کے لئے جوڑ سکتے ہیں ، تاکہ ٹائم کنٹرول ماڈیول کو دوبارہ استعمال کیا جاسکے اور استعمال میں جامع ہو۔

ایک الارم گھڑی ڈیزائن کریں

// 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فنکشن ہم حکمت عملی میں لاگو کیا ہے، اور اہم فنکشن کے آغاز میں دو alarm clock اشیاء کی تعمیر. کھولنے اور بند کرنے کی پوزیشن کا تعین کرنے کی حکمت عملی میں، کوڈ ہے کہ alarm clock اعتراض بلاتا ہے شامل کریںCheckتقریب، جیسے کوڈ کے تبصرہ حصہ.

بیک ٹیسٹ

img

آپ بیک ٹیسٹ دیکھ سکتے ہیں، صبح 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)

بیک ٹیسٹ ٹیسٹ رن:

img

یہ نوٹ کیا جانا چاہئے کہ بیک ٹسٹ کے لئے، نیچے کی پرت کے K لائن سائیکل کو بہت بڑا نہیں کیا جاسکتا ہے، دوسری صورت میں وقت کا پتہ لگانے کا نقطہ براہ راست چھوڑا جا سکتا ہے اور کوئی ٹرگر نہیں ہوگا.


متعلقہ

مزید