नमस्कार दोस्तों!
क्या आप नए बार को पहचानना चाहते हैं?
यह बहुत ही आसान है, खासकर जब आप वर्तमान टाइमफ्रेम में नए बार को पहचानना चाहते हैं।
void start(){ static datetime tmp; if (tmp!= Time[0]) { tmp = Time[0]; //यहाँ अपना कोड लिखें } }
लेकिन अगर आप अन्य टाइमफ्रेम का इवेंट देखना चाहते हैं? यह मुश्किल नहीं है, लेकिन इसमें कुछ सीमाएँ हैं:
MT4 बार इवेंट को सपोर्ट नहीं करता, लेकिन आप समय को एक एरे में डाल सकते हैं और हर टिक पर एरे का समय चेक कर सकते हैं। जब सही समय आएगा, तब नए बार का इवेंट एक्सीक्यूट करें।
इसका मतलब है कि अगर आप, उदाहरण के लिए, M5 टाइमफ्रेम पर बैकटेस्ट कर रहे हैं, तो आप M6, M7, ... D1 इवेंट को पकड़ सकते हैं।
लेकिन आप केवल ऊपर की प्रवृत्तियों को ही क्यों पहचान सकते हैं? इसका उत्तर है: कैसे टिक डेटा उत्पन्न करें MetaTrader? A1, A2, A3,...
D1 टाइमफ्रेम तक यह अधिक कठिन है क्योंकि सप्ताह रविवार 20:45 (ब्रोकर विशेष) से शुरू होता है और महीने की शुरुआत सप्ताह के मध्य में हो सकती है।
मुझे लगता है कि यह जानकारी बहुत प्रासंगिक नहीं है, इसलिए मैं इसे प्रकाशित नहीं करता...
इस प्रश्न के लिए एक विषय है, लेकिन मुझे लगता है कि बहुत से लोग लेख और फोरम नहीं पढ़ते, इसलिए मैंने यह कोड प्रकाशित किया।
कुछ स्पष्टीकरण:
इनिशियलाइज़ फंक्शन में आप टाइम एरे को प्रारंभिक समय के साथ भरते हैं:
curIndex = utils.periodToPeriodIndex(Period()); times[curIndex] = Time[0]; for(int i=curIndex+1; i<MAX; i++) times[i] = times[curIndex]- MathMod(times[curIndex],utils.periodIndexToPeriod(i)*60);
और स्टार्ट फंक्शन में आप चेक करते हैं कि क्या पर्याप्त समय बीत चुका है, फिर इवेंट को एक्सीक्यूट करते हैं:
if (times[curIndex] != Time[0]) { times[curIndex] = Time[0]; onBar(Period()); for(int i=curIndex+1; i<MAX; i++) { int period = utils.periodIndexToPeriod(i), seconds = period*60, time0 = times[curIndex] - MathMod(times[curIndex],seconds); if (times[i] != time0) { times[i] = time0; onBar(period); } } }
अपना कोड लिखें:
void onTick() {
}
और
void onBar(int period) { }
बस इतना ही दोस्तों।
अपडेट 1.1: धन्यवाद WHRoeder को स्पष्ट कोड के लिए।
टिप्पणी 0