رد: محتاج تصحيح لهدا الكود
أخي atalj
لكي تمنع الإكسبرت من الدخول في كل مرة (في كل تك) يتحقق فيها شرط الدخول عليك أن تضع الكود في Loop يحتوي على كل الكود ووظيفته أن يقوم بالتأكد من وجود صفقات مفتوحة على هذا الزوج أم لا !
تابع الكود التالي وغير فيه حسب شروط الدخول لديك مع الإحتفاظ بالباقي وإن شاء الله سيعمل معاك تمام
كود PHP:
int prevCountBars;
int start(){
....
....
....
if ((prevCountBars != Bars && prevCountBars !=0 && !ExistPositions())) {
// ضع هنا الشرط وكذلك الدخول في صفقة في حالة تحقق الشرط
if (opn<EMA && cls>EMA && RSI>50){
OpenBuy();
}
if (opn>EMA && cls<EMA && RSI<50){
OpenSell();
}
}
prevCountBars = Bars;
return (0);
}//Start()
bool ExistPositions() {
for (int i=0; i<OrdersTotal(); i++) {
if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC) {
return(True);
}
}
}
return(false);
}
رد: محتاج تصحيح لهدا الكود
ملاحظة ...
وظيفة الكود الذي أرفقته في المشاركة السابقة هي:
- التأكد من وجود أو عدم وجود صفقة مفتوحة على الزوج الذي تحت المتابعة.
- في حالة وجود صفقة مفتوحة ... لايقوم بفتح جديدة.
- في حالة عدم وجود صفقة مفتوحة ... ينتظر تحقق الشرط ويدخل فور تحققه.
- لايكرر الدخول على نفس البار ويمكن تكرار الدخول على نفس البار بإلغاء ...
كود PHP:
prevCountBars != Bars && prevCountBars !=0
من الكود.
على فكرة أنا أستخدم هذا الكود في كل إكسبرتاتي مع تغييرات بسيطة حسب متطلبات البرنامج لأنه يعتبر العمود الأساسي الذي يرتكز عليه البرنامج.
جرب وأخبرني وأنا تحت أمرك ياأخي.
رد: محتاج تصحيح لهدا الكود
اخي اسامة
اعتقد انه لا يقصد ان الاكسبيرت ينفذ اكثر من صفقة عند تحقق الشرط
بل يقصد انه ينفذ صفقة واحدة فقط عند تحقق الشرط ، ولكن عندما يتحقق الهدف او الوقف فإنه يفتح صفقة جديدة اذا كان شرط الدخول ما زال محققاً
لذلك ينبغي عليه ان يضع شرطاً للدخول وهو :
اذا كان الشرط تحقق عند انتهاء الشمعة الاخيرة ، وما قبل الشمعة الاخيرة لا تنطبق عليه الشروط
راجع هذا الكود أخي atalj واستفيد منه
كود PHP:
if (iClose(Symbol(),NULL,1)>iOpen(Symbol(),NULL,1)&&iClose(Symbol(),NULL,2)<iOpen(Symbol(),NULL,2))
بالتوفيق
رد: محتاج تصحيح لهدا الكود
اقتباس:
المشاركة الأصلية كتبت بواسطة wajdyss
اخي اسامة
اعتقد انه لا يقصد ان الاكسبيرت ينفذ اكثر من صفقة عند تحقق الشرط
بل يقصد انه ينفذ صفقة واحدة فقط عند تحقق الشرط ، ولكن عندما يتحقق الهدف او الوقف فإنه يفتح صفقة جديدة اذا كان شرط الدخول ما زال محققاً
لذلك ينبغي عليه ان يضع شرطاً للدخول وهو :
اذا كان الشرط تحقق عند انتهاء الشمعة الاخيرة ، وما قبل الشمعة الاخيرة لا تنطبق عليه الشروط
راجع هذا الكود أخي atalj واستفيد منه
كود PHP:
if (iClose(Symbol(),NULL,1)>iOpen(Symbol(),NULL,1)&&iClose(Symbol(),NULL,2)<iOpen(Symbol(),NULL,2))
بالتوفيق
بارك الله فيك ياأخي wajdyss على الملاحظة.
صدقت ... وقد فهمت من كلام الأخ atalj بأنه يريد الدخول فقط مرة واحدة في كل شمعة حتى لو تم تحقق الهدف على نفس الشمعة.
الكود الذي أرفقته أيضا يحل المشكلة بإذن الله وفي الحقيقة أستعمله كثيرا كقالب جاهز لأنه يريحني كثيرا في كتابه أي إكسبرت.
أسعدني تعليقك ورأيك.
رد: محتاج تصحيح لهدا الكود
والله لا اعرف كيف اشكركم اخي اسامة شكرا لك على ردك ومحاولاتك للمساعدة دائما انت اول الاشخاص الدين يساعدون عند طلب العون
اخي wajdyss شكرا لك على المساعدة بالضبط هدا ما اريده شكرا لك
وشكرا لك الاسامة على المساعدة
انا ساحاول ان ادمجهم مع العلم اني لا استطيع ياريت تساعدني اكتر
هده هي شروط فتح صفقة دخول شراء
كود PHP:
if (Buy1_1 > Buy1_2 && Buy2_1 > Buy2_2 ) Order = SIGNAL_BUY;
وهده شروط صفقة الدخول بيع
كود PHP:
if (Sell1_1 < Sell1_2 && Sell2_1 < Sell2_2 ) Order = SIGNAL_SELL;
رد: محتاج تصحيح لهدا الكود
اقتباس:
المشاركة الأصلية كتبت بواسطة atalj
والله لا اعرف كيف اشكركم اخي اسامة شكرا لك على ردك ومحاولاتك للمساعدة دائما انت اول الاشخاص الدين يساعدون عند طلب العون
اخي wajdyss شكرا لك على المساعدة بالضبط هدا ما اريده شكرا لك
وشكرا لك الاسامة على المساعدة
انا ساحاول ان ادمجهم مع العلم اني لا استطيع ياريت تساعدني اكتر
هده هي شروط فتح صفقة دخول شراء
كود PHP:
if (Buy1_1 > Buy1_2 && Buy2_1 > Buy2_2 ) Order = SIGNAL_BUY;
وهده شروط صفقة الدخول بيع
كود PHP:
if (Sell1_1 < Sell1_2 && Sell2_1 < Sell2_2 ) Order = SIGNAL_SELL;
أخي atalj
السلام عليكم
لاشكر على واجب ولاداعي لذكر ذلك.
بالنسبة لي - للأسف - لايمكنني أن أساعد إلا في حالة أن أعرف شروط الدخول والخروج بكل تفاصيلها الدقيقة (الأرقام للمتوسطات والفريمات والآرس آي لاتهم لأنها ستكون من المدخلات التي يتم تغييرها من الخارج) وبعد ذلك أستطيع أن أرسل لك الكود - بإذن الله - كاملا.
أو يمكنك أن تضع الكود الذي لديك لكي يتم التعديل عليه إلا أنني أفضل الأولى.
هذا رأي الخاص لأني في الحقيقة لاأثق في أي جزء من كود قد أرسله لك مالم أكن ملم بالتفاصيل لكي يكون العمل متكامل.
في كل الأحوال فإنني أتصور حسب شرحك بأن الطريقة تعتمد على تقاطع متوسطين ويجب أن يكون الآر إس آي عند الدخول فوق الخمسين مثلا والدخول عند إفتتاح الشمعة التالية وليس فور تحقق الشروط !
طبعا لايتم الدخول في صفقة جديدة على نفس الزوج حتى تغلق الموجودة.
إن كانت هذه هي طريقتك فسوف أقوم ببرمجتها إن شاء الله وإذا توجد أية إختلافات فأرجو إعلامي بها. وأنا متأكد بإذن الله بأن الأخ wajdyss أيضا سيساعد في هذا الموضوع.
وفقكم الله
رد: محتاج تصحيح لهدا الكود
اخي الكريم
هناك اثنين من الحلول لهذه المشكلة
الاول) مثلما قال الاخ اسامة ( يجب معرفة الشروط بالضبط ) يعني انه لا يكفي معرفة المتغيرات بالضبط buy1 or buy2
الثاني) لا يجب معرفة الشروط بالضبط ، ولكن يجب اضافة متغيرين منطقيين bool، المتغير الاول للشراء والثاني للبيع
عند تحقق شرط الشراء اجعل متغير الشراء = true وشرط البيع = false
وعند تحقق شرط البيع اجعل متغير البيع = true وشرط الشراء = false
طبعاً يجب ان تضيف لشرط الشراء ان يكون متغير الشراء = false
ويجب ان تضيف لشرط البيع ان يكون متغير البيع = false
بهذه الطريقة لن يفتح صفقتين شراء متتاليتين ولا صفقتين بيع متتاليتين
فكر بها جيداً وحاول
واذا استصعب الامر عليك لا تتردد بالسؤال
ولكن حاول جيداً أولاً