المشاركة الأصلية بواسطة Turkm
مشاهدة المشاركة
الأسئلة البرمجية MT5 & MT4
تقليص
X
-
المشاركة الأصلية بواسطة zooz1o مشاهدة المشاركة
عاشت يداك وأنار الله قلبك وعقلك بنوره
- معحبون 1
تعليق
-
السلام عليكم اخي
في الميتاتريدر 4 على فريم ال5 دقائق
معروف ان كل شمعة مدتها 300 ثانية
كما ذكرت لك انني اريد فتح صفقة لكل اشارة وهذا من خلال مقارنة الوقت الحالي بوقت فتح الصفقة
فأكتب هكذا:
في حالة كان الوقت الحالي اكبر من وقت فتح الصفقة + 300 ثانية
فهنا يكون وقت فتح الصفقة الساعة ال5:00 ثم نضيف 300 ثانية سيكون الوقت الحالي هو 5:05
لحد هنا طبيعي جدا
لكن ما يحدث انه في حالة تحقق الهدف في نفس الشمعة التي حدث بها الفتح يقوم الاكسبيرت بفتح صفقة في نفس وقت الغلق ويتجاهل تماما الشرط
فهل من تفسير؟
كود PHP:if(Arrow_UP!=EMPTY_VALUE &&Arrow_UP>0 && TimeCurrent()>LastOrderInfo("Time")+299 && TimeCurrent()>LastClosedInfo("Time")+299)
تعليق
-
المشاركة الأصلية بواسطة zooz1o مشاهدة المشاركةالسلام عليكم اخي
في الميتاتريدر 4 على فريم ال5 دقائق
معروف ان كل شمعة مدتها 300 ثانية
كما ذكرت لك انني اريد فتح صفقة لكل اشارة وهذا من خلال مقارنة الوقت الحالي بوقت فتح الصفقة
فأكتب هكذا:
في حالة كان الوقت الحالي اكبر من وقت فتح الصفقة + 300 ثانية
فهنا يكون وقت فتح الصفقة الساعة ال5:00 ثم نضيف 300 ثانية سيكون الوقت الحالي هو 5:05
لحد هنا طبيعي جدا
لكن ما يحدث انه في حالة تحقق الهدف في نفس الشمعة التي حدث بها الفتح يقوم الاكسبيرت بفتح صفقة في نفس وقت الغلق ويتجاهل تماما الشرط
فهل من تفسير؟
كود PHP:if(Arrow_UP!=EMPTY_VALUE &&Arrow_UP>0 && TimeCurrent()>LastOrderInfo("Time")+299 && TimeCurrent()>LastClosedInfo("Time")+299)
وعليكم السلام
اولا لا افهم لما كل هذا التعقيد فعند اشارة الشراء يفتح شراء وعند البيع يفتح بيع وتستطيع التمييز بين اشارات المؤشر لان كل اشارة سهم هي تتبع بفر مختلف عن الآخر لذلك تابع كل بفر لوحدو وبالتالي تستطيع تمييز الاشارات
وبالنسبة للشرط الذي كتبته فهو خاطئ 100% لعدة اسباب:
اولا ماهو نوع البيانات المسترجعة من دالة LastClosedInfo("Time") وماهو نوع الدالة LastClosedInfo
ثانيا سافترض ان نوع الدالة LastClosedInfo هو datetime وانت تقارنها بالدالة TimeCurrent لحد الآن كل شيئ جيد ولكنك تقوم بجمع 299 وهو من نوع int الى شرط مقارنة بين متغييرين من نوع datetime لذلك من المؤكد انك ستحصل على نتيجة غير صحيحة
- معحبون 1
تعليق
-
المشاركة الأصلية بواسطة zooz1o مشاهدة المشاركةالمؤشر عبارة عن 2 بافر
الاول لأشارات الشراء والثاني لأشارات البيع
كيف يتم التمييز بين اشارات الشراء العديدة هذه؟
لان البفر يعطيك آخر اشارة فقط
الحل الوحيد ان تقوم بقراءة كل قيم البفر تماما مثلما تقوم بقراءة اغلاقات آخر 500 شمعة للخلف
- معحبون 1
تعليق
-
المشاركة الأصلية بواسطة Turkm مشاهدة المشاركة
لايمكن
لان البفر يعطيك آخر اشارة فقط
الحل الوحيد ان تقوم بقراءة كل قيم البفر تماما مثلما تقوم بقراءة اغلاقات آخر 500 شمعة للخلف
في هذه الصورة تم الخروج من الصفقات 54 و 53 و 52 بهذا الترتيب
ولأن دالة LastClosedInfo تأخذ بيانتها من اخر كلوز فهنا سعر الفتح للصفقة رقم 52 كان 19:20 لذلك عند وضع الشرط هو ان يكون سعر الفتح اكبر من او يساوي 19:25
فعندما اغلقت الصفقة في الوقت 19:42 كان شرط الدخول محقق لذلك فتحت الصفقة التالية الجديدة في الوقت نفسه وهو وقت خاطئ
لأن دالة lastClosedInfo اخذت بياناتها من صفقة 52 وليس 54
فالمفترض ان أأخذ سعر الفتح للصفقة التي فتحت أخيرا وهي صفقة 54 وليس 52
فلماذا هذه الدالة تأخذ بالأقدم؟
لماذا اولوية غلق الصفقات يتم من الاحدث الى الاقدم اساسا؟
وكيف اغير هذه الاولوية في غلق الصفقات فبدلا من ان يغلق 54 ثم 53 ثم 52 أريده ان يغلق 52 ثم 53 ثم 54
كود PHP:double LastClosedInfo(string S, int type = -1) { for(int i = OrdersHistoryTotal() - 1; i >= 0; i--) if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && (OrderType() == type || type == -1)) { if(S == "Lots") return(OrderLots()); else if(S == "Price") return(OrderOpenPrice()); else if(S == "TP") return(OrderTakeProfit()); else if(S == "SL") return(OrderStopLoss()); else if(S == "Type") return(OrderType()); else if(S == "Profit") return(OrderProfit()); else if(S == "Time") return(OrderOpenTime()); else if(S == "Comment") return(OrderComment()); else if(S == "MagicNumber") return(OrderMagicNumber()); else if(S == "Time2") return(OrderCloseTime()); } return(0); }
تعليق
-
المشاركة الأصلية بواسطة zooz1o مشاهدة المشاركة
نظراً لصعوبة تنفيذ ذلك بالنسبة لي فأفضل الاستمرار في الطريقة التي تعتمد على الوقت
في هذه الصورة تم الخروج من الصفقات 54 و 53 و 52 بهذا الترتيب
ولأن دالة LastClosedInfo تأخذ بيانتها من اخر كلوز فهنا سعر الفتح للصفقة رقم 52 كان 19:20 لذلك عند وضع الشرط هو ان يكون سعر الفتح اكبر من او يساوي 19:25
فعندما اغلقت الصفقة في الوقت 19:42 كان شرط الدخول محقق لذلك فتحت الصفقة التالية الجديدة في الوقت نفسه وهو وقت خاطئ
لأن دالة lastClosedInfo اخذت بياناتها من صفقة 52 وليس 54
فالمفترض ان أأخذ سعر الفتح للصفقة التي فتحت أخيرا وهي صفقة 54 وليس 52
فلماذا هذه الدالة تأخذ بالأقدم؟
لماذا اولوية غلق الصفقات يتم من الاحدث الى الاقدم اساسا؟
وكيف اغير هذه الاولوية في غلق الصفقات فبدلا من ان يغلق 54 ثم 53 ثم 52 أريده ان يغلق 52 ثم 53 ثم 54
كود PHP:double LastClosedInfo(string S, int type = -1) { for(int i = OrdersHistoryTotal() - 1; i >= 0; i--) if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && (OrderType() == type || type == -1)) { if(S == "Lots") return(OrderLots()); else if(S == "Price") return(OrderOpenPrice()); else if(S == "TP") return(OrderTakeProfit()); else if(S == "SL") return(OrderStopLoss()); else if(S == "Type") return(OrderType()); else if(S == "Profit") return(OrderProfit()); else if(S == "Time") return(OrderOpenTime()); else if(S == "Comment") return(OrderComment()); else if(S == "MagicNumber") return(OrderMagicNumber()); else if(S == "Time2") return(OrderCloseTime()); } return(0); }
كود PHP:for(int i = OrdersHistoryTotal() - 1; i >= 0; i--)
- معحبون 1
تعليق
-
المشاركة الأصلية بواسطة Turkm مشاهدة المشاركةاعطيني دالة ال iCustome التي تسترجع منها قيم المؤشر
كود PHP:double Arrow_UP=iCustom(Symbol(),Charts,"Indicator 1",Charts,0,1);
تعليق
-
المشاركة الأصلية بواسطة Turkm مشاهدة المشاركة
بسبب هذا السطر:
كود PHP:for(int i = OrdersHistoryTotal() - 1; i >= 0; i--)
تعليق
-
تفضل هذه الدالة ولو تلاحظ فهي مشابهة لدالة الزجزاج
كود PHP://+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double SearchSignals(int Charts, int Q, int BufferLine) { int First = 0; for(int i = 0; i < 1000; i++) { double Arrow_UP=iCustom(Symbol(), Period(),"Indicator 1", Charts, BufferLine, i); if(Arrow_UP!=0)First++; if(First==1 && Q == 0 && Arrow_UP != 0) {return(Arrow_UP);} if(First==2 && Q == 1 && Arrow_UP != 0) {return(Arrow_UP);} if(First==3 && Q == 2 && Arrow_UP != 0) {return(Arrow_UP);} if(First==4 && Q == 3 && Arrow_UP != 0) {return(Arrow_UP);} if(First==5 && Q == 4 && Arrow_UP != 0) {return(Arrow_UP);} if(First==6 && Q == 5 && Arrow_UP != 0) {return(Arrow_UP);} if(First==7 && Q == 6 && Arrow_UP != 0) {return(Arrow_UP);} if(First==8 && Q == 7 && Arrow_UP != 0) {return(Arrow_UP);} if(First==9 && Q == 8 && Arrow_UP != 0) {return(Arrow_UP);} if(First==10 && Q == 9 && Arrow_UP != 0) {return(Arrow_UP);} } return 0; }
كود PHP:SearchSignals( 1, 2, 1);
بالتوفيق
- معحبون 1
تعليق
-
السلام عليكم
عندي سؤال:
ليه لما بحط الكود ده في اكسبيرت الميتاتريدر 4 مش بيشتغل؟
كود PHP:double RSI[]; double RSIMAX[]; double RSIMIN[];
كود PHP:int counted_bars = IndicatorCounted(); if(counted_bars>0) counted_bars--; int limit=Bars-counted_bars; for(int i = limit-1; i >= 0; i--) if(Ask){RSI[i] = iRSI(NULL,0,11,PRICE_CLOSE,i);} if(Ask){RSIMAX[i] = RSI[ArrayMaximum(RSI, 120, i)];} if(Ask){RSIMIN[i] = RSI[ArrayMinimum(RSI, 120, i)];}
تعليق
-
المشاركة الأصلية بواسطة zooz1o مشاهدة المشاركةالسلام عليكم
عندي سؤال:
ليه لما بحط الكود ده في اكسبيرت الميتاتريدر 4 مش بيشتغل؟
كود PHP:double RSI[]; double RSIMAX[]; double RSIMIN[];
كود PHP:int counted_bars = IndicatorCounted(); if(counted_bars>0) counted_bars--; int limit=Bars-counted_bars; for(int i = limit-1; i >= 0; i--) if(Ask == ???? ){RSI[i] = iRSI(NULL,0,11,PRICE_CLOSE,i);} if(Ask == ???? )zz0.50dkkwi6ojfzz){RSIMAX[i] = RSI[ArrayMaximum(RSI, 120, i)];} if(Ask == ???? ){RSIMIN[i] = RSI[ArrayMinimum(RSI, 120, i)];}
اين الشرط ؟ هل يجوز ان تقول اذا كان السعر وتسكت ولاتكمل الشرط
- معحبون 1
تعليق
-
المشاركة الأصلية بواسطة Turkm مشاهدة المشاركة
اين الشرط ؟ هل يجوز ان تقول اذا كان السعر وتسكت ولاتكمل الشرط
الان واجهتني مشكلة اخرى في اكسبيرت الميتاتريدر 5
في هذا الكود:
كود PHP:const int Handle_TENKANSEN=0; const int Handle_KIJUNSEN=1; const int Handle_SENKOUSPANA=2; const int Handle_SENKOUSPANB=3; const int Handle_CHIKOUSPAN=4; int Handle; double BufferTENKANSEN[27]; double BufferKIJUNSEN[27]; double BufferSENKOUSPANA[27]; double BufferSENKOUSPANB[27]; double BufferCHIKOUSPAN[27]; int OnInit() { Trade=new CTrade(); Trade.SetExpertMagicNumber(MagicNumber); Handle=iIchimoku(_Symbol,Charts,9,26,52); if(Handle==INVALID_HANDLE) { PrintFormat("Failed",GetLastError()); return(INIT_FAILED); } return(INIT_SUCCEEDED); } void OnDeinit(const int reason) { IndicatorRelease(Handle); } void OnTick() { CTrade trade; trade.SetExpertMagicNumber(MagicNumber); int cnt_1 = CopyBuffer(Handle,Handle_TENKANSEN,0,27,BufferTENKANSEN); int cnt_2 = CopyBuffer(Handle,Handle_KIJUNSEN,0,27,BufferKIJUNSEN); int cnt_3 = CopyBuffer(Handle,Handle_SENKOUSPANA,0,27,BufferSENKOUSPANA); int cnt_4 = CopyBuffer(Handle,Handle_SENKOUSPANB,0,27,BufferSENKOUSPANB); int cnt_5 = CopyBuffer(Handle,Handle_CHIKOUSPAN,0,27,BufferCHIKOUSPAN); double Previous_TENKANSEN = BufferTENKANSEN[1]; double Current_TENKANSEN = BufferTENKANSEN[0]; double TENKANSEN_26 = BufferTENKANSEN[26]; double Previous_KIJUNSEN = BufferKIJUNSEN[1]; double Current_KIJUNSEN = BufferKIJUNSEN[0]; double KIJUNSEN_26 = BufferKIJUNSEN[26]; double Previous_SENKOUSPANA = BufferSENKOUSPANA[1]; double Current_SENKOUSPANA = BufferSENKOUSPANA[0]; double SENKOUSPANA_26 = BufferSENKOUSPANA[26]; double Previous_SENKOUSPANB = BufferSENKOUSPANB[1]; double Current_SENKOUSPANB = BufferSENKOUSPANB[0]; double SENKOUSPANB_26 = BufferSENKOUSPANB[26]; double Previous_CHIKOUSPAN = BufferCHIKOUSPAN[1]; double Current_CHIKOUSPAN = BufferCHIKOUSPAN[0]; double CHIKOUSPAN_26 = BufferCHIKOUSPAN[26];
ينجح في الشمعة الحالية والسابقة فقط ولكنها يفشل في ايجاد قيم المؤشر في الشمعة رقم 26
فما الخطأ عندي؟
تعليق
تعليق