النتائج 31 إلى 45 من 54
- 23-02-2016, 08:08 AM #31
- 23-02-2016, 01:12 PM #32
عزيزي
لازالت الاشكالية قائمة
2016.02.23 13:10:25.378 AboNaser_v3 EURAUDpro,M5: Error modifing Breakeven at order #102789719 Error: invalid stops
- 23-02-2016, 11:20 PM #33
لا يا اخي هذا خطأ مختلف يعنى عدم القدرة على تعديل الستوب الى نقطة البريك ايفن .. اظن ان هذا الخطأ بسبب الخطأ الاول وهو فتح عدد كبير من الصفقات في نفس الوقت فلا يستطيع تعديل القيم ..
تحتاج استخدام وظيفة OrdersTotal حتى لا يحدث تكرار لفتح للصفقات (مع انه لم تظهر معى هذه المشكلة على الباك تست)
ايضاً .. لاحظ يا اخي ان القيمة الافتراضية لعدد النقاط التى تحدد بدء تفعيل البريك ايفن هي 25 نقطة وهي نفس قيمة طرح الهدف - سعر فتح الصفقة .. لان القيمة الافتراضية لرسم الخط كانت 50 نقطة لذلك يحدث هذا الخطأ بسبب تقارب الاسعار ..
قمت ببعض التعديلات لتجنب هذه الاخطاء واتمنى ان تعمل بشكل سليم .. ولكن يبقى عليك مرعاة فارق النقاط مستقبلاً ..
ملاحظة: قمت بالغاء قيمة السبريد التي كانت مضافة الى قيم الخطوط ..
- 24-02-2016, 01:42 AM #34
الله ينور عليك
---
مع اننا استخدمنا دالةchek_For_BUY_Order
والتي يفترض ألا تسمح بفتح صفقة أخرى بمنطقة السبريد
فأين الثغرة في هذه الدالة
بطريقة الأستاذ وضاح عدلتها الى هذهكود:double chek_For_BUY_Order(double Price_) { double Aa=Price_+Spread; double Vv=Price_-Spread; for(int i=OrdersTotal()-1; i>=0; i--) { if(!OrderSelect(i,SELECT_BY_POS)) break; if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magicnumber) { int type=OrderType(); double OpEn_Price=OrderOpenPrice(); if(type==OP_BUYSTOP || type==OP_BUYLIMIT || type==OP_BUY) { if(OpEn_Price<Aa && OpEn_Price>Vv) { return(1); } } } } return(0); }
عزيزيكود:if(MathAbs(OpEn_Price-Price_)>Spread)
OrdersTotal سوف تقيدنا بعدد صفقات محددة على الزوج
ونحن نريد ألا ينفذ على الخط مرة أخرى مهما ذهب ورجع اليه .. فقط
(علما انه يوجد عدة خطوط بيع على الشارت كل منها له رقم مختلف )
يوجد شرطين تجاوزها النيوزلندي
كود:if(T_Old_entry!=T_Line) { T_Old_entry=T_Line; T_order_No=chek_For_SELL_Order(T_Line);
- 24-02-2016, 01:51 AM #35
- 24-02-2016, 02:41 AM #36
آخر تعديل بواسطة أبو نـاصر ، 24-02-2016 الساعة 03:09 AM
- 24-02-2016, 03:53 AM #37
استاذي الفاضل
اضفت
فاصبح ينشئ جميع الصفقات ولا يتجاهل اي خط حتى الآنكود:T_Line=NormalizeDouble(ObjectGet(ObjectName(i),OBJPROP_PRICE1),Digits); مع if(T_Line-Bid<0.00002 &&T_Line-Bid>=0)
وأدخلت كود انشاء الصفقات داخل شرط
فأصبح يتقيد بكل صفقة وهدفهاكود:if(Name22=="hadf") { if(T_Zone_No_==StringSubstr(ObjectName(i),18,10)) {
واضفت احترازا التقييد بالتيكيت
ارجوا التكرم بمراجعتهاكود:if(ticket>0) CheckForModify(ticket,sl,T_Line_hadaf);
ملاحظة : جميع التعديلات معتمدا على النسخة رقم 3
- 24-02-2016, 08:24 AM #38
الحقيقة يا اخي، لم اراجع هذه الوظيفة قبل ذلك على فرض ان الكود لم يكتمل وان المشكلة كانت في فتح وتعديل الصفقات ..
- لست بحاجة الى هذه الوظيفة اساساً فالحل ابسط من ذلك .. فقط قم بتعريف متغير من نوع دبل في الجلوبال وخصص له قيمة الخط + السبريد
لاحظ ان متغير السبريد معرف مسبقاً وهو يجلب لك قيمة السبريد الحالية وقت استدعائه فلا داعي لعمل وظيفة وحلقة وخلافه ..كود PHP:double SpreadZone;
SpreadZone = T_Line - (Spread*pips2double); // in Sell section
SpreadZone = B_Line + (Spread*pips2double); // in Buy section
هكذا .. وتصرف في هذا المتغير كيفما تشاء مثلاًكود PHP:Spread=MarketInfo(Symbol(),MODE_SPREAD)
- أكرر .. لا داعي لاستخدام NormalizeDouble .. وظيفة ObjectGet تعيد القيم معدلة بالفعل .. قمت باختبار القيم ووجدتها متساوية في الحالتينكود PHP:
bool SellSpreadZone = Bid < SpreadZone;
if(SellSpreadZone)
{ ..... }
//----
if(!SellSpreadZone)
{ ..... }
- حول شرط الاختراق .. لا اعلم يا اخي .. مازلت اري انه من الافضل ان تضيف قيمة السبريد الى قيمة الخطوط وتحسب حسباتك على هذا الاساس .. لاحظ ان السبريد شيئ لا مفر منه ومهما كانت قيمته متغيرة (او كبيرة) ، فيمكن اضافتها الى السعر واعتبارها جزء من السعر .. ويكون امر الاختراق تجاوز قيمة السبريد وبذلك فهو اختراق فعلي ..
----------
هذا الشرط موجود ولكن لم يستخدم اساساً ..
- انت قمت بتعريف متغير B_Old_entry قم وضعت له شرط ان لم يساوي B_Line تخصص له قيمة ال B_Line ولكنك لم تستعمل B_Old_entry مرة اخرى.
والحل هو نفس الفكرة الاولى يا اخي .. قم بتعريف متغير جديد من نوع bool مع قيمة افتراضية false ثم حول القيمة الى true في موضع اختراقه وبذلك تضمن عدم اختراقه مجدداً ..
كود PHP:
bool SellLineHit = false;
if(Bid < B_Line && Ask > B_Line)
{
SellLineHit = true;
.....
}
- 24-02-2016, 08:29 AM #39
هذه هي المشكلة الحقيقة والتى ليس لها حل للاسف .. هذه المشكلة تحدث بسبب FIFO الذي تحدثت عنه سابقاً .. والفيفو ان لم تفهمه جيدا يا اخي هو اختصار لجملة First In, First Out بمعنى انك مقيد باول صفقة دخلت بها للسوق ولابد من إغلاقها اولا قبل اغلاق اي صفقة اخرى واذا كانت هناك اكثر من صفقة مفتوحة، فيجب عليك اغلاق الصفقات تنازلياً .. اي اول صفقة قمت بفتحها تغلق اولا ثم التى تليها وهكذا ..
معنى ذلك ايضاً، انه في حالة الاكسبيرت، عندما يقوم بفتح اكثر من صفقة في نفس الاتجاه سيقوم البروكر بتخصيص اول سعر هدف يجده امامه اجبارياً لجميع الصفقات مهما كانت اهداف باقي الصفقات وعندما يصل السعر الى الهدف تغلق جميع الصفقات .. والامر ينطبق على الستوب.
ملاحظة: هذا الامر يتم على الصفقات التى من نفس النوع وعلى نفس الزوجآخر تعديل بواسطة awran5 ، 24-02-2016 الساعة 08:31 AM
- 24-02-2016, 08:41 AM #40
عفواً نسيت هذه النقطة .. الحقيقة لا اري داعي لها يا اخي .. وان كان ولابد فلاحظ ان نوع ticket هو int وليس double ووضع المتغير يكون باستبدال وظيفة OrderTicket()
فتكون الوظيفة بالشكل التالي
كود PHP:void CheckForModify(int ticket,double stoploss,double takeprofit)
{
//---
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) break;
if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magicnumber)
{
if(OrderType()==OP_BUY)
{
if(!OrderModify(ticket,OrderOpenPrice(),stoploss,takeprofit,0,clrYellow))
{
Print("Error modifing BUY order #",OrderTicket()," Error: ",ErrorDescription(GetLastError()));
}
else Print("BUY Order #",ticket," modified successfully.");
}
if(OrderType()==OP_SELL)
{
if(!OrderModify(ticket,OrderOpenPrice(),stoploss,takeprofit,0,clrYellow))
{
Print("Error modifing SELL order #",OrderTicket()," Error: ",ErrorDescription(GetLastError()));
}
else Print("SELL Order #",ticket," modified successfully.");
}
}
}
//---
}
- 24-02-2016, 09:11 AM #41
يسعد صباحك أخي الكريم .. ويوم موفق باذن الله
سأوضح دالةchek_For_BUY_Order لو تكرمت
هي تأخذ قيمة الخط وتبحث في الأوامر السابقة عن اي صفقة أو أمر معلق في نفس المكان +- السبريد
فإن وجد أي نتيجة يعيد رقم 1كود:if(type==OP_BUYSTOP || type==OP_BUYLIMIT || type==OP_BUY) { if(MathAbs(OpEn_Price-Price_)>Spread) { return(1); } }
وقبل انشاء الأمر الجديد وضعنا شرط ان كانت النتيجة صفر يضع صفقة جديدة
كود:B_order_No=chek_For_BUY_Order(B_Line); if(B_order_No==0) {
-------------
الفكرة أن T_Old_entry سيسجل اخر قيمة جديدة لـ T_Line (الخط)كود:if(T_Old_entry!=T_Line) { T_Old_entry=T_Line;
فلا يدخل اليها الا اذا اصبحت قيمة الخط مختلفة
ومتى ما رجع هنا بنفس قيمة الخط السابق الذي يساوي T_Old_entry يفترض ألا يسمح له
- 24-02-2016, 09:25 AM #42
استاذي الفاضل
حاليا على الديمو طبعا
لا اتوقع انها من FIFO
جربت ذلك
فبدون تحديد التيكيت
وبدون ادخال امر انشاء الصفقة تحت شرط ايجاد الهدف
فهو يدمج الأهداف
ربما بسبب أننا داخل حلقة فيتعرف على اخر هدف فقط
---
لكن مع تحديد التيكيت
ومع ادخال امر انشاء الصفقة بعد ايجاد الهدف
فهو ينجح باعطاء كل صفقة هدفها بالضبط بدون اي مشاكل حتى الآن
كود:if(Name22=="hadf") { if(T_Zone_No_==StringSubstr(ObjectName(i),18,10)) {آخر تعديل بواسطة أبو نـاصر ، 24-02-2016 الساعة 09:29 AM
- 24-02-2016, 02:10 PM #43
وضعته على الحقيقي
وأول صفقة حققت 23 سنت
فأوقفت العمل على هذا الزوج واشباهه
لأن السبريد كان 6
وأضفت شرطا
كود:if (Spread < 3){
- 24-02-2016, 07:11 PM #44
ممتاز هل هناك نسخه جاهزه للاستخدام
- 25-02-2016, 01:06 AM #45
لم تكتمل كامل الأفكار التي في أول الموضوع حتى الآن
حاليا انا استخدم النسخة في المشاركة رقم 37
ولا زال العمل جاري مع الشكر الجزيل للاستاذ awran5
ضع اي عدد خطوط للشراء
باسم مثلا
eBUY_Line123_hadf_80
eBUY_ <<< ثابته للشراء
Line123 <<<< اكتب اي وصف من 7 احرف
hadf <<< لخط الهدف open <<< لخط فتح الصفقة
80 <<< رقم تسلسلي لابد أن يتساوي بين خط الدخول وخط الهدفآخر تعديل بواسطة أبو نـاصر ، 25-02-2016 الساعة 01:12 AM
الأكثر زيارة

رد مع اقتباس
