النتائج 1 إلى 15 من 16
الموضوع: استفسار برمجي..هام!
- 17-04-2011, 05:17 PM #1
استفسار برمجي..هام!
السلام عليكم ورحمة الله وبركاته
أعمل على برمجة اكسبرت وهو في مرحلة التخطيط للفكرة.
ولكن توقفت عند مسألة لم أجد لها حلاً حتى الآن.
الفكرة ببساطة أن الاكسبرت يفتح عدد من الأوامر وليكن 5 باي ستوب و5 سل ستوب فوق السعر الحالي بعدة نقاط يتم تحديدها.
ما توقفت عنه هو التالي:
عندما يتم تفعيل أمر سل ستوب مثلاً ليتحول إلى أمر سل... أريد أن يقوم الاكسبرت بوضع أمر باي ستوب على بعد عدد مُعين من النقاط فوق سعر السل الستوب الذي تم فتحه (أو حتى بعدد مُعين من النقاط فوق السعر الحالي للزوج)
وبالعكس عندما يتم تفعيل أمر باي ستوب مثلاً ليتحول إلى أمر باي... أريد أن يقوم الاكسبرت بوضع أمر سل ستوب على بعد عدد مُعين من النقاط تحت سعر الباي الستوب الذي تم فتحه (أو حتى بعدد مُعين من النقاط تحت السعر الحالي للزوج)
مثال للتوضيح: السعر الحالي 1.400
SELLTOP1 1.380
SELLTOP2 1.360
SELLTOP3 1.340
SELLTOP4 1.320
BUYSTOP1 1.420
BUYSTOP2 1.440
BUYSTOP3 1.460
BUYSTOP4 1.480
في هذه الحالة عدد الأوامر من كل نوع 4
المسافة بين الأوامر 20 نقطة.
لو ارتفع السعر ل1.420 سيتم فتح أمر BUY
هنا أريد وضع أمر SELLTOP عند سعر 1.400 (أقل 20 نقطة من سعر الفتح لصفقة الشراء)
وعندما يصل السعر إلى 1.440 يتم وضع أمر SELLSTOP عند 1.420
وهكذا.
وإذا اتجه السعر للهبوط وفتح صفقة SELL عند 1.380 يقوم الاكسبرت بفتح صفقة BUYSTOP عند 1.400
وهكذا.
المشكلة كيف نربط أمر البيع (أو الشراء) الذي تم تفعيله للتو مع صفقة الSELLSTOP أو BUYSTOP بحيث يتم وضع صفقة واحدة فقط بدون تكرار أو تضارب.
حيث أنه لو استخدمنا مثلاً.
if(OrderSymbol()==Symbol() && OrderType==OP_BUY && OrderMagicNumber=MagicNumber)
{
OrderSend(Symbol();OP_SELLSTOP...etc
}
سيتم فتح عشرات الصفقات بدون توقف.
وإذا وضعنا العُدد الإجمالي لعدد الصفقات المؤجلة كشرط لاستكمال العدد ل8 صفقات عند نقصانها ..
للأسف سيتم وضع صفقات من نوع واحد طوال الوقت حسب نوع أول صفقة سيتم تفعيلها.
هل هناك طريقة لحل هذه المسألة؟
- 19-04-2011, 02:01 AM #2
أخي العزيز ...... جرب الفكرة هذه ........ على عملية وحدة شراء معلقه ( برقم ماجيك 1 ) ..... و عملية وحدة بيع معلقه ( برقم ماجيك 2 ) ..... و بعدين تطبقها على باقي العمليات
عند فتح عملية شراء معلقه ( 1 ) يتم أيضا فتح عملية بيع معلقه ( 1 ) و لكن على سعر بعيد المنال و طبعا هي ليست عملية البيع المعلقه ( رقم ماجيك 2 ) .... مثال :-
شراء معلق على سعر 1.420 ( 1 ) و عملية بيع معلق ( 1 )على سعر 1.00
و عندما تتفعل عملية الشراء المعلق ( 1 ) نستخدم Modify لتعديل عملية البيع المعلقه ( 1 ) لتكون على النقطة اللتي نريدها .
عند فتح عملية بيع معلقه ( 2 ) يتم أيضا فتح عملية شراء معلقه ( 2 ) و لكن على سعر بعيد المنال و طبعا هي ليست عملية الشراء المعلقه ( رقم ماجيك 1 ) .... مثال :-
بيع معلق على سعر 1.380( 2 ) و عملية شراء معلق ( 2 )على سعر 2.00
و عندما تتفعل عملية البيع المعلق ( 2 ) نستخدم Modify لتعديل عملية الشراء المعلقه ( 2 ) لتكون على النقطة اللتي نريدها .
و بعدين نطبقها على باقي الأوامر و تصير كالتالي :-
شراء معلق ( ماجيك 1 ) 1.420 && بيع معلق ( ماجيك 1 ) 1.00
شراء معلق ( ماجيك 2 ) 1.440 && بيع معلق ( ماجيك 2 ) 1.00
شراء معلق ( ماجيك 3 ) 1.460 && بيع معلق ( ماجيك 3 ) 1.00
شراء معلق ( ماجيك 4 ) 1.480 && بيع معلق ( ماجيك 4 ) 1.00
بيع معلق ( ماجيك 5 ) 1.380 && شراء معلق ( ماجيك 5 ) 2.00
بيع معلق ( ماجيك 6 ) 1.360 && شراء معلق ( ماجيك 6 ) 2.00
بيع معلق ( ماجيك 7 ) 1.340 && شراء معلق ( ماجيك 7 ) 2.00
بيع معلق ( ماجيك 8 ) 1.320 && شراء معلق ( ماجيك 8 ) 2.00
أتمنى الفكرة و صلت وووو ............ تكون صحيحة
- 19-04-2011, 03:04 AM #3
- 19-04-2011, 03:34 AM #4
السلام عليكم ورحمة الله وبركاته أخي الحبيب
أولاً أشكر لك اهتمامك وردك
ثانياً فكرتك أبعد ما يكون عن النمطية ونظرياً لا أرى ما يمنع من تنفيذها...ولكن يعيبها
-أني لا أُفكر في عدد ثابت من الصفقات..لذا قد أقرر أن أضع 10 صفقات من كل نوع أو حتى 30 من كل نوع.. في هذه الحالة سيفتح الاكسبرت 120 صفقة بدلاً من 60 .. وهو إن لم يجد من البروكر اعتراضاً بالتأكيد سيُعجل باعتراض البروكر على العدد الكبير للصفقات.
-أيضاً سيبدو واضحاً تماماً أن الاكسبرت به تحايل ناتج عن العجز عن حل هذه المسألة نظراً لظهوره بشكل مُهلهل نوعاً ما مع وجود هذه الصفقات الغريبة حتى يتم تعديلها.
وعلى الرغم من ذلك سأحاول تنفيذ هذه الفكرة الطريفة والمُفيدة في نفس الوقت.
-أحد ما فكرت به أن أقرأ تيكت الصفقة المفتوحة وأفتح مُقابلها صفقة وحيدة وذلك باستخدام طريقة تثبيت عدد الصفقات المُعلقة...ولكن لم أتوصل لطريقة تحديد تيكت آخر صفقة تم فتحها أو تكت آخر صفقة تم فتحها للعمل عليها.
-أيضاً فكرت أن أرصد آخر صفقة تم فتحها عن طريقة مُتغير الوقت ولكن الصفقات كانت تلفت وتفتح أكثر من اللازم بجانب أنه مع تكرار المحاولة كل مرة سيقوم برصد آخر صفقة ثم سيفتح صفقات بدون توقف.
أرجو أن نحاول البحث عن فكرة أخرى بجانب هذه الفكرة الطيبة وبإذن الله نصل للحل.
- 19-04-2011, 03:42 AM #5
السلام عليكم ورحمة الله وبركاته أخي أسامة
الحقيقة لم أفهم المقصود من الجملة التي أوردتها...
-لماذا نبحث العلاقة بين (OP_SELLSTOP,Magic2)<orderscnt(OP_BUY,Magic)
وهل فعلاً الفكرة هي فتح أوامر وهمية نُعيد تعديلها لاحقاً؟
وكيف سنقوم بدمج الماجيك نمبر في أمر orderscnt بحيث يتغير مع كل زوج من الصفقات الجديدة بحيث يتم إنتاج عدد كبير من الماجيك نمبر يتناسب مع العدد الذي نختاره من الصفقات...يعني الرقم 4 هو مثال فقط لكن من الممكن أن نختار أن نفتح 20 صفقة من كل نوع.آخر تعديل بواسطة egyptsoul ، 19-04-2011 الساعة 03:47 AM
- 19-04-2011, 05:25 AM #6كود PHP:
if ( (MyBuyRealOrdersTotal(MagicNumber)==0) && (MyBuyPendingOrdersTotal(MagicNumber)==0) );
OrderSend(Symbol(),OP_BUYSTOP ,Lots,BuyPrice,3,0,0,Name,MagicNumber,0,Green);
if ( (MySellPendingOrdersTotal(MagicNumber)==0) && (MySellRealOrdersTotal(MagicNumber)==0) && (MyBuyRealOrdersTotal(MagicNumber)==1) );
OrderSend(Symbol(),OP_SELLSTOP ,Lots,SellPrice,3,0,0,Name,MagicNumber,0,Green);
- 19-04-2011, 08:57 AM #7
اولا اسمح لي ان القي عليك التحية
السلام عليكم ورحمة الله وبركاته
ثانيا اخي الكريم منذ متى وانت تفكر بهذه الطريقة
انا كنت سبق وطرحت نفس الطريقة في عدة منتديات عربية عدد 3 منتديات لن اذكر امائها لانه على ما اظن ممنوع ذكر الاسامي
المهم يا حب انا لا خبرة لي في البرمجة ولكن كما قلت لك سبقة واطرحت الفكرة في شهصان عزيزان قاما مشكوران بالبرمجة وبقيت نفس المشكلة تظهر وهي
لنقول مثلا تفعل عقد شراء على سعر 1.4000 الهدف 1.4020
المفروض ان يحدق الاتي
ان يضرب السعر الهدف 1.4020 وبنفس الوقت يعلق الاكسبيرت عقد بيع على سعر 1.4000
الذي يحدث اذا تفعل العقد شراء على سعر 1.4000 وتحرك السعر لنقول 10 نقاط ورجع السعر لامس منطقة الدخول يقوم الاكسبير بتعليق عقد معاكس حتى ولو حدث هذا مليون مرة كل ما السعر يلامس منطقة الدخول يعلق عقد معاكس
كنت قد سبق واضفت شيئ ثاني على الطريقة وهي
علق الاكسبير 5 عقود بيع و5 شراء المسافة بين العفد والاخر 20 نقطة والهدف 20
انا الذي اضفته انه عند تفعيل الصفقة الاولى يقوم الاكسبيرت بتعليق صفقة معاكسة للحماية من الانعكاس لانه كما تعلم الفارق بين العقد الاول شراء والعقد الاول بيع يمكن يكون فوق ال25 نقطة
ارجو انني قد اوصلت الفكرة اذا اردت نسخة عن الاكسبيرت انا بامرك
اول اكسبيرت قام ببرمجته الاخ حكيم والثاني الاخ محمود عامر
ولكن المشكلة كما قلتها لك سابقا
- 19-04-2011, 11:32 AM #8
حقيقة أشكرك أخي الحبيب على حسن تعاونك وكرم خُلقك
لقد وصلت الفكرة الأولية ورغم ما ذكرته عنها ورغم العدد المُضاعف للصفقات المؤجلة إلا أنه وحتى الآن لا أجد بديلاً.
ولكن دعنا نتأكد من فهمي للكود الذي أوردته.
هو الكود لفتح الصفقات المبدأئية وطبعاً سيتم تغيير الماجيك نمبر مع كل زوج جديد من الأوامر المؤجلة (بيع-شراء)
وهذا الجزء تحديداً مثلاً لفتح صفقة شراء حقيقية بسعر وأرقام حقيقية ثم وضع صفقة البيع المُقابلة (الغير حقيقية بالسعر بعيد المنال)
والعكس في حالة فتح صفقات البيع الحقيقية.
- 19-04-2011, 11:44 AM #9
السلام عليكم ورحمة الله وبركاته أخي
فكرتي مُختلفة نوعاً ما عن فكرتك ولو أنهما اتفقا على المُشكلة وهي عدم الربط بين الصفقة وما يتم فتحه من صفقة عكسية... وبالتأكيد عندما يوضع شرط مثل (عندما يتم تفعيل صفقة باي ستوب وتحولها لصفقة باي افتح صفقة سل ستوب مثلاً) .. هذا شرط دائم ولا ينتفي إلا بإغلاق صفقة الباي أو بتحجيم البروكر لعدد الصفقات المفتوحة...بالمثل في شرط العودة لسعر مُعين...
فيما يخص الفكرة ففكرتك قائمة على فتح الصفقات العكسية مع تحقيق الهدف وفكرتي قائمة على فتح الصفقات العكسية بمجرد فتح الصفقة الأساسية.
وقد أتتني الفكرة عندما قمت بتحليل اكسبرت GRID الذي وضعته مؤخراً وواجهتني فيه مشكلة شبيهة ورأيت أن الفكرة الجديدة تحل مشاكل فكرة هذا الروبوت.
بالتأكيد أحب أن أفحص الاكسبرتين الذي تتحدث عنهما ولك جزيل الشُكر.
- 19-04-2011, 12:16 PM #10
- 19-04-2011, 01:12 PM #11
- 19-04-2011, 01:17 PM #12
أخي العزيز ............. على حسب فهمي لإستفسارك
بالنسبة للكود المرفق ....... ليست نفس الفكرة و اللتي أوردتها في ردي الأول ..... لأن الفكرة لم تناسبك .
و الكود المرفق هو لفتح العملية الرئيسية ...... و في حالة تفعيل العملية الرئيسية ..... يتم فتح العملية العكسية
كود PHP:if ( (MyBuyRealOrdersTotal(MagicNumber)==0) && (MyBuyPendingOrdersTotal(MagicNumber)==0) );
OrderSend(Symbol(),OP_BUYSTOP ,Lots,BuyPrice,3,0,0,Name,MagicNumber,0,Green);
كود PHP:if ( (MySellPendingOrdersTotal(MagicNumber)==0) && (MySellRealOrdersTotal(MagicNumber)==0) && (MyBuyRealOrdersTotal(MagicNumber)==1) );
OrderSend(Symbol(),OP_SELLSTOP ,Lots,BuyPrice-20*POINT,3,0,0,Name,MagicNumber,0,Green);
- 19-04-2011, 03:04 PM #13
أعتقد أن هذه فكرة أفضل أخي...للتأكيد سنقوم بعمل ماجيك نمبر خاص بكل صفقة يتم فتحها بحيث نستطيع استغلال هذا الماجيك لاحقاً لفتح الصفقة المُقابلة...وطبعاً المقصود ب MyBuyRealOrdersTotal هي الصفقات المفتوحة فعلاً.
في هذه الحالة سنقوم بعمل لووب لإنشاء أرقام ماجيك بعدد الصفقات المفتوحة.
ونمنح كل صفقة أحد هذه الأرقام...إلخ.
أعتقد أنها فكرة ممتازة بالفعل أخي...لو هناك إضافة لزيادة التوضيح والتطوير أرجو أن لا تبخل بالمشاركة.
- 19-04-2011, 06:34 PM #14لو هناك إضافة لزيادة التوضيح والتطوير أرجو أن لا تبخل بالمشاركة.
كود PHP:extern int MagicNumber=1;
int t1,t2;
كود PHP:if ( (MyBuyRealOrdersTotal(MagicNumber)==0)
كود PHP:int MyBuyRealOrdersTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
t1=-1;
t2=-1;
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUY))
{
if (t1==-1)
{
t1=OrderTicket();
}
else
{
if (t2==-1)
{
t2=OrderTicket();
}
}
c++;
}
}
return(c);
}
كود PHP:int MyBuyPendingOrdersTotal(int Magic)
{
int c=0;
int total = OrdersTotal();
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUYSTOP || OrderType()==OP_BUYLIMIT ))
{
c++;
}
}
return(c);
}
كود PHP:extern int MagicNumber2=2;
كود PHP:if ( (MyBuyRealOrdersTotal2(MagicNumber2)==0)
كود PHP:int MyBuyRealOrdersTotal2(int Magic)
{
int c=0;
int total = OrdersTotal();
t1=-1;
t2=-1;
for (int cnt = 0 ; cnt < total ; cnt++)
{
OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES);
if (OrderMagicNumber() == Magic && OrderSymbol()==Symbol() && (OrderType()==OP_BUY))
{
if (t1==-1)
{
t1=OrderTicket();
}
else
{
if (t2==-1)
{
t2=OrderTicket();
}
}
c++;
}
}
return(c);
}
آخر تعديل بواسطة alshakatan ، 19-04-2011 الساعة 06:44 PM
- 20-04-2011, 09:14 AM #15
تفضل يا حب واسف على التاخير